socialcastr 0.2.16 → 0.2.17

Sign up to get free protection for your applications and to get access to all the features.
@@ -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