rocket_pants 1.5.4 → 1.5.5

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/lib/rocket_pants.rb CHANGED
@@ -4,7 +4,6 @@ require 'action_dispatch/routing'
4
4
  require 'action_controller'
5
5
 
6
6
  require 'moneta'
7
- require 'moneta/memory'
8
7
 
9
8
  module RocketPants
10
9
  require 'rocket_pants/error'
@@ -46,12 +45,20 @@ module RocketPants
46
45
 
47
46
  mattr_writer :cache
48
47
 
48
+ begin
49
+ require 'moneta/memory'
50
+ MONETA_LEGACY = true
51
+ rescue LoadError => e
52
+ require 'moneta'
53
+ MONETA_LEGACY = false
54
+ end
55
+
49
56
  class << self
50
57
  alias caching_enabled? caching_enabled
51
58
  alias header_metadata? header_metadata
52
59
 
53
60
  def cache
54
- @@cache ||= Moneta::Memory.new
61
+ @@cache ||= (MONETA_LEGACY ? Moneta::Memory : Moneta::Adapters::Memory).new
55
62
  end
56
63
 
57
64
  def env
@@ -1,28 +1,28 @@
1
1
  module RocketPants
2
2
  module Versioning
3
-
3
+
4
4
  extend ActiveSupport::Concern
5
-
5
+
6
6
  included do
7
7
  class_attribute :_version_range
8
8
  end
9
-
9
+
10
10
  module ClassMethods
11
-
11
+
12
12
  def version(version)
13
13
  version = version..version if version.is_a?(Integer)
14
14
  self._version_range = version
15
15
  before_filter :verify_api_version
16
16
  end
17
-
17
+
18
18
  end
19
-
19
+
20
20
  protected
21
-
21
+
22
22
  def version
23
23
  if !instance_variable_defined?(:@version)
24
24
  @version = begin
25
- version = params[:version]
25
+ version = extract_version_string_with_prefix params[:version], request.symbolized_path_parameters[:rp_prefix]
26
26
  version.presence && Integer(version)
27
27
  rescue ArgumentError
28
28
  nil
@@ -30,10 +30,25 @@ module RocketPants
30
30
  end
31
31
  @version
32
32
  end
33
-
33
+
34
34
  def verify_api_version
35
35
  error! :invalid_version unless version.present? && _version_range.include?(version)
36
36
  end
37
-
37
+
38
+ def extract_version_string_with_prefix(version, prefix)
39
+ if version && prefix.is_a?(Hash)
40
+ # We need to strip the text from the prefix.
41
+ prefix_regexp = /^#{prefix[:text]}/
42
+ version = version.to_s
43
+ if prefix[:required] && version !~ prefix_regexp
44
+ raise ArgumentError, "You required the route version prefix #{prefix[:text]}, but not was given."
45
+ end
46
+ version.gsub prefix_regexp, ''
47
+ else
48
+ # Otherwise, return it intact.
49
+ version
50
+ end
51
+ end
52
+
38
53
  end
39
54
  end
@@ -7,20 +7,37 @@ module RocketPants
7
7
  # @option options [Array<Integer>, Integer] :version the single version to support
8
8
  # @raise [ArgumentError] raised when the version isn't provided.
9
9
  def rocket_pants(options = {}, &blk)
10
- versions = (Array(options.delete(:versions)) + Array(options.delete(:version))).flatten.map(&:to_s)
11
- versions.each do |version|
12
- raise ArgumentError, "Got invalid version: '#{version}'" unless version =~ /\A\d+\Z/
10
+ versions = extract_rocket_pants_versions options
11
+
12
+ defaults = {:format => 'json'}
13
+
14
+ if (optional_prefix = options.delete(:allow_prefix))
15
+ versions.map! { |v| "#{optional_prefix}?#{v}" }
16
+ defaults[:rp_prefix] = {:text => optional_prefix.to_s, :required => false}
17
+ elsif (required_prefix = options.delete(:require_prefix))
18
+ versions.map! { |v| "#{required_prefix}#{v}" }
19
+ defaults[:rp_prefix] = {:text => required_prefix.to_s, :required => true}
13
20
  end
14
21
  versions_regexp = /(#{versions.uniq.join("|")})/
15
22
  raise ArgumentError, 'please provide atleast one version' if versions.empty?
16
23
  options = options.deep_merge({
17
24
  :constraints => {:version => versions_regexp},
18
25
  :path => ':version',
19
- :defaults => {:format => 'json'}
26
+ :defaults => defaults
20
27
  })
21
28
  scope options, &blk
22
29
  end
23
30
  alias api rocket_pants
24
31
 
32
+ private
33
+
34
+ def extract_rocket_pants_versions(options)
35
+ versions = (Array(options.delete(:versions)) + Array(options.delete(:version))).flatten.map(&:to_s)
36
+ versions.each do |version|
37
+ raise ArgumentError, "Got invalid version: '#{version}'" unless version =~ /\A\d+\Z/
38
+ end
39
+ versions
40
+ end
41
+
25
42
  end
26
43
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocket_pants
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.4
4
+ version: 1.5.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,232 +9,232 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-09 00:00:00.000000000 Z
12
+ date: 2012-12-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
16
+ prerelease: false
16
17
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
21
  version: '3.0'
22
+ none: false
22
23
  type: :runtime
23
- prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
25
  requirements:
27
26
  - - ~>
28
27
  - !ruby/object:Gem::Version
29
28
  version: '3.0'
29
+ none: false
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: railties
32
+ prerelease: false
32
33
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
37
  version: '3.0'
38
+ none: false
38
39
  type: :runtime
39
- prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
41
  requirements:
43
42
  - - ~>
44
43
  - !ruby/object:Gem::Version
45
44
  version: '3.0'
45
+ none: false
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: will_paginate
48
+ prerelease: false
48
49
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
53
  version: '3.0'
54
+ none: false
54
55
  type: :runtime
55
- prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
57
  requirements:
59
58
  - - ~>
60
59
  - !ruby/object:Gem::Version
61
60
  version: '3.0'
61
+ none: false
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: hashie
64
+ prerelease: false
64
65
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
69
  version: '1.0'
70
+ none: false
70
71
  type: :runtime
71
- prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
73
  requirements:
75
74
  - - ~>
76
75
  - !ruby/object:Gem::Version
77
76
  version: '1.0'
77
+ none: false
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: api_smith
80
+ prerelease: false
80
81
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
82
  requirements:
83
83
  - - ! '>='
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
+ none: false
86
87
  type: :runtime
87
- prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
89
  requirements:
91
90
  - - ! '>='
92
91
  - !ruby/object:Gem::Version
93
92
  version: '0'
93
+ none: false
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: moneta
96
+ prerelease: false
96
97
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
98
  requirements:
99
99
  - - ! '>='
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
+ none: false
102
103
  type: :runtime
103
- prerelease: false
104
104
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
105
  requirements:
107
106
  - - ! '>='
108
107
  - !ruby/object:Gem::Version
109
108
  version: '0'
109
+ none: false
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: rspec
112
+ prerelease: false
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
115
  - - ~>
116
116
  - !ruby/object:Gem::Version
117
117
  version: '2.4'
118
+ none: false
118
119
  type: :development
119
- prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
122
  - - ~>
124
123
  - !ruby/object:Gem::Version
125
124
  version: '2.4'
125
+ none: false
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rspec-rails
128
+ prerelease: false
128
129
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
130
  requirements:
131
131
  - - ~>
132
132
  - !ruby/object:Gem::Version
133
133
  version: '2.4'
134
+ none: false
134
135
  type: :development
135
- prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
137
  requirements:
139
138
  - - ~>
140
139
  - !ruby/object:Gem::Version
141
140
  version: '2.4'
141
+ none: false
142
142
  - !ruby/object:Gem::Dependency
143
143
  name: rr
144
+ prerelease: false
144
145
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
146
  requirements:
147
147
  - - ~>
148
148
  - !ruby/object:Gem::Version
149
149
  version: '1.0'
150
+ none: false
150
151
  type: :development
151
- prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
153
  requirements:
155
154
  - - ~>
156
155
  - !ruby/object:Gem::Version
157
156
  version: '1.0'
157
+ none: false
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: webmock
160
+ prerelease: false
160
161
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
162
  requirements:
163
163
  - - ! '>='
164
164
  - !ruby/object:Gem::Version
165
165
  version: '0'
166
+ none: false
166
167
  type: :development
167
- prerelease: false
168
168
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
169
  requirements:
171
170
  - - ! '>='
172
171
  - !ruby/object:Gem::Version
173
172
  version: '0'
173
+ none: false
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: activerecord
176
+ prerelease: false
176
177
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
178
  requirements:
179
179
  - - ~>
180
180
  - !ruby/object:Gem::Version
181
181
  version: '3.0'
182
+ none: false
182
183
  type: :development
183
- prerelease: false
184
184
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
185
  requirements:
187
186
  - - ~>
188
187
  - !ruby/object:Gem::Version
189
188
  version: '3.0'
189
+ none: false
190
190
  - !ruby/object:Gem::Dependency
191
- name: sqlite3-ruby
191
+ name: sqlite3
192
+ prerelease: false
192
193
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
194
  requirements:
195
195
  - - ! '>='
196
196
  - !ruby/object:Gem::Version
197
197
  version: '0'
198
+ none: false
198
199
  type: :development
199
- prerelease: false
200
200
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
201
  requirements:
203
202
  - - ! '>='
204
203
  - !ruby/object:Gem::Version
205
204
  version: '0'
205
+ none: false
206
206
  - !ruby/object:Gem::Dependency
207
207
  name: reversible_data
208
+ prerelease: false
208
209
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
210
  requirements:
211
211
  - - ~>
212
212
  - !ruby/object:Gem::Version
213
213
  version: '1.0'
214
+ none: false
214
215
  type: :development
215
- prerelease: false
216
216
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
217
  requirements:
219
218
  - - ~>
220
219
  - !ruby/object:Gem::Version
221
220
  version: '1.0'
221
+ none: false
222
222
  - !ruby/object:Gem::Dependency
223
223
  name: kaminari
224
+ prerelease: false
224
225
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
226
  requirements:
227
227
  - - ! '>='
228
228
  - !ruby/object:Gem::Version
229
229
  version: '0'
230
+ none: false
230
231
  type: :development
231
- prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
233
  requirements:
235
234
  - - ! '>='
236
235
  - !ruby/object:Gem::Version
237
236
  version: '0'
237
+ none: false
238
238
  description: Rocket Pants adds JSON API love to Rails and ActionController, making
239
239
  it simpler to build API-oriented controllers.
240
240
  email:
@@ -275,20 +275,17 @@ rdoc_options: []
275
275
  require_paths:
276
276
  - lib
277
277
  required_ruby_version: !ruby/object:Gem::Requirement
278
- none: false
279
278
  requirements:
280
279
  - - ! '>='
281
280
  - !ruby/object:Gem::Version
282
281
  version: '0'
283
- segments:
284
- - 0
285
- hash: 1041762551203045726
286
- required_rubygems_version: !ruby/object:Gem::Requirement
287
282
  none: false
283
+ required_rubygems_version: !ruby/object:Gem::Requirement
288
284
  requirements:
289
285
  - - ! '>='
290
286
  - !ruby/object:Gem::Version
291
287
  version: 1.3.6
288
+ none: false
292
289
  requirements: []
293
290
  rubyforge_project:
294
291
  rubygems_version: 1.8.24