roar 0.8.0 → 0.8.1

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