roar 0.8.0 → 0.8.1

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.
@@ -1,9 +1,11 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class RepresenterTest < MiniTest::Spec
4
- describe "Representer" do
4
+ describe "Representer::Base" do
5
5
  before do
6
- @c = Class.new(Roar::Representer::Base)
6
+ @c = Class.new do
7
+ include Roar::Representer::Base
8
+ end
7
9
  end
8
10
 
9
11
  it "aliases #representable_property to #property" do
@@ -16,9 +18,37 @@ class RepresenterTest < MiniTest::Spec
16
18
  assert_equal "songs", @c.representable_attrs.first.name
17
19
  end
18
20
 
19
- it "accepts property hash in #new" do
20
- @c.property :title
21
- assert_equal "Counting Down", @c.new(:title => "Counting Down").title
21
+
22
+ describe "#from_attributes" do
23
+ it "accepts a block yielding the created representer instance" do
24
+ @c.class_eval { attr_accessor :name }
25
+
26
+ assert_equal("Conan", @c.from_attributes({}) { |rep| rep.name = "Conan" }.name)
27
+ end
28
+
29
+ it "copies known properties, only, but doesn't complain" do
30
+ @c.class_eval { property :id }
31
+
32
+ assert_equal 1, @c.from_attributes("id" => 1, "unknown" => "don't use me").id
33
+ end
34
+
35
+ it "accepts symbols and strings as property name" do
36
+ @c.class_eval { property :id }
37
+
38
+ assert_equal @c.from_attributes(:id => 1).id, @c.from_attributes("id" => 1).id
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "Inheritance" do
44
+ it "properly inherits properties" do
45
+ base = Class.new do
46
+ include Roar::Representer::JSON
47
+ self.representation_name= "collection"
48
+ property :name
49
+ end
50
+
51
+ assert_equal "{\"collection\":{\"name\":\"Paulo\"}}", Class.new(base).from_attributes(:name => "Paulo").to_json
22
52
  end
23
53
 
24
54
  end
data/test/test_helper.rb CHANGED
@@ -4,18 +4,39 @@ Bundler.setup
4
4
  require 'test/unit'
5
5
  require 'minitest/spec'
6
6
 
7
- require 'active_model'
8
- #require 'roar/client/entity_proxy'
9
- require 'roar/representer'
10
- require 'roar/model'
7
+ require 'roar/representer/base'
8
+ require 'roar/representer/feature/hypermedia'
11
9
  require 'roar/representer/feature/http_verbs'
12
10
 
13
11
  require 'stringio' # FIXME. remove for 3.0.4.
14
12
  require 'builder'
15
13
 
14
+ module TestModel
15
+ def self.included(base)
16
+ base.extend ClassMethods
17
+ end
18
+
19
+
20
+ module ClassMethods
21
+ def accessors(*names)
22
+ names.each do |name|
23
+ attr_accessor name
24
+ end
25
+ end
26
+ end
27
+
28
+ attr_accessor :attributes
29
+
30
+ def initialize(attributes={})
31
+ attributes.each do |k,v|
32
+ send("#{k}=", v)
33
+ end
34
+ end
35
+ end
36
+
16
37
 
17
38
  class Item
18
- include Roar::Model
39
+ include TestModel
19
40
  accessors :value
20
41
 
21
42
  def self.model_name
@@ -24,7 +45,7 @@ class Item
24
45
  end
25
46
 
26
47
  class Position
27
- include Roar::Model
48
+ include TestModel
28
49
  accessors :id, :item
29
50
 
30
51
  def self.model_name
@@ -33,7 +54,7 @@ class Position
33
54
  end
34
55
 
35
56
  class Order
36
- include Roar::Model
57
+ include TestModel
37
58
  accessors :id, :items
38
59
 
39
60
  def self.model_name
@@ -1,24 +1,16 @@
1
1
  require 'test_helper'
2
2
 
3
- class Order
4
- include Roar::Model
5
- accessors :id, :item
6
-
7
- def self.model_name
8
- :order
9
- end
10
- end
11
-
12
-
13
- class ItemRepresenter < Roar::Representer::XML
3
+ class ItemRepresenter
4
+ include Roar::Representer::XML
14
5
  self.representation_name= :item
15
- representable_property :value
6
+ property :value
16
7
  end
17
8
 
18
- class PositionRepresenter < Roar::Representer::XML
9
+ class PositionRepresenter
10
+ include Roar::Representer::XML
19
11
  self.representation_name= :position
20
- representable_property :id
21
- representable_property :item, :as => ItemRepresenter
12
+ property :id
13
+ property :item, :as => ItemRepresenter
22
14
  end
23
15
 
24
16
 
@@ -27,7 +19,10 @@ end
27
19
  class XMLRepresenterUnitTest < MiniTest::Spec
28
20
  describe "XmlRepresenter" do
29
21
  describe "#link" do
30
- class Rapper < Roar::Representer::XML
22
+ class Rapper
23
+ include Roar::Representer::XML
24
+ include Roar::Representer::Feature::Hypermedia
25
+
31
26
  link :self
32
27
  link :next
33
28
  end
@@ -37,57 +32,13 @@ class XMLRepresenterUnitTest < MiniTest::Spec
37
32
  assert_equal [{:rel=>:self, :block=>nil}, {:rel=>:next, :block=>nil}], Rapper.representable_attrs.first.rel2block
38
33
  end
39
34
  end
40
-
41
- describe "#from_attributes" do
42
- it "accepts a block" do
43
- @c = Class.new(Roar::Representer::XML) do
44
- attr_accessor :name
45
- end
46
-
47
- assert_equal("Conan", @c.from_attributes({}) { |rep| rep.name = "Conan" }.name)
48
- end
49
- end
50
35
  end
51
36
  end
52
37
 
53
- class LinksDefinitionTest < MiniTest::Spec
54
- describe "LinksDefinition" do
55
- before do
56
- @d = Roar::Representer::LinksDefinition.new(:links)
57
- end
58
-
59
- it "accepts options in constructor" do
60
- assert_equal [], @d.rel2block
61
- end
62
-
63
- it "accepts configuration" do
64
- @d.rel2block << {:rel => :self}
65
- assert_equal [{:rel=>:self}], @d.rel2block
66
- end
67
- end
68
- end
69
-
70
- class XMLDefinitionTest < MiniTest::Spec
71
- class Rapper
72
- attr_accessor :name
73
- end
74
-
75
- describe "ROXML::Definition" do
76
- it "responds to #populate" do
77
- @r = Rapper.new
78
- Representable::Definition.new(:name).populate(@r, "name" => "Eugen")
79
- assert_equal "Eugen", @r.name
80
- end
81
- end
82
- end
83
-
84
-
85
-
86
-
87
38
 
88
39
  class XMLRepresenterFunctionalTest < MiniTest::Spec
89
40
  class GreedyOrder
90
- include Roar::Model
41
+ include TestModel
91
42
  accessors :id, :items
92
43
 
93
44
  def self.model_name
@@ -95,9 +46,10 @@ class XMLRepresenterFunctionalTest < MiniTest::Spec
95
46
  end
96
47
  end
97
48
 
98
- class TestXmlRepresenter < Roar::Representer::XML
49
+ class TestXmlRepresenter
50
+ include Roar::Representer::XML
99
51
  self.representation_name= :order # FIXME: get from represented?
100
- representable_property :id
52
+ property :id
101
53
  end
102
54
 
103
55
 
@@ -110,18 +62,6 @@ class XMLRepresenterFunctionalTest < MiniTest::Spec
110
62
  @i.value = "Beer"
111
63
  end
112
64
 
113
- describe "#from_attributes" do
114
- it "copies represented attributes, only" do
115
- @r = PositionRepresenter.from_attributes("id" => 1, "item" => @i, "unknown" => 1)
116
- assert_kind_of PositionRepresenter, @r
117
- assert_equal 1, @r.id
118
-
119
- assert_kind_of ItemRepresenter, @r.item
120
- assert_equal @r.item.value, "Beer"
121
- end
122
- end
123
-
124
-
125
65
  describe "#to_attributes" do
126
66
  it "returns a nested attributes hash" do
127
67
  @r = PositionRepresenter.from_attributes("id" => 1, "item" => @i)
@@ -132,28 +72,56 @@ class XMLRepresenterFunctionalTest < MiniTest::Spec
132
72
 
133
73
  describe "#to_xml" do
134
74
  it "serializes the current model" do
135
- assert_xml_equal "<order/>", @r.to_xml.serialize
75
+ assert_xml_equal "<order/>", @r.to_xml
136
76
 
137
77
  @r.id = 2
138
- assert_xml_equal "<rap><id>2</id></rap>", @r.to_xml(:name => :rap).serialize
78
+ assert_xml_equal "<rap><id>2</id></rap>", @r.to_xml(:name => :rap)
79
+ end
80
+
81
+ it "is aliased to #serialize" do
82
+ assert_equal @r.to_xml, @r.serialize
83
+ end
84
+ end
85
+
86
+ describe "#from_xml" do
87
+ class Order
88
+ include Roar::Representer::XML
89
+ property :id
90
+ property :pending
91
+ end
92
+
93
+ it "is aliased to #deserialize" do
94
+ assert_equal TestXmlRepresenter.from_xml("<order/>").to_attributes, TestXmlRepresenter.deserialize("<order/>").to_attributes
95
+ end
96
+
97
+ it "accepts :except option" do
98
+ order = Order.from_xml(%{<order><id>1</id><pending>1</pending></order>}, :except => [:id])
99
+ assert_equal nil, order.id
100
+ assert_equal "1", order.pending
101
+ end
102
+
103
+ it "accepts :include option" do
104
+ order = Order.from_xml(%{<order><id>1</id><pending>1</pending></order>}, :include => [:id])
105
+ assert_equal "1", order.id
106
+ assert_equal nil, order.pending
139
107
  end
140
108
  end
141
109
 
142
110
 
143
111
  describe "without options" do
144
- it "#serialize returns the serialized model" do
112
+ it "#to_xml returns the serialized model" do
145
113
  @r.id = 1
146
- assert_xml_equal "<order><id>1</id></order>", @r.serialize
114
+ assert_xml_equal "<order><id>1</id></order>", @r.to_xml
147
115
  end
148
116
 
149
117
 
150
118
  it ".from_xml returns the deserialized model" do
151
- @m = TestXmlRepresenter.deserialize("<order><id>1</id></order>")
119
+ @m = TestXmlRepresenter.from_xml("<order><id>1</id></order>")
152
120
  assert_equal "1", @m.id
153
121
  end
154
122
 
155
123
  it ".from_xml still works with nil" do
156
- assert TestXmlRepresenter.deserialize(nil)
124
+ assert TestXmlRepresenter.from_xml(nil)
157
125
  end
158
126
 
159
127
  end
@@ -165,16 +133,16 @@ class XMLRepresenterFunctionalTest < MiniTest::Spec
165
133
  end
166
134
 
167
135
  it "#serialize skips empty :item" do
168
- assert_xml_equal "<position><id>1</id></position>", @r.serialize
136
+ assert_xml_equal "<position><id>1</id></position>", @r.to_xml
169
137
  end
170
138
 
171
139
  it "#to_xml delegates to ItemRepresenter#to_xml" do
172
140
  @r.item = @i
173
- assert_xml_equal "<position><id>1</id><item><value>Beer</value></item></position>", @r.serialize
141
+ assert_xml_equal "<position><id>1</id><item><value>Beer</value></item></position>", @r.to_xml
174
142
  end
175
143
 
176
144
  it ".from_xml typecasts :item" do
177
- @m = PositionRepresenter.deserialize("<position><id>1</id><item><value>beer</value></item>\n</position>")
145
+ @m = PositionRepresenter.from_xml("<position><id>1</id><item><value>beer</value></item>\n</position>")
178
146
 
179
147
  assert_equal "1", @m.id
180
148
  assert_equal "beer", @m.item.value
@@ -184,28 +152,30 @@ class XMLRepresenterFunctionalTest < MiniTest::Spec
184
152
 
185
153
  describe "with a typed list" do
186
154
  before do
187
- @c = Class.new(Roar::Representer::XML) do
155
+ @c = Class.new do
156
+ include Roar::Representer::XML
157
+
188
158
  self.representation_name= :order
189
- representable_property :id
190
- representable_collection :items, :as => ItemRepresenter, :tag => :item
159
+ property :id
160
+ collection :items, :as => ItemRepresenter, :from => :item
191
161
  end
192
162
 
193
163
  @r = @c.from_attributes("id" => 1)
194
164
  end
195
165
 
196
166
  it "#serialize_model skips empty :item" do
197
- assert_xml_equal "<order><id>1</id></order>", @r.serialize
167
+ assert_xml_equal "<order><id>1</id></order>", @r.to_xml
198
168
  end
199
169
 
200
170
  it "#serialize delegates to ItemXmlRepresenter#to_xml in list" do
201
171
  @r.items = [ItemRepresenter.from_attributes("value" => "Bier")]
202
172
 
203
173
  assert_xml_equal "<order><id>1</id><item><value>Bier</value></item></order>",
204
- @r.serialize
174
+ @r.to_xml
205
175
  end
206
176
 
207
177
  it ".from_xml typecasts list" do
208
- @m = @c.deserialize("<order><id>1</id><item><value>beer</value></item>\n</order>")
178
+ @m = @c.from_xml("<order><id>1</id><item><value>beer</value></item>\n</order>")
209
179
 
210
180
  assert_equal "1", @m.id
211
181
  assert_equal 1, @m.items.size
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 8
8
- - 0
9
- version: 0.8.0
8
+ - 1
9
+ version: 0.8.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nick Sutterer
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-09-13 00:00:00 -05:00
17
+ date: 2011-11-25 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -23,11 +23,13 @@ dependencies:
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
- - - ">="
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
28
  segments:
29
29
  - 0
30
- version: "0"
30
+ - 9
31
+ - 2
32
+ version: 0.9.2
31
33
  type: :runtime
32
34
  version_requirements: *id001
33
35
  - !ruby/object:Gem::Dependency
@@ -71,7 +73,7 @@ dependencies:
71
73
  segments:
72
74
  - 0
73
75
  version: "0"
74
- type: :runtime
76
+ type: :development
75
77
  version_requirements: *id004
76
78
  - !ruby/object:Gem::Dependency
77
79
  name: minitest
@@ -136,13 +138,11 @@ files:
136
138
  - lib/roar/client/entity_proxy.rb
137
139
  - lib/roar/client/proxy.rb
138
140
  - lib/roar/client/transport.rb
139
- - lib/roar/model.rb
140
- - lib/roar/model/representable.rb
141
141
  - lib/roar/rails.rb
142
142
  - lib/roar/rails/controller_methods.rb
143
143
  - lib/roar/rails/representer_methods.rb
144
144
  - lib/roar/rails/test_case.rb
145
- - lib/roar/representer.rb
145
+ - lib/roar/representer/base.rb
146
146
  - lib/roar/representer/feature/http_verbs.rb
147
147
  - lib/roar/representer/feature/hypermedia.rb
148
148
  - lib/roar/representer/feature/model_representing.rb
@@ -187,23 +187,17 @@ files:
187
187
  - test/dummy/tmp/app/cells/blog/post/latest.html.erb
188
188
  - test/dummy/tmp/app/cells/blog/post_cell.rb
189
189
  - test/fake_server.rb
190
- - test/http_verbs_test.rb
191
- - test/hypermedia_test.rb
190
+ - test/http_verbs_feature_test.rb
191
+ - test/hypermedia_feature_test.rb
192
192
  - test/integration_test.rb
193
193
  - test/json_representer_test.rb
194
194
  - test/model_representing_test.rb
195
- - test/model_test.rb
196
195
  - test/order_representers.rb
197
- - test/proxy_test.rb
198
196
  - test/rails/controller_methods_test.rb
199
197
  - test/rails/rails_representer_methods_test.rb
200
- - test/representable_test.rb
201
198
  - test/representer_test.rb
202
- - test/ruby_representation_test.rb
203
199
  - test/test_helper.rb
204
- - test/test_helper_test.rb
205
200
  - test/transport_test.rb
206
- - test/xml_hypermedia_test.rb
207
201
  - test/xml_representer_test.rb
208
202
  has_rdoc: true
209
203
  homepage: http://rubygems.org/gems/roar