has_scope 0.5.1 → 0.6.0.rc

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: eb5c20d9ff1cb1bbd626b15574b9159fd50dfa47
4
+ data.tar.gz: 783dd0bc45a0bf8d97a16c77bdee0f24a52c926a
5
+ SHA512:
6
+ metadata.gz: 56bc3e1fc2043a227dd8bf18e34896e6b5c6d5693a61be1ef45b49f13cf035157a572efffdde6b3e95ef1f230cd498a8d044a004689635eb0367d7cdbf607efc
7
+ data.tar.gz: 9cd682408a65660d72646f32a9447ceca58d498af77fdc502ea7ad0f9c39ff2aaa3f5a3fcb0f907c75ec99f6c62e7af3837c762b70e5dd1836c0b902b3a5b643
data/.gitignore CHANGED
@@ -1,2 +1,2 @@
1
1
  .bundle
2
- Gemfile.lock
2
+ gemfiles/*.lock
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ gemfile:
6
+ - Gemfile
7
+ - gemfiles/Gemfile-rails.3.2.x
8
+ notifications:
9
+ email: false
10
+ campfire:
11
+ on_success: change
12
+ on_failure: always
13
+ rooms:
14
+ - secure: "kysymH2KAtGgNLcWPaNLVENtghORHJC6yUxGzJ5y+JrzUwkr4gTOv0nMyw5k\nsHCN1F1mJtbiXxFOZpxDaWMSGVhP7ThRy0esovkfzkAHihbyPClX241eJcyD\nI3f7/BZN4gfiR+Mbml2frLKHOtEtrm2h0gIEsXJ/YL+Ysf0nxHw="
data/Gemfile CHANGED
@@ -1,13 +1,8 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem "rails", "~> 3.0.3"
6
-
7
- if RUBY_VERSION < "1.9"
8
- gem "ruby-debug"
9
- else
10
- gem "test-unit"
11
- end
12
-
13
- gem "mocha"
5
+ gem 'actionpack', '~> 4.0.0.rc1'
6
+ gem 'activesupport', '~> 4.0.0.rc1'
7
+ gem 'mocha', '~> 0.13.2', require: false
8
+ gem 'rake'
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ has_scope (0.6.0.rc)
5
+ actionpack (>= 3.2, < 5)
6
+ activesupport (>= 3.2, < 5)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionpack (4.0.0.rc1)
12
+ activesupport (= 4.0.0.rc1)
13
+ builder (~> 3.1.0)
14
+ erubis (~> 2.7.0)
15
+ rack (~> 1.5.2)
16
+ rack-test (~> 0.6.2)
17
+ activesupport (4.0.0.rc1)
18
+ i18n (~> 0.6, >= 0.6.4)
19
+ minitest (~> 4.2)
20
+ multi_json (~> 1.3)
21
+ thread_safe (~> 0.1)
22
+ tzinfo (~> 0.3.37)
23
+ atomic (1.1.9)
24
+ builder (3.1.4)
25
+ erubis (2.7.0)
26
+ i18n (0.6.4)
27
+ metaclass (0.0.1)
28
+ minitest (4.7.4)
29
+ mocha (0.13.3)
30
+ metaclass (~> 0.0.1)
31
+ multi_json (1.7.3)
32
+ rack (1.5.2)
33
+ rack-test (0.6.2)
34
+ rack (>= 1.0)
35
+ rake (10.0.4)
36
+ thread_safe (0.1.0)
37
+ atomic
38
+ tzinfo (0.3.37)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ actionpack (~> 4.0.0.rc1)
45
+ activesupport (~> 4.0.0.rc1)
46
+ has_scope!
47
+ mocha (~> 0.13.2)
48
+ rake
@@ -1,4 +1,4 @@
1
- Copyright 2009 Plataforma Tecnologia. http://blog.plataformatec.com.br
1
+ Copyright 2009-2013 Plataforma Tecnologia. http://blog.plataformatec.com.br
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,115 @@
1
+ ## HasScope
2
+
3
+ [![Gem Version](https://fury-badge.herokuapp.com/rb/has_scope.png)](http://badge.fury.io/rb/has_scope)
4
+ [![Build Status](https://api.travis-ci.org/plataformatec/has_scope.png?branch=master)](http://travis-ci.org/plataformatec/has_scope)
5
+ [![Code Climate](https://codeclimate.com/github/plataformatec/has_scope.png)](https://codeclimate.com/github/plataformatec/has_scope)
6
+
7
+ Has scope allows you to easily create controller filters based on your resources named scopes.
8
+ Imagine the following model called graduations:
9
+
10
+ ```ruby
11
+ class Graduation < ActiveRecord::Base
12
+ scope :featured, -> { where(:featured => true) }
13
+ scope :by_degree, -> degree { where(:degree => degree) }
14
+ end
15
+ ```
16
+
17
+ You can use those named scopes as filters by declaring them on your controller:
18
+
19
+ ```ruby
20
+ class GraduationsController < ApplicationController
21
+ has_scope :featured, :type => :boolean
22
+ has_scope :by_degree
23
+ end
24
+ ```
25
+
26
+ Now, if you want to apply them to an specific resource, you just need to call `apply_scopes`:
27
+
28
+ ```ruby
29
+ class GraduationsController < ApplicationController
30
+ has_scope :featured, :type => :boolean
31
+ has_scope :by_degree
32
+ has_scope :by_period, :using => [:started_at, :ended_at]
33
+
34
+ def index
35
+ @graduations = apply_scopes(Graduation).all
36
+ end
37
+ end
38
+ ```
39
+
40
+ Then for each request:
41
+
42
+ ```
43
+ /graduations
44
+ #=> acts like a normal request
45
+
46
+ /graduations?featured=true
47
+ #=> calls the named scope and bring featured graduations
48
+
49
+ /graduations?params[by_period][started_at]=20100701&params[by_period][ended_at]=20101013
50
+ #=> brings graduations in the given period
51
+
52
+ /graduations?featured=true&by_degree=phd
53
+ #=> brings featured graduations with phd degree
54
+ ```
55
+
56
+ You can retrieve all the scopes applied in one action with `current_scopes` method.
57
+ In the last case, it would return: { :featured => true, :by_degree => "phd" }.
58
+
59
+ ## Installation
60
+
61
+ Add `has_scope` to your Gemfile or install it from Rubygems.
62
+
63
+ ```ruby
64
+ gem 'has_scope'
65
+ ```
66
+
67
+ ## Options
68
+
69
+ HasScope supports several options:
70
+
71
+ * `:type` - Checks the type of the parameter sent. If set to :boolean it just calls the named scope, without any argument. By default, it does not allow hashes or arrays to be given, except if type :hash or :array are set.
72
+
73
+ * `:only` - In which actions the scope is applied.
74
+
75
+ * `:except` - In which actions the scope is not applied.
76
+
77
+ * `:as` - The key in the params hash expected to find the scope. Defaults to the scope name.
78
+
79
+ * `:using` - The subkeys to be used as args when type is a hash.
80
+
81
+ * `:if` - Specifies a method, proc or string to call to determine if the scope should apply.
82
+
83
+ * `:unless` - Specifies a method, proc or string to call to determine if the scope should NOT apply.
84
+
85
+ * `:default` - Default value for the scope. Whenever supplied the scope is always called.
86
+
87
+ * `:allow_blank` - Blank values are not sent to scopes by default. Set to true to overwrite.
88
+
89
+ ## Block usage
90
+
91
+ `has_scope` also accepts a block. The controller, current scope and value are yielded
92
+ to the block so the user can apply the scope on its own. This is useful in case we
93
+ need to manipulate the given value:
94
+
95
+ ```ruby
96
+ has_scope :category do |controller, scope, value|
97
+ value != "all" ? scope.by_category(value) : scope
98
+ end
99
+ ```
100
+
101
+ When used with booleans, it just receives two arguments and is just invoked if true is given:
102
+
103
+ ```ruby
104
+ has_scope :not_voted_by_me, :type => :boolean do |controller, scope|
105
+ scope.not_voted_by(controller.current_user.id)
106
+ end
107
+ ```
108
+
109
+ ## Bugs and Feedback
110
+
111
+ If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.
112
+
113
+ http://github.com/plataformatec/has_scope/issues
114
+
115
+ MIT License. Copyright 2009-2013 Plataformatec. http://blog.plataformatec.com.br
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
1
  # encoding: UTF-8
2
- require 'rake'
2
+
3
+ require 'bundler/gem_tasks'
4
+
3
5
  require 'rake/testtask'
4
6
  require 'rdoc/task'
5
7
 
@@ -19,6 +21,6 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
19
21
  rdoc.rdoc_dir = 'rdoc'
20
22
  rdoc.title = 'HasScope'
21
23
  rdoc.options << '--line-numbers' << '--inline-source'
22
- rdoc.rdoc_files.include('README.rdoc')
24
+ rdoc.rdoc_files.include('README.md')
23
25
  rdoc.rdoc_files.include('lib/**/*.rb')
24
- end
26
+ end
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'has_scope', path: '..'
4
+
5
+ gem 'actionpack', '~> 3.2.0'
6
+ gem 'activesupport', '~> 3.2.0'
7
+ gem 'mocha', '~> 0.13.2', require: false
8
+ gem 'rake'
@@ -11,6 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.homepage = "http://github.com/plataformatec/has_scope"
12
12
  s.description = "Maps controller filters to your resource scopes"
13
13
  s.authors = ['José Valim']
14
+ s.license = 'MIT'
14
15
 
15
16
  s.rubyforge_project = "has_scope"
16
17
 
@@ -21,6 +22,9 @@ Gem::Specification.new do |s|
21
22
 
22
23
  s.rdoc_options = ["--charset=UTF-8"]
23
24
  s.extra_rdoc_files = [
24
- "README.rdoc"
25
+ "README.md"
25
26
  ]
26
- end
27
+
28
+ s.add_runtime_dependency "actionpack", ">= 3.2", "< 5"
29
+ s.add_runtime_dependency "activesupport", ">= 3.2", "< 5"
30
+ end
@@ -11,7 +11,6 @@ module HasScope
11
11
  def self.included(base)
12
12
  base.class_eval do
13
13
  extend ClassMethods
14
- helper_method :current_scopes
15
14
  class_attribute :scopes_configuration, :instance_writer => false
16
15
  end
17
16
  end
@@ -116,6 +115,7 @@ module HasScope
116
115
  end
117
116
 
118
117
  value = parse_value(options[:type], key, value)
118
+ value = normalize_blanks(value)
119
119
 
120
120
  if call_scope && (value.present? || options[:allow_blank])
121
121
  current_scopes[key] = value
@@ -130,8 +130,18 @@ module HasScope
130
130
  def parse_value(type, key, value) #:nodoc:
131
131
  if type == :boolean
132
132
  TRUE_VALUES.include?(value)
133
- elsif value && ALLOWED_TYPES[type].none?{ |klass| value.is_a?(klass) }
134
- raise "Expected type :#{type} in params[:#{key}], got #{value.class}"
133
+ elsif value && ALLOWED_TYPES[type].any?{ |klass| value.is_a?(klass) }
134
+ value
135
+ end
136
+ end
137
+
138
+ # Screens pseudo-blank params.
139
+ def normalize_blanks(value) #:nodoc:
140
+ return value if value.nil?
141
+ if value.is_a?(Array)
142
+ value.select { |v| v.present? }
143
+ elsif value.is_a?(Hash)
144
+ value.select { |k, v| normalize_blanks(v).present? }.with_indifferent_access
135
145
  else
136
146
  value
137
147
  end
@@ -184,4 +194,7 @@ module HasScope
184
194
  end
185
195
  end
186
196
 
187
- ActionController::Base.send :include, HasScope
197
+ ActiveSupport.on_load :action_controller do
198
+ include HasScope
199
+ helper_method :current_scopes
200
+ end
@@ -1,3 +1,3 @@
1
1
  module HasScope
2
- VERSION = "0.5.1"
3
- end
2
+ VERSION = "0.6.0.rc"
3
+ end
@@ -161,6 +161,33 @@ class HasScopeTest < ActionController::TestCase
161
161
  assert_equal({ :args_paginate => hash }, current_scopes)
162
162
  end
163
163
 
164
+ def test_hash_with_blank_values_is_ignored
165
+ hash = { "page" => "", "per_page" => "" }
166
+ Tree.expects(:paginate).never
167
+ Tree.expects(:all).returns([mock_tree])
168
+ get :index, :paginate => hash
169
+ assert_equal([mock_tree], assigns(:trees))
170
+ assert_equal({ }, current_scopes)
171
+ end
172
+
173
+ def test_nested_hash_with_blank_values_is_ignored
174
+ hash = { "parent" => {"children" => ""} }
175
+ Tree.expects(:paginate).never
176
+ Tree.expects(:all).returns([mock_tree])
177
+ get :index, :paginate => hash
178
+ assert_equal([mock_tree], assigns(:trees))
179
+ assert_equal({ }, current_scopes)
180
+ end
181
+
182
+ def test_nested_blank_array_param_is_ignored
183
+ hash = { "parent" => [""] }
184
+ Tree.expects(:paginate).never
185
+ Tree.expects(:all).returns([mock_tree])
186
+ get :index, :paginate => hash
187
+ assert_equal([mock_tree], assigns(:trees))
188
+ assert_equal({ }, current_scopes)
189
+ end
190
+
164
191
  def test_scope_of_type_array
165
192
  array = %w(book kitchen sport)
166
193
  Tree.expects(:categories).with(array).returns(Tree)
@@ -170,16 +197,19 @@ class HasScopeTest < ActionController::TestCase
170
197
  assert_equal({ :categories => array }, current_scopes)
171
198
  end
172
199
 
173
- def test_invalid_type_hash_for_default_type_scope
174
- assert_raise RuntimeError do
175
- get :index, :color => { :blue => :red }
176
- end
200
+ def test_array_of_blank_values_is_ignored
201
+ Tree.expects(:categories).never
202
+ Tree.expects(:all).returns([mock_tree])
203
+ get :index, :categories => [""]
204
+ assert_equal([mock_tree], assigns(:trees))
205
+ assert_equal({ }, current_scopes)
177
206
  end
178
207
 
179
- def test_invalid_type_string_for_hash_type_scope
180
- assert_raise RuntimeError do
181
- get :index, :paginate => "1"
182
- end
208
+ def test_scope_of_invalid_type_silently_fails
209
+ Tree.expects(:all).returns([mock_tree])
210
+ get :index, :paginate => "1"
211
+ assert_equal([mock_tree], assigns(:trees))
212
+ assert_equal({}, current_scopes)
183
213
  end
184
214
 
185
215
  def test_scope_is_called_with_default_value
@@ -247,3 +277,22 @@ class HasScopeTest < ActionController::TestCase
247
277
  end
248
278
  end
249
279
 
280
+ class TreeHugger
281
+ include HasScope
282
+
283
+ has_scope :color
284
+
285
+ def by_color
286
+ apply_scopes(Tree, :color => 'blue')
287
+ end
288
+
289
+ end
290
+
291
+ class HasScopeOutsideControllerTest < ActiveSupport::TestCase
292
+
293
+ def test_has_scope_usable_outside_controller
294
+ Tree.expects(:color).with('blue')
295
+ TreeHugger.new.by_color
296
+ end
297
+
298
+ end
@@ -1,9 +1,8 @@
1
- require 'rubygems'
2
1
  require 'bundler'
3
2
 
4
3
  Bundler.setup
5
4
  require 'test/unit'
6
- require 'mocha'
5
+ require 'mocha/setup'
7
6
 
8
7
  # Configure Rails
9
8
  ENV["RAILS_ENV"] = "test"
@@ -17,7 +16,7 @@ require 'has_scope'
17
16
 
18
17
  HasScope::Routes = ActionDispatch::Routing::RouteSet.new
19
18
  HasScope::Routes.draw do
20
- match '/:controller(/:action(/:id))'
19
+ get '/:controller(/:action(/:id))'
21
20
  end
22
21
 
23
22
  class ApplicationController < ActionController::Base
metadata CHANGED
@@ -1,78 +1,100 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: has_scope
3
- version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease:
6
- segments:
7
- - 0
8
- - 5
9
- - 1
10
- version: 0.5.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0.rc
11
5
  platform: ruby
12
- authors:
13
- - "Jos\xC3\xA9 Valim"
6
+ authors:
7
+ - José Valim
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-08-02 00:00:00 +02:00
19
- default_executable:
20
- dependencies: []
21
-
11
+ date: 2013-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionpack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.2'
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '3.2'
40
+ - - <
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '3.2'
50
+ - - <
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
22
53
  description: Maps controller filters to your resource scopes
23
54
  email: developers@plataformatec.com.br
24
55
  executables: []
25
-
26
56
  extensions: []
27
-
28
- extra_rdoc_files:
29
- - README.rdoc
30
- files:
57
+ extra_rdoc_files:
58
+ - README.md
59
+ files:
31
60
  - .gitignore
61
+ - .travis.yml
32
62
  - Gemfile
63
+ - Gemfile.lock
33
64
  - MIT-LICENSE
34
- - README.rdoc
65
+ - README.md
35
66
  - Rakefile
67
+ - gemfiles/Gemfile-rails.3.2.x
36
68
  - has_scope.gemspec
37
- - init.rb
38
69
  - lib/has_scope.rb
39
70
  - lib/has_scope/version.rb
40
71
  - test/has_scope_test.rb
41
72
  - test/test_helper.rb
42
- has_rdoc: true
43
73
  homepage: http://github.com/plataformatec/has_scope
44
- licenses: []
45
-
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
46
77
  post_install_message:
47
- rdoc_options:
78
+ rdoc_options:
48
79
  - --charset=UTF-8
49
- require_paths:
80
+ require_paths:
50
81
  - lib
51
- required_ruby_version: !ruby/object:Gem::Requirement
52
- none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
60
- required_rubygems_version: !ruby/object:Gem::Requirement
61
- none: false
62
- requirements:
63
- - - ">="
64
- - !ruby/object:Gem::Version
65
- hash: 3
66
- segments:
67
- - 0
68
- version: "0"
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - '>'
90
+ - !ruby/object:Gem::Version
91
+ version: 1.3.1
69
92
  requirements: []
70
-
71
93
  rubyforge_project: has_scope
72
- rubygems_version: 1.6.2
94
+ rubygems_version: 2.0.3
73
95
  signing_key:
74
- specification_version: 3
96
+ specification_version: 4
75
97
  summary: Maps controller filters to your resource scopes.
76
- test_files:
98
+ test_files:
77
99
  - test/has_scope_test.rb
78
100
  - test/test_helper.rb
@@ -1,101 +0,0 @@
1
- == HasScope
2
-
3
- Has scope allows you to easily create controller filters based on your resources named scopes.
4
- Imagine the following model called graduations:
5
-
6
- class Graduation < ActiveRecord::Base
7
- named_scope :featured, :conditions => { :featured => true }
8
- named_scope :by_degree, proc {|degree| { :conditions => { :degree => degree } } }
9
- end
10
-
11
- You can use those named scopes as filters by declaring them on your controller:
12
-
13
- class GraduationsController < ApplicationController
14
- has_scope :featured, :type => :boolean
15
- has_scope :by_degree
16
- end
17
-
18
- Now, if you want to apply them to an specific resource, you just need to call <tt>apply_scopes</tt>:
19
-
20
- class GraduationsController < ApplicationController
21
- has_scope :featured, :type => :boolean
22
- has_scope :by_degree
23
- has_scope :by_period, :using => [:started_at, :ended_at]
24
-
25
- def index
26
- @graduations = apply_scopes(Graduation).all
27
- end
28
- end
29
-
30
- Then for each request:
31
-
32
- /graduations
33
- #=> acts like a normal request
34
-
35
- /graduations?featured=true
36
- #=> calls the named scope and bring featured graduations
37
-
38
- /graduations?params[by_period][started_at]=20100701&params[by_period][ended_at]=20101013
39
- #=> brings graduations in the given period
40
-
41
- /graduations?featured=true&by_degree=phd
42
- #=> brings featured graduations with phd degree
43
-
44
- You can retrieve all the scopes applied in one action with <tt>current_scopes</tt> method.
45
- In the last case, it would return: { :featured => true, :by_degree => "phd" }.
46
-
47
- == Installation
48
-
49
- HasScope is available as gem on Gemcutter, so just run the following:
50
-
51
- sudo gem install has_scope
52
-
53
- If you want it as plugin, just do:
54
-
55
- script/plugin install git://github.com/plataformatec/has_scope.git
56
-
57
- == Options
58
-
59
- HasScope supports several options:
60
-
61
- * <tt>:type</tt> - Checks the type of the parameter sent. If set to :boolean it just calls the named scope, without any argument. By default, it does not allow hashes or arrays to be given, except if type :hash or :array are set.
62
-
63
- * <tt>:only</tt> - In which actions the scope is applied.
64
-
65
- * <tt>:except</tt> - In which actions the scope is not applied.
66
-
67
- * <tt>:as</tt> - The key in the params hash expected to find the scope. Defaults to the scope name.
68
-
69
- * <tt>:using</tt> - The subkeys to be used as args when type is a hash.
70
-
71
- * <tt>:if</tt> - Specifies a method, proc or string to call to determine if the scope should apply.
72
-
73
- * <tt>:unless</tt> - Specifies a method, proc or string to call to determine if the scope should NOT apply.
74
-
75
- * <tt>:default</tt> - Default value for the scope. Whenever supplied the scope is always called.
76
-
77
- * <tt>:allow_blank</tt> - Blank values are not sent to scopes by default. Set to true to overwrite.
78
-
79
- == Block usage
80
-
81
- has_scope also accepts a block. The controller, current scope and value are yielded
82
- to the block so the user can apply the scope on its own. This is useful in case we
83
- need to manipulate the given value:
84
-
85
- has_scope :category do |controller, scope, value|
86
- value != "all" ? scope.by_category(value) : scope
87
- end
88
-
89
- When used with booleans, it just receives two arguments and is just invoked if true is given:
90
-
91
- has_scope :not_voted_by_me, :type => :boolean do |controller, scope|
92
- scope.not_voted_by(controller.current_user.id)
93
- end
94
-
95
- == Bugs and Feedback
96
-
97
- If you discover any bugs or want to drop a line, feel free to create an issue on GitHub.
98
-
99
- http://github.com/plataformatec/has_scope/issues
100
-
101
- MIT License. Copyright 2009 Plataforma Tecnologia. http://blog.plataformatec.com.br
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'has_scope'