representative 1.0.5 → 1.2.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fc5e48edec35400a5461c71ba4627468910096372de5963d2f324c4e4c4b3596
4
+ data.tar.gz: e4752a8734226a997f9eef820cc6b57683640cd3b0426b1de148305b1f59083e
5
+ SHA512:
6
+ metadata.gz: 5c174f553dada2ef722f402703fa253f3f6a5b0d431dd5cd81cf1af3fc0f3d56f39207cd9da9d6f817f510b38051fe1232296d1ca2bab186e95b8d51fa3c21ed
7
+ data.tar.gz: 380a2542367e38778bdcb35e80df6e2f9c0e395b32b26fd2acc882dd462b1d652cead243ea06072e828b0b7800c5f05c443841977119774c055d3a819a96a560
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Mike Williams
1
+ Copyright (c) 2009-2016 Mike Williams
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,6 +1,9 @@
1
1
  Representative
2
2
  ==============
3
3
 
4
+ [![Gem Version](https://badge.fury.io/rb/representative.png)](http://badge.fury.io/rb/representative)
5
+ [![Build Status](https://travis-ci.org/mdub/representative.svg?branch=master)](https://travis-ci.org/mdub/representative)
6
+
4
7
  "Representative" makes it easier to create XML or JSON representations of your Ruby objects.
5
8
 
6
9
  It works best when you want the output to roughly follow the object structure, but still want complete control of the result.
@@ -12,7 +15,7 @@ Given a Ruby data-structure:
12
15
 
13
16
  @books = [
14
17
  Book.new(
15
- :title => "Sailing for old dogs",
18
+ :title => "Sailing for old dogs",
16
19
  :authors => ["Jim Watson"],
17
20
  :published => Publication.new(
18
21
  :by => "Credulous Print",
@@ -20,7 +23,7 @@ Given a Ruby data-structure:
20
23
  )
21
24
  ),
22
25
  Book.new(
23
- :title => "On the horizon",
26
+ :title => "On the horizon",
24
27
  :authors => ["Zoe Primpton", "Stan Ford"],
25
28
  :published => Publication.new(
26
29
  :by => "McGraw-Hill",
@@ -37,7 +40,7 @@ Given a Ruby data-structure:
37
40
  Representative::Nokogiri can be used to generate XML:
38
41
 
39
42
  xml = Representative::Nokogiri.new do |r|
40
-
43
+
41
44
  r.list_of :books, @books do
42
45
  r.element :title
43
46
  r.list_of :authors
@@ -46,7 +49,7 @@ Representative::Nokogiri can be used to generate XML:
46
49
  r.element :year
47
50
  end
48
51
  end
49
-
52
+
50
53
  end
51
54
 
52
55
  puts xml.to_s
@@ -98,7 +101,7 @@ Generating JSON
98
101
  Representative::Json can be used to generate JSON, using exactly the same DSL:
99
102
 
100
103
  json = Representative::Json.new do |r|
101
-
104
+
102
105
  r.list_of :books, @books do
103
106
  r.element :title
104
107
  r.list_of :authors
@@ -169,7 +172,7 @@ This registers handlers for "`.xml.rep`" and "`.json.rep`" templates.
169
172
  Copyright
170
173
  ---------
171
174
 
172
- Copyright (c) 2009 Mike Williams. See LICENSE for details.
175
+ Copyright (c) 2009-2018 Mike Williams. See LICENSE for details.
173
176
 
174
177
  Similar projects
175
178
  ----------------
data/Rakefile CHANGED
@@ -8,7 +8,6 @@ require "rspec/core/rake_task"
8
8
 
9
9
  RSpec::Core::RakeTask.new(:spec) do |t|
10
10
  t.pattern = 'spec/**/*_spec.rb'
11
- t.rspec_opts = ["--colour", "--format", "nested"]
12
11
  end
13
12
 
14
13
  task :default => :spec
@@ -1,4 +1,5 @@
1
1
  require "representative/base"
2
+ require "active_support/core_ext/array/extract_options"
2
3
 
3
4
  module Representative
4
5
 
@@ -43,8 +43,8 @@ module Representative
43
43
  current_subject
44
44
  elsif value_generator.kind_of?(Symbol)
45
45
  current_subject.send(value_generator) unless current_subject.nil?
46
- elsif value_generator.respond_to?(:to_proc)
47
- value_generator.to_proc.call(current_subject) unless current_subject.nil?
46
+ elsif value_generator.kind_of?(Proc)
47
+ value_generator.call(current_subject) unless current_subject.nil?
48
48
  else
49
49
  value_generator
50
50
  end
@@ -1,5 +1,5 @@
1
- require "active_support/core_ext/array"
2
- require "active_support/json"
1
+ require "activesupport/json_encoder"
2
+ require "active_support/core_ext/array/extract_options"
3
3
  require "representative/base"
4
4
 
5
5
  module Representative
@@ -1,14 +1,13 @@
1
- require "active_support/core_ext"
2
1
  require "nokogiri"
3
2
  require "representative/abstract_xml"
4
3
  require "representative/empty"
5
4
 
6
5
  module Representative
7
-
6
+
8
7
  # Easily generate XML while traversing an object-graph.
9
8
  #
10
9
  class Nokogiri < AbstractXml
11
-
10
+
12
11
  def initialize(subject = nil, options = {})
13
12
  super(subject, options)
14
13
  @doc = ::Nokogiri::XML::Document.new
@@ -35,7 +34,7 @@ module Representative
35
34
  comment_node = ::Nokogiri::XML::Comment.new(doc, " #{text} ")
36
35
  current_element.add_child(comment_node)
37
36
  end
38
-
37
+
39
38
  def attribute(name, value_generator = name)
40
39
  attribute_name = name.to_s.dasherize
41
40
  value = resolve_value(value_generator)
@@ -45,7 +44,7 @@ module Representative
45
44
  end
46
45
 
47
46
  private
48
-
47
+
49
48
  def generate_element(name, resolved_attributes, content_string)
50
49
  tag_args = [content_string, resolved_attributes].compact
51
50
  new_element = doc.create_element(name, *tag_args)
@@ -54,13 +53,13 @@ module Representative
54
53
  old_element = @current_element
55
54
  begin
56
55
  @current_element = new_element
57
- yield
56
+ yield
58
57
  ensure
59
58
  @current_element = old_element
60
59
  end
61
60
  end
62
61
  end
63
-
62
+
64
63
  end
65
-
64
+
66
65
  end
@@ -1,3 +1,3 @@
1
1
  module Representative
2
- VERSION = "1.0.5".freeze
2
+ VERSION = "1.2.0".freeze
3
3
  end
@@ -1,4 +1,4 @@
1
- require "active_support/core_ext"
1
+ require "active_support/inflector"
2
2
  require "builder"
3
3
  require "representative/abstract_xml"
4
4
  require "representative/empty"
@@ -24,14 +24,14 @@ module Representative
24
24
  def comment(text)
25
25
  @xml.comment!(text)
26
26
  end
27
-
27
+
28
28
  protected
29
-
29
+
30
30
  def generate_element(name, resolved_attributes, content_string, &content_block)
31
31
  tag_args = [content_string, resolved_attributes].compact
32
32
  @xml.tag!(name, *tag_args, &content_block)
33
33
  end
34
-
34
+
35
35
  end
36
36
 
37
37
  end
@@ -20,7 +20,7 @@ describe Representative::Json do
20
20
 
21
21
  it "outputs the value as JSON" do
22
22
  r.element :name, "Fred"
23
- resulting_json.should == %{"Fred"\n}
23
+ expect(resulting_json).to eq %{"Fred"\n}
24
24
  end
25
25
 
26
26
  end
@@ -29,7 +29,7 @@ describe Representative::Json do
29
29
 
30
30
  it "outputs the value as JSON" do
31
31
  r.element :age, 36
32
- resulting_json.should == "36\n"
32
+ expect(resulting_json).to eq "36\n"
33
33
  end
34
34
 
35
35
  end
@@ -38,7 +38,7 @@ describe Representative::Json do
38
38
 
39
39
  it "generates null" do
40
40
  r.element :flavour, nil
41
- resulting_json.should == "null\n"
41
+ expect(resulting_json).to eq "null\n"
42
42
  end
43
43
 
44
44
  describe "and a block" do
@@ -47,7 +47,7 @@ describe Representative::Json do
47
47
  r.element :book, nil do
48
48
  r.element :author
49
49
  end
50
- resulting_json.should == "null\n"
50
+ expect(resulting_json).to eq "null\n"
51
51
  end
52
52
 
53
53
  end
@@ -63,7 +63,7 @@ describe Representative::Json do
63
63
  r.element :book, @book, :lang => :lang do
64
64
  r.element :title
65
65
  end
66
- resulting_json.should == undent(<<-JSON)
66
+ expect(resulting_json).to eq undent(<<-JSON)
67
67
  {
68
68
  "@lang": "fr",
69
69
  "title": "En Edge"
@@ -77,7 +77,7 @@ describe Representative::Json do
77
77
 
78
78
  it "ignores the attributes" do
79
79
  r.element :review, "Blah de blah", :lang => "fr"
80
- resulting_json.should == undent(<<-JSON)
80
+ expect(resulting_json).to eq undent(<<-JSON)
81
81
  "Blah de blah"
82
82
  JSON
83
83
  end
@@ -93,7 +93,7 @@ describe Representative::Json do
93
93
  r.representing(@author) do
94
94
  r.element :name
95
95
  end
96
- resulting_json.should == %{"Fred"\n}
96
+ expect(resulting_json).to eq %{"Fred"\n}
97
97
  end
98
98
 
99
99
  end
@@ -103,7 +103,7 @@ describe Representative::Json do
103
103
  it "outputs an object" do
104
104
  r.element :something, Object.new do
105
105
  end
106
- resulting_json.should == "{}\n"
106
+ expect(resulting_json).to eq "{}\n"
107
107
  end
108
108
 
109
109
  end
@@ -116,7 +116,7 @@ describe Representative::Json do
116
116
 
117
117
  it "outputs the array as JSON" do
118
118
  r.list_of :names, %w(Hewey Dewey Louie)
119
- resulting_json.should == undent(<<-JSON)
119
+ expect(resulting_json).to eq undent(<<-JSON)
120
120
  [
121
121
  "Hewey",
122
122
  "Dewey",
@@ -134,7 +134,7 @@ describe Representative::Json do
134
134
  r.element(:duck, @donald) do
135
135
  r.list_of :nephews
136
136
  end
137
- resulting_json.should == undent(<<-JSON)
137
+ expect(resulting_json).to eq undent(<<-JSON)
138
138
  {
139
139
  "nephews": [
140
140
  "Hewey",
@@ -159,7 +159,7 @@ describe Representative::Json do
159
159
  r.element :name
160
160
  r.element :age
161
161
  end
162
- resulting_json.should == undent(<<-JSON)
162
+ expect(resulting_json).to eq undent(<<-JSON)
163
163
  [
164
164
  {
165
165
  "name": "Hewey",
@@ -190,7 +190,7 @@ describe Representative::Json do
190
190
  r.element :name
191
191
  r.element :age
192
192
  end
193
- resulting_json.should == undent(<<-JSON)
193
+ expect(resulting_json).to eq undent(<<-JSON)
194
194
  [
195
195
  {
196
196
  "@about": "Hewey is 3 years old",
@@ -215,16 +215,18 @@ describe Representative::Json do
215
215
  describe "with list attributes" do
216
216
  it "raises an ArgumentError" do
217
217
  @authors = []
218
- lambda{ r.list_of(:authors, @authors, :list_attributes => {}) {} }.should raise_exception(ArgumentError)
218
+ expect(-> {
219
+ r.list_of(:authors, @authors, :list_attributes => {}) {}
220
+ }).to raise_exception(ArgumentError)
219
221
  end
220
222
  end
221
223
 
222
224
  describe "with unnecessary arguments" do
223
225
  it "raises an ArgumentError" do
224
226
  @authors = []
225
- lambda{
227
+ expect(-> {
226
228
  r.list_of(:authors, @authors, :unecessary_arg_should_cause_failure, :item_attributes => {}){}
227
- }.should raise_exception(ArgumentError)
229
+ }).to raise_exception(ArgumentError)
228
230
  end
229
231
  end
230
232
 
@@ -234,7 +236,7 @@ describe Representative::Json do
234
236
 
235
237
  it "inserts a comment" do
236
238
  r.comment "now pay attention"
237
- resulting_json.should == undent(<<-JSON)
239
+ expect(resulting_json).to eq undent(<<-JSON)
238
240
  // now pay attention
239
241
  JSON
240
242
  end
@@ -252,7 +254,7 @@ describe Representative::Json do
252
254
  r.element :name, "Fred"
253
255
  r.element :age, 36
254
256
  end
255
- resulting_json.should == undent(<<-JSON)
257
+ expect(resulting_json).to eq undent(<<-JSON)
256
258
  {
257
259
  "name": "Fred",
258
260
  "age": 36
@@ -268,7 +270,7 @@ describe Representative::Json do
268
270
  r.element :name
269
271
  r.element :age
270
272
  end
271
- resulting_json.should == undent(<<-JSON)
273
+ expect(resulting_json).to eq undent(<<-JSON)
272
274
  {
273
275
  "name": "Fred",
274
276
  "age": 36
@@ -278,6 +280,21 @@ describe Representative::Json do
278
280
 
279
281
  end
280
282
 
283
+ describe "when value is a Hash" do
284
+
285
+ it "renders the Hash as JSON" do
286
+ @article = OpenStruct.new(:title => "blah", :tags => {:foo => "bar"})
287
+ r.element :article, @article do
288
+ r.element :tags
289
+ end
290
+ expect(resulting_json).to eq undent(<<-JSON)
291
+ {
292
+ "tags": {"foo":"bar"}
293
+ }
294
+ JSON
295
+ end
296
+ end
297
+
281
298
  end
282
299
 
283
300
  describe "#attribute" do
@@ -287,7 +304,7 @@ describe Representative::Json do
287
304
  r.attribute :href, "http://example.com/authors/1"
288
305
  r.element :name, "Fred"
289
306
  end
290
- resulting_json.should == undent(<<-JSON)
307
+ expect(resulting_json).to eq undent(<<-JSON)
291
308
  {
292
309
  "@href": "http://example.com/authors/1",
293
310
  "name": "Fred"
@@ -306,7 +323,7 @@ describe Representative::Json do
306
323
  r.comment "age is irrelevant"
307
324
  r.element :age
308
325
  end
309
- resulting_json.should == undent(<<-JSON)
326
+ expect(resulting_json).to eq undent(<<-JSON)
310
327
  {
311
328
  "name": "Fred",
312
329
  // age is irrelevant
@@ -325,7 +342,7 @@ describe Representative::Json do
325
342
  r.element :user, Object.new do
326
343
  r.element :full_name, "Fred Bloggs"
327
344
  end
328
- resulting_json.should == undent(<<-JSON)
345
+ expect(resulting_json).to eq undent(<<-JSON)
329
346
  {
330
347
  "full_name": "Fred Bloggs"
331
348
  }
@@ -342,7 +359,7 @@ describe Representative::Json do
342
359
  r.attribute :alt_url, "http://xyz.com"
343
360
  r.element :full_name
344
361
  end
345
- resulting_json.should == undent(<<-JSON)
362
+ expect(resulting_json).to eq undent(<<-JSON)
346
363
  {
347
364
  "@altUrl": "http://xyz.com",
348
365
  "fullName": "Fred Bloggs"
@@ -368,7 +385,7 @@ describe Representative::Json do
368
385
  r.element :name
369
386
  r.element :age
370
387
  end
371
- resulting_json.should == undent(<<-JSON)
388
+ expect(resulting_json).to eq undent(<<-JSON)
372
389
  [
373
390
  {
374
391
  "name": "Hewey",
@@ -391,7 +408,7 @@ describe Representative::Json do
391
408
  r.element :name
392
409
  r.element :age
393
410
  end
394
- resulting_json.should == undent(<<-JSON)
411
+ expect(resulting_json).to eq undent(<<-JSON)
395
412
  [
396
413
  \t{
397
414
  \t\t"name": "Hewey",
@@ -414,7 +431,7 @@ describe Representative::Json do
414
431
  r.element :name
415
432
  r.element :age
416
433
  end
417
- resulting_json.should == %([{"name":"Hewey","age":3},{"name":"Dewey","age":4}])
434
+ expect(resulting_json).to eq %([{"name":"Hewey","age":3},{"name":"Dewey","age":4}])
418
435
  end
419
436
 
420
437
  end
@@ -29,7 +29,7 @@ describe Representative::Nokogiri do
29
29
  r.element :person, @subject do
30
30
  r.attribute :name
31
31
  end
32
- resulting_xml.should == %(<person name="Fred"/>)
32
+ expect(resulting_xml).to eq %(<person name="Fred"/>)
33
33
  end
34
34
  end
35
35
 
@@ -38,16 +38,16 @@ describe Representative::Nokogiri do
38
38
  r.element :person, @subject do
39
39
  r.attribute :lang, "fr"
40
40
  end
41
- resulting_xml.should == %(<person lang="fr"/>)
41
+ expect(resulting_xml).to eq %(<person lang="fr"/>)
42
42
  end
43
43
  end
44
44
 
45
45
  describe "with a value that supports #to_proc" do
46
46
  it "calls the Proc on the subject to generate attribute value" do
47
47
  r.element :person, @subject do
48
- r.attribute :name, lambda { |person| person.name.reverse }
48
+ r.attribute :name, lambda { |person| person.name.reverse }
49
49
  end
50
- resulting_xml.should == %(<person name="derF"/>)
50
+ expect(resulting_xml).to eq %(<person name="derF"/>)
51
51
  end
52
52
  end
53
53
 
@@ -55,7 +55,7 @@ describe Representative::Nokogiri do
55
55
  r.element :name do
56
56
  r.attribute :sourced_from, "phonebook"
57
57
  end
58
- resulting_xml.should == %(<name sourced-from="phonebook"/>)
58
+ expect(resulting_xml).to eq %(<name sourced-from="phonebook"/>)
59
59
  end
60
60
 
61
61
  describe "with value nil" do
@@ -63,7 +63,7 @@ describe Representative::Nokogiri do
63
63
  r.element :person, @subject do
64
64
  r.attribute :name, nil
65
65
  end
66
- resulting_xml.should == %(<person/>)
66
+ expect(resulting_xml).to eq %(<person/>)
67
67
  end
68
68
  end
69
69
 
@@ -26,7 +26,7 @@ describe Representative::Tilt do
26
26
  r.element :foo, "bar"
27
27
  RUBY
28
28
  render
29
- resulting_xml.should == %{<foo>bar</foo>\n}
29
+ expect(resulting_xml).to eq %{<foo>bar</foo>\n}
30
30
  end
31
31
 
32
32
  it "provides access to scope" do
@@ -43,7 +43,7 @@ describe Representative::Tilt do
43
43
  end
44
44
  render(scope)
45
45
 
46
- resulting_xml.should == undent(<<-XML)
46
+ expect(resulting_xml).to eq undent(<<-XML)
47
47
  <author>
48
48
  <name>Mike</name>
49
49
  </author>
@@ -61,7 +61,7 @@ describe Representative::Tilt do
61
61
 
62
62
  render(Object.new, {:author => OpenStruct.new(:name => "Mike")})
63
63
 
64
- resulting_xml.should == undent(<<-XML)
64
+ expect(resulting_xml).to eq undent(<<-XML)
65
65
  <author>
66
66
  <name>Mike</name>
67
67
  </author>
@@ -72,7 +72,7 @@ describe Representative::Tilt do
72
72
  end
73
73
 
74
74
  end
75
-
75
+
76
76
  describe "JSON template" do
77
77
 
78
78
  def resulting_json
@@ -86,7 +86,7 @@ describe Representative::Tilt do
86
86
  r.element :foo, "bar"
87
87
  RUBY
88
88
  render
89
- resulting_json.should == %{"bar"\n}
89
+ expect(resulting_json).to eq %{"bar"\n}
90
90
  end
91
91
 
92
92
  it "provides access to scope" do
@@ -103,7 +103,7 @@ describe Representative::Tilt do
103
103
  end
104
104
  render(scope)
105
105
 
106
- resulting_json.should == undent(<<-JSON)
106
+ expect(resulting_json).to eq undent(<<-JSON)
107
107
  {
108
108
  "name": "Mike"
109
109
  }
@@ -121,7 +121,7 @@ describe Representative::Tilt do
121
121
 
122
122
  render(Object.new, {:author => OpenStruct.new(:name => "Mike")})
123
123
 
124
- resulting_json.should == undent(<<-JSON)
124
+ expect(resulting_json).to eq undent(<<-JSON)
125
125
  {
126
126
  "name": "Mike"
127
127
  }
@@ -19,31 +19,31 @@ shared_examples_for "an XML Representative" do
19
19
 
20
20
  it "generates an element with content extracted from the subject" do
21
21
  r.element :name
22
- resulting_xml.should == %(<name>Fred</name>)
22
+ expect(resulting_xml).to eq %(<name>Fred</name>)
23
23
  end
24
24
 
25
25
  it "dasherizes the property name" do
26
26
  r.element :full_name
27
- resulting_xml.should == %(<full-name>Fredrick</full-name>)
27
+ expect(resulting_xml).to eq %(<full-name>Fredrick</full-name>)
28
28
  end
29
29
 
30
30
  describe "with attributes" do
31
31
 
32
32
  it "generates attributes on the element" do
33
33
  r.element :name, :lang => "fr"
34
- resulting_xml.should == %(<name lang="fr">Fred</name>)
34
+ expect(resulting_xml).to eq %(<name lang="fr">Fred</name>)
35
35
  end
36
36
 
37
37
  it "dasherizes the attribute name" do
38
38
  r.element :name, :sourced_from => "phonebook"
39
- resulting_xml.should == %(<name sourced-from="phonebook">Fred</name>)
39
+ expect(resulting_xml).to eq %(<name sourced-from="phonebook">Fred</name>)
40
40
  end
41
41
 
42
42
  describe "whose value supports #to_proc" do
43
43
 
44
44
  it "calls the Proc on the subject to generate a value" do
45
45
  r.element :name, :rev => :reverse
46
- resulting_xml.should == %(<name rev="derF">Fred</name>)
46
+ expect(resulting_xml).to eq %(<name rev="derF">Fred</name>)
47
47
  end
48
48
 
49
49
  end
@@ -52,7 +52,7 @@ shared_examples_for "an XML Representative" do
52
52
 
53
53
  it "omits the attribute" do
54
54
  r.element :name, :lang => nil
55
- resulting_xml.should == %(<name>Fred</name>)
55
+ expect(resulting_xml).to eq %(<name>Fred</name>)
56
56
  end
57
57
 
58
58
  end
@@ -63,14 +63,14 @@ shared_examples_for "an XML Representative" do
63
63
 
64
64
  it "generates an element with explicitly provided content" do
65
65
  r.element :name, "Bloggs"
66
- resulting_xml.should == %(<name>Bloggs</name>)
66
+ expect(resulting_xml).to eq %(<name>Bloggs</name>)
67
67
  end
68
68
 
69
69
  describe "AND attributes" do
70
70
 
71
71
  it "generates attributes on the element" do
72
72
  r.element :name, "Bloggs", :lang => "fr"
73
- resulting_xml.should == %(<name lang="fr">Bloggs</name>)
73
+ expect(resulting_xml).to eq %(<name lang="fr">Bloggs</name>)
74
74
  end
75
75
 
76
76
  end
@@ -81,7 +81,7 @@ shared_examples_for "an XML Representative" do
81
81
 
82
82
  it "calls the named method to generate a value" do
83
83
  r.element :name, :width
84
- resulting_xml.should == %(<name>200</name>)
84
+ expect(resulting_xml).to eq %(<name>200</name>)
85
85
  end
86
86
 
87
87
  end
@@ -90,7 +90,7 @@ shared_examples_for "an XML Representative" do
90
90
 
91
91
  it "calls the Proc on the subject to generate a value" do
92
92
  r.element :name, (lambda { |x| x.width * 3 })
93
- resulting_xml.should == %(<name>600</name>)
93
+ expect(resulting_xml).to eq %(<name>600</name>)
94
94
  end
95
95
 
96
96
  end
@@ -101,7 +101,7 @@ shared_examples_for "an XML Representative" do
101
101
  r.element :info, :self do
102
102
  r.element :name
103
103
  end
104
- resulting_xml.should == %(<info><name>Fred</name></info>)
104
+ expect(resulting_xml).to eq %(<info><name>Fred</name></info>)
105
105
  end
106
106
 
107
107
  end
@@ -110,19 +110,19 @@ shared_examples_for "an XML Representative" do
110
110
 
111
111
  it "builds an empty element" do
112
112
  r.element :name, nil
113
- resulting_xml.should == %(<name/>)
113
+ expect(resulting_xml).to eq %(<name/>)
114
114
  end
115
115
 
116
116
  describe "and attributes" do
117
117
 
118
118
  it "omits attributes derived from the subject" do
119
119
  r.element :name, nil, :size => :size
120
- resulting_xml.should == %(<name/>)
120
+ expect(resulting_xml).to eq %(<name/>)
121
121
  end
122
122
 
123
123
  it "retains attributes with explicit values" do
124
124
  r.element :name, nil, :lang => "en"
125
- resulting_xml.should == %(<name lang="en"/>)
125
+ expect(resulting_xml).to eq %(<name lang="en"/>)
126
126
  end
127
127
 
128
128
  end
@@ -133,7 +133,7 @@ shared_examples_for "an XML Representative" do
133
133
  r.element :name, nil do
134
134
  raise "hell"
135
135
  end
136
- resulting_xml.should == %(<name/>)
136
+ expect(resulting_xml).to eq %(<name/>)
137
137
  end
138
138
 
139
139
  end
@@ -147,14 +147,14 @@ shared_examples_for "an XML Representative" do
147
147
  r.element :year
148
148
  r.element :make
149
149
  end
150
- resulting_xml.should == %(<vehicle><year>1959</year><make>Chevrolet</make></vehicle>)
150
+ expect(resulting_xml).to eq %(<vehicle><year>1959</year><make>Chevrolet</make></vehicle>)
151
151
  end
152
152
 
153
153
  it "yields each new subject" do
154
154
  r.element :vehicle do |vehicle|
155
155
  r.element :year, vehicle.year
156
156
  end
157
- resulting_xml.should == %(<vehicle><year>1959</year></vehicle>)
157
+ expect(resulting_xml).to eq %(<vehicle><year>1959</year></vehicle>)
158
158
  end
159
159
 
160
160
  end
@@ -163,7 +163,7 @@ shared_examples_for "an XML Representative" do
163
163
 
164
164
  it "generates an empty element" do
165
165
  r.element :vehicle, :year => :year, &r.empty
166
- resulting_xml.should == %(<vehicle year="1959"/>)
166
+ expect(resulting_xml).to eq %(<vehicle year="1959"/>)
167
167
  end
168
168
 
169
169
  end
@@ -178,21 +178,21 @@ shared_examples_for "an XML Representative" do
178
178
 
179
179
  it "generates an array element" do
180
180
  r.list_of(:nick_names)
181
- resulting_xml.should == %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
181
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
182
182
  end
183
183
 
184
184
  describe "with a Symbol value argument" do
185
185
 
186
186
  it "calls the named method to generate a value" do
187
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>)
188
+ expect(resulting_xml).to eq %(<foo-bars type="array"><foo-bar>Freddie</foo-bar><foo-bar>Knucklenose</foo-bar></foo-bars>)
189
189
  end
190
190
 
191
191
  end
192
192
 
193
193
  it "generates an array element" do
194
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>)
195
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
196
196
  end
197
197
 
198
198
  describe "with :list_attributes" do
@@ -200,10 +200,10 @@ shared_examples_for "an XML Representative" do
200
200
  it "attaches attributes to the array element" do
201
201
  r.list_of(:nick_names, :list_attributes => {:color => "blue", :size => :size})
202
202
  array_element_attributes = REXML::Document.new(resulting_xml).root.attributes
203
- array_element_attributes["type"].should == "array"
204
- array_element_attributes["color"].should == "blue"
205
- array_element_attributes["size"].should == "2"
206
- array_element_attributes.size.should == 3
203
+ expect(array_element_attributes["type"]).to eq "array"
204
+ expect(array_element_attributes["color"]).to eq "blue"
205
+ expect(array_element_attributes["size"]).to eq "2"
206
+ expect(array_element_attributes.size).to eq 3
207
207
  end
208
208
 
209
209
  end
@@ -212,7 +212,7 @@ shared_examples_for "an XML Representative" do
212
212
 
213
213
  it "attaches attributes to each item element" do
214
214
  r.list_of(:nick_names, :item_attributes => {:length => :size})
215
- resulting_xml.should == %(<nick-names type="array"><nick-name length="7">Freddie</nick-name><nick-name length="11">Knucklenose</nick-name></nick-names>)
215
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick-name length="7">Freddie</nick-name><nick-name length="11">Knucklenose</nick-name></nick-names>)
216
216
  end
217
217
 
218
218
  end
@@ -220,7 +220,7 @@ shared_examples_for "an XML Representative" do
220
220
  describe "with an explicit :item_name" do
221
221
  it "uses the name provided" do
222
222
  r.list_of(:nick_names, :item_name => :nick)
223
- resulting_xml.should == %(<nick-names type="array"><nick>Freddie</nick><nick>Knucklenose</nick></nick-names>)
223
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick>Freddie</nick><nick>Knucklenose</nick></nick-names>)
224
224
  end
225
225
  end
226
226
 
@@ -230,7 +230,7 @@ shared_examples_for "an XML Representative" do
230
230
  r.list_of(:services) do
231
231
  r.date
232
232
  end
233
- resulting_xml.should == %(<services/>)
233
+ expect(resulting_xml).to eq %(<services/>)
234
234
  end
235
235
 
236
236
  end
@@ -241,7 +241,7 @@ shared_examples_for "an XML Representative" do
241
241
  r.list_of(:nick_names) do
242
242
  r.element :length
243
243
  end
244
- resulting_xml.should == %(<nick-names type="array"><nick-name><length>7</length></nick-name><nick-name><length>11</length></nick-name></nick-names>)
244
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick-name><length>7</length></nick-name><nick-name><length>11</length></nick-name></nick-names>)
245
245
  end
246
246
 
247
247
  end
@@ -250,7 +250,7 @@ shared_examples_for "an XML Representative" do
250
250
 
251
251
  it "generates empty elements for each list element" do
252
252
  r.list_of(:nick_names, :item_attributes => {:value => :to_s}, &r.empty)
253
- resulting_xml.should == %(<nick-names type="array"><nick-name value="Freddie"/><nick-name value="Knucklenose"/></nick-names>)
253
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick-name value="Freddie"/><nick-name value="Knucklenose"/></nick-names>)
254
254
  end
255
255
 
256
256
  end
@@ -261,7 +261,7 @@ shared_examples_for "an XML Representative" do
261
261
  r.list_of(:nick_names, :item_attributes => {:length => :size}) do
262
262
  r.element :reverse
263
263
  end
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>)
264
+ expect(resulting_xml).to eq %(<nick-names type="array"><nick-name length="7"><reverse>eidderF</reverse></nick-name><nick-name length="11"><reverse>esonelkcunK</reverse></nick-name></nick-names>)
265
265
  end
266
266
 
267
267
  end
@@ -274,7 +274,7 @@ shared_examples_for "an XML Representative" do
274
274
  r.representing :vehicle do
275
275
  r.element :make
276
276
  end
277
- resulting_xml.should == %(<make>Chevrolet</make>)
277
+ expect(resulting_xml).to eq %(<make>Chevrolet</make>)
278
278
  end
279
279
 
280
280
  end
@@ -286,8 +286,7 @@ shared_examples_for "an XML Representative" do
286
286
  r.comment "Year of manufacture"
287
287
  r.element :year
288
288
  end
289
- resulting_xml.should ==
290
- %(<vehicle><!-- Year of manufacture --><year>1959</year></vehicle>)
289
+ expect(resulting_xml).to eq %(<vehicle><!-- Year of manufacture --><year>1959</year></vehicle>)
291
290
  end
292
291
 
293
292
  end
@@ -296,7 +295,7 @@ shared_examples_for "an XML Representative" do
296
295
 
297
296
  it "generates camelCased element and attribute names" do
298
297
  r(:naming_strategy => :camelcase).element :full_name, :foo_bar => 5
299
- resulting_xml.should == %(<fullName fooBar="5">Fredrick</fullName>)
298
+ expect(resulting_xml).to eq %(<fullName fooBar="5">Fredrick</fullName>)
300
299
  end
301
300
 
302
301
  end
@@ -306,7 +305,7 @@ shared_examples_for "an XML Representative" do
306
305
  it "generates suitably transformed names" do
307
306
  biff = lambda { |name| name.upcase }
308
307
  r(:naming_strategy => biff).element :full_name
309
- resulting_xml.should == %(<FULL_NAME>Fredrick</FULL_NAME>)
308
+ expect(resulting_xml).to eq %(<FULL_NAME>Fredrick</FULL_NAME>)
310
309
  end
311
310
 
312
311
  end
@@ -315,7 +314,7 @@ shared_examples_for "an XML Representative" do
315
314
 
316
315
  it "uses raw names" do
317
316
  r(:naming_strategy => nil).element :full_name
318
- resulting_xml.should == %(<full_name>Fredrick</full_name>)
317
+ expect(resulting_xml).to eq %(<full_name>Fredrick</full_name>)
319
318
  end
320
319
 
321
320
  end
metadata CHANGED
@@ -1,78 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: representative
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
5
- prerelease:
4
+ version: 1.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mike Williams
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-21 00:00:00.000000000 Z
11
+ date: 2018-06-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: activesupport
14
+ name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 2.2.2
19
+ version: 3.4.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 3.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport-json_encoder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0
22
34
  type: :runtime
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
- - - ! '>='
38
+ - - ">="
28
39
  - !ruby/object:Gem::Version
29
- version: 2.2.2
40
+ version: 1.1.0
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: i18n
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ! '>='
45
+ - - ">="
36
46
  - !ruby/object:Gem::Version
37
47
  version: 0.4.1
38
48
  type: :runtime
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ! '>='
52
+ - - ">="
44
53
  - !ruby/object:Gem::Version
45
54
  version: 0.4.1
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: builder
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - ">="
52
60
  - !ruby/object:Gem::Version
53
61
  version: 2.1.2
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - ">="
60
67
  - !ruby/object:Gem::Version
61
68
  version: 2.1.2
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: nokogiri
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ">="
68
74
  - !ruby/object:Gem::Version
69
75
  version: 1.4.2
70
76
  type: :runtime
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ">="
76
81
  - !ruby/object:Gem::Version
77
82
  version: 1.4.2
78
83
  description:
@@ -81,6 +86,11 @@ executables: []
81
86
  extensions: []
82
87
  extra_rdoc_files: []
83
88
  files:
89
+ - LICENSE
90
+ - README.markdown
91
+ - Rakefile
92
+ - examples/books.rb
93
+ - lib/representative.rb
84
94
  - lib/representative/abstract_xml.rb
85
95
  - lib/representative/base.rb
86
96
  - lib/representative/empty.rb
@@ -90,52 +100,40 @@ files:
90
100
  - lib/representative/tilt_integration.rb
91
101
  - lib/representative/version.rb
92
102
  - lib/representative/xml.rb
93
- - lib/representative.rb
94
- - examples/books.rb
95
- - README.markdown
96
- - LICENSE
97
103
  - spec/representative/json_spec.rb
98
104
  - spec/representative/nokogiri_spec.rb
99
105
  - spec/representative/tilt_integration_spec.rb
100
106
  - spec/representative/xml_behaviour.rb
101
107
  - spec/representative/xml_spec.rb
102
108
  - spec/spec_helper.rb
103
- - Rakefile
104
109
  homepage: http://github.com/mdub/representative
105
110
  licenses: []
111
+ metadata: {}
106
112
  post_install_message:
107
113
  rdoc_options: []
108
114
  require_paths:
109
115
  - lib
110
116
  required_ruby_version: !ruby/object:Gem::Requirement
111
- none: false
112
117
  requirements:
113
- - - ! '>='
118
+ - - ">="
114
119
  - !ruby/object:Gem::Version
115
- version: '0'
116
- segments:
117
- - 0
118
- hash: 868732793501301304
120
+ version: 2.0.0
119
121
  required_rubygems_version: !ruby/object:Gem::Requirement
120
- none: false
121
122
  requirements:
122
- - - ! '>='
123
+ - - ">="
123
124
  - !ruby/object:Gem::Version
124
125
  version: '0'
125
- segments:
126
- - 0
127
- hash: 868732793501301304
128
126
  requirements: []
129
127
  rubyforge_project:
130
- rubygems_version: 1.8.23
128
+ rubygems_version: 2.7.6
131
129
  signing_key:
132
- specification_version: 3
130
+ specification_version: 4
133
131
  summary: Builds XML and JSON representations of your Ruby objects
134
132
  test_files:
133
+ - spec/spec_helper.rb
134
+ - spec/representative/xml_spec.rb
135
135
  - spec/representative/json_spec.rb
136
+ - spec/representative/xml_behaviour.rb
136
137
  - spec/representative/nokogiri_spec.rb
137
138
  - spec/representative/tilt_integration_spec.rb
138
- - spec/representative/xml_behaviour.rb
139
- - spec/representative/xml_spec.rb
140
- - spec/spec_helper.rb
141
139
  - Rakefile