Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Moose Troubles

by moritz (Cardinal)
on May 27, 2012 at 19:36 UTC ( [id://972731]=note: print w/replies, xml ) Need Help??


in reply to Problem with Moose Dispatching Requests

As you can see, what I am attempting to do is provide an interface for the user to pass parameters, then once those parameters are set, the _do_ticket_list function should be called, and return the results of _do_ticket_list results to the ticket_list_response member. Again, everything works the first time around, but every subsequent call does not trigger _do_ticket_list since the ticket_list_response member has already been built

If you want some action to be triggered every time ticket_list_response is accessed, you shouldn't make it an attribute, but a method right away.

Replies are listed 'Best First'.
Re^2: Moose Troubles
by three18ti (Monk) on May 27, 2012 at 21:07 UTC

    Hello,
    Thank you for the reply.

    I guess my confusion is, ticket_list_response is an object that delegates methods, changing ticket_list_response to a method then won't allow me to call object methods later.

    For instance, I want to initialize ticket_list_response attribute, then call count_tickets on the ticket_list_response object.

    #!/usr/bin/perl use Kayako3::Staff; # this initializes Kayako3::Staff object, # performs the login, # parses the login response and stores the user session ID, # then initializes the info_response object which provides # all the info for id lookups later on my $help_desk = Kayako3::Staff->new({ username => 'bob', password => 'my_pass', api_url => 'http://example.com/staffapi?', }); # since the API requires integer ids, # I perform a lookup in separate steps for clarity # usually, I'll perform this all in one step: # $help_desk->get_ticket_list( # $help_desk->get_department_id("Support"), # $help_desk->get_ticket_status_id("New") # ); my $department_id = $help_desk->get_department_id("Support"); my $ticket_status_id = $help_desk->get_ticket_status_id("New"); $hd->get_ticket_list($department_id, $ticket_status_id) # once the ticket is loaded: print "Ticket count in " . $help_desk->ticket_list_response->department . ", for tickets with status " . $help_desk->ticket_list_response->status . ": " . $help_desk->get_ticket_count . "\n"; # sample output: # Ticket count in Support, for tickets with status New: 10 # then later on, I want to do the same thing # for a different department: my $department_id = $help_desk->get_department_id("Sales"); my $ticket_status_id = $help_desk->get_ticket_status_id("In progress"); $hd->get_ticket_list($department_id, $ticket_status_id) #Then I want to print the ticket count again, # for the new department, # but performing $help_desk->get_ticket_count # returns the same results above print "Ticket count in " . $help_desk->ticket_list_response->department . ", for tickets with status " . $help_desk->ticket_list_response->status . ": " . $help_desk->get_ticket_count . "\n"; # sample output: # Ticket count in Support, for tickets with status New: 10 # desired ouutput: # Ticket count in Sales, for tickets with status In Progress: 15

    Usually, I wouldn't call $help_desk->_ticket_list_response->department directly, however, it is important to help illustrate my problem.

    I don't want to call ticket_list_response directly because it only provides a place holder to store the Kayako3::Staff:Response::TicketList object.

      When you want the ticket count for another department and/or another status shouldn't you start with a new object, rather than with an already existing object? Your _do_ticket_list method will only be called at the object's initialization, so changing the department id or the ticket status will go unnoticed and the ticket list is never refreshed.

      Reader beware: my Moose skills may be a bit rusty and the finer issues of builders and triggers may have escaped me.

      Update: Question: where does your $hd object come from? I never see you initialize it. Or is it perhaps a typo and did you mean $help_desk?

      CountZero

      A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

      My blog: Imperial Deltronics
      I guess my confusion is, ticket_list_response is an object that delegates methods, changing ticket_list_response to a method then won't allow me to call object methods later.

      Then store the object that is now stored in ticket_list_response somewhere else (for example in a private attribute), and make ticket_list_response a method that does whatever you want it to do whenever it is called.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://972731]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2024-04-23 07:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found