sinatra-has_scope 0.0.2 → 0.1.0

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/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ Gemfile.lock
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :gemcutter
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in sinatra-has_scope.gemspec
4
4
  gemspec
@@ -13,6 +13,11 @@ module Sinatra
13
13
 
14
14
  attr_accessor :scopes_configuration
15
15
 
16
+ def self.registered(base)
17
+ base.scopes_configuration = { }
18
+ base.helpers HasScope::Helpers
19
+ end
20
+
16
21
  # Detects params from url and apply as scopes to your classes.
17
22
  #
18
23
  # == Options
@@ -66,75 +71,77 @@ module Sinatra
66
71
  end
67
72
  end
68
73
 
69
- # Receives an object where scopes will be applied to.
70
- #
71
- # has_scope :graduation, :featured, :type => true
72
- # has_scope :graduation, :by_degree
73
- #
74
- # get '/graduations' do
75
- # @graduations = apply_scopes(:graduation, Graduation, params).all
76
- # end
77
- #
78
- def apply_scopes(scope_group, target, hash)
79
- return target unless scopes_configuration
80
-
81
- if self.scopes_configuration.key?(scope_group)
82
- self.scopes_configuration[scope_group].each do |scope, options|
83
- key = options[:as].to_s
84
-
85
- if hash.key?(key)
86
- value, call_scope = hash[key], true
87
- elsif options.key?(:default)
88
- value, call_scope = options[:default], true
89
- value = value.call(self) if value.is_a?(Proc)
90
- end
91
-
92
- value = parse_value(options[:type], key, value)
93
-
94
- if call_scope && (value.present? || options[:allow_blank])
95
- target = call_scope_by_type(options[:type], scope, target, value, options)
74
+ module Helpers
75
+ # Receives an object where scopes will be applied to.
76
+ #
77
+ # has_scope :graduation, :featured, :type => true
78
+ # has_scope :graduation, :by_degree
79
+ #
80
+ # get '/graduations' do
81
+ # @graduations = apply_scopes(:graduation, Graduation, params).all
82
+ # end
83
+ #
84
+ def apply_scopes(scope_group, target, hash)
85
+ return target unless settings.scopes_configuration
86
+
87
+ if settings.scopes_configuration.key?(scope_group)
88
+ settings.scopes_configuration[scope_group].each do |scope, options|
89
+ key = options[:as].to_s
90
+
91
+ if hash.key?(key)
92
+ value, call_scope = hash[key], true
93
+ elsif options.key?(:default)
94
+ value, call_scope = options[:default], true
95
+ value = value.call(self) if value.is_a?(Proc)
96
+ end
97
+
98
+ value = parse_value(options[:type], key, value)
99
+
100
+ if call_scope && (value.present? || options[:allow_blank])
101
+ target = call_scope_by_type(options[:type], scope, target, value, options)
102
+ end
96
103
  end
97
104
  end
98
- end
99
105
 
100
- target
101
- end
102
-
103
- # Set the real value for the current scope if type check.
104
- def parse_value(type, key, value) #:nodoc:
105
- if type == :boolean
106
- TRUE_VALUES.include?(value)
107
- elsif value && ALLOWED_TYPES[type].none?{ |klass| value.is_a?(klass) }
108
- raise "Expected type :#{type} in params[:#{key}], got #{value.class}"
109
- else
110
- value
106
+ target
111
107
  end
112
- end
113
108
 
114
- # Call the scope taking into account its type.
115
- def call_scope_by_type(type, scope, target, value, options) #:nodoc:
116
- if type == :boolean
117
- target.send(scope)
118
- elsif value && options.key?(:using)
119
- value = value.values_at(*options[:using])
120
- target.send(scope, *value)
121
- else
122
- target.send(scope, value)
109
+ # Set the real value for the current scope if type check.
110
+ def parse_value(type, key, value) #:nodoc:
111
+ if type == :boolean
112
+ TRUE_VALUES.include?(value)
113
+ elsif value && ALLOWED_TYPES[type].none?{ |klass| value.is_a?(klass) }
114
+ raise "Expected type :#{type} in params[:#{key}], got #{value.class}"
115
+ else
116
+ value
117
+ end
123
118
  end
124
- end
125
119
 
126
- # Evaluates the scope options :if or :unless. Returns true if the proc
127
- # method, or string evals to the expected value.
128
- def applicable?(string_proc_or_symbol, expected) #:nodoc:
129
- case string_proc_or_symbol
130
- when String
131
- eval(string_proc_or_symbol) == expected
132
- when Proc
133
- string_proc_or_symbol.call(self) == expected
134
- when Symbol
135
- send(string_proc_or_symbol) == expected
120
+ # Call the scope taking into account its type.
121
+ def call_scope_by_type(type, scope, target, value, options) #:nodoc:
122
+ if type == :boolean
123
+ target.send(scope)
124
+ elsif value && options.key?(:using)
125
+ value = value.values_at(*options[:using])
126
+ target.send(scope, *value)
136
127
  else
137
- true
128
+ target.send(scope, value)
129
+ end
130
+ end
131
+
132
+ # Evaluates the scope options :if or :unless. Returns true if the proc
133
+ # method, or string evals to the expected value.
134
+ def applicable?(string_proc_or_symbol, expected) #:nodoc:
135
+ case string_proc_or_symbol
136
+ when String
137
+ eval(string_proc_or_symbol) == expected
138
+ when Proc
139
+ string_proc_or_symbol.call(self) == expected
140
+ when Symbol
141
+ send(string_proc_or_symbol) == expected
142
+ else
143
+ true
144
+ end
138
145
  end
139
146
  end
140
147
  end
@@ -1,5 +1,5 @@
1
1
  module Sinatra
2
2
  module HasScope
3
- VERSION = "0.0.2"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,49 +1,39 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sinatra-has_scope
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 2
10
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Simon COURTOIS
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-12-06 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-11-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: bundler
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 1
32
- - 0
33
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
34
21
  version: 1.0.0
35
22
  type: :development
36
- version_requirements: *id001
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
37
30
  description: HasScope readaptation for the Sinatra micro-framework
38
- email:
31
+ email:
39
32
  - scourtois@cubyx.fr
40
33
  executables: []
41
-
42
34
  extensions: []
43
-
44
35
  extra_rdoc_files: []
45
-
46
- files:
36
+ files:
47
37
  - .gitignore
48
38
  - Gemfile
49
39
  - README.mdown
@@ -51,41 +41,28 @@ files:
51
41
  - lib/sinatra/has_scope.rb
52
42
  - lib/sinatra/has_scope/version.rb
53
43
  - sinatra-has_scope.gemspec
54
- has_rdoc: true
55
44
  homepage: http://rubygems.org/gems/sinatra-has_scope
56
45
  licenses: []
57
-
58
46
  post_install_message:
59
47
  rdoc_options: []
60
-
61
- require_paths:
48
+ require_paths:
62
49
  - lib
63
- required_ruby_version: !ruby/object:Gem::Requirement
50
+ required_ruby_version: !ruby/object:Gem::Requirement
64
51
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- hash: 3
69
- segments:
70
- - 0
71
- version: "0"
72
- required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
57
  none: false
74
- requirements:
75
- - - ">="
76
- - !ruby/object:Gem::Version
77
- hash: 23
78
- segments:
79
- - 1
80
- - 3
81
- - 6
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
82
61
  version: 1.3.6
83
62
  requirements: []
84
-
85
63
  rubyforge_project: sinatra-has_scope
86
- rubygems_version: 1.3.7
64
+ rubygems_version: 1.8.23
87
65
  signing_key:
88
66
  specification_version: 3
89
67
  summary: HasScope equivalent for Sinatra
90
68
  test_files: []
91
-