blather 0.4.16 → 0.5.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.
Files changed (62) hide show
  1. data/.gemtest +0 -0
  2. data/CHANGELOG +12 -5
  3. data/README.md +1 -1
  4. data/Rakefile +1 -3
  5. data/blather.gemspec +11 -24
  6. data/examples/echo.rb +1 -0
  7. data/examples/execute.rb +1 -0
  8. data/examples/ping_pong.rb +1 -0
  9. data/examples/print_hierarchy.rb +1 -0
  10. data/examples/rosterprint.rb +1 -0
  11. data/examples/stream_only.rb +1 -0
  12. data/examples/xmpp4r/echo.rb +1 -0
  13. data/lib/blather.rb +5 -1
  14. data/lib/blather/client/client.rb +29 -154
  15. data/lib/blather/client/dsl.rb +9 -3
  16. data/lib/blather/client/dsl/pubsub.rb +2 -0
  17. data/lib/blather/core_ext/eventmachine.rb +4 -1
  18. data/lib/blather/core_ext/ipaddr.rb +2 -1
  19. data/lib/blather/core_ext/nokogiri.rb +3 -1
  20. data/lib/blather/errors/sasl_error.rb +1 -0
  21. data/lib/blather/errors/stanza_error.rb +3 -1
  22. data/lib/blather/errors/stream_error.rb +1 -0
  23. data/lib/blather/file_transfer.rb +4 -1
  24. data/lib/blather/file_transfer/s5b.rb +3 -4
  25. data/lib/blather/jid.rb +2 -0
  26. data/lib/blather/roster_item.rb +13 -3
  27. data/lib/blather/stanza.rb +11 -3
  28. data/lib/blather/stanza/disco/capabilities.rb +161 -0
  29. data/lib/blather/stanza/disco/disco_info.rb +3 -1
  30. data/lib/blather/stanza/disco/disco_items.rb +0 -1
  31. data/lib/blather/stanza/iq.rb +8 -2
  32. data/lib/blather/stanza/iq/command.rb +18 -3
  33. data/lib/blather/stanza/iq/ibb.rb +6 -3
  34. data/lib/blather/stanza/iq/s5b.rb +6 -3
  35. data/lib/blather/stanza/iq/si.rb +6 -1
  36. data/lib/blather/stanza/iq/vcard.rb +3 -1
  37. data/lib/blather/stanza/message.rb +5 -0
  38. data/lib/blather/stanza/presence.rb +1 -0
  39. data/lib/blather/stanza/presence/c.rb +1 -0
  40. data/lib/blather/stanza/presence/status.rb +1 -0
  41. data/lib/blather/stanza/pubsub/event.rb +2 -4
  42. data/lib/blather/stanza/pubsub/subscription.rb +1 -0
  43. data/lib/blather/stanza/x.rb +8 -0
  44. data/lib/blather/stream.rb +2 -0
  45. data/lib/blather/stream/client.rb +1 -0
  46. data/lib/blather/stream/component.rb +1 -0
  47. data/lib/blather/stream/features.rb +4 -3
  48. data/lib/blather/stream/features/resource.rb +4 -3
  49. data/lib/blather/stream/features/sasl.rb +9 -6
  50. data/lib/blather/stream/features/session.rb +5 -4
  51. data/lib/blather/stream/features/tls.rb +4 -3
  52. data/lib/blather/stream/parser.rb +4 -5
  53. data/lib/blather/version.rb +2 -1
  54. data/lib/blather/xmpp_node.rb +9 -0
  55. data/spec/blather/client/client_spec.rb +14 -1
  56. data/spec/blather/stanza/iq_spec.rb +16 -0
  57. data/spec/blather/stanza/presence_spec.rb +1 -1
  58. data/spec/blather/stanza_spec.rb +18 -0
  59. data/spec/blather/stream/client_spec.rb +2 -2
  60. metadata +52 -35
  61. data/lib/blather/core_ext/active_support.rb +0 -45
  62. data/lib/blather/core_ext/active_support/inheritable_attributes.rb +0 -117
@@ -1,117 +0,0 @@
1
- # Thanks to Rails ActiveSupport for everything in this file
2
-
3
- # Allows attributes to be shared within an inheritance hierarchy, but where each descendant gets a copy of
4
- # their parents' attributes, instead of just a pointer to the same. This means that the child can add elements
5
- # to, for example, an array without those additions being shared with either their parent, siblings, or
6
- # children, which is unlike the regular class-level attributes that are shared across the entire hierarchy.
7
- class Class # @private
8
- def class_inheritable_reader(*syms)
9
- syms.each do |sym|
10
- next if sym.is_a?(Hash)
11
- class_eval <<-EOS
12
- def self.#{sym}
13
- read_inheritable_attribute(:#{sym})
14
- end
15
-
16
- def #{sym}
17
- self.class.#{sym}
18
- end
19
- EOS
20
- end
21
- end
22
-
23
- def class_inheritable_writer(*syms)
24
- syms.each do |sym|
25
- class_eval <<-EOS
26
- def self.#{sym}=(obj)
27
- write_inheritable_attribute(:#{sym}, obj)
28
- end
29
- EOS
30
- end
31
- end
32
-
33
- def class_inheritable_array_writer(*syms)
34
- syms.each do |sym|
35
- class_eval <<-EOS
36
- def self.#{sym}=(obj)
37
- write_inheritable_array(:#{sym}, obj)
38
- end
39
- EOS
40
- end
41
- end
42
-
43
- def class_inheritable_hash_writer(*syms)
44
- syms.each do |sym|
45
- class_eval <<-EOS
46
- def self.#{sym}=(obj)
47
- write_inheritable_hash(:#{sym}, obj)
48
- end
49
- EOS
50
- end
51
- end
52
-
53
- def class_inheritable_accessor(*syms)
54
- class_inheritable_reader(*syms)
55
- class_inheritable_writer(*syms)
56
- end
57
-
58
- def class_inheritable_array(*syms)
59
- class_inheritable_reader(*syms)
60
- class_inheritable_array_writer(*syms)
61
- end
62
-
63
- def class_inheritable_hash(*syms)
64
- class_inheritable_reader(*syms)
65
- class_inheritable_hash_writer(*syms)
66
- end
67
-
68
- def inheritable_attributes
69
- @inheritable_attributes ||= EMPTY_INHERITABLE_ATTRIBUTES
70
- end
71
-
72
- def write_inheritable_attribute(key, value)
73
- if inheritable_attributes.equal?(EMPTY_INHERITABLE_ATTRIBUTES)
74
- @inheritable_attributes = {}
75
- end
76
- inheritable_attributes[key] = value
77
- end
78
-
79
- def write_inheritable_array(key, elements)
80
- write_inheritable_attribute(key, []) if read_inheritable_attribute(key).nil?
81
- write_inheritable_attribute(key, read_inheritable_attribute(key) + elements)
82
- end
83
-
84
- def write_inheritable_hash(key, hash)
85
- write_inheritable_attribute(key, {}) if read_inheritable_attribute(key).nil?
86
- write_inheritable_attribute(key, read_inheritable_attribute(key).merge(hash))
87
- end
88
-
89
- def read_inheritable_attribute(key)
90
- inheritable_attributes[key]
91
- end
92
-
93
- def reset_inheritable_attributes
94
- @inheritable_attributes = EMPTY_INHERITABLE_ATTRIBUTES
95
- end
96
-
97
- private
98
- # Prevent this constant from being created multiple times
99
- EMPTY_INHERITABLE_ATTRIBUTES = {}.freeze unless const_defined?(:EMPTY_INHERITABLE_ATTRIBUTES)
100
-
101
- def inherited_with_inheritable_attributes(child)
102
- inherited_without_inheritable_attributes(child) if respond_to?(:inherited_without_inheritable_attributes)
103
-
104
- if inheritable_attributes.equal?(EMPTY_INHERITABLE_ATTRIBUTES)
105
- new_inheritable_attributes = EMPTY_INHERITABLE_ATTRIBUTES
106
- else
107
- new_inheritable_attributes = inheritable_attributes.inject({}) do |memo, (key, value)|
108
- memo.update(key => value.duplicable? ? value.dup : value)
109
- end
110
- end
111
-
112
- child.instance_variable_set('@inheritable_attributes', new_inheritable_attributes)
113
- end
114
-
115
- alias inherited_without_inheritable_attributes inherited
116
- alias inherited inherited_with_inheritable_attributes
117
- end # Class