sinatra-api-helpers 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ class String
2
+ unless String.instance_methods.include?(:camelize)
3
+ def camelize
4
+ s = self.sub(/[_|\s]\w/) { |f| f[1].capitalize }
5
+ s[0] = s[0].upcase
6
+ s
7
+ end
8
+ end
9
+ end
@@ -22,6 +22,12 @@
22
22
  module Sinatra
23
23
  # TODO: accept nested parameters
24
24
  module API
25
+ public
26
+
27
+ attr_accessor :resource_aliases
28
+
29
+ ResourcePrefix = '::'
30
+
25
31
  module Helpers
26
32
  def api_call?
27
33
  (request.accept || '').to_s.include?('json') ||
@@ -165,10 +171,10 @@ module Sinatra
165
171
  def __api_locate_resource(r, container = nil)
166
172
 
167
173
  resource_id = params[r + '_id'].to_i
168
- rklass = r.capitalize
174
+ rklass = r.camelize
169
175
 
170
176
  collection = case
171
- when container.nil?; eval "#{rklass}"
177
+ when container.nil?; eval "#{ResourcePrefix}#{rklass}"
172
178
  else; container.send("#{r.to_plural}")
173
179
  end
174
180
 
@@ -193,6 +199,11 @@ module Sinatra
193
199
 
194
200
  instance_variable_set('@'+r, resource)
195
201
 
202
+ API.aliases_for(r).each { |resource_alias|
203
+ instance_variable_set('@'+resource_alias, resource)
204
+ puts "API: resource #{rklass} exported to @#{resource_alias}"
205
+ }
206
+
196
207
  resource
197
208
  end
198
209
 
@@ -222,6 +233,8 @@ module Sinatra
222
233
  end
223
234
 
224
235
  def self.registered(app)
236
+ @@api_resource_aliases ||= {}
237
+
225
238
  app.helpers Helpers
226
239
  app.before do
227
240
  @api = { required: {}, optional: {} }
@@ -252,5 +265,18 @@ module Sinatra
252
265
  end
253
266
 
254
267
  end
268
+
269
+ def self.alias_resource(original, resource_alias)
270
+ @@resource_aliases ||= {}
271
+ @@resource_aliases[original.to_sym] ||= []
272
+ @@resource_aliases[original.to_sym] << resource_alias.to_s
273
+
274
+ puts "API resource #{original} is now aliased as #{resource_alias}"
275
+ end
276
+
277
+ def self.aliases_for(resource)
278
+ @@resource_aliases ||= {}
279
+ @@resource_aliases[resource.to_sym] || []
280
+ end
255
281
  end
256
282
  end
@@ -21,6 +21,6 @@
21
21
 
22
22
  module Sinatra
23
23
  module API
24
- VERSION = "1.0.0"
24
+ VERSION = "1.0.1"
25
25
  end
26
26
  end
@@ -23,7 +23,10 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
23
23
 
24
24
  require 'json'
25
25
  require 'sinatra/base'
26
- require 'sinatra/api/ext/hash'
26
+ require 'active_support/core_ext/hash'
27
+ require 'active_support/core_ext/string'
28
+ # require 'sinatra/api/ext/hash'
29
+ # require 'sinatra/api/ext/string'
27
30
  require 'sinatra/api/version'
28
31
  require 'sinatra/api/helpers'
29
32
 
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
 
18
18
  s.add_dependency 'json'
19
19
  s.add_dependency 'sinatra'
20
+ s.add_dependency 'activesupport'
20
21
 
21
22
  s.add_development_dependency 'rspec'
22
23
  s.add_development_dependency 'rack-test'
@@ -120,4 +120,9 @@ describe "Helpers" do
120
120
  last_response.status.should == 404
121
121
  last_response.body.should match /No such resource/
122
122
  end
123
+
124
+ it "should define a resource alias" do
125
+ Sinatra::API.alias_resource :item, :item_alias
126
+ Sinatra::API.aliases_for(:item).should == [ 'item_alias' ]
127
+ end
123
128
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-api-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
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: 2013-09-19 00:00:00.000000000 Z
12
+ date: 2013-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: activesupport
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: rspec
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +116,7 @@ files:
100
116
  - lib/sinatra-api-helpers.rb
101
117
  - lib/sinatra/api/helpers.rb
102
118
  - lib/sinatra/api/version.rb
119
+ - lib/sinatra/api/ext/string.rb
103
120
  - lib/sinatra/api/ext/hash.rb
104
121
  - spec/unit/helpers_spec.rb
105
122
  - spec/helpers/router.rb