iron_mq 3.1.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/Gemfile.lock +10 -8
 - data/README.md +278 -53
 - data/iron_mq.gemspec +3 -2
 - data/lib/iron_mq/client.rb +32 -9
 - data/lib/iron_mq/messages.rb +21 -104
 - data/lib/iron_mq/queues.rb +149 -142
 - data/lib/iron_mq/response.rb +16 -15
 - data/lib/iron_mq/subscribers.rb +12 -21
 - data/lib/iron_mq/version.rb +1 -1
 - data/test/quick_run.rb +69 -39
 - data/test/test_base.rb +13 -5
 - data/test/test_beanstalkd.rb +26 -4
 - data/test/test_bulk.rb +7 -3
 - data/test/test_iron_mq.rb +370 -159
 - data/test/test_push_queues.rb +21 -7
 - metadata +41 -45
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ce00af7c17301f12971aae72083ba984718c11be
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 42965aeda2d296af77c3125a663132c7beb0a450
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 0f40c8007eba47c0982c091e9857b79ff2be1c112416a0094196601e3744be3516680a9f67f9c2f8ebb543d09a84418e20f5e12d1960c424d612a5413fcb0028
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 162e8e411c13837561c0c8bc1e3a5bd874ccd5df8110e1ae0b832994df27560217192d3d1c8c2fc03fb295f23ca2ba344646e73bd77ebb86ea4e6c014f55d8f9
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,32 +1,33 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                iron_mq ( 
     | 
| 
      
 4 
     | 
    
         
            +
                iron_mq (4.0.0)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  iron_core (>= 0.5.1)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            GEM
         
     | 
| 
       8 
8 
     | 
    
         
             
              remote: https://rubygems.org/
         
     | 
| 
       9 
9 
     | 
    
         
             
              specs:
         
     | 
| 
       10 
10 
     | 
    
         
             
                beanstalk-client (1.1.1)
         
     | 
| 
       11 
     | 
    
         
            -
                concur ( 
     | 
| 
       12 
     | 
    
         
            -
                ethon (0.5. 
     | 
| 
      
 11 
     | 
    
         
            +
                concur (2.0.0)
         
     | 
| 
      
 12 
     | 
    
         
            +
                ethon (0.5.9)
         
     | 
| 
       13 
13 
     | 
    
         
             
                  ffi (~> 1.2.0)
         
     | 
| 
       14 
14 
     | 
    
         
             
                  mime-types (~> 1.18)
         
     | 
| 
       15 
15 
     | 
    
         
             
                ffi (1.2.1)
         
     | 
| 
       16 
16 
     | 
    
         
             
                iron_core (0.5.1)
         
     | 
| 
       17 
17 
     | 
    
         
             
                  rest (>= 2.2.0)
         
     | 
| 
       18 
     | 
    
         
            -
                mime-types (1. 
     | 
| 
       19 
     | 
    
         
            -
                minitest (4. 
     | 
| 
      
 18 
     | 
    
         
            +
                mime-types (1.21)
         
     | 
| 
      
 19 
     | 
    
         
            +
                minitest (4.6.2)
         
     | 
| 
       20 
20 
     | 
    
         
             
                net-http-persistent (2.8)
         
     | 
| 
      
 21 
     | 
    
         
            +
                quicky (0.4.0)
         
     | 
| 
       21 
22 
     | 
    
         
             
                rake (10.0.3)
         
     | 
| 
       22 
23 
     | 
    
         
             
                rest (2.2.0)
         
     | 
| 
       23 
24 
     | 
    
         
             
                  net-http-persistent
         
     | 
| 
       24 
25 
     | 
    
         
             
                  rest-client (>= 0.3.0)
         
     | 
| 
       25 
26 
     | 
    
         
             
                rest-client (1.6.7)
         
     | 
| 
       26 
27 
     | 
    
         
             
                  mime-types (>= 1.16)
         
     | 
| 
       27 
     | 
    
         
            -
                test-unit (2.5. 
     | 
| 
       28 
     | 
    
         
            -
                typhoeus (0. 
     | 
| 
       29 
     | 
    
         
            -
                  ethon (~> 0.5. 
     | 
| 
      
 28 
     | 
    
         
            +
                test-unit (2.5.4)
         
     | 
| 
      
 29 
     | 
    
         
            +
                typhoeus (0.6.1)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  ethon (~> 0.5.9)
         
     | 
| 
       30 
31 
     | 
    
         
             
                uber_config (1.0.5)
         
     | 
| 
       31 
32 
     | 
    
         | 
| 
       32 
33 
     | 
    
         
             
            PLATFORMS
         
     | 
| 
         @@ -38,6 +39,7 @@ DEPENDENCIES 
     | 
|
| 
       38 
39 
     | 
    
         
             
              iron_mq!
         
     | 
| 
       39 
40 
     | 
    
         
             
              minitest
         
     | 
| 
       40 
41 
     | 
    
         
             
              net-http-persistent
         
     | 
| 
      
 42 
     | 
    
         
            +
              quicky
         
     | 
| 
       41 
43 
     | 
    
         
             
              rake
         
     | 
| 
       42 
44 
     | 
    
         
             
              test-unit
         
     | 
| 
       43 
45 
     | 
    
         
             
              typhoeus (>= 0.5.4)
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -6,113 +6,338 @@ much as possible so if you see an option in the API docs, you can use it in the 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            http://dev.iron.io/mq/reference/api/
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            Getting Started
         
     | 
| 
       10 
     | 
    
         
            -
            ==============
         
     | 
| 
      
 9 
     | 
    
         
            +
            #Getting Started
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
       12 
11 
     | 
    
         
             
            1\. Install the gem:
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 14 
     | 
    
         
            +
            gem install iron_mq
         
     | 
| 
      
 15 
     | 
    
         
            +
            ```
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
            2\. Setup your Iron.io credentials: http://dev.iron.io/ 
     | 
| 
      
 17 
     | 
    
         
            +
            2\. Setup your Iron.io credentials: http://dev.iron.io/mq/reference/configuration/
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
19 
     | 
    
         
             
            3\. Create an IronMQ client object:
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 22 
     | 
    
         
            +
            ironmq = IronMQ::Client.new
         
     | 
| 
      
 23 
     | 
    
         
            +
            ```
         
     | 
| 
       21 
24 
     | 
    
         | 
| 
       22 
25 
     | 
    
         
             
            Or pass in credentials:
         
     | 
| 
       23 
26 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 28 
     | 
    
         
            +
            ironmq = IronMQ::Client.new(:token => "MY_TOKEN", :project_id => "MY_PROJECT_ID")
         
     | 
| 
      
 29 
     | 
    
         
            +
            ```
         
     | 
| 
       26 
30 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            The Basics
         
     | 
| 
       28 
     | 
    
         
            -
            =========
         
     | 
| 
      
 31 
     | 
    
         
            +
            #The Basics
         
     | 
| 
       29 
32 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 33 
     | 
    
         
            +
            ###Get a Queue Object
         
     | 
| 
       31 
34 
     | 
    
         | 
| 
       32 
35 
     | 
    
         
             
            You can have as many queues as you want, each with their own unique set of messages.
         
     | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 38 
     | 
    
         
            +
            queue = ironmq.queue("my_queue")
         
     | 
| 
      
 39 
     | 
    
         
            +
            ```
         
     | 
| 
       37 
40 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
            Now you can use it.
         
     | 
| 
       39 
42 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
            ### Post a Message on a Queue
         
     | 
| 
       41 
44 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
            Messages are placed on the queue in a FIFO arrangement.
         
     | 
| 
      
 46 
     | 
    
         
            +
            If a queue does not exist, it will be created upon the first posting of a message.
         
     | 
| 
       43 
47 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 48 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 49 
     | 
    
         
            +
            queue.post("hello world!")
         
     | 
| 
      
 50 
     | 
    
         
            +
            ```
         
     | 
| 
       45 
51 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
            ###  
     | 
| 
      
 52 
     | 
    
         
            +
            ### Retrieve Queue Information
         
     | 
| 
       47 
53 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
      
 54 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 55 
     | 
    
         
            +
            queue.info # => {"id"=>"5127bf043264140e863e2283", "name"=>"my_queue", ...}
         
     | 
| 
      
 56 
     | 
    
         
            +
            queue.id   # => "5127bf043264140e863e2283"
         
     | 
| 
      
 57 
     | 
    
         
            +
            ```
         
     | 
| 
       50 
58 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
            Get a  
     | 
| 
      
 59 
     | 
    
         
            +
            ### Get a Message off a Queue
         
     | 
| 
       52 
60 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 61 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 62 
     | 
    
         
            +
            msg = queue.get
         
     | 
| 
      
 63 
     | 
    
         
            +
            msg.body # => "hello world!"
         
     | 
| 
      
 64 
     | 
    
         
            +
            ```
         
     | 
| 
       54 
65 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
            When you pop/get a message from the queue, it  
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
      
 66 
     | 
    
         
            +
            When you pop/get a message from the queue, it is no longer on the queue but it still exists within the system.
         
     | 
| 
      
 67 
     | 
    
         
            +
            You have to explicitly delete the message or else it will go back onto the queue after the `timeout`.
         
     | 
| 
      
 68 
     | 
    
         
            +
            The default `timeout` is 60 seconds. Minimal `timeout` is 30 seconds.
         
     | 
| 
       57 
69 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
            ### Delete a  
     | 
| 
      
 70 
     | 
    
         
            +
            ### Delete a Message from a Queue
         
     | 
| 
       59 
71 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
      
 72 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 73 
     | 
    
         
            +
            msg.delete
         
     | 
| 
      
 74 
     | 
    
         
            +
            # or
         
     | 
| 
      
 75 
     | 
    
         
            +
            queue.delete(msg.id)
         
     | 
| 
      
 76 
     | 
    
         
            +
            ```
         
     | 
| 
       61 
77 
     | 
    
         | 
| 
       62 
78 
     | 
    
         
             
            Be sure to delete a message from the queue when you're done with it.
         
     | 
| 
       63 
79 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
            ### Poll for messages:
         
     | 
| 
       65 
80 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 81 
     | 
    
         
            +
            #Client
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            `IronMQ::Client` is based on `IronCore::Client` and provides easy access to the queues and messages.
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 86 
     | 
    
         
            +
            ironmq = IronMQ::Client.new(:token => "MY_TOKEN", :project_id => "MY_PROJECT_ID")
         
     | 
| 
      
 87 
     | 
    
         
            +
            ```
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
            ### List Queues
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 92 
     | 
    
         
            +
            all_queues = ironmq.queues.list # => [#<IronMQ::Queue:...>, ...]
         
     | 
| 
      
 93 
     | 
    
         
            +
            # or
         
     | 
| 
      
 94 
     | 
    
         
            +
            all_queues = ironmq.queues.all  # => [#<IronMQ::Queue:...>, ...]
         
     | 
| 
      
 95 
     | 
    
         
            +
            ```
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            **Optional parameters:**
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            * `page`: The 0-based page to view. The default is 0.
         
     | 
| 
      
 100 
     | 
    
         
            +
            * `per_page`: The number of queues to return per page. The default is 30, the maximum is 100.
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 103 
     | 
    
         
            +
            queues = ironmq.queues.all(:page => 1, :per_page => 10)
         
     | 
| 
      
 104 
     | 
    
         
            +
            ```
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            ### Get Queue by Name
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 109 
     | 
    
         
            +
            queue = ironmq.queue "my_queue" # => #<IronMQ::Queue:...>
         
     | 
| 
      
 110 
     | 
    
         
            +
            ```
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            **Note:** if queue with desired name does not exist it returns fake queue.
         
     | 
| 
      
 113 
     | 
    
         
            +
            Queue will be created automatically on post of first message or queue configuration update.
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
            #Queues
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
            ### Retrieve Queue Information
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 120 
     | 
    
         
            +
            info = queue.info # => {"id"=>"5127bf043264140e863e2283", "name"=>"my_queue", ...}
         
     | 
| 
      
 121 
     | 
    
         
            +
            ```
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
            Shortcuts for `queue.info[key]`:
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 126 
     | 
    
         
            +
            id = queue.id # => "5127bf043264140e863e2283"
         
     | 
| 
      
 127 
     | 
    
         
            +
            # Does queue exists on server? Alias for `queue.id.nil?`
         
     | 
| 
      
 128 
     | 
    
         
            +
            is_new = queue.new? # => false
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            size = queue.size # => 7
         
     | 
| 
      
 131 
     | 
    
         
            +
            name = queue.name # => "my_queue"
         
     | 
| 
      
 132 
     | 
    
         
            +
            overall_messages = queue.total_messages # => 13
         
     | 
| 
      
 133 
     | 
    
         
            +
            subscribers = queue.subscribers # => [{"url" => "http://..."}, ...]
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            push_type = queue.push_type # => "multicast"
         
     | 
| 
      
 136 
     | 
    
         
            +
            # Does queue Push Queue? Alias for `queue.push_type.nil?`
         
     | 
| 
      
 137 
     | 
    
         
            +
            is_push_queue = queue.push_queue? # => true
         
     | 
| 
      
 138 
     | 
    
         
            +
            ```
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            **Warning:** to be sure configuration information is up-to-date
         
     | 
| 
      
 141 
     | 
    
         
            +
            client library call IronMQ API each time you request for any parameter except `queue.name`.
         
     | 
| 
      
 142 
     | 
    
         
            +
            In this case you may prefer to use `queue.info` to have `Hash` with all available info parameters.
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            ### Delete a Message Queue
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 147 
     | 
    
         
            +
            response = queue.delete_queue # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 148 
     | 
    
         
            +
            ```
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
            ### Post Messages to a Queue
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
            **Single message:**
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 155 
     | 
    
         
            +
            response = queue.post("something helpful") # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 156 
     | 
    
         
            +
            # or
         
     | 
| 
      
 157 
     | 
    
         
            +
            response = queue.post("with parameteres", :timeout => 300) # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 158 
     | 
    
         
            +
             
     | 
| 
      
 159 
     | 
    
         
            +
            message_id = response.id # => "5847899158098068288"
         
     | 
| 
      
 160 
     | 
    
         
            +
            status_message = response.msg # => "Messages put on queue."
         
     | 
| 
      
 161 
     | 
    
         
            +
            http_code = response.code # => 200
         
     | 
| 
      
 162 
     | 
    
         
            +
            ```
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
            **Multiple messages:**
         
     | 
| 
      
 165 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 166 
     | 
    
         
            +
            # [{:body => VALUE}, ...] format is required
         
     | 
| 
      
 167 
     | 
    
         
            +
            messages = [{:body => "first"}, {:body => "second"}]
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
            response = queue.post(messages) # => {"ids" => ["5847899158098068288", ...], "msg" => "Messages put on queue."}
         
     | 
| 
      
 170 
     | 
    
         
            +
            # or
         
     | 
| 
      
 171 
     | 
    
         
            +
            response = queue.post(messages, :timeout => 300) # => {"ids" => ["5847899158098068288", ...], "msg" => "Messages put on queue."}
         
     | 
| 
      
 172 
     | 
    
         
            +
            ```
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
            **Optional parameters:**
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
            * `timeout`: After timeout (in seconds), item will be placed back onto queue.
         
     | 
| 
      
 177 
     | 
    
         
            +
            You must delete the message from the queue to ensure it does not go back onto the queue.
         
     | 
| 
      
 178 
     | 
    
         
            +
             Default is 60 seconds. Minimum is 30 seconds. Maximum is 86,400 seconds (24 hours).
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
            * `delay`: The item will not be available on the queue until this many seconds have passed.
         
     | 
| 
      
 181 
     | 
    
         
            +
            Default is 0 seconds. Maximum is 604,800 seconds (7 days).
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
            * `expires_in`: How long in seconds to keep the item on the queue before it is deleted.
         
     | 
| 
      
 184 
     | 
    
         
            +
            Default is 604,800 seconds (7 days). Maximum is 2,592,000 seconds (30 days).
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
            ### Get Messages from a Queue
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 189 
     | 
    
         
            +
            message = queue.get # => #<IronMQ::Message:...>
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
            # or N messages
         
     | 
| 
      
 192 
     | 
    
         
            +
            messages = queue.get(:n => 7) # => [#<IronMQ::Message:...>, ...]
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            # or message by ID
         
     | 
| 
      
 195 
     | 
    
         
            +
            message = queue.get "5127bf043264140e863e2283" # => #<IronMQ::Message:...>
         
     | 
| 
      
 196 
     | 
    
         
            +
            ```
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
            **Optional parameters:**
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
            * `n`: The maximum number of messages to get. Default is 1. Maximum is 100.
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
            * `timeout`: timeout: After timeout (in seconds), item will be placed back onto queue.
         
     | 
| 
      
 203 
     | 
    
         
            +
            You must delete the message from the queue to ensure it does not go back onto the queue.
         
     | 
| 
      
 204 
     | 
    
         
            +
            If not set, value from POST is used. Default is 60 seconds. Minimum is 30 seconds.
         
     | 
| 
      
 205 
     | 
    
         
            +
            Maximum is 86,400 seconds (24 hours).
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
            When `n` parameter is specified and greater than 1 method returns `Array` of `Queue`s.
         
     | 
| 
      
 208 
     | 
    
         
            +
            Otherwise, `Queue` object would be returned.
         
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
            ### Touch a Message on a Queue
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
            Touching a reserved message extends its timeout by the duration specified when the message was created, which is 60 seconds by default.
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 215 
     | 
    
         
            +
            message = queue.get # => #<IronMQ::Message:...>
         
     | 
| 
      
 216 
     | 
    
         
            +
             
     | 
| 
      
 217 
     | 
    
         
            +
            message.touch # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 218 
     | 
    
         
            +
            ```
         
     | 
| 
      
 219 
     | 
    
         
            +
             
     | 
| 
      
 220 
     | 
    
         
            +
            ### Release Message
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 223 
     | 
    
         
            +
            message = queue.get => #<IronMQ::Message:...>
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            response = message.release # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 226 
     | 
    
         
            +
            # or
         
     | 
| 
      
 227 
     | 
    
         
            +
            response = message.release(:delay => 42) # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 228 
     | 
    
         
            +
            ```
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
            **Optional parameters:**
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
            * `delay`: The item will not be available on the queue until this many seconds have passed.
         
     | 
| 
      
 233 
     | 
    
         
            +
            Default is 0 seconds. Maximum is 604,800 seconds (7 days).
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
      
 235 
     | 
    
         
            +
            ### Delete a Message from a Queue
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 238 
     | 
    
         
            +
            message = queue.get # => #<IronMQ::Queue:...>
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
            message.delete # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 241 
     | 
    
         
            +
            # or
         
     | 
| 
      
 242 
     | 
    
         
            +
            queue.delete_message(message.id) # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 243 
     | 
    
         
            +
            ```
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
            ### Peek Messages from a Queue
         
     | 
| 
      
 246 
     | 
    
         
            +
             
     | 
| 
      
 247 
     | 
    
         
            +
            Peeking at a queue returns the next messages on the queue, but it does not reserve them.
         
     | 
| 
      
 248 
     | 
    
         
            +
             
     | 
| 
      
 249 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 250 
     | 
    
         
            +
            message = queue.peek # => #<IronMQ::Message:...>
         
     | 
| 
      
 251 
     | 
    
         
            +
            # or multiple messages
         
     | 
| 
      
 252 
     | 
    
         
            +
            messages = queue.peek(:n => 13) # => [#<IronMQ::Message:...>, ...]
         
     | 
| 
      
 253 
     | 
    
         
            +
            ```
         
     | 
| 
      
 254 
     | 
    
         
            +
             
     | 
| 
      
 255 
     | 
    
         
            +
            **Optional parameters:**
         
     | 
| 
      
 256 
     | 
    
         
            +
             
     | 
| 
      
 257 
     | 
    
         
            +
            * `n`: The maximum number of messages to peek. Default is 1. Maximum is 100.
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
            ### Poll for Messages
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 262 
     | 
    
         
            +
            queue.poll { |msg| puts msg.body }
         
     | 
| 
      
 263 
     | 
    
         
            +
            ```
         
     | 
| 
       69 
264 
     | 
    
         | 
| 
       70 
265 
     | 
    
         
             
            Polling will automatically delete the message at the end of the block.
         
     | 
| 
       71 
266 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
            Queue 
     | 
| 
       73 
     | 
    
         
            -
            =================
         
     | 
| 
      
 267 
     | 
    
         
            +
            ### Clear a Queue
         
     | 
| 
       74 
268 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
      
 269 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 270 
     | 
    
         
            +
            queue.clear # => #<IronMQ::ResponseBase:...>
         
     | 
| 
      
 271 
     | 
    
         
            +
            ```
         
     | 
| 
       77 
272 
     | 
    
         | 
| 
      
 273 
     | 
    
         
            +
            #Push Queues
         
     | 
| 
       78 
274 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
      
 275 
     | 
    
         
            +
            IronMQ push queues allow you to setup a queue that will push to an endpoint, rather than having to poll the endpoint. 
         
     | 
| 
      
 276 
     | 
    
         
            +
            [Here's the announcement for an overview](http://blog.iron.io/2013/01/ironmq-push-queues-reliable-message.html). 
         
     | 
| 
       81 
277 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
      
 278 
     | 
    
         
            +
            ### Update a Message Queue
         
     | 
| 
       83 
279 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
      
 280 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 281 
     | 
    
         
            +
            queue_info = queue.update(options) # => {"id"=>"5127bf043264140e863e2283", "name"=>"my_queue", ...}
         
     | 
| 
      
 282 
     | 
    
         
            +
            ```
         
     | 
| 
       85 
283 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
      
 284 
     | 
    
         
            +
            **The following parameters are all related to Push Queues:**
         
     | 
| 
       87 
285 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
      
 286 
     | 
    
         
            +
            * `subscribers`: An array of subscriber hashes containing a “url” field.
         
     | 
| 
      
 287 
     | 
    
         
            +
            This set of subscribers will replace the existing subscribers.
         
     | 
| 
      
 288 
     | 
    
         
            +
            To add or remove subscribers, see the add subscribers endpoint or the remove subscribers endpoint.
         
     | 
| 
      
 289 
     | 
    
         
            +
            See below for example json.
         
     | 
| 
      
 290 
     | 
    
         
            +
            * `push_type`: Either `multicast` to push to all subscribers or `unicast` to push to one and only one subscriber. Default is `multicast`.
         
     | 
| 
      
 291 
     | 
    
         
            +
            * `retries`: How many times to retry on failure. Default is 3.
         
     | 
| 
      
 292 
     | 
    
         
            +
            * `retries_delay`: Delay between each retry in seconds. Default is 60.
         
     | 
| 
       89 
293 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
            - unicast - will push to one and only one endpoint/subscriber
         
     | 
| 
      
 294 
     | 
    
         
            +
            ### Set Subscribers on a Queue
         
     | 
| 
       92 
295 
     | 
    
         | 
| 
      
 296 
     | 
    
         
            +
            Subscribers can be any HTTP endpoint. `push_type` is one of:
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     | 
| 
      
 298 
     | 
    
         
            +
            * `multicast`: will push to all endpoints/subscribers
         
     | 
| 
      
 299 
     | 
    
         
            +
            * `unicast`: will push to one and only one endpoint/subscriber
         
     | 
| 
       93 
300 
     | 
    
         | 
| 
       94 
301 
     | 
    
         
             
            ```ruby
         
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
            subscribers  
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
      
 302 
     | 
    
         
            +
            ptype = :multicast
         
     | 
| 
      
 303 
     | 
    
         
            +
            subscribers = [
         
     | 
| 
      
 304 
     | 
    
         
            +
              {url: "http://rest-test.iron.io/code/200?store=key1"}
         
     | 
| 
      
 305 
     | 
    
         
            +
              {url: "http://rest-test.iron.io/code/200?store=key2"}
         
     | 
| 
      
 306 
     | 
    
         
            +
            ]
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
            queue.update(:subscribers => subscribers, :push_type => ptype)
         
     | 
| 
       100 
309 
     | 
    
         
             
            ```
         
     | 
| 
       101 
310 
     | 
    
         | 
| 
       102 
     | 
    
         
            -
            ### Add/ 
     | 
| 
      
 311 
     | 
    
         
            +
            ### Add/Remove Subscribers on a Queue
         
     | 
| 
       103 
312 
     | 
    
         | 
| 
       104 
313 
     | 
    
         
             
            ```ruby
         
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
      
 314 
     | 
    
         
            +
            queue.add_subscriber({url: "http://nowhere.com"})
         
     | 
| 
      
 315 
     | 
    
         
            +
             
     | 
| 
      
 316 
     | 
    
         
            +
            queue.remove_subscriber({url: "http://nowhere.com"})
         
     | 
| 
       108 
317 
     | 
    
         
             
            ```
         
     | 
| 
       109 
318 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
            ### Get  
     | 
| 
      
 319 
     | 
    
         
            +
            ### Get Message Push Status
         
     | 
| 
       111 
320 
     | 
    
         | 
| 
       112 
321 
     | 
    
         
             
            After pushing a message:
         
     | 
| 
       113 
322 
     | 
    
         | 
| 
       114 
323 
     | 
    
         
             
            ```ruby
         
     | 
| 
       115 
     | 
    
         
            -
            queue. 
     | 
| 
      
 324 
     | 
    
         
            +
            subscribers = queue.get(msg.id).subscribers # => [#<IronMQ::Subscriber:...>, ...]
         
     | 
| 
      
 325 
     | 
    
         
            +
            # old syntax, still supported
         
     | 
| 
      
 326 
     | 
    
         
            +
            subscribers = queue.messages.get(msg.id).subscribers # => [#<IronMQ::Subscriber:...>, ...]
         
     | 
| 
      
 327 
     | 
    
         
            +
             
     | 
| 
      
 328 
     | 
    
         
            +
            subscribers.each { |ss| puts "#{ss.id}: #{(ss.code == 200) ? 'Success' : 'Fail'}" }
         
     | 
| 
       116 
329 
     | 
    
         
             
            ```
         
     | 
| 
       117 
330 
     | 
    
         | 
| 
       118 
331 
     | 
    
         
             
            Returns an array of subscribers with status.
         
     | 
| 
      
 332 
     | 
    
         
            +
             
     | 
| 
      
 333 
     | 
    
         
            +
            ### Delete Message Push Status
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 336 
     | 
    
         
            +
            subscribers = queue.get(msg.id).subscribers # => [#<IronMQ::Subscriber:...>, ...]
         
     | 
| 
      
 337 
     | 
    
         
            +
             
     | 
| 
      
 338 
     | 
    
         
            +
            subscribers.each { |ss| ss.delete }
         
     | 
| 
      
 339 
     | 
    
         
            +
            ```
         
     | 
| 
      
 340 
     | 
    
         
            +
             
     | 
| 
      
 341 
     | 
    
         
            +
             
     | 
| 
      
 342 
     | 
    
         
            +
            -------------
         
     | 
| 
      
 343 
     | 
    
         
            +
            © 2011 - 2013 Iron.io Inc. All Rights Reserved.
         
     | 
    
        data/iron_mq.gemspec
    CHANGED
    
    | 
         @@ -1,8 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require File.expand_path('../lib/iron_mq/version', __FILE__)
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Gem::Specification.new do |gem|
         
     | 
| 
       4 
     | 
    
         
            -
              gem.authors       = ["Travis Reeder"]
         
     | 
| 
       5 
     | 
    
         
            -
              gem.email         = ["travis@iron.io"]
         
     | 
| 
      
 4 
     | 
    
         
            +
              gem.authors       = ["Yury Yantsevich", "Travis Reeder"]
         
     | 
| 
      
 5 
     | 
    
         
            +
              gem.email         = ["yury@iron.io", "travis@iron.io"]
         
     | 
| 
       6 
6 
     | 
    
         
             
              gem.description   = "Ruby client for IronMQ by www.iron.io"
         
     | 
| 
       7 
7 
     | 
    
         
             
              gem.summary       = "Ruby client for IronMQ by www.iron.io"
         
     | 
| 
       8 
8 
     | 
    
         
             
              gem.homepage      = "https://github.com/iron-io/iron_mq_ruby"
         
     | 
| 
         @@ -26,6 +26,7 @@ Gem::Specification.new do |gem| 
     | 
|
| 
       26 
26 
     | 
    
         
             
              gem.add_development_dependency "typhoeus", ">= 0.5.4"
         
     | 
| 
       27 
27 
     | 
    
         
             
              gem.add_development_dependency "concur"
         
     | 
| 
       28 
28 
     | 
    
         
             
              gem.add_development_dependency "net-http-persistent"
         
     | 
| 
      
 29 
     | 
    
         
            +
              gem.add_development_dependency "quicky"
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
31 
     | 
    
         
             
            end
         
     | 
| 
       31 
32 
     | 
    
         | 
    
        data/lib/iron_mq/client.rb
    CHANGED
    
    | 
         @@ -16,11 +16,10 @@ module IronMQ 
     | 
|
| 
       16 
16 
     | 
    
         
             
                      :host => IronMQ::Client::AWS_US_EAST_HOST,
         
     | 
| 
       17 
17 
     | 
    
         
             
                      :port => 443,
         
     | 
| 
       18 
18 
     | 
    
         
             
                      :api_version => 1,
         
     | 
| 
       19 
     | 
    
         
            -
                      :user_agent => 'iron_mq_ruby-' +  
     | 
| 
       20 
     | 
    
         
            -
                      :queue_name => 'default'
         
     | 
| 
      
 19 
     | 
    
         
            +
                      :user_agent => 'iron_mq_ruby-' + 'very_new' + ' (iron_core_ruby-' + IronCore.version + ')'
         
     | 
| 
       21 
20 
     | 
    
         
             
                  }
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                  super('iron', 'mq', options, default_options, [:project_id, :token, :api_version 
     | 
| 
      
 22 
     | 
    
         
            +
                  super('iron', 'mq', options, default_options, [:project_id, :token, :api_version])
         
     | 
| 
       24 
23 
     | 
    
         | 
| 
       25 
24 
     | 
    
         
             
                  IronCore::Logger.error 'IronMQ', "Token is not set", IronCore::Error if @token.nil?
         
     | 
| 
       26 
25 
     | 
    
         | 
| 
         @@ -35,19 +34,43 @@ module IronMQ 
     | 
|
| 
       35 
34 
     | 
    
         
             
                end
         
     | 
| 
       36 
35 
     | 
    
         | 
| 
       37 
36 
     | 
    
         
             
                def base_url
         
     | 
| 
       38 
     | 
    
         
            -
                   
     | 
| 
      
 37 
     | 
    
         
            +
                  @base_url = "#{super}#{@api_version}/projects/#{@project_id}/queues"
         
     | 
| 
       39 
38 
     | 
    
         
             
                end
         
     | 
| 
       40 
39 
     | 
    
         | 
| 
       41 
     | 
    
         
            -
                def  
     | 
| 
       42 
     | 
    
         
            -
                   
     | 
| 
      
 40 
     | 
    
         
            +
                def queues_list(options = {})
         
     | 
| 
      
 41 
     | 
    
         
            +
                  response = parse_response(get('', options)) # GET base_url
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # returns list of evaluated queues
         
     | 
| 
      
 43 
     | 
    
         
            +
                  response.each_with_object([]) { |q_info, ret| ret << Queue.new(self, q_info["name"]) }
         
     | 
| 
       43 
44 
     | 
    
         
             
                end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                 
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 46 
     | 
    
         
            +
                alias_method :list, :queues_list
         
     | 
| 
      
 47 
     | 
    
         
            +
                alias_method :all, :queues_list
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def queues_get(name)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  Queue.new(self, name)
         
     | 
| 
       47 
51 
     | 
    
         
             
                end
         
     | 
| 
       48 
52 
     | 
    
         | 
| 
      
 53 
     | 
    
         
            +
                alias_method :queue, :queues_get
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                # Backward compatibility for
         
     | 
| 
      
 56 
     | 
    
         
            +
                #   client.queues.get(:name => "my_queue")
         
     | 
| 
      
 57 
     | 
    
         
            +
                #   client.queues.get("name" => "my_queue")
         
     | 
| 
      
 58 
     | 
    
         
            +
                def get(*args)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  if args.size == 1 && args[0].is_a?(Hash)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    queue_name = (args[0][:name] || args[0]["name"]).to_s
         
     | 
| 
      
 61 
     | 
    
         
            +
                    queue_name.empty? ? super : queues_get(queue_name)
         
     | 
| 
      
 62 
     | 
    
         
            +
                  else
         
     | 
| 
      
 63 
     | 
    
         
            +
                    super
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                # Backward compatibility, adds possibility to call
         
     | 
| 
      
 68 
     | 
    
         
            +
                #   client.queues.all
         
     | 
| 
      
 69 
     | 
    
         
            +
                #   client.queues.list
         
     | 
| 
      
 70 
     | 
    
         
            +
                #   client.queues.queue(name)
         
     | 
| 
       49 
71 
     | 
    
         
             
                def queues
         
     | 
| 
       50 
     | 
    
         
            -
                   
     | 
| 
      
 72 
     | 
    
         
            +
                  self
         
     | 
| 
       51 
73 
     | 
    
         
             
                end
         
     | 
| 
       52 
74 
     | 
    
         
             
              end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
       53 
76 
     | 
    
         
             
            end
         
     | 
    
        data/lib/iron_mq/messages.rb
    CHANGED
    
    | 
         @@ -1,128 +1,45 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'cgi'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module IronMQ
         
     | 
| 
       4 
     | 
    
         
            -
              class Messages
         
     | 
| 
       5 
4 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
              class Message < ResponseBase
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_reader :queue
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
                def initialize( 
     | 
| 
       9 
     | 
    
         
            -
                  @client = client
         
     | 
| 
      
 8 
     | 
    
         
            +
                def initialize(queue, data)
         
     | 
| 
       10 
9 
     | 
    
         
             
                  @queue = queue
         
     | 
| 
      
 10 
     | 
    
         
            +
                  super(data, 200)
         
     | 
| 
       11 
11 
     | 
    
         
             
                end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  options[:queue_name] ||= ((@queue ? @queue.name : nil) || @client.queue_name)
         
     | 
| 
       16 
     | 
    
         
            -
                  options[:project_id] = @client.project_id
         
     | 
| 
       17 
     | 
    
         
            -
                  Messages.path(options)
         
     | 
| 
      
 13 
     | 
    
         
            +
                def touch
         
     | 
| 
      
 14 
     | 
    
         
            +
                  call_api_and_parse_response(:post, "/touch")
         
     | 
| 
       18 
15 
     | 
    
         
             
                end
         
     | 
| 
       19 
16 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
                def  
     | 
| 
       21 
     | 
    
         
            -
                   
     | 
| 
       22 
     | 
    
         
            -
                  if options[:msg_id]
         
     | 
| 
       23 
     | 
    
         
            -
                    path << "/#{options[:msg_id]}"
         
     | 
| 
       24 
     | 
    
         
            -
                  end
         
     | 
| 
       25 
     | 
    
         
            -
                  path
         
     | 
| 
      
 17 
     | 
    
         
            +
                def release(options = {})
         
     | 
| 
      
 18 
     | 
    
         
            +
                  call_api_and_parse_response(:post, "/release", options)
         
     | 
| 
       26 
19 
     | 
    
         
             
                end
         
     | 
| 
       27 
20 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                # options 
     | 
| 
       29 
     | 
    
         
            -
                 
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                def get(options={})
         
     | 
| 
       32 
     | 
    
         
            -
                  if options.is_a?(String)
         
     | 
| 
       33 
     | 
    
         
            -
                    # assume it's an id
         
     | 
| 
       34 
     | 
    
         
            -
                    puts 'get_by_id'
         
     | 
| 
       35 
     | 
    
         
            -
                    return Message.new(self, {'id'=>options}, options)
         
     | 
| 
       36 
     | 
    
         
            -
                    #r = @client.get(path(:msg_id=>options))
         
     | 
| 
       37 
     | 
    
         
            -
                    #p r
         
     | 
| 
       38 
     | 
    
         
            -
                    #return r
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
                  res = @client.parse_response(@client.get(path(options), options))
         
     | 
| 
       41 
     | 
    
         
            -
                  ret = []
         
     | 
| 
       42 
     | 
    
         
            -
                  res["messages"].each do |m|
         
     | 
| 
       43 
     | 
    
         
            -
                    ret << Message.new(self, m, options)
         
     | 
| 
       44 
     | 
    
         
            -
                  end
         
     | 
| 
       45 
     | 
    
         
            -
                  if options[:n] || options['n']
         
     | 
| 
       46 
     | 
    
         
            -
                    return ret
         
     | 
| 
       47 
     | 
    
         
            -
                  else
         
     | 
| 
       48 
     | 
    
         
            -
                    if ret.size > 0
         
     | 
| 
       49 
     | 
    
         
            -
                      return ret[0]
         
     | 
| 
       50 
     | 
    
         
            -
                    else
         
     | 
| 
       51 
     | 
    
         
            -
                      return nil
         
     | 
| 
       52 
     | 
    
         
            -
                    end
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
                # `options` was kept for backward compatibility
         
     | 
| 
      
 22 
     | 
    
         
            +
                def subscribers(options = {})
         
     | 
| 
      
 23 
     | 
    
         
            +
                  response = call_api_and_parse_response(:get, "/subscribers", {}, false)
         
     | 
| 
       55 
24 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                #  :delay => time to wait before message will be available on the queue
         
     | 
| 
       59 
     | 
    
         
            -
                #  :timeout => The time in seconds to wait after message is taken off the queue, before it is put back on. Delete before :timeout to ensure it does not go back on the queue.
         
     | 
| 
       60 
     | 
    
         
            -
                #  :expires_in => After this time, message will be automatically removed from the queue.
         
     | 
| 
       61 
     | 
    
         
            -
                def post(payload, options={})
         
     | 
| 
       62 
     | 
    
         
            -
                  batch = false
         
     | 
| 
       63 
     | 
    
         
            -
                  if payload.is_a?(Array)
         
     | 
| 
       64 
     | 
    
         
            -
                    batch = true
         
     | 
| 
       65 
     | 
    
         
            -
                    msgs = payload
         
     | 
| 
       66 
     | 
    
         
            -
                  else
         
     | 
| 
       67 
     | 
    
         
            -
                    options[:body] = payload
         
     | 
| 
       68 
     | 
    
         
            -
                    msgs = []
         
     | 
| 
       69 
     | 
    
         
            -
                    msgs << options
         
     | 
| 
       70 
     | 
    
         
            -
                  end
         
     | 
| 
       71 
     | 
    
         
            -
                  to_send = {}
         
     | 
| 
       72 
     | 
    
         
            -
                  to_send[:messages] = msgs
         
     | 
| 
       73 
     | 
    
         
            -
                  res = @client.parse_response(@client.post(path(options), to_send))
         
     | 
| 
       74 
     | 
    
         
            -
                  if batch
         
     | 
| 
       75 
     | 
    
         
            -
                    return res
         
     | 
| 
       76 
     | 
    
         
            -
                  else
         
     | 
| 
       77 
     | 
    
         
            -
                    return ResponseBase.new({"id"=>res["ids"][0], "msg"=>res["msg"]})
         
     | 
| 
      
 25 
     | 
    
         
            +
                  response['subscribers'].each_with_object([]) do |subscriber, ret|
         
     | 
| 
      
 26 
     | 
    
         
            +
                    ret << Subscriber.new(subscriber, self, options)
         
     | 
| 
       78 
27 
     | 
    
         
             
                  end
         
     | 
| 
       79 
28 
     | 
    
         
             
                end
         
     | 
| 
       80 
29 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                def delete(message_id, options={})
         
     | 
| 
       82 
     | 
    
         
            -
                  path2 = "#{self.path(options)}/#{message_id}"
         
     | 
| 
       83 
     | 
    
         
            -
                  res = @client.parse_response(@client.delete(path2))
         
     | 
| 
       84 
     | 
    
         
            -
                  return ResponseBase.new(res)
         
     | 
| 
       85 
     | 
    
         
            -
                end
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                def release(message_id, options={})
         
     | 
| 
       88 
     | 
    
         
            -
                  path2 = "#{self.path(options)}/#{message_id}/release"
         
     | 
| 
       89 
     | 
    
         
            -
                  res = @client.parse_response(@client.post(path2, options))
         
     | 
| 
       90 
     | 
    
         
            -
                  return ResponseBase.new(res)
         
     | 
| 
       91 
     | 
    
         
            -
                end
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
              end
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
              class Message < ResponseBase
         
     | 
| 
       96 
     | 
    
         
            -
                attr_reader :messages
         
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
                def initialize(messages, res, options={})
         
     | 
| 
       99 
     | 
    
         
            -
                  super(res)
         
     | 
| 
       100 
     | 
    
         
            -
                  @messages = messages
         
     | 
| 
       101 
     | 
    
         
            -
                  @options = options
         
     | 
| 
       102 
     | 
    
         
            -
                end
         
     | 
| 
       103 
     | 
    
         
            -
             
     | 
| 
       104 
     | 
    
         
            -
                def body
         
     | 
| 
       105 
     | 
    
         
            -
                  raw["body"]
         
     | 
| 
       106 
     | 
    
         
            -
                end
         
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
       108 
30 
     | 
    
         
             
                def delete
         
     | 
| 
       109 
     | 
    
         
            -
                   
     | 
| 
      
 31 
     | 
    
         
            +
                  call_api_and_parse_response(:delete)
         
     | 
| 
       110 
32 
     | 
    
         
             
                end
         
     | 
| 
       111 
33 
     | 
    
         | 
| 
       112 
     | 
    
         
            -
                def  
     | 
| 
       113 
     | 
    
         
            -
                   
     | 
| 
       114 
     | 
    
         
            -
                  options2 = options.merge(@options) if @options
         
     | 
| 
       115 
     | 
    
         
            -
                  @messages.release(self.id, options2)
         
     | 
| 
      
 34 
     | 
    
         
            +
                def call_api_and_parse_response(meth, ext_path = "", options = {}, instantiate = true)
         
     | 
| 
      
 35 
     | 
    
         
            +
                  @queue.call_api_and_parse_response(meth, "#{path(ext_path)}", options, instantiate)
         
     | 
| 
       116 
36 
     | 
    
         
             
                end
         
     | 
| 
       117 
37 
     | 
    
         | 
| 
       118 
     | 
    
         
            -
                 
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
                   
     | 
| 
       122 
     | 
    
         
            -
                  res['subscribers'].each do |m|
         
     | 
| 
       123 
     | 
    
         
            -
                    ret << Subscriber.new(m, self, options)
         
     | 
| 
       124 
     | 
    
         
            -
                  end
         
     | 
| 
       125 
     | 
    
         
            -
                  ret
         
     | 
| 
      
 38 
     | 
    
         
            +
                private
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def path(ext_path)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  "/messages/#{id}#{ext_path}"
         
     | 
| 
       126 
42 
     | 
    
         
             
                end
         
     | 
| 
       127 
43 
     | 
    
         
             
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       128 
45 
     | 
    
         
             
            end
         
     |