sinatra-rabbit 1.0.1 → 1.0.2

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.
@@ -64,27 +64,27 @@ module Sinatra
64
64
  end
65
65
 
66
66
  def self.configuration
67
- @configuration || {}
67
+ Thread.current[:rabbit_configuration] ||= {}
68
68
  end
69
69
 
70
70
  def self.enable(property)
71
- @configuration[property] = true
71
+ configuration[property] = true
72
72
  end
73
73
 
74
74
  def self.enabled?(property)
75
- !@configuration[property].nil? and @configuration[property] == true
75
+ !configuration[property].nil? and configuration[property] == true
76
76
  end
77
77
 
78
78
  def self.disabled?(property)
79
- !@configuration[property].nil? and @configuration[property] == false
79
+ !configuration[property].nil? and configuration[property] == false
80
80
  end
81
81
 
82
82
  def self.disable(property)
83
- @configuration[property] = false
83
+ configuration[property] = false
84
84
  end
85
85
 
86
86
  def self.set(property, value)
87
- @configuration[property] = value
87
+ configuration[property] = value
88
88
  end
89
89
 
90
90
  # Automatically register the DSL to Sinatra::Base if this
@@ -97,9 +97,7 @@ module Sinatra
97
97
  # end
98
98
  #
99
99
  def self.included(base)
100
- @configuration ||= {
101
- :root_path => '/'
102
- }
100
+ configuration[:root_path] = '/'
103
101
  base.register(DSL)
104
102
  end
105
103
 
@@ -153,6 +151,10 @@ module Sinatra
153
151
  base_class.features.select { |f| f.collection == collection_name }
154
152
  end
155
153
 
154
+ def self.feature(name)
155
+ features.find { |f| f.name == name }
156
+ end
157
+
156
158
  def self.with_id!(id)
157
159
  @with_id = ":#{id}"
158
160
  end
@@ -189,7 +191,7 @@ module Sinatra
189
191
  end
190
192
 
191
193
  # Create operation class
192
- operation = operation_class(self, operation_name).generate(self, operation_name, &block)
194
+ operation = operation_class(self, operation_name).generate(self, operation_name, opts, &block)
193
195
  @operations << operation
194
196
 
195
197
  # Generate HEAD routes
@@ -244,9 +246,13 @@ module Sinatra
244
246
  @method ||= method || BaseCollection.http_method_for(@name)
245
247
  end
246
248
 
247
- def self.generate(collection, name, &block)
249
+ def self.generate(collection, name, opts={}, &block)
248
250
  @name, @params, @collection = name, [], collection
251
+ @options = opts
249
252
  @collection.features.select { |f| f.operations.map { |o| o.name}.include?(@name) }.each do |feature|
253
+ if Sinatra::Rabbit.configuration[:check_features]
254
+ next unless Sinatra::Rabbit.configuration[:check_features].call(collection.collection_name, feature.name)
255
+ end
250
256
  feature.operations.each do |o|
251
257
  instance_eval(&o.params)
252
258
  end
@@ -272,6 +278,11 @@ module Sinatra
272
278
 
273
279
  def self.control(&block)
274
280
  params_def = @params
281
+ if Sinatra::Rabbit.configuration[:check_capability] and @options.has_key?(:with_capability)
282
+ unless Sinatra::Rabbit.configuration[:check_capability].call(@options.delete(:with_capability))
283
+ @control = Proc.new { [412, {}, "Required capability is missing for current resource and configuration"] }
284
+ end
285
+ end
275
286
  @control ||= Proc.new do
276
287
  begin
277
288
  Rabbit::Validator.validate!(params, params_def)
@@ -18,13 +18,16 @@ module Sinatra
18
18
  module Rabbit
19
19
  class Feature
20
20
  attr_reader :name
21
+ attr_reader :description
21
22
  attr_reader :collection
22
23
  attr_reader :operations
24
+ attr_reader :constraints
23
25
 
24
26
  def initialize(name, opts={}, &block)
25
27
  @name = name
26
28
  @operations = []
27
29
  @collection = opts[:for]
30
+ @constraints = {}
28
31
  raise "Each feature must define collection for which it will be valid using :for parameter" unless @collection
29
32
  instance_eval(&block) if block_given?
30
33
  end
@@ -34,6 +37,14 @@ module Sinatra
34
37
  @operations.find { |o| o.name == name }
35
38
  end
36
39
 
40
+ def description(s=nil)
41
+ @description ||= s
42
+ end
43
+
44
+ def constraint(name, value)
45
+ @constraints[name] = value
46
+ end
47
+
37
48
  class Operation
38
49
  attr_reader :name
39
50
  attr_reader :params
@@ -49,14 +60,20 @@ module Sinatra
49
60
  module Features
50
61
 
51
62
  def features(&block)
52
- @@features ||= []
63
+ @features ||= []
53
64
  instance_eval(&block) if block_given?
54
- @@features
65
+ @features
55
66
  end
56
67
 
57
68
  def feature(name, opts={}, &block)
58
- @@features << Feature.new(name, opts, &block) if block_given?
59
- @@features.find { |f| f.name == name }
69
+ feature = @features.find { |f| f.name == name }
70
+ return feature unless block_given?
71
+ if feature
72
+ feature.class_eval(&block)
73
+ else
74
+ @features << Feature.new(name, opts, &block) if block_given?
75
+ end
76
+ @features.find { |f| f.name == name }
60
77
  end
61
78
 
62
79
  def self.included(base)
@@ -29,7 +29,7 @@ Gem::Specification.new do |s|
29
29
  a simple REST API using easy to undestand DSL.
30
30
  EOF
31
31
 
32
- s.version = '1.0.1'
32
+ s.version = '1.0.2'
33
33
  s.date = Time.now
34
34
  s.summary = %q{Sinatra REST API DSL}
35
35
  s.files = FileList[
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-rabbit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
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-04-02 00:00:00.000000000 Z
12
+ date: 2012-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70156043073960 !ruby/object:Gem::Requirement
16
+ requirement: &70094500372800 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 1.3.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70156043073960
24
+ version_requirements: *70094500372800
25
25
  description: ! " Rabbit is a Sinatra extension which can help you writing\n a
26
26
  simple REST API using easy to undestand DSL.\n"
27
27
  email: dev@deltacloud.apache.org