roar-rails 0.0.9 → 0.0.10

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