roar-rails 0.0.6 → 0.0.7
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/CHANGES.markdown +4 -0
- data/README.markdown +14 -2
- data/lib/roar/rails/responder.rb +16 -4
- data/lib/roar/rails/version.rb +1 -1
- data/test/responder_test.rb +90 -26
- metadata +2 -2
data/CHANGES.markdown
CHANGED
data/README.markdown
CHANGED
@@ -26,7 +26,7 @@ class SingersController < ApplicationController
|
|
26
26
|
end
|
27
27
|
```
|
28
28
|
|
29
|
-
Need to use a representer with a different name than your model? Pass it in using the `:
|
29
|
+
Need to use a representer with a different name than your model? Pass it in using the `:represent_with` option:
|
30
30
|
|
31
31
|
```ruby
|
32
32
|
class SingersController < ApplicationController
|
@@ -35,7 +35,19 @@ class SingersController < ApplicationController
|
|
35
35
|
|
36
36
|
def show
|
37
37
|
singer = Musician.find_by_id(params[:id])
|
38
|
-
respond_with singer, :
|
38
|
+
respond_with singer, :represent_with => SingerRepresenter
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
If you don't want to write a dedicated representer for a collection of items (highly recommended, thou) but rather use a representer for each item, use the `+represent_items_with+` option.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
class SingersController < ApplicationController
|
47
|
+
|
48
|
+
def index
|
49
|
+
singers = Musician.find(:all)
|
50
|
+
respond_with singers, :represent_items_with => SingerRepresenter
|
39
51
|
end
|
40
52
|
end
|
41
53
|
```
|
data/lib/roar/rails/responder.rb
CHANGED
@@ -8,18 +8,29 @@ module Roar::Rails
|
|
8
8
|
|
9
9
|
private
|
10
10
|
def representer_for_model(model)
|
11
|
-
|
11
|
+
class_name = model.class.name
|
12
|
+
"#{class_name}Representer".constantize
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
module Responder
|
16
17
|
include ModelMethods
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
representer = options.delete(:
|
19
|
+
# DISCUSS: why THE FUCK is options not passed as a method argument but kept as an internal instance variable in the responder? this is something i will never understand about Rails.
|
20
|
+
def display(model, *args)
|
21
|
+
if representer = options.delete(:represent_with)
|
22
|
+
# this is the new behaviour.
|
23
|
+
model.extend(representer) # FIXME: move to method.
|
24
|
+
return super
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
representer = options.delete(:with_representer) and ActiveSupport::Deprecation.warn(":with_representer is deprecated and will be removed in roar-rails 1.0. Use :represent_with or :represent_items_with.")
|
29
|
+
representer ||= options.delete(:represent_items_with) # new API.
|
21
30
|
|
22
31
|
if model.respond_to?(:map!)
|
32
|
+
ActiveSupport::Deprecation.warn("Calling #respond_with with a collection will misbehave in future versions of roar-rails. Use :represent_items_with to get the old behaviour.")
|
33
|
+
|
23
34
|
model.map! do |m|
|
24
35
|
extend_with_representer!(m, representer)
|
25
36
|
m.to_hash
|
@@ -27,6 +38,7 @@ module Roar::Rails
|
|
27
38
|
else
|
28
39
|
extend_with_representer!(model, representer)
|
29
40
|
end
|
41
|
+
|
30
42
|
super
|
31
43
|
end
|
32
44
|
end
|
data/lib/roar/rails/version.rb
CHANGED
data/test/responder_test.rb
CHANGED
@@ -2,6 +2,16 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
Singer = Struct.new(:name)
|
4
4
|
|
5
|
+
module SingersRepresenter
|
6
|
+
include Roar::Representer::JSON
|
7
|
+
|
8
|
+
collection :singers, :extend => SingerRepresenter
|
9
|
+
def singers
|
10
|
+
each
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
|
5
15
|
class ResponderTest < ActionController::TestCase
|
6
16
|
include Roar::Rails::TestCase
|
7
17
|
|
@@ -9,48 +19,103 @@ class ResponderTest < ActionController::TestCase
|
|
9
19
|
include Roar::Rails::ControllerAdditions
|
10
20
|
respond_to :json
|
11
21
|
|
12
|
-
def
|
22
|
+
def execute
|
23
|
+
instance_exec &@block
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def get(&block)
|
28
|
+
@controller.instance_eval do
|
29
|
+
@block = block
|
30
|
+
end
|
31
|
+
|
32
|
+
super :execute, :format => 'json'
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
tests SingersController
|
37
|
+
|
38
|
+
test ":with_representer is deprecated" do
|
39
|
+
assert_deprecated do
|
40
|
+
get do
|
41
|
+
singer = Musician.new("Bumi")
|
42
|
+
respond_with singer, :with_representer => SingerRepresenter
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
test "responder allows specifying representer" do # TODO: remove in 1.0.
|
49
|
+
get do
|
13
50
|
singer = Musician.new("Bumi")
|
14
51
|
respond_with singer, :with_representer => SingerRepresenter
|
15
52
|
end
|
53
|
+
|
54
|
+
assert_equal singer.to_json, @response.body
|
55
|
+
end
|
16
56
|
|
17
|
-
|
57
|
+
test "responder finds representer by convention" do
|
58
|
+
get do
|
18
59
|
singer = Singer.new("Bumi")
|
19
60
|
respond_with singer
|
20
61
|
end
|
62
|
+
|
63
|
+
assert_equal singer.to_json, @response.body
|
64
|
+
end
|
65
|
+
|
66
|
+
|
21
67
|
|
22
|
-
|
23
|
-
|
24
|
-
|
68
|
+
test "responder works with collections" do # TODO: remove in 1.0.
|
69
|
+
assert_deprecated do
|
70
|
+
get do
|
71
|
+
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
|
72
|
+
respond_with singers
|
73
|
+
end
|
25
74
|
end
|
75
|
+
|
76
|
+
assert_equal singers.map(&:to_hash).to_json, @response.body
|
77
|
+
end
|
26
78
|
|
27
|
-
|
79
|
+
test "custom responder works with collections" do # TODO: remove in 1.0.
|
80
|
+
get do
|
28
81
|
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
|
29
82
|
respond_with singers, :with_representer => SingerAliasRepresenter
|
30
83
|
end
|
84
|
+
|
85
|
+
assert_equal singers.map {|s| s.extend(SingerAliasRepresenter).to_hash }.to_json, @response.body
|
31
86
|
end
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
test "
|
36
|
-
get
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
assert_equal singer.to_json, @response.body
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
test "use passed :represent_with representer for single model" do
|
91
|
+
get do
|
92
|
+
singer = Musician.new("Bumi")
|
93
|
+
respond_with singer, :with_representer => SingerRepresenter
|
94
|
+
end
|
95
|
+
|
96
|
+
assert_equal singer.extend(SingerRepresenter).to_json, @response.body
|
43
97
|
end
|
44
|
-
|
45
|
-
test "
|
46
|
-
get
|
47
|
-
|
98
|
+
|
99
|
+
test "use passed :represent_with representer for collection" do
|
100
|
+
get do
|
101
|
+
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
|
102
|
+
respond_with singers, :represent_with => SingersRepresenter
|
103
|
+
end
|
104
|
+
|
105
|
+
assert_equal({:singers => singers.collect {|s| s.extend(SingerRepresenter).to_hash }}.to_json, @response.body)
|
48
106
|
end
|
49
|
-
|
50
|
-
test "
|
51
|
-
get
|
52
|
-
|
107
|
+
|
108
|
+
test "use passed :represent_items_with for collection items" do
|
109
|
+
get do
|
110
|
+
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
|
111
|
+
respond_with singers, :represent_items_with => SingerRepresenter
|
112
|
+
end
|
113
|
+
|
114
|
+
assert_equal(singers.collect {|s| s.extend(SingerRepresenter).to_hash }.to_json, @response.body)
|
53
115
|
end
|
116
|
+
|
117
|
+
|
118
|
+
|
54
119
|
|
55
120
|
def singer(name="Bumi")
|
56
121
|
singer = Musician.new(name)
|
@@ -60,5 +125,4 @@ class ResponderTest < ActionController::TestCase
|
|
60
125
|
def singers
|
61
126
|
[singer("Bumi"), singer("Bjork"), singer("Sinead")]
|
62
127
|
end
|
63
|
-
|
64
128
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roar-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: roar
|