socialcastr 0.2.16 → 0.2.17

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.
@@ -89,6 +89,7 @@ module Socialcastr
89
89
  @data[method_name(method.to_s.sub(/=$/,''))] = args.first
90
90
  else
91
91
  obj = @data[method_name(method)]
92
+ return nil unless obj
92
93
  unless new?
93
94
  self.class.set_prefix_options(obj, to_prefix_options)
94
95
  end
@@ -36,9 +36,9 @@ module Socialcastr
36
36
  end
37
37
 
38
38
  def start_element name, attrs = []
39
- return nil_element! if name.contains_dot? # [FIXME] we can't evaluate strings inside elements like <html.title>
39
+ return nil_element! if unsupported?(name)
40
40
  type = parse_attrs_and_get_type(attrs)
41
- return if nil_element?
41
+ return nil_element! if type.nil?
42
42
  push_element(type)
43
43
  end
44
44
 
@@ -53,7 +53,8 @@ module Socialcastr
53
53
  (value, type) = pop_element
54
54
  case type
55
55
  when HASH
56
- element = element_class(name).from_hash(value || {})
56
+ return nil unless value
57
+ element = element_class(name).from_hash(value)
57
58
  when INTEGER
58
59
  element = value.to_i
59
60
  when BOOLEAN
@@ -73,12 +74,12 @@ module Socialcastr
73
74
 
74
75
  private
75
76
 
77
+ def unsupported?(name)
78
+ name.contains_dot?
79
+ end
80
+
76
81
  def element_class(name)
77
- if RUBY_VERSION < '1.9'
78
- Socialcastr.const_get(Socialcastr.to_class_name(name))
79
- else
80
- Socialcastr.const_get(Socialcastr.to_class_name(name), false)
81
- end
82
+ Socialcastr.get_element_class(Socialcastr.to_class_name(name))
82
83
  end
83
84
 
84
85
  def container_type
@@ -103,7 +104,7 @@ module Socialcastr
103
104
 
104
105
  def parse_attrs_and_get_type(attribute_array=[])
105
106
  attributes = attribute_array.to_attribute_hash
106
- return nil_element! if attributes["nil"]
107
+ return nil if attributes["nil"]
107
108
  attributes["type"] ? attributes["type"] : HASH
108
109
  end
109
110
 
@@ -1,3 +1,3 @@
1
1
  module Socialcastr
2
- VERSION = "0.2.16"
2
+ VERSION = "0.2.17"
3
3
  end
data/lib/socialcastr.rb CHANGED
@@ -70,7 +70,20 @@ module Socialcastr
70
70
  method.to_s.gsub(/^[a-z]|-[a-z]/i) { |a| a.sub("-", '').upcase }
71
71
  end
72
72
 
73
+ def get_element_class(class_name)
74
+ define_element_class(class_name) unless Socialcastr.const_defined?(class_name)
75
+ if RUBY_VERSION < '1.9'
76
+ Socialcastr.const_get(class_name)
77
+ else
78
+ Socialcastr.const_get(class_name, false)
79
+ end
80
+ end
81
+
73
82
  def const_missing(class_name)
83
+ define_element_class(class_name)
84
+ end
85
+
86
+ def define_element_class(class_name)
74
87
  Socialcastr.const_set(class_name, Class.new(Socialcastr::Base))
75
88
  end
76
89
  end
@@ -8,15 +8,15 @@ describe Socialcastr::SAX::ActiveResource do
8
8
  end
9
9
 
10
10
  context "an empty document with a root 'message' element" do
11
- it "should return a Message object" do
11
+ it "should return a nil object" do
12
12
  xml = "<message></message>"
13
13
  @parser.parse(xml)
14
- @active_resource.data.class.should == Socialcastr::Message
14
+ @active_resource.data.should be_nil
15
15
  end
16
16
  end
17
17
  context "a document with a nil element" do
18
18
  it "should make the nil element accessible" do
19
- xml = "<message><rating nil=\"true\"></rating></message>"
19
+ xml = "<message><id>1</id><rating nil=\"true\"></rating></message>"
20
20
  @parser.parse(xml)
21
21
  @active_resource.data.rating.should be_nil
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: socialcastr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.16
4
+ version: 0.2.17
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-08 00:00:00.000000000 +01:00
12
+ date: 2011-10-03 00:00:00.000000000 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &2152947880 !ruby/object:Gem::Requirement
17
+ requirement: &2152777920 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0.8'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *2152947880
25
+ version_requirements: *2152777920
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rspec
28
- requirement: &2153031760 !ruby/object:Gem::Requirement
28
+ requirement: &2152915220 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '2.5'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *2153031760
36
+ version_requirements: *2152915220
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: yard
39
- requirement: &2153137260 !ruby/object:Gem::Requirement
39
+ requirement: &2152982900 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2153137260
47
+ version_requirements: *2152982900
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: artifice
50
- requirement: &2160224120 !ruby/object:Gem::Requirement
50
+ requirement: &2152992820 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2160224120
58
+ version_requirements: *2152992820
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: nokogiri
61
- requirement: &2160560720 !ruby/object:Gem::Requirement
61
+ requirement: &2152996040 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: 1.4.4
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *2160560720
69
+ version_requirements: *2152996040
70
70
  description: A Ruby wrapper for the Socialcast REST API
71
71
  email:
72
72
  - bru@codewitch.org