jubjub 0.0.7 → 0.0.8
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.
- data/README.mdown +27 -1
 - data/lib/jubjub.rb +1 -1
 - data/lib/jubjub/connection/xmpp_gateway.rb +9 -9
 - data/lib/jubjub/connection/xmpp_gateway/helper.rb +5 -5
 - data/lib/jubjub/connection/xmpp_gateway/muc.rb +127 -32
 - data/lib/jubjub/connection/xmpp_gateway/pubsub.rb +64 -64
 - data/lib/jubjub/data_form.rb +16 -13
 - data/lib/jubjub/errors.rb +2 -2
 - data/lib/jubjub/helpers.rb +32 -0
 - data/lib/jubjub/jid.rb +8 -8
 - data/lib/jubjub/muc.rb +3 -1
 - data/lib/jubjub/muc/affiliation.rb +77 -0
 - data/lib/jubjub/muc/affiliations_collection.rb +31 -0
 - data/lib/jubjub/muc/collection.rb +12 -19
 - data/lib/jubjub/muc/configuration.rb +2 -2
 - data/lib/jubjub/muc/muc.rb +24 -11
 - data/lib/jubjub/pubsub.rb +1 -1
 - data/lib/jubjub/pubsub/affiliation.rb +20 -20
 - data/lib/jubjub/pubsub/affiliation_collection.rb +11 -18
 - data/lib/jubjub/pubsub/collection.rb +14 -21
 - data/lib/jubjub/pubsub/configuration.rb +2 -2
 - data/lib/jubjub/pubsub/item.rb +8 -8
 - data/lib/jubjub/pubsub/item_collection.rb +10 -17
 - data/lib/jubjub/pubsub/pubsub.rb +17 -17
 - data/lib/jubjub/pubsub/subscription.rb +6 -6
 - data/lib/jubjub/response.rb +1 -1
 - data/lib/jubjub/response/error.rb +6 -6
 - data/lib/jubjub/response/proxy.rb +8 -8
 - data/lib/jubjub/response/response.rb +10 -10
 - data/lib/jubjub/user.rb +16 -15
 - data/spec/connection/xmpp_gateway_muc_spec.rb +174 -40
 - data/spec/connection/xmpp_gateway_pubsub_spec.rb +100 -104
 - data/spec/fixtures/vcr_cassettes/muc_configuration.yml +73 -6
 - data/spec/fixtures/vcr_cassettes/muc_create_with_configuration.yml +8 -8
 - data/spec/fixtures/vcr_cassettes/muc_message.yml +89 -0
 - data/spec/fixtures/vcr_cassettes/muc_modify_affiliations.yml +367 -0
 - data/spec/fixtures/vcr_cassettes/muc_retrieve_affiliations.yml +93 -0
 - data/spec/fixtures/vcr_cassettes/pubsub_publish_with_dataform_payload.yml +3 -3
 - data/spec/fixtures/vcr_cassettes/pubsub_retrieve_items.yml +24 -18
 - data/spec/mixins/user_spec.rb +37 -37
 - data/spec/models/data_form_spec.rb +3 -3
 - data/spec/models/jid_spec.rb +41 -41
 - data/spec/models/muc_affiliation_collection_spec.rb +146 -0
 - data/spec/models/muc_affiliation_spec.rb +215 -0
 - data/spec/models/muc_collection_spec.rb +64 -32
 - data/spec/models/muc_configuration_spec.rb +3 -3
 - data/spec/models/muc_spec.rb +44 -23
 - data/spec/models/pubsub_affiliation_collection_spec.rb +65 -30
 - data/spec/models/pubsub_affiliation_spec.rb +50 -50
 - data/spec/models/pubsub_collection_spec.rb +65 -49
 - data/spec/models/pubsub_item_collection_spec.rb +17 -17
 - data/spec/models/pubsub_item_spec.rb +18 -18
 - data/spec/models/pubsub_spec.rb +41 -41
 - data/spec/models/pubsub_subscription_spec.rb +23 -23
 - data/spec/models/response_error_spec.rb +19 -19
 - data/spec/models/response_proxy_spec.rb +51 -49
 - data/spec/models/response_spec.rb +33 -33
 - data/spec/support/helpers.rb +21 -1
 - data/spec/support/matchers.rb +4 -4
 - data/spec/support/shared_examples.rb +132 -94
 - data/spec/support/webmock_stanza_matching.rb +43 -0
 - metadata +45 -16
 
| 
         @@ -1,7 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Jubjub::Pubsub::AffiliationCollection
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
              attr_reader :jid, :node
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              include Jubjub::Helpers::Collection
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       5 
7 
     | 
    
         
             
              def initialize(jid,node,connection)
         
     | 
| 
       6 
8 
     | 
    
         
             
                @jid = Jubjub::Jid.new jid
         
     | 
| 
       7 
9 
     | 
    
         
             
                @node = node
         
     | 
| 
         @@ -11,28 +13,19 @@ class Jubjub::Pubsub::AffiliationCollection 
     | 
|
| 
       11 
13 
     | 
    
         
             
              def [](jid_num)
         
     | 
| 
       12 
14 
     | 
    
         
             
                case jid_num
         
     | 
| 
       13 
15 
     | 
    
         
             
                when Fixnum
         
     | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
      
 16 
     | 
    
         
            +
                  list[jid_num]
         
     | 
| 
       15 
17 
     | 
    
         
             
                when Jubjub::Jid
         
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
      
 18 
     | 
    
         
            +
                  search_list( Jubjub::Pubsub::Affiliation.new( jid, node, jid_num, 'none', @connection ) ){|i| i.jid == jid_num }
         
     | 
| 
       17 
19 
     | 
    
         
             
                else
         
     | 
| 
       18 
20 
     | 
    
         
             
                  j = Jubjub::Jid.new( jid_num )
         
     | 
| 
       19 
     | 
    
         
            -
                   
     | 
| 
      
 21 
     | 
    
         
            +
                  search_list( Jubjub::Pubsub::Affiliation.new( jid, node, j, 'none', @connection ) ){|i| i.jid == j }
         
     | 
| 
       20 
22 
     | 
    
         
             
                end
         
     | 
| 
       21 
23 
     | 
    
         
             
              end
         
     | 
| 
       22 
24 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
              # Hint that methods are actually applied to list using method_missing
         
     | 
| 
       24 
     | 
    
         
            -
              def inspect
         
     | 
| 
       25 
     | 
    
         
            -
                affiliations.inspect
         
     | 
| 
       26 
     | 
    
         
            -
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
25 
     | 
    
         
             
            private
         
     | 
| 
       29 
26 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              def  
     | 
| 
       31 
     | 
    
         
            -
                 
     | 
| 
       32 
     | 
    
         
            -
              end
         
     | 
| 
       33 
     | 
    
         
            -
              
         
     | 
| 
       34 
     | 
    
         
            -
              def affiliations
         
     | 
| 
       35 
     | 
    
         
            -
                @affiliations ||= @connection.pubsub.retrieve_affiliations( @jid, @node )
         
     | 
| 
      
 27 
     | 
    
         
            +
              def list
         
     | 
| 
      
 28 
     | 
    
         
            +
                @list ||= @connection.pubsub.retrieve_affiliations( @jid, @node )
         
     | 
| 
       36 
29 
     | 
    
         
             
              end
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -2,18 +2,20 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            # and delaying expensive operations until
         
     | 
| 
       3 
3 
     | 
    
         
             
            # required
         
     | 
| 
       4 
4 
     | 
    
         
             
            class Jubjub::Pubsub::Collection
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       6 
6 
     | 
    
         
             
              attr_reader :jid
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              include Jubjub::Helpers::Collection
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       8 
10 
     | 
    
         
             
              def initialize(jid, connection)
         
     | 
| 
       9 
11 
     | 
    
         
             
                @jid = Jubjub::Jid.new jid
         
     | 
| 
       10 
12 
     | 
    
         
             
                @connection = connection
         
     | 
| 
       11 
13 
     | 
    
         
             
              end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       13 
15 
     | 
    
         
             
              def create(node)
         
     | 
| 
       14 
16 
     | 
    
         
             
                @connection.pubsub.create jid, node
         
     | 
| 
       15 
17 
     | 
    
         
             
              end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       17 
19 
     | 
    
         
             
              def create(node, &block)
         
     | 
| 
       18 
20 
     | 
    
         
             
                config = nil
         
     | 
| 
       19 
21 
     | 
    
         
             
                if block_given?
         
     | 
| 
         @@ -23,46 +25,37 @@ class Jubjub::Pubsub::Collection 
     | 
|
| 
       23 
25 
     | 
    
         
             
                end
         
     | 
| 
       24 
26 
     | 
    
         
             
                @connection.pubsub.create jid, node, config
         
     | 
| 
       25 
27 
     | 
    
         
             
              end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       27 
29 
     | 
    
         
             
              def destroy(node, redirect_jid = nil, redirect_node = nil)
         
     | 
| 
       28 
30 
     | 
    
         
             
                redirect_jid = Jubjub::Jid.new(redirect_jid) if redirect_jid
         
     | 
| 
       29 
31 
     | 
    
         
             
                @connection.pubsub.destroy jid, node, redirect_jid, redirect_node
         
     | 
| 
       30 
32 
     | 
    
         
             
              end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       32 
34 
     | 
    
         
             
              def purge(node)
         
     | 
| 
       33 
35 
     | 
    
         
             
                @connection.pubsub.purge jid, node
         
     | 
| 
       34 
36 
     | 
    
         
             
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
       36 
38 
     | 
    
         
             
              def subscribe(node)
         
     | 
| 
       37 
39 
     | 
    
         
             
                @connection.pubsub.subscribe jid, node
         
     | 
| 
       38 
40 
     | 
    
         
             
              end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
       40 
42 
     | 
    
         
             
              def unsubscribe(node, subid=nil)
         
     | 
| 
       41 
43 
     | 
    
         
             
                @connection.pubsub.unsubscribe jid, node, subid
         
     | 
| 
       42 
44 
     | 
    
         
             
              end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
       44 
46 
     | 
    
         
             
              def [](node_num)
         
     | 
| 
       45 
47 
     | 
    
         
             
                case node_num
         
     | 
| 
       46 
48 
     | 
    
         
             
                when Fixnum
         
     | 
| 
       47 
49 
     | 
    
         
             
                  list[node_num]
         
     | 
| 
       48 
50 
     | 
    
         
             
                else
         
     | 
| 
       49 
     | 
    
         
            -
                   
     | 
| 
      
 51 
     | 
    
         
            +
                  search_list(Jubjub::Pubsub.new( jid, node_num, @connection )){|p| p.node == node_num }
         
     | 
| 
       50 
52 
     | 
    
         
             
                end
         
     | 
| 
       51 
53 
     | 
    
         
             
              end
         
     | 
| 
       52 
     | 
    
         
            -
              
         
     | 
| 
       53 
     | 
    
         
            -
              # Hint that methods are actually applied to list using method_missing
         
     | 
| 
       54 
     | 
    
         
            -
              def inspect
         
     | 
| 
       55 
     | 
    
         
            -
                list.inspect
         
     | 
| 
       56 
     | 
    
         
            -
              end
         
     | 
| 
       57 
54 
     | 
    
         | 
| 
       58 
55 
     | 
    
         
             
            private
         
     | 
| 
       59 
56 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
              def method_missing(name, *args, &block)
         
     | 
| 
       61 
     | 
    
         
            -
                list.send(name, *args, &block)
         
     | 
| 
       62 
     | 
    
         
            -
              end
         
     | 
| 
       63 
     | 
    
         
            -
              
         
     | 
| 
       64 
57 
     | 
    
         
             
              def list
         
     | 
| 
       65 
58 
     | 
    
         
             
                @list ||= @connection.pubsub.list jid
         
     | 
| 
       66 
59 
     | 
    
         
             
              end
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
            end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/jubjub/pubsub/item.rb
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Jubjub::Pubsub::Item
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
              attr_reader :jid, :node, :item_id, :data
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       5 
5 
     | 
    
         
             
              def initialize(jid, node, item_id, data, connection)
         
     | 
| 
       6 
6 
     | 
    
         
             
                @jid = Jubjub::Jid.new jid
         
     | 
| 
       7 
7 
     | 
    
         
             
                @node = node
         
     | 
| 
         @@ -9,17 +9,17 @@ class Jubjub::Pubsub::Item 
     | 
|
| 
       9 
9 
     | 
    
         
             
                @data = data
         
     | 
| 
       10 
10 
     | 
    
         
             
                @connection = connection
         
     | 
| 
       11 
11 
     | 
    
         
             
              end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       13 
13 
     | 
    
         
             
              # Hide the connection details and show jid as string for compactness
         
     | 
| 
       14 
14 
     | 
    
         
             
              def inspect
         
     | 
| 
       15 
15 
     | 
    
         
             
                obj_id = "%x" % (object_id << 1)
         
     | 
| 
       16 
16 
     | 
    
         
             
                "#<#{self.class}:0x#{obj_id} @jid=\"#{jid}\" @node=#{node.inspect} @item_id=#{item_id.inspect} @data=#{data.inspect}>"
         
     | 
| 
       17 
17 
     | 
    
         
             
              end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       19 
19 
     | 
    
         
             
              def retract
         
     | 
| 
       20 
20 
     | 
    
         
             
                @connection.pubsub.retract jid, node, item_id
         
     | 
| 
       21 
21 
     | 
    
         
             
              end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
       23 
23 
     | 
    
         
             
              def ==(other)
         
     | 
| 
       24 
24 
     | 
    
         
             
                other.is_a?( self.class ) &&
         
     | 
| 
       25 
25 
     | 
    
         
             
                other.jid     == self.jid &&
         
     | 
| 
         @@ -27,9 +27,9 @@ class Jubjub::Pubsub::Item 
     | 
|
| 
       27 
27 
     | 
    
         
             
                other.item_id == self.item_id &&
         
     | 
| 
       28 
28 
     | 
    
         
             
                other.data    == self.data
         
     | 
| 
       29 
29 
     | 
    
         
             
              end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       31 
31 
     | 
    
         
             
              def uri
         
     | 
| 
       32 
32 
     | 
    
         
             
                "xmpp:#{@jid}?;node=#{@node};item=#{@item_id}"
         
     | 
| 
       33 
33 
     | 
    
         
             
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
            end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,7 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Jubjub::Pubsub::ItemCollection
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
              attr_reader :jid, :node
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              include Jubjub::Helpers::Collection
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       5 
7 
     | 
    
         
             
              def initialize(jid,node,connection)
         
     | 
| 
       6 
8 
     | 
    
         
             
                @jid = Jubjub::Jid.new jid
         
     | 
| 
       7 
9 
     | 
    
         
             
                @node = node
         
     | 
| 
         @@ -11,25 +13,16 @@ class Jubjub::Pubsub::ItemCollection 
     | 
|
| 
       11 
13 
     | 
    
         
             
              def [](item_num)
         
     | 
| 
       12 
14 
     | 
    
         
             
                case item_num
         
     | 
| 
       13 
15 
     | 
    
         
             
                when Fixnum
         
     | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
      
 16 
     | 
    
         
            +
                  list[item_num]
         
     | 
| 
       15 
17 
     | 
    
         
             
                else
         
     | 
| 
       16 
     | 
    
         
            -
                   
     | 
| 
      
 18 
     | 
    
         
            +
                  search_list{|i| i.item_id == item_num }
         
     | 
| 
       17 
19 
     | 
    
         
             
                end
         
     | 
| 
       18 
20 
     | 
    
         
             
              end
         
     | 
| 
       19 
21 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              # Hint that methods are actually applied to list using method_missing
         
     | 
| 
       21 
     | 
    
         
            -
              def inspect
         
     | 
| 
       22 
     | 
    
         
            -
                items.inspect
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
22 
     | 
    
         
             
            private
         
     | 
| 
       26 
23 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
              def  
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
              end
         
     | 
| 
       30 
     | 
    
         
            -
              
         
     | 
| 
       31 
     | 
    
         
            -
              def items
         
     | 
| 
       32 
     | 
    
         
            -
                @items ||= @connection.pubsub.retrieve_items( @jid, @node )
         
     | 
| 
      
 24 
     | 
    
         
            +
              def list
         
     | 
| 
      
 25 
     | 
    
         
            +
                @list ||= @connection.pubsub.retrieve_items( @jid, @node )
         
     | 
| 
       33 
26 
     | 
    
         
             
              end
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/jubjub/pubsub/pubsub.rb
    CHANGED
    
    | 
         @@ -1,66 +1,66 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Jubjub::Pubsub
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
              attr_reader :jid, :node
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       5 
5 
     | 
    
         
             
              def initialize(jid, node, connection)
         
     | 
| 
       6 
6 
     | 
    
         
             
                @jid = Jubjub::Jid.new jid
         
     | 
| 
       7 
7 
     | 
    
         
             
                @node = node
         
     | 
| 
       8 
8 
     | 
    
         
             
                @connection = connection
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       11 
11 
     | 
    
         
             
              def destroy(redirect_jid = nil, redirect_node = nil)
         
     | 
| 
       12 
12 
     | 
    
         
             
                redirect_jid = Jubjub::Jid.new(redirect_jid) if redirect_jid
         
     | 
| 
       13 
13 
     | 
    
         
             
                @connection.pubsub.destroy jid, node, redirect_jid, redirect_node
         
     | 
| 
       14 
14 
     | 
    
         
             
              end
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       16 
16 
     | 
    
         
             
              def purge
         
     | 
| 
       17 
17 
     | 
    
         
             
                @connection.pubsub.purge jid, node
         
     | 
| 
       18 
18 
     | 
    
         
             
              end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       20 
20 
     | 
    
         
             
              def subscribe
         
     | 
| 
       21 
21 
     | 
    
         
             
                @connection.pubsub.subscribe jid, node
         
     | 
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       24 
24 
     | 
    
         
             
              def unsubscribe(subid = nil)
         
     | 
| 
       25 
     | 
    
         
            -
                @connection.pubsub.unsubscribe jid, node, subid 
     | 
| 
      
 25 
     | 
    
         
            +
                @connection.pubsub.unsubscribe jid, node, subid
         
     | 
| 
       26 
26 
     | 
    
         
             
              end
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
       28 
28 
     | 
    
         
             
              def publish(data, item_id = nil)
         
     | 
| 
       29 
29 
     | 
    
         
             
                @connection.pubsub.publish jid, node, data, item_id
         
     | 
| 
       30 
30 
     | 
    
         
             
              end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       32 
32 
     | 
    
         
             
              def retract(item_id)
         
     | 
| 
       33 
33 
     | 
    
         
             
                @connection.pubsub.retract jid, node, item_id
         
     | 
| 
       34 
34 
     | 
    
         
             
              end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
       36 
36 
     | 
    
         
             
              # Hide the connection details and show jid as string for compactness
         
     | 
| 
       37 
37 
     | 
    
         
             
              def inspect
         
     | 
| 
       38 
38 
     | 
    
         
             
                obj_id = "%x" % (object_id << 1)
         
     | 
| 
       39 
39 
     | 
    
         
             
                "#<#{self.class}:0x#{obj_id} @jid=\"#{jid}\" @node=#{node.inspect}>"
         
     | 
| 
       40 
40 
     | 
    
         
             
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
       42 
42 
     | 
    
         
             
              def items
         
     | 
| 
       43 
43 
     | 
    
         
             
                ItemCollection.new jid, node, @connection
         
     | 
| 
       44 
44 
     | 
    
         
             
              end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
       46 
46 
     | 
    
         
             
              def affiliations
         
     | 
| 
       47 
47 
     | 
    
         
             
                AffiliationCollection.new jid, node, @connection
         
     | 
| 
       48 
48 
     | 
    
         
             
              end
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
       50 
50 
     | 
    
         
             
              def uri
         
     | 
| 
       51 
51 
     | 
    
         
             
                "xmpp:#{@jid}?;node=#{@node}"
         
     | 
| 
       52 
52 
     | 
    
         
             
              end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       54 
54 
     | 
    
         
             
              def ==(other)
         
     | 
| 
       55 
55 
     | 
    
         
             
                other.is_a?( self.class ) &&
         
     | 
| 
       56 
56 
     | 
    
         
             
                other.jid     == self.jid &&
         
     | 
| 
       57 
57 
     | 
    
         
             
                other.node    == self.node
         
     | 
| 
       58 
58 
     | 
    
         
             
              end
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       60 
60 
     | 
    
         
             
            private
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
62 
     | 
    
         
             
              def method_missing(name, *args, &block)
         
     | 
| 
       63 
63 
     | 
    
         
             
                items.send(name, *args, &block)
         
     | 
| 
       64 
64 
     | 
    
         
             
              end
         
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
            end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class Jubjub::Pubsub::Subscription
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
              attr_reader :jid, :node, :subscriber, :subid, :subscription
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       5 
5 
     | 
    
         
             
              def initialize(jid, node, subscriber, subid, subscription, connection)
         
     | 
| 
       6 
6 
     | 
    
         
             
                @jid          = Jubjub::Jid.new jid
         
     | 
| 
       7 
7 
     | 
    
         
             
                @node         = node
         
     | 
| 
         @@ -10,15 +10,15 @@ class Jubjub::Pubsub::Subscription 
     | 
|
| 
       10 
10 
     | 
    
         
             
                @subscription = subscription
         
     | 
| 
       11 
11 
     | 
    
         
             
                @connection   = connection
         
     | 
| 
       12 
12 
     | 
    
         
             
              end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       14 
14 
     | 
    
         
             
              def unsubscribe
         
     | 
| 
       15 
15 
     | 
    
         
             
                @connection.pubsub.unsubscribe jid, node, subid
         
     | 
| 
       16 
16 
     | 
    
         
             
              end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       18 
18 
     | 
    
         
             
              # Hide the connection details and show jid as string for compactness
         
     | 
| 
       19 
19 
     | 
    
         
             
              def inspect
         
     | 
| 
       20 
20 
     | 
    
         
             
                obj_id = "%x" % (object_id << 1)
         
     | 
| 
       21 
21 
     | 
    
         
             
                "#<#{self.class}:0x#{obj_id} @jid=\"#{jid}\" @node=#{node.inspect} @subscriber=\"#{subscriber}\" @subid=#{subid.inspect} @subscription=#{subscription.inspect}>"
         
     | 
| 
       22 
22 
     | 
    
         
             
              end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
            end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/jubjub/response.rb
    CHANGED
    
    
| 
         @@ -7,19 +7,19 @@ module Jubjub 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  def initialize(xml)
         
     | 
| 
       8 
8 
     | 
    
         
             
                    @stanza = xml
         
     | 
| 
       9 
9 
     | 
    
         
             
                  end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       11 
11 
     | 
    
         
             
                  def condition
         
     | 
| 
       12 
12 
     | 
    
         
             
                    @condition ||= begin
         
     | 
| 
       13 
13 
     | 
    
         
             
                      condition = @stanza.xpath('//error/ietf:*','ietf' => 'urn:ietf:params:xml:ns:xmpp-stanzas').first
         
     | 
| 
       14 
14 
     | 
    
         
             
                      condition.name if condition
         
     | 
| 
       15 
15 
     | 
    
         
             
                    end
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       18 
18 
     | 
    
         
             
                  def type
         
     | 
| 
       19 
19 
     | 
    
         
             
                    @error_type ||= stanza.xpath('//error').first.attr('type')
         
     | 
| 
       20 
20 
     | 
    
         
             
                  end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  def text(language=nil) 
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  def text(language=nil)
         
     | 
| 
       23 
23 
     | 
    
         
             
                    if language
         
     | 
| 
       24 
24 
     | 
    
         
             
                      xpath = "//error/text[@xml:lang='#{language}']"
         
     | 
| 
       25 
25 
     | 
    
         
             
                    else
         
     | 
| 
         @@ -27,7 +27,7 @@ module Jubjub 
     | 
|
| 
       27 
27 
     | 
    
         
             
                    end
         
     | 
| 
       28 
28 
     | 
    
         
             
                    stanza.xpath(xpath).text
         
     | 
| 
       29 
29 
     | 
    
         
             
                  end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       31 
31 
     | 
    
         
             
                end
         
     | 
| 
       32 
32 
     | 
    
         
             
              end
         
     | 
| 
       33 
     | 
    
         
            -
            end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -6,39 +6,39 @@ module Jubjub 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  instance_methods.each do |m|
         
     | 
| 
       7 
7 
     | 
    
         
             
                    undef_method(m) if m.to_s !~ /(?:^__|^nil?$|^send$|^object_id$|^should$)/
         
     | 
| 
       8 
8 
     | 
    
         
             
                  end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       10 
10 
     | 
    
         
             
                  attr_reader :proxy_primary, :proxy_secondary
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       12 
12 
     | 
    
         
             
                  def initialize(primary, secondary, primary_method)
         
     | 
| 
       13 
13 
     | 
    
         
             
                    @proxy_primary = primary
         
     | 
| 
       14 
14 
     | 
    
         
             
                    @proxy_secondary = secondary
         
     | 
| 
       15 
15 
     | 
    
         
             
                    @primary_method = primary_method
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
       18 
18 
     | 
    
         
             
                  # We really want to show the secondary object
         
     | 
| 
       19 
19 
     | 
    
         
             
                  # as the primary is just a thin layer on top
         
     | 
| 
       20 
20 
     | 
    
         
             
                  def inspect
         
     | 
| 
       21 
21 
     | 
    
         
             
                    proxy_secondary.inspect
         
     | 
| 
       22 
22 
     | 
    
         
             
                  end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       24 
24 
     | 
    
         
             
                  # Used to give away this is really a proxy
         
     | 
| 
       25 
25 
     | 
    
         
             
                  def proxy_class
         
     | 
| 
       26 
26 
     | 
    
         
             
                    Jubjub::Response::Proxy
         
     | 
| 
       27 
27 
     | 
    
         
             
                  end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       29 
29 
     | 
    
         
             
                private
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
                  def method_missing(name, *args, &block)
         
     | 
| 
       32 
32 
     | 
    
         
             
                    # If the method exists on the primary use that
         
     | 
| 
       33 
33 
     | 
    
         
             
                    # unless it's the method name called to create the proxy from the primary, or is a standard object method
         
     | 
| 
       34 
     | 
    
         
            -
                    if name.to_s != @primary_method && (proxy_primary.public_methods - Object.public_methods).include?( name.to_s )
         
     | 
| 
      
 34 
     | 
    
         
            +
                    if name.to_s != @primary_method && (proxy_primary.public_methods - Object.public_methods).map{|m| m.to_s }.include?( name.to_s )
         
     | 
| 
       35 
35 
     | 
    
         
             
                      proxy_primary.send(name, *args, &block)
         
     | 
| 
       36 
36 
     | 
    
         
             
                    else
         
     | 
| 
       37 
37 
     | 
    
         
             
                    # Else use a method on the secondary
         
     | 
| 
       38 
38 
     | 
    
         
             
                      proxy_secondary.send(name, *args, &block)
         
     | 
| 
       39 
39 
     | 
    
         
             
                    end
         
     | 
| 
       40 
40 
     | 
    
         
             
                  end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
       42 
42 
     | 
    
         
             
                end
         
     | 
| 
       43 
43 
     | 
    
         
             
              end
         
     | 
| 
       44 
     | 
    
         
            -
            end
         
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,33 +1,33 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Jubjub
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       3 
3 
     | 
    
         
             
              class Response
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       5 
5 
     | 
    
         
             
                attr_reader :stanza, :result
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       7 
7 
     | 
    
         
             
                def initialize(xml,&block)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @stanza = xml
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       10 
10 
     | 
    
         
             
                  @result = nil
         
     | 
| 
       11 
11 
     | 
    
         
             
                  @result = yield stanza if block_given?
         
     | 
| 
       12 
12 
     | 
    
         
             
                end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
       14 
14 
     | 
    
         
             
                def proxy_result
         
     | 
| 
       15 
     | 
    
         
            -
                  # Allows some syntax sugar. We can chain from the result, 
     | 
| 
      
 15 
     | 
    
         
            +
                  # Allows some syntax sugar. We can chain from the result,
         
     | 
| 
       16 
16 
     | 
    
         
             
                  # but still get access to the response via the proxy
         
     | 
| 
       17 
17 
     | 
    
         
             
                  @proxy_result ||= Proxy.new self, result, 'proxy_result'
         
     | 
| 
       18 
18 
     | 
    
         
             
                end
         
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       20 
20 
     | 
    
         
             
                def success?
         
     | 
| 
       21 
21 
     | 
    
         
             
                  @success ||= stanza.xpath('/iq[@type="result"]|/iq[@type="set"]|/iq[@type="get"]').any?
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       24 
24 
     | 
    
         
             
                def error
         
     | 
| 
       25 
25 
     | 
    
         
             
                  @errors ||= begin
         
     | 
| 
       26 
26 
     | 
    
         
             
                    s = stanza.at_xpath('/iq[@type="error"]/error')
         
     | 
| 
       27 
27 
     | 
    
         
             
                    Error.new s if s
         
     | 
| 
       28 
28 
     | 
    
         
             
                  end
         
     | 
| 
       29 
29 
     | 
    
         
             
                end
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
       31 
31 
     | 
    
         
             
              end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
       33 
33 
     | 
    
         
             
            end
         
     |