representative 0.1.1 → 0.1.2

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.markdown CHANGED
@@ -96,7 +96,7 @@ Installation
96
96
 
97
97
  Representative is packaged as a Gem, hosted on [gemcutter](http://gemcutter.org/gems/representative). Install with:
98
98
 
99
- sudo gem install representative --source http://gemcutter.org
99
+ sudo gem install representative
100
100
 
101
101
  Copyright
102
102
  ---------
@@ -1,3 +1,3 @@
1
1
  module Representative
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -8,7 +8,7 @@ module Representative
8
8
 
9
9
  def initialize(xml_builder, subject = nil)
10
10
  @xml = xml_builder
11
- @subject = subject
11
+ @subjects = [subject]
12
12
  yield self if block_given?
13
13
  end
14
14
 
@@ -21,7 +21,7 @@ module Representative
21
21
  end
22
22
 
23
23
  def subject!
24
- @subject
24
+ @subjects.last
25
25
  end
26
26
 
27
27
  def property!(property_name, *args, &block)
@@ -39,18 +39,23 @@ module Representative
39
39
 
40
40
  end
41
41
 
42
- def element!(element_name, value, options, &block)
43
- text = content_generator = nil
44
- if block && value
42
+ def element!(element_name, subject, options, &block)
43
+ content = content_generator = nil
44
+ if block && subject
45
45
  unless block == Representative::EMPTY
46
46
  content_generator = Proc.new do
47
- block.call(Representative::Xml.new(@xml, value))
47
+ @subjects.push(subject)
48
+ begin
49
+ block.call(self)
50
+ ensure
51
+ @subjects.pop
52
+ end
48
53
  end
49
54
  end
50
55
  else
51
- text = value
56
+ content = subject
52
57
  end
53
- tag_args = [text, options].compact
58
+ tag_args = [content, options].compact
54
59
  @xml.tag!(element_name, *tag_args, &content_generator)
55
60
  end
56
61
 
@@ -77,10 +82,16 @@ module Representative
77
82
 
78
83
  end
79
84
 
85
+ def empty!(property_name, *args)
86
+ property!(property_name, *args, &Representative::EMPTY)
87
+ end
88
+
80
89
  private
81
90
 
82
- def resolve(value_generator, subject = @subject)
83
- if value_generator.respond_to?(:to_proc)
91
+ def resolve(value_generator, subject = subject!)
92
+ if value_generator == :self
93
+ subject
94
+ elsif value_generator.respond_to?(:to_proc)
84
95
  value_generator.to_proc.call(subject) if subject
85
96
  else
86
97
  value_generator
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{representative}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Mike Williams"]
12
- s.date = %q{2009-12-02}
12
+ s.date = %q{2009-12-03}
13
13
  s.email = %q{mdub@dogbiscuit.org}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE",
@@ -21,7 +21,7 @@ describe Representative::Xml do
21
21
  describe "for some 'subject'" do
22
22
 
23
23
  before do
24
- @subject = OpenStruct.new(:name => "Fred", :width => 200)
24
+ @subject = OpenStruct.new(:name => "Fred", :width => 200, :vehicle => OpenStruct.new(:year => "1959", :make => "Chevrolet"))
25
25
  @xml_representative = Representative::Xml.new(@xml, @subject)
26
26
  end
27
27
 
@@ -97,6 +97,17 @@ describe Representative::Xml do
97
97
 
98
98
  end
99
99
 
100
+ describe "with argument :self" do
101
+
102
+ it "doesn't alter the subject" do
103
+ represent.info(:self) do |info|
104
+ info.name
105
+ end
106
+ resulting_xml.should == %(<info><name>Fred</name></info>)
107
+ end
108
+
109
+ end
110
+
100
111
  describe "with a nil argument" do
101
112
 
102
113
  it "builds an empty element" do
@@ -129,7 +140,6 @@ describe Representative::Xml do
129
140
  describe "with a block" do
130
141
 
131
142
  it "generates nested elements" do
132
- @subject.vehicle = OpenStruct.new(:year => "1959", :make => "Chevrolet")
133
143
  represent.vehicle do |vehicle|
134
144
  vehicle.year
135
145
  vehicle.make
@@ -139,18 +149,17 @@ describe Representative::Xml do
139
149
 
140
150
  end
141
151
 
142
- describe "with Representative::Empty" do
152
+ end
143
153
 
144
- it "generates an empty element" do
145
- @subject.vehicle = OpenStruct.new(:year => "1959", :make => "Chevrolet")
146
- represent.vehicle(:year => :year, &Representative::EMPTY)
147
- resulting_xml.should == %(<vehicle year="1959"/>)
148
- end
149
-
154
+ describe "#empty!" do
155
+
156
+ it "generates an empty element" do
157
+ represent.empty!(:vehicle, :year => :year)
158
+ resulting_xml.should == %(<vehicle year="1959"/>)
150
159
  end
151
160
 
152
161
  end
153
-
162
+
154
163
  describe "#list_of!" do
155
164
 
156
165
  before do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: representative
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Williams
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-02 00:00:00 +11:00
12
+ date: 2009-12-03 00:00:00 +11:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency