representative 0.3.6 → 1.0.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.
- data/README.markdown +33 -5
- data/examples/{xml_demo.rb → books.rb} +15 -8
- data/lib/representative/json.rb +20 -20
- data/lib/representative/version.rb +1 -1
- data/spec/representative/xml_behaviour.rb +32 -18
- metadata +78 -86
- data/examples/json_demo.rb +0 -44
data/README.markdown
CHANGED
@@ -11,23 +11,23 @@ Generating XML
|
|
11
11
|
Given a Ruby data-structure:
|
12
12
|
|
13
13
|
@books = [
|
14
|
-
|
14
|
+
Book.new(
|
15
15
|
:title => "Sailing for old dogs",
|
16
16
|
:authors => ["Jim Watson"],
|
17
|
-
:published =>
|
17
|
+
:published => Publication.new(
|
18
18
|
:by => "Credulous Print",
|
19
19
|
:year => 1994
|
20
20
|
)
|
21
21
|
),
|
22
|
-
|
22
|
+
Book.new(
|
23
23
|
:title => "On the horizon",
|
24
24
|
:authors => ["Zoe Primpton", "Stan Ford"],
|
25
|
-
:published =>
|
25
|
+
:published => Publication.new(
|
26
26
|
:by => "McGraw-Hill",
|
27
27
|
:year => 2005
|
28
28
|
)
|
29
29
|
),
|
30
|
-
|
30
|
+
Book.new(
|
31
31
|
:title => "The Little Blue Book of VHS Programming",
|
32
32
|
:authors => ["Henry Nelson"],
|
33
33
|
:rating => "****"
|
@@ -152,7 +152,35 @@ Representative is packaged as a Gem. Install with:
|
|
152
152
|
|
153
153
|
gem install representative
|
154
154
|
|
155
|
+
Ruby on Rails integration
|
156
|
+
-------------------------
|
157
|
+
|
158
|
+
A separate gem, [RepresentativeView](https://github.com/mdub/representative_view), integrates Representative as an ActionPack template format.
|
159
|
+
|
160
|
+
Tilt integration
|
161
|
+
----------------
|
162
|
+
|
163
|
+
Representative includes integration with [Tilt](https://github.com/rtomayko/tilt), which can be enabled with:
|
164
|
+
|
165
|
+
require "representative/tilt_integration"
|
166
|
+
|
167
|
+
This registers handlers for "`.xml.rep`" and "`.json.rep`" templates.
|
168
|
+
|
155
169
|
Copyright
|
156
170
|
---------
|
157
171
|
|
158
172
|
Copyright (c) 2009 Mike Williams. See LICENSE for details.
|
173
|
+
|
174
|
+
Similar projects
|
175
|
+
----------------
|
176
|
+
|
177
|
+
If Representative is not your cup of tea, you may prefer:
|
178
|
+
|
179
|
+
* [Tokamak](https://github.com/abril/tokamak)
|
180
|
+
* [Builder](http://rubygems.org/gems/builder)
|
181
|
+
* [JSONify](https://github.com/bsiggelkow/jsonify)
|
182
|
+
* [Argonaut](https://github.com/jbr/argonaut)
|
183
|
+
* [JSON Builder](https://github.com/dewski/json_builder)
|
184
|
+
* [RABL](https://github.com/nesquena/rabl)
|
185
|
+
|
186
|
+
Just don't go back to using "`this_thing.to_xml`" and "`that_thing.to_json`", m'kay?
|
@@ -1,12 +1,10 @@
|
|
1
|
-
|
1
|
+
#! /usr/bin/env ruby
|
2
2
|
|
3
|
-
require "rubygems"
|
4
|
-
require "representative/nokogiri"
|
5
3
|
require "ostruct"
|
6
4
|
|
7
5
|
@books = [
|
8
6
|
OpenStruct.new(
|
9
|
-
:title => "Sailing for old dogs",
|
7
|
+
:title => "Sailing for old dogs",
|
10
8
|
:authors => ["Jim Watson"],
|
11
9
|
:published => OpenStruct.new(
|
12
10
|
:by => "Credulous Print",
|
@@ -14,7 +12,7 @@ require "ostruct"
|
|
14
12
|
)
|
15
13
|
),
|
16
14
|
OpenStruct.new(
|
17
|
-
:title => "On the horizon",
|
15
|
+
:title => "On the horizon",
|
18
16
|
:authors => ["Zoe Primpton", "Stan Ford"],
|
19
17
|
:published => OpenStruct.new(
|
20
18
|
:by => "McGraw-Hill",
|
@@ -28,8 +26,10 @@ require "ostruct"
|
|
28
26
|
)
|
29
27
|
]
|
30
28
|
|
31
|
-
|
29
|
+
require "representative/json"
|
30
|
+
require "representative/nokogiri"
|
32
31
|
|
32
|
+
def represent_books(r)
|
33
33
|
r.list_of :books, @books do
|
34
34
|
r.element :title
|
35
35
|
r.list_of :authors
|
@@ -38,7 +38,14 @@ xml = Representative::Nokogiri.new do |r|
|
|
38
38
|
r.element :year
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
41
|
end
|
43
42
|
|
44
|
-
puts
|
43
|
+
puts "\n=== JSON ===\n\n"
|
44
|
+
|
45
|
+
json = Representative::Json.new.tap { |r| represent_books(r) }.to_s
|
46
|
+
puts json
|
47
|
+
|
48
|
+
puts "\n=== XML ===\n\n"
|
49
|
+
|
50
|
+
xml = Representative::Nokogiri.new.tap { |r| represent_books(r) }.to_s
|
51
|
+
puts xml
|
data/lib/representative/json.rb
CHANGED
@@ -3,11 +3,11 @@ require "representative/base"
|
|
3
3
|
require "multi_json"
|
4
4
|
|
5
5
|
module Representative
|
6
|
-
|
6
|
+
|
7
7
|
class Json < Base
|
8
8
|
|
9
9
|
DEFAULT_ATTRIBUTE_PREFIX = "@".freeze
|
10
|
-
|
10
|
+
|
11
11
|
def initialize(subject = nil, options = {})
|
12
12
|
super(subject, options)
|
13
13
|
@buffer = ""
|
@@ -16,19 +16,19 @@ module Representative
|
|
16
16
|
now_at :beginning_of_buffer
|
17
17
|
yield self if block_given?
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
attr_reader :attribute_prefix
|
21
|
-
|
21
|
+
|
22
22
|
def element(name, *args, &block)
|
23
23
|
|
24
24
|
metadata = @inspector.get_metadata(current_subject, name)
|
25
25
|
attributes = args.extract_options!.merge(metadata)
|
26
26
|
|
27
|
-
subject_of_element = if args.empty?
|
27
|
+
subject_of_element = if args.empty?
|
28
28
|
lambda do |subject|
|
29
29
|
@inspector.get_value(current_subject, name)
|
30
30
|
end
|
31
|
-
else
|
31
|
+
else
|
32
32
|
args.shift
|
33
33
|
end
|
34
34
|
|
@@ -36,13 +36,13 @@ module Representative
|
|
36
36
|
|
37
37
|
label(name)
|
38
38
|
value(subject_of_element, attributes, &block)
|
39
|
-
|
39
|
+
|
40
40
|
end
|
41
41
|
|
42
42
|
def attribute(name, value_generator = name)
|
43
43
|
element(attribute_prefix + name.to_s, value_generator)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def list_of(name, *args, &block)
|
47
47
|
options = args.extract_options!
|
48
48
|
list_subject = args.empty? ? name : args.shift
|
@@ -60,7 +60,7 @@ module Representative
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
def value(subject, attributes = {})
|
65
65
|
representing(subject) do
|
66
66
|
if block_given? && !current_subject.nil?
|
@@ -76,23 +76,23 @@ module Representative
|
|
76
76
|
end
|
77
77
|
now_at :end_of_item
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
def comment(text)
|
81
81
|
new_item
|
82
|
-
emit("//
|
82
|
+
emit("// " + text)
|
83
83
|
now_at :end_of_comment
|
84
84
|
end
|
85
85
|
|
86
86
|
def to_json
|
87
87
|
@buffer + "\n"
|
88
88
|
end
|
89
|
-
|
89
|
+
|
90
90
|
def to_s
|
91
91
|
to_json
|
92
92
|
end
|
93
93
|
|
94
94
|
private
|
95
|
-
|
95
|
+
|
96
96
|
def emit(s)
|
97
97
|
@buffer << s
|
98
98
|
end
|
@@ -100,7 +100,7 @@ module Representative
|
|
100
100
|
def encode(data)
|
101
101
|
MultiJson.encode(data)
|
102
102
|
end
|
103
|
-
|
103
|
+
|
104
104
|
def indentation
|
105
105
|
(" " * @indent_level)
|
106
106
|
end
|
@@ -108,7 +108,7 @@ module Representative
|
|
108
108
|
def label(name)
|
109
109
|
return false if @indent_level == 0
|
110
110
|
new_item
|
111
|
-
emit(
|
111
|
+
emit(encode(format_name(name)) + ": ")
|
112
112
|
end
|
113
113
|
|
114
114
|
def new_item
|
@@ -117,14 +117,14 @@ module Representative
|
|
117
117
|
emit(indentation)
|
118
118
|
@pending_comma = ","
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
def inside(opening_char, closing_char)
|
122
122
|
emit(opening_char)
|
123
123
|
@indent_level += 1
|
124
124
|
now_at :beginning_of_block
|
125
125
|
yield
|
126
126
|
@indent_level -= 1
|
127
|
-
emit("\n
|
127
|
+
emit("\n" + indentation) unless at? :beginning_of_block
|
128
128
|
emit(closing_char)
|
129
129
|
now_at :end_of_item
|
130
130
|
end
|
@@ -136,9 +136,9 @@ module Representative
|
|
136
136
|
def at?(state)
|
137
137
|
@state == state
|
138
138
|
end
|
139
|
-
|
139
|
+
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
JSON = Json
|
143
|
-
|
143
|
+
|
144
144
|
end
|
@@ -8,15 +8,15 @@ shared_examples_for "an XML Representative" do
|
|
8
8
|
|
9
9
|
before do
|
10
10
|
@subject = OpenStruct.new(
|
11
|
-
:name => "Fred",
|
12
|
-
:full_name => "Fredrick",
|
13
|
-
:width => 200,
|
11
|
+
:name => "Fred",
|
12
|
+
:full_name => "Fredrick",
|
13
|
+
:width => 200,
|
14
14
|
:vehicle => OpenStruct.new(:year => "1959", :make => "Chevrolet")
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
18
18
|
describe "#element" do
|
19
|
-
|
19
|
+
|
20
20
|
it "generates an element with content extracted from the subject" do
|
21
21
|
r.element :name
|
22
22
|
resulting_xml.should == %(<name>Fred</name>)
|
@@ -77,7 +77,7 @@ shared_examples_for "an XML Representative" do
|
|
77
77
|
|
78
78
|
end
|
79
79
|
|
80
|
-
describe "with a Symbol argument" do
|
80
|
+
describe "with a Symbol value argument" do
|
81
81
|
|
82
82
|
it "calls the named method to generate a value" do
|
83
83
|
r.element :name, :width
|
@@ -103,7 +103,7 @@ shared_examples_for "an XML Representative" do
|
|
103
103
|
end
|
104
104
|
resulting_xml.should == %(<info><name>Fred</name></info>)
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
end
|
108
108
|
|
109
109
|
describe "with value argument nil" do
|
@@ -169,7 +169,7 @@ shared_examples_for "an XML Representative" do
|
|
169
169
|
end
|
170
170
|
|
171
171
|
end
|
172
|
-
|
172
|
+
|
173
173
|
describe "#list_of" do
|
174
174
|
|
175
175
|
before do
|
@@ -181,8 +181,22 @@ shared_examples_for "an XML Representative" do
|
|
181
181
|
resulting_xml.should == %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
|
182
182
|
end
|
183
183
|
|
184
|
+
describe "with a Symbol value argument" do
|
185
|
+
|
186
|
+
it "calls the named method to generate a value" do
|
187
|
+
r.list_of(:foo_bars, :nick_names)
|
188
|
+
resulting_xml.should == %(<foo-bars type="array"><foo-bar>Freddie</foo-bar><foo-bar>Knucklenose</foo-bar></foo-bars>)
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
it "generates an array element" do
|
194
|
+
r.list_of(:nick_names)
|
195
|
+
resulting_xml.should == %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
|
196
|
+
end
|
197
|
+
|
184
198
|
describe "with :list_attributes" do
|
185
|
-
|
199
|
+
|
186
200
|
it "attaches attributes to the array element" do
|
187
201
|
r.list_of(:nick_names, :list_attributes => {:color => "blue", :size => :size})
|
188
202
|
array_element_attributes = REXML::Document.new(resulting_xml).root.attributes
|
@@ -191,7 +205,7 @@ shared_examples_for "an XML Representative" do
|
|
191
205
|
array_element_attributes["size"].should == "2"
|
192
206
|
array_element_attributes.size.should == 3
|
193
207
|
end
|
194
|
-
|
208
|
+
|
195
209
|
end
|
196
210
|
|
197
211
|
describe "with :item_attributes" do
|
@@ -200,7 +214,7 @@ shared_examples_for "an XML Representative" do
|
|
200
214
|
r.list_of(:nick_names, :item_attributes => {:length => :size})
|
201
215
|
resulting_xml.should == %(<nick-names type="array"><nick-name length="7">Freddie</nick-name><nick-name length="11">Knucklenose</nick-name></nick-names>)
|
202
216
|
end
|
203
|
-
|
217
|
+
|
204
218
|
end
|
205
219
|
|
206
220
|
describe "with an explicit :item_name" do
|
@@ -238,41 +252,41 @@ shared_examples_for "an XML Representative" do
|
|
238
252
|
r.list_of(:nick_names, :item_attributes => {:value => :to_s}, &r.empty)
|
239
253
|
resulting_xml.should == %(<nick-names type="array"><nick-name value="Freddie"/><nick-name value="Knucklenose"/></nick-names>)
|
240
254
|
end
|
241
|
-
|
255
|
+
|
242
256
|
end
|
243
|
-
|
257
|
+
|
244
258
|
describe "with :item_attributes AND block" do
|
245
|
-
|
259
|
+
|
246
260
|
it "generates attributes and nested elements" do
|
247
261
|
r.list_of(:nick_names, :item_attributes => {:length => :size}) do
|
248
262
|
r.element :reverse
|
249
263
|
end
|
250
264
|
resulting_xml.should == %(<nick-names type="array"><nick-name length="7"><reverse>eidderF</reverse></nick-name><nick-name length="11"><reverse>esonelkcunK</reverse></nick-name></nick-names>)
|
251
265
|
end
|
252
|
-
|
266
|
+
|
253
267
|
end
|
254
268
|
|
255
269
|
end
|
256
270
|
|
257
271
|
describe "#representing" do
|
258
|
-
|
272
|
+
|
259
273
|
it "selects a new subject without generating an element" do
|
260
274
|
r.representing :vehicle do
|
261
275
|
r.element :make
|
262
276
|
end
|
263
277
|
resulting_xml.should == %(<make>Chevrolet</make>)
|
264
278
|
end
|
265
|
-
|
279
|
+
|
266
280
|
end
|
267
281
|
|
268
282
|
describe "#comment" do
|
269
|
-
|
283
|
+
|
270
284
|
it "inserts a comment" do
|
271
285
|
r.element :vehicle do
|
272
286
|
r.comment "Year of manufacture"
|
273
287
|
r.element :year
|
274
288
|
end
|
275
|
-
resulting_xml.should ==
|
289
|
+
resulting_xml.should ==
|
276
290
|
%(<vehicle><!-- Year of manufacture --><year>1959</year></vehicle>)
|
277
291
|
end
|
278
292
|
|
metadata
CHANGED
@@ -1,125 +1,121 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: representative
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.3.6
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Mike Williams
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-09-06 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: activesupport
|
17
|
-
requirement: &
|
16
|
+
requirement: &70241309663160 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
|
-
requirements:
|
20
|
-
- -
|
21
|
-
- !ruby/object:Gem::Version
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
22
21
|
version: 2.2.2
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *70241309663160
|
25
|
+
- !ruby/object:Gem::Dependency
|
27
26
|
name: i18n
|
28
|
-
requirement: &
|
27
|
+
requirement: &70241309662120 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
33
32
|
version: 0.4.1
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
|
-
version_requirements: *
|
37
|
-
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: *70241309662120
|
36
|
+
- !ruby/object:Gem::Dependency
|
38
37
|
name: builder
|
39
|
-
requirement: &
|
38
|
+
requirement: &70241309661380 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
44
43
|
version: 2.1.2
|
45
44
|
type: :runtime
|
46
45
|
prerelease: false
|
47
|
-
version_requirements: *
|
48
|
-
- !ruby/object:Gem::Dependency
|
46
|
+
version_requirements: *70241309661380
|
47
|
+
- !ruby/object:Gem::Dependency
|
49
48
|
name: multi_json
|
50
|
-
requirement: &
|
49
|
+
requirement: &70241309660480 !ruby/object:Gem::Requirement
|
51
50
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
55
54
|
version: 0.0.5
|
56
55
|
type: :runtime
|
57
56
|
prerelease: false
|
58
|
-
version_requirements: *
|
59
|
-
- !ruby/object:Gem::Dependency
|
57
|
+
version_requirements: *70241309660480
|
58
|
+
- !ruby/object:Gem::Dependency
|
60
59
|
name: rake
|
61
|
-
requirement: &
|
60
|
+
requirement: &70241309659680 !ruby/object:Gem::Requirement
|
62
61
|
none: false
|
63
|
-
requirements:
|
62
|
+
requirements:
|
64
63
|
- - ~>
|
65
|
-
- !ruby/object:Gem::Version
|
64
|
+
- !ruby/object:Gem::Version
|
66
65
|
version: 0.8.7
|
67
66
|
type: :development
|
68
67
|
prerelease: false
|
69
|
-
version_requirements: *
|
70
|
-
- !ruby/object:Gem::Dependency
|
68
|
+
version_requirements: *70241309659680
|
69
|
+
- !ruby/object:Gem::Dependency
|
71
70
|
name: rspec
|
72
|
-
requirement: &
|
71
|
+
requirement: &70241309658960 !ruby/object:Gem::Requirement
|
73
72
|
none: false
|
74
|
-
requirements:
|
73
|
+
requirements:
|
75
74
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
75
|
+
- !ruby/object:Gem::Version
|
77
76
|
version: 2.5.0
|
78
77
|
type: :development
|
79
78
|
prerelease: false
|
80
|
-
version_requirements: *
|
81
|
-
- !ruby/object:Gem::Dependency
|
79
|
+
version_requirements: *70241309658960
|
80
|
+
- !ruby/object:Gem::Dependency
|
82
81
|
name: tilt
|
83
|
-
requirement: &
|
82
|
+
requirement: &70241309658220 !ruby/object:Gem::Requirement
|
84
83
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0.9'
|
89
88
|
type: :development
|
90
89
|
prerelease: false
|
91
|
-
version_requirements: *
|
92
|
-
- !ruby/object:Gem::Dependency
|
90
|
+
version_requirements: *70241309658220
|
91
|
+
- !ruby/object:Gem::Dependency
|
93
92
|
name: nokogiri
|
94
|
-
requirement: &
|
93
|
+
requirement: &70241309657400 !ruby/object:Gem::Requirement
|
95
94
|
none: false
|
96
|
-
requirements:
|
95
|
+
requirements:
|
97
96
|
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
97
|
+
- !ruby/object:Gem::Version
|
99
98
|
version: 1.4.2
|
100
99
|
type: :development
|
101
100
|
prerelease: false
|
102
|
-
version_requirements: *
|
103
|
-
- !ruby/object:Gem::Dependency
|
101
|
+
version_requirements: *70241309657400
|
102
|
+
- !ruby/object:Gem::Dependency
|
104
103
|
name: diff-lcs
|
105
|
-
requirement: &
|
104
|
+
requirement: &70241309656760 !ruby/object:Gem::Requirement
|
106
105
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version:
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
111
110
|
type: :development
|
112
111
|
prerelease: false
|
113
|
-
version_requirements: *
|
112
|
+
version_requirements: *70241309656760
|
114
113
|
description:
|
115
114
|
email: mdub@dogbiscuit.org
|
116
115
|
executables: []
|
117
|
-
|
118
116
|
extensions: []
|
119
|
-
|
120
117
|
extra_rdoc_files: []
|
121
|
-
|
122
|
-
files:
|
118
|
+
files:
|
123
119
|
- lib/representative/abstract_xml.rb
|
124
120
|
- lib/representative/base.rb
|
125
121
|
- lib/representative/empty.rb
|
@@ -130,8 +126,7 @@ files:
|
|
130
126
|
- lib/representative/version.rb
|
131
127
|
- lib/representative/xml.rb
|
132
128
|
- lib/representative.rb
|
133
|
-
- examples/
|
134
|
-
- examples/xml_demo.rb
|
129
|
+
- examples/books.rb
|
135
130
|
- README.markdown
|
136
131
|
- LICENSE
|
137
132
|
- spec/representative/json_spec.rb
|
@@ -143,38 +138,35 @@ files:
|
|
143
138
|
- Rakefile
|
144
139
|
homepage: http://github.com/mdub/representative
|
145
140
|
licenses: []
|
146
|
-
|
147
141
|
post_install_message:
|
148
142
|
rdoc_options: []
|
149
|
-
|
150
|
-
require_paths:
|
143
|
+
require_paths:
|
151
144
|
- lib
|
152
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
146
|
none: false
|
154
|
-
requirements:
|
155
|
-
- -
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
|
158
|
-
segments:
|
147
|
+
requirements:
|
148
|
+
- - ! '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
segments:
|
159
152
|
- 0
|
160
|
-
|
161
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
hash: -2883973472066778787
|
154
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
155
|
none: false
|
163
|
-
requirements:
|
164
|
-
- -
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
|
167
|
-
segments:
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
segments:
|
168
161
|
- 0
|
169
|
-
|
162
|
+
hash: -2883973472066778787
|
170
163
|
requirements: []
|
171
|
-
|
172
164
|
rubyforge_project:
|
173
|
-
rubygems_version: 1.
|
165
|
+
rubygems_version: 1.8.10
|
174
166
|
signing_key:
|
175
167
|
specification_version: 3
|
176
168
|
summary: Builds XML and JSON representations of your Ruby objects
|
177
|
-
test_files:
|
169
|
+
test_files:
|
178
170
|
- spec/representative/json_spec.rb
|
179
171
|
- spec/representative/nokogiri_spec.rb
|
180
172
|
- spec/representative/tilt_integration_spec.rb
|
data/examples/json_demo.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
-
|
3
|
-
require "rubygems"
|
4
|
-
require "representative/json"
|
5
|
-
require "ostruct"
|
6
|
-
|
7
|
-
@books = [
|
8
|
-
OpenStruct.new(
|
9
|
-
:title => "Sailing for old dogs",
|
10
|
-
:authors => ["Jim Watson"],
|
11
|
-
:published => OpenStruct.new(
|
12
|
-
:by => "Credulous Print",
|
13
|
-
:year => 1994
|
14
|
-
)
|
15
|
-
),
|
16
|
-
OpenStruct.new(
|
17
|
-
:title => "On the horizon",
|
18
|
-
:authors => ["Zoe Primpton", "Stan Ford"],
|
19
|
-
:published => OpenStruct.new(
|
20
|
-
:by => "McGraw-Hill",
|
21
|
-
:year => 2005
|
22
|
-
)
|
23
|
-
),
|
24
|
-
OpenStruct.new(
|
25
|
-
:title => "The Little Blue Book of VHS Programming",
|
26
|
-
:authors => ["Henry Nelson"],
|
27
|
-
:rating => "****"
|
28
|
-
)
|
29
|
-
]
|
30
|
-
|
31
|
-
json = Representative::Json.new do |r|
|
32
|
-
|
33
|
-
r.list_of :books, @books do
|
34
|
-
r.element :title
|
35
|
-
r.list_of :authors
|
36
|
-
r.element :published do
|
37
|
-
r.element :by
|
38
|
-
r.element :year
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
puts json.to_s
|