roar-rails 0.0.9 → 0.0.10

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 CHANGED
@@ -1,3 +1,7 @@
1
+ h2. 0.0.10
2
+
3
+ * Empty resources now work properly in Rails 3.0 and 3.1.
4
+
1
5
  h2. 0.0.9
2
6
 
3
7
  * Changed `request.body.string` to `read` to make it work with Unicorn.
data/lib/roar-rails.rb CHANGED
@@ -17,11 +17,24 @@ module Roar::Representer
17
17
  end
18
18
 
19
19
 
20
+
20
21
  module Roar
21
22
  module Rails
23
+ def self.rails3_0?
24
+ ::Rails::VERSION::MINOR == 0
25
+ end
26
+
27
+ if rails3_0?
28
+ require 'roar/rails/rails3_0_strategy'
29
+ else
30
+ require 'roar/rails/rails3_1_strategy'
31
+ end
32
+
22
33
  autoload("TestCase", "roar/rails/test_case")
23
34
  autoload("ControllerAdditions", "roar/rails/controller_additions")
24
35
  autoload("Responder", "roar/rails/responder")
25
36
  autoload("ModelMethods", "roar/rails/responder")
26
37
  end
27
38
  end
39
+
40
+
@@ -1,10 +1,13 @@
1
+ require 'hooks/inheritable_attribute'
2
+
1
3
  module Roar::Rails
2
4
  module ControllerAdditions
3
5
  extend ActiveSupport::Concern
4
6
  include ModelMethods
5
7
 
6
8
  included do
7
- class_attribute :represents_options
9
+ extend Hooks::InheritableAttribute
10
+ inheritable_attr :represents_options
8
11
  self.represents_options ||= {}
9
12
  end
10
13
 
@@ -0,0 +1,12 @@
1
+ module Roar::Rails
2
+ module Responder
3
+ module VersionStrategy
4
+ def prepare_model!(model)
5
+ # rails <= 3.1 compatibility. #display gets called for empty responses
6
+ # >= 3.2 fixes by calling #head, not #display for all empty bodies (PUT, DELETE)
7
+ return if respond_to?("empty_#{format}_resource") && model == empty_resource
8
+ super
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ module Roar::Rails
2
+ module Responder
3
+ module VersionStrategy
4
+ end
5
+ end
6
+ end
@@ -1,9 +1,15 @@
1
1
  module Roar::Rails
2
2
  module ModelMethods
3
+ private
3
4
  # DISCUSS: move this into a generic namespace as we could need that in Sinatra as well.
4
5
  def extend_with!(model, representer)
5
6
  model.extend(representer)
6
7
  end
8
+
9
+ def prepare_model!(model)
10
+ representer = controller.representer_for(format, model, options)
11
+ extend_with!(model, representer)
12
+ end
7
13
  end
8
14
 
9
15
  module Responder
@@ -16,8 +22,8 @@ module Roar::Rails
16
22
  return super
17
23
  end
18
24
 
19
- representer = controller.representer_for(format, model, options)
20
- extend_with!(model, representer)
25
+ prepare_model!(model)
26
+
21
27
  super
22
28
  end
23
29
 
@@ -29,5 +35,6 @@ module Roar::Rails
29
35
  end
30
36
  end
31
37
 
38
+ include VersionStrategy
32
39
  end
33
40
  end
@@ -1,5 +1,5 @@
1
1
  module Roar
2
2
  module Rails
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
5
5
  end
data/roar-rails.gemspec CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_runtime_dependency "test_xml"
23
23
  s.add_runtime_dependency "actionpack", "~> 3.0"
24
24
  s.add_runtime_dependency "railties", "~> 3.0"
25
+ s.add_runtime_dependency "hooks"
25
26
 
26
27
  s.add_development_dependency "minitest", ">= 2.8.1"
27
28
  s.add_development_dependency "tzinfo" # FIXME: why the hell do we need this for 3.1?
@@ -113,13 +113,26 @@ class ResponderTest < ActionController::TestCase
113
113
  instance_exec &@block
114
114
  end
115
115
  end
116
-
116
+
117
+ class UniqueRepresentsOptionsTest < ResponderTest
118
+ class One < BaseController
119
+ represents :json, Object
120
+ end
121
+ class Two < BaseController
122
+ represents :json, Singer
123
+ end
124
+ test "each subclass of a roar-augmented controller can represent different things" do
125
+ assert_not_equal One.represents_options, Two.represents_options
126
+ end
127
+ end
128
+
117
129
  class UnconfiguredControllerTest < ResponderTest
130
+ SingersRepresenter = ::SingersRepresenter
118
131
  class SingersController < BaseController
119
132
  end
120
-
133
+
121
134
  tests SingersController
122
-
135
+
123
136
  test "responder finds SingerRepresenter representer by convention" do
124
137
  get do
125
138
  singer = Singer.new("Bumi")
@@ -137,8 +150,17 @@ class ResponderTest < ActionController::TestCase
137
150
 
138
151
  assert_equal({:singers => singers.collect {|s| s.extend(SingerRepresenter).to_hash }}.to_json, @response.body)
139
152
  end
153
+
154
+ test "responder allows empty response bodies to pass through" do
155
+ put do
156
+ singer = Singer.new("Bumi")
157
+ respond_with singer
158
+ end
159
+ end
160
+
140
161
  end
141
-
162
+
163
+
142
164
  class RespondToOptionsOverridingConfigurationTest < ResponderTest
143
165
  class SingersController < BaseController
144
166
  represents :json, Object
@@ -207,6 +229,13 @@ class ResponderTest < ActionController::TestCase
207
229
 
208
230
  super :execute, :format => 'json'
209
231
  end
232
+
233
+ def put(&block)
234
+ @controller.instance_eval do
235
+ @block = block
236
+ end
237
+ super :execute, :format => 'json'
238
+ end
210
239
 
211
240
  def singer(name="Bumi")
212
241
  singer = Musician.new(name)
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.9
4
+ version: 0.0.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-29 00:00:00.000000000 Z
12
+ date: 2012-07-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: roar
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &69918720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,15 +21,10 @@ dependencies:
21
21
  version: '0.10'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '0.10'
24
+ version_requirements: *69918720
30
25
  - !ruby/object:Gem::Dependency
31
26
  name: test_xml
32
- requirement: !ruby/object:Gem::Requirement
27
+ requirement: &69918510 !ruby/object:Gem::Requirement
33
28
  none: false
34
29
  requirements:
35
30
  - - ! '>='
@@ -37,15 +32,10 @@ dependencies:
37
32
  version: '0'
38
33
  type: :runtime
39
34
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
35
+ version_requirements: *69918510
46
36
  - !ruby/object:Gem::Dependency
47
37
  name: actionpack
48
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &69918240 !ruby/object:Gem::Requirement
49
39
  none: false
50
40
  requirements:
51
41
  - - ~>
@@ -53,15 +43,10 @@ dependencies:
53
43
  version: '3.0'
54
44
  type: :runtime
55
45
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '3.0'
46
+ version_requirements: *69918240
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: railties
64
- requirement: !ruby/object:Gem::Requirement
49
+ requirement: &69917990 !ruby/object:Gem::Requirement
65
50
  none: false
66
51
  requirements:
67
52
  - - ~>
@@ -69,15 +54,21 @@ dependencies:
69
54
  version: '3.0'
70
55
  type: :runtime
71
56
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
57
+ version_requirements: *69917990
58
+ - !ruby/object:Gem::Dependency
59
+ name: hooks
60
+ requirement: &69917800 !ruby/object:Gem::Requirement
73
61
  none: false
74
62
  requirements:
75
- - - ~>
63
+ - - ! '>='
76
64
  - !ruby/object:Gem::Version
77
- version: '3.0'
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *69917800
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: minitest
80
- requirement: !ruby/object:Gem::Requirement
71
+ requirement: &69917530 !ruby/object:Gem::Requirement
81
72
  none: false
82
73
  requirements:
83
74
  - - ! '>='
@@ -85,15 +76,10 @@ dependencies:
85
76
  version: 2.8.1
86
77
  type: :development
87
78
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: 2.8.1
79
+ version_requirements: *69917530
94
80
  - !ruby/object:Gem::Dependency
95
81
  name: tzinfo
96
- requirement: !ruby/object:Gem::Requirement
82
+ requirement: &68875180 !ruby/object:Gem::Requirement
97
83
  none: false
98
84
  requirements:
99
85
  - - ! '>='
@@ -101,12 +87,7 @@ dependencies:
101
87
  version: '0'
102
88
  type: :development
103
89
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
90
+ version_requirements: *68875180
110
91
  description: Rails extensions for using Roar in the popular web framework.
111
92
  email:
112
93
  - apotonick@gmail.com
@@ -124,6 +105,8 @@ files:
124
105
  - gemfiles/Gemfile.rails3-2
125
106
  - lib/roar-rails.rb
126
107
  - lib/roar/rails/controller_additions.rb
108
+ - lib/roar/rails/rails3_0_strategy.rb
109
+ - lib/roar/rails/rails3_1_strategy.rb
127
110
  - lib/roar/rails/railtie.rb
128
111
  - lib/roar/rails/responder.rb
129
112
  - lib/roar/rails/test_case.rb
@@ -192,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
192
175
  version: '0'
193
176
  requirements: []
194
177
  rubyforge_project: roar-rails
195
- rubygems_version: 1.8.24
178
+ rubygems_version: 1.8.10
196
179
  signing_key:
197
180
  specification_version: 3
198
181
  summary: Use Roar in Rails.