scoped_from 0.7.0 → 0.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60b1498cb3cb9245b530983e03de6747afc745ae
4
- data.tar.gz: de5a35a889949ab68cab01190a2621e2eb1617b9
3
+ metadata.gz: 4289bd8c3bbfa67e32434e234a812d6c7355722d
4
+ data.tar.gz: f8f519eba2ed19382bd26dac18ed29235b2f2f36
5
5
  SHA512:
6
- metadata.gz: 23769faa9d0b74681da6d8be60a0c9768519c3a08871a68f73725f4b18763b292471669022b2be4e6001d73e106c47d9a1ea88b7e69cb089413a14aa74c31e1a
7
- data.tar.gz: 204779901e30475f4dfc0adc59f5ec4eb7719944d5aff87aeca19b92ec6a602c84643145d3b2d6b2ee470ab2bf15fa9f2ac72034bbc77da36117fdac203a4d3c
6
+ metadata.gz: d8b4baaf4d2624f44422b79bf2fe124e7f8f21dcfd9d097638f97e7b4832135eef8bcdf70d803317acb3a5f59dffc7de73f05747718d161473e3e7853f524afd
7
+ data.tar.gz: 5921566963a8c2e17538acd47b5a91f1fe4007405f0297f2310d67341c2a361fa0d4a7f550f35434fe9f1d2b4e7148ba60b135dcb9c9fb17aa78f114b2872233
data/Gemfile.lock CHANGED
@@ -1,35 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- scoped_from (0.7.0)
5
- activerecord (~> 3.2.0)
6
- activesupport (~> 3.2.0)
4
+ scoped_from (0.8.0)
5
+ activerecord (~> 4.0.0)
6
+ activesupport (~> 4.0.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (3.2.13)
12
- activesupport (= 3.2.13)
13
- builder (~> 3.0.0)
14
- activerecord (3.2.13)
15
- activemodel (= 3.2.13)
16
- activesupport (= 3.2.13)
17
- arel (~> 3.0.2)
18
- tzinfo (~> 0.3.29)
19
- activesupport (3.2.13)
20
- i18n (= 0.6.1)
21
- multi_json (~> 1.0)
22
- arel (3.0.2)
23
- builder (3.0.4)
24
- byebug (1.6.1)
25
- columnize (~> 0.3.6)
26
- debugger-linecache (~> 1.2.0)
27
- columnize (0.3.6)
28
- debugger-linecache (1.2.0)
11
+ activemodel (4.0.0)
12
+ activesupport (= 4.0.0)
13
+ builder (~> 3.1.0)
14
+ activerecord (4.0.0)
15
+ activemodel (= 4.0.0)
16
+ activerecord-deprecated_finders (~> 1.0.2)
17
+ activesupport (= 4.0.0)
18
+ arel (~> 4.0.0)
19
+ activerecord-deprecated_finders (1.0.3)
20
+ activesupport (4.0.0)
21
+ i18n (~> 0.6, >= 0.6.4)
22
+ minitest (~> 4.2)
23
+ multi_json (~> 1.3)
24
+ thread_safe (~> 0.1)
25
+ tzinfo (~> 0.3.37)
26
+ arel (4.0.0)
27
+ atomic (1.1.10)
28
+ builder (3.1.4)
29
29
  diff-lcs (1.2.4)
30
- i18n (0.6.1)
30
+ i18n (0.6.4)
31
+ minitest (4.7.5)
31
32
  multi_json (1.7.7)
32
- rake (10.0.4)
33
+ rake (10.1.0)
33
34
  rspec (2.14.1)
34
35
  rspec-core (~> 2.14.0)
35
36
  rspec-expectations (~> 2.14.0)
@@ -41,14 +42,15 @@ GEM
41
42
  sqlite3 (1.3.7)
42
43
  sqlite3-ruby (1.3.3)
43
44
  sqlite3 (>= 1.3.3)
45
+ thread_safe (0.1.0)
46
+ atomic
44
47
  tzinfo (0.3.37)
45
48
 
46
49
  PLATFORMS
47
50
  ruby
48
51
 
49
52
  DEPENDENCIES
50
- byebug (~> 1.6.0)
51
- rake (~> 10.0.0)
53
+ rake (~> 10.1.0)
52
54
  rspec (~> 2.14.0)
53
55
  scoped_from!
54
56
  sqlite3-ruby (~> 1.3.0)
data/README.mdown CHANGED
@@ -64,21 +64,21 @@ Columns are also automatically scoped.
64
64
 
65
65
  You can restrict mapping to some scopes with `:only` option:
66
66
 
67
- @posts = Post.scoped_from(params, :only => ['commented', 'search'])
67
+ @posts = Post.scoped_from(params, only: ['commented', 'search'])
68
68
 
69
69
  You can also exclude some scopes from mapping with `:except` option:
70
70
 
71
- @posts = Post.scoped_from(params, :except => 'commented')
71
+ @posts = Post.scoped_from(params, except: 'commented')
72
72
 
73
73
  ## Mapping order
74
74
 
75
75
  If you need to map an SQL order, just pass `order` parameter:
76
76
 
77
- @posts = Post.scoped_from(:order => 'created_at')
77
+ @posts = Post.scoped_from(order: 'created_at')
78
78
 
79
79
  Order direction can be specified using a dot, space or `:` as delimiter:
80
80
 
81
- @posts = Post.scoped_from(:order => 'created_at.desc')
81
+ @posts = Post.scoped_from(order: 'created_at.desc')
82
82
 
83
83
  Note that order is SQL safe with `scoped_from` method (columns names are
84
84
  checked).
@@ -88,7 +88,7 @@ checked).
88
88
  If your provide an array as parameter value, scope is invoked with each item
89
89
  of the array:
90
90
 
91
- @posts = Post.scoped_from(:search => ['bar', 'foo'])
91
+ @posts = Post.scoped_from(search: ['bar', 'foo'])
92
92
 
93
93
  is equivalent to
94
94
 
@@ -97,7 +97,7 @@ is equivalent to
97
97
  You may also not want to filter on columns, just specify `:exclude_columns`
98
98
  option:
99
99
 
100
- @posts = Post.scoped_from(params, :exclude_columns => true)
100
+ @posts = Post.scoped_from(params, exclude_columns: true)
101
101
 
102
102
  A query string can also be given to `scoped_from` method:
103
103
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.8.0
@@ -21,13 +21,13 @@ module ScopedFrom
21
21
  end
22
22
 
23
23
  def scope_without_argument?(name)
24
- [-1, 0].include?(scope_arities[name])
24
+ scope_arities[name] == 0
25
25
  end
26
26
 
27
27
  def scoped_from(params, options = {})
28
28
  query_class = "#{name}Query".safe_constantize
29
29
  query_class = Query unless query_class.is_a?(Class) && query_class.ancestors.include?(Query)
30
- query_class.new(self, params, options).scope
30
+ query_class.new(self, params, options).relation
31
31
  end
32
32
 
33
33
  end
@@ -10,9 +10,9 @@ module ScopedFrom
10
10
 
11
11
  # Available options are: - :only : to restrict to specified keys.
12
12
  # - :except : to ignore specified keys.
13
- def initialize(scope, params, options = {})
14
- @scope = scope.scoped
15
- @options = options
13
+ def initialize(relation, params, options = {})
14
+ self.relation = relation
15
+ self.options = options
16
16
  self.params = params
17
17
  end
18
18
 
@@ -24,34 +24,52 @@ module ScopedFrom
24
24
  parse_order(params['order'])[:direction]
25
25
  end
26
26
 
27
- def scope
28
- scope = @scope
27
+ def relation
28
+ relation = @relation
29
29
  params.each do |name, value|
30
30
  [value].flatten.each do |value|
31
- scope = scoped(scope, name, value)
31
+ relation = invoke_param(relation, name, value)
32
32
  end
33
33
  end
34
- decorate_scope(scope)
34
+ decorate_relation(relation)
35
35
  end
36
36
 
37
37
  protected
38
38
 
39
- def decorate_scope(scope)
40
- return scope if scope.respond_to?(:query)
41
- def scope.query
39
+ def decorate_relation(relation)
40
+ return relation if relation.respond_to?(:query)
41
+ def relation.query
42
42
  @__query
43
43
  end
44
- scope.instance_variable_set('@__query', self)
45
- scope
44
+ relation.instance_variable_set('@__query', self)
45
+ relation
46
+ end
47
+
48
+ def invoke_param(relation, name, value)
49
+ if name.to_s == 'order'
50
+ relation.order(order_to_hash(value))
51
+ elsif relation.scope_with_one_argument?(name)
52
+ relation.send(name, value)
53
+ elsif relation.scope_without_argument?(name)
54
+ relation.send(name)
55
+ elsif relation.column_names.include?(name.to_s)
56
+ relation.where(name => value)
57
+ else
58
+ relation
59
+ end
46
60
  end
47
61
 
48
62
  def false?(value)
49
63
  FALSE_VALUES.include?(value.to_s.strip.downcase)
50
64
  end
51
65
 
52
- def order_to_sql(value)
66
+ def options=(options)
67
+ @options = options.symbolize_keys
68
+ end
69
+
70
+ def order_to_hash(value)
53
71
  order = parse_order(value)
54
- "#{order[:column]} #{order[:direction].upcase}" if order.present?
72
+ order.present? ? { order[:column] => order[:direction].downcase.to_sym } : {}
55
73
  end
56
74
 
57
75
  def params=(params)
@@ -64,13 +82,13 @@ module ScopedFrom
64
82
  if name.to_s == 'order'
65
83
  orders = parse_orders(values).map { |order| "#{order[:column]}.#{order[:direction]}" }
66
84
  @params[name] = (orders.many? ? orders : orders.first) if orders.any?
67
- elsif @scope.scope_without_argument?(name)
85
+ elsif @relation.scope_without_argument?(name)
68
86
  @params[name] = true if values.all? { |value| true?(value) }
69
- elsif @scope.scope_with_one_argument?(name)
87
+ elsif @relation.scope_with_one_argument?(name)
70
88
  value = values.many? ? values : values.first
71
89
  @params[name] = @params[name] ? [@params[name], value].flatten : value
72
- elsif @options[:exclude_columns].blank? && @scope.column_names.include?(name.to_s)
73
- if @scope.columns_hash[name.to_s].type == :boolean
90
+ elsif @options[:exclude_columns].blank? && @relation.column_names.include?(name.to_s)
91
+ if @relation.columns_hash[name.to_s].type == :boolean
74
92
  @params[name] = true if values.all? { |value| true?(value) }
75
93
  @params[name] = false if values.all? { |value| false?(value) }
76
94
  else
@@ -87,30 +105,20 @@ module ScopedFrom
87
105
  column, direction = value.to_s.split(/[\.:\s]+/, 2)
88
106
  direction = direction.to_s.downcase
89
107
  direction = ORDER_DIRECTIONS.first unless ORDER_DIRECTIONS.include?(direction)
90
- @scope.column_names.include?(column) ? { column: column, direction: direction } : {}
108
+ @relation.column_names.include?(column) ? { column: column, direction: direction } : {}
91
109
  end
92
110
 
93
111
  def parse_orders(values)
94
112
  [].tap do |orders|
95
- values.each do |value|
113
+ values.reverse.each do |value|
96
114
  order = parse_order(value)
97
115
  orders << order if order.present? && !orders.any? { |o| o[:column] == order[:column] }
98
116
  end
99
117
  end
100
118
  end
101
119
 
102
- def scoped(scope, name, value)
103
- if name.to_s == 'order'
104
- scope.order(order_to_sql(value))
105
- elsif scope.scope_with_one_argument?(name)
106
- scope.send(name, value)
107
- elsif scope.scope_without_argument?(name)
108
- scope.send(name)
109
- elsif scope.column_names.include?(name.to_s)
110
- scope.scoped(conditions: { name => value })
111
- else
112
- scope
113
- end
120
+ def relation=(relation)
121
+ @relation = relation.is_a?(Class) ? relation.all : relation
114
122
  end
115
123
 
116
124
  def true?(value)
data/scoped_from.gemspec CHANGED
@@ -1,12 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'scoped_from'
3
- s.version = File.read(File.expand_path(File.dirname(__FILE__) + '/VERSION')).strip
3
+ s.version = File.read("#{File.dirname(__FILE__)}/VERSION").strip
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.author = 'Alexis Toulotte'
6
6
  s.email = 'al@alweb.org'
7
7
  s.homepage = 'https://github.com/alexistoulotte/scoped_from'
8
8
  s.summary = 'Mapping between scopes and parameters for Rails'
9
9
  s.description = 'Provides a simple mapping between Active Record scopes and controller parameters for Ruby On Rails 3'
10
+ s.license = 'MIT'
10
11
 
11
12
  s.rubyforge_project = 'scoped_from'
12
13
 
@@ -15,11 +16,10 @@ Gem::Specification.new do |s|
15
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
17
  s.require_paths = ['lib']
17
18
 
18
- s.add_dependency 'activerecord', '~> 3.2.0'
19
- s.add_dependency 'activesupport', '~> 3.2.0'
19
+ s.add_dependency 'activerecord', '~> 4.0.0'
20
+ s.add_dependency 'activesupport', '~> 4.0.0'
20
21
 
21
- s.add_development_dependency 'byebug', '~> 1.6.0'
22
- s.add_development_dependency 'rake', '~> 10.0.0'
22
+ s.add_development_dependency 'rake', '~> 10.1.0'
23
23
  s.add_development_dependency 'rspec', '~> 2.14.0'
24
24
  s.add_development_dependency 'sqlite3-ruby', '~> 1.3.0'
25
25
  end
data/spec/mocks/user.rb CHANGED
@@ -1,14 +1,8 @@
1
1
  class User < ActiveRecord::Base
2
2
 
3
- scope :enabled, where(enabled: true)
4
- scope :search, lambda { |pattern|
5
- where('firstname LIKE ? OR lastname LIKE ?', "%#{pattern}%", "%#{pattern}%")
6
- }
7
- scope :created_between, lambda { |after, before|
8
- where('created_at >= ? AND created_at <= ?', after, before)
9
- }
10
- scope :latest, lambda {
11
- where('created_at >= ?', 1.week.ago)
12
- }
3
+ scope :enabled, -> { where(enabled: true) }
4
+ scope :search, -> (pattern) { where('firstname LIKE ? OR lastname LIKE ?', "%#{pattern}%", "%#{pattern}%") }
5
+ scope :created_between, -> (after, before) { where('created_at >= ? AND created_at <= ?', after, before) }
6
+ scope :latest, -> { where('created_at >= ?', 1.week.ago) }
13
7
 
14
8
  end
@@ -64,7 +64,7 @@ describe ScopedFrom::ActiveRecord do
64
64
 
65
65
  it 'just build a new query and return its scope' do
66
66
  query = double(:query)
67
- query.should_receive(:scope).and_return(42)
67
+ query.should_receive(:relation).and_return(42)
68
68
  ScopedFrom::Query.should_receive(:new).with(User, 'foo', except: 'bam').and_return(query)
69
69
  User.scoped_from('foo', except: 'bam').should == 42
70
70
  end
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  describe ScopedFrom::Query do
4
4
 
5
- def query(scope = User, params = {}, options = {})
6
- ScopedFrom::Query.new(scope, params, options)
5
+ def query(relation = User, params = {}, options = {})
6
+ ScopedFrom::Query.new(relation, params, options)
7
7
  end
8
8
 
9
9
  describe '#false?' do
@@ -63,11 +63,62 @@ describe ScopedFrom::Query do
63
63
 
64
64
  describe '#initialize' do
65
65
 
66
- it 'invokes #scoped method on specified scope' do
67
- User.should_receive(:scoped)
66
+ it 'invokes .all method on given class' do
67
+ User.should_receive(:all)
68
68
  ScopedFrom::Query.new(User, {})
69
69
  end
70
70
 
71
+ it 'does not invokes .all method on given relation' do
72
+ relation = User.all
73
+ relation.should_not_receive(:all)
74
+ ScopedFrom::Query.new(relation, {})
75
+ end
76
+
77
+ end
78
+
79
+ describe '#invoke_param' do
80
+
81
+ it 'returns given scope if it has no scope with specified name' do
82
+ query.send(:invoke_param, User, :foo, true).should == User
83
+ end
84
+
85
+ it 'returns given scope if scope takes more than 1 argument' do
86
+ query.send(:invoke_param, User, :created_between, true).should == User
87
+ end
88
+
89
+ it 'invokes scope without arguments if scope takes no arguments' do
90
+ query.send(:invoke_param, User.all, :enabled, true).should == [users(:john)]
91
+ query.send(:invoke_param, User.all, :enabled, ' 1 ').should == [users(:john)]
92
+ query.send(:invoke_param, User.all, :enabled, 'off').should == [users(:john)]
93
+ end
94
+
95
+ it 'invokes scope with value has argument if scope takes one argument' do
96
+ query.send(:invoke_param, User.all, :search, 'doe').should == [users(:john), users(:jane)]
97
+ query.send(:invoke_param, User.all, :search, 'john').should == [users(:john)]
98
+ query.send(:invoke_param, User.all, :search, 'jane').should == [users(:jane)]
99
+ end
100
+
101
+ it 'scope on column conditions' do
102
+ query.send(:invoke_param, User.all, :firstname, 'Jane').should == [users(:jane)]
103
+ end
104
+
105
+ it 'invokes "order"' do
106
+ query.send(:invoke_param, User.all, :order, 'firstname.asc').should == [users(:jane), users(:john)]
107
+ query.send(:invoke_param, User.all, :order, 'firstname.desc').should == [users(:john), users(:jane)]
108
+ end
109
+
110
+ end
111
+
112
+ describe '#options' do
113
+
114
+ it 'is set at initialization' do
115
+ ScopedFrom::Query.new(User, {}, bar: 'foo').instance_variable_get(:@options).should == { bar: 'foo' }
116
+ end
117
+
118
+ it 'keys are symbolized' do
119
+ ScopedFrom::Query.new(User, {}, 'bar' => 'foo').instance_variable_get(:@options).should == { bar: 'foo' }
120
+ end
121
+
71
122
  end
72
123
 
73
124
  describe '#order_column' do
@@ -288,10 +339,10 @@ describe ScopedFrom::Query do
288
339
  end
289
340
 
290
341
  it 'many order can be specified' do
291
- query(User, { 'order' => ['firstname.Asc', 'lastname.DESC'] }).params.should == { 'order' => ['firstname.asc', 'lastname.desc'] }
292
- query(User, { 'order' => ['firstname.Asc', 'firstname.desc'] }).params.should == { 'order' => 'firstname.asc' }
293
- query(User, { 'order' => ['firstname.Asc', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => ['firstname.asc', 'lastname.desc'] }
294
- query(User, { 'order' => ['firstname.Asc', 'foo', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => ['firstname.asc', 'lastname.desc'] }
342
+ query(User, { 'order' => ['firstname.Asc', 'lastname.DESC'] }).params.should == { 'order' => ['lastname.desc', 'firstname.asc'] }
343
+ query(User, { 'order' => ['firstname.Asc', 'firstname.desc'] }).params.should == { 'order' => 'firstname.desc' }
344
+ query(User, { 'order' => ['firstname.Asc', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => ['firstname.desc', 'lastname.desc'] }
345
+ query(User, { 'order' => ['firstname.Asc', 'foo', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => ['firstname.desc', 'lastname.desc'] }
295
346
  end
296
347
 
297
348
  it 'order can be delimited by a space' do
@@ -313,41 +364,41 @@ describe ScopedFrom::Query do
313
364
 
314
365
  end
315
366
 
316
- describe '#scope' do
367
+ describe '#relation' do
317
368
 
318
369
  it 'does not execute any query' do
319
370
  User.should_not_receive(:connection)
320
- query(User, :enabled => true).scope
371
+ query(User, :enabled => true).relation
321
372
  end
322
373
 
323
374
  it 'works with scopes with a lambda without arguments' do
324
375
  users(:jane).update_attribute(:created_at, 10.days.ago)
325
- query(User, :latest => true).scope.should == [users(:john)]
326
- query(User, :latest => false).scope.should == [users(:john), users(:jane)]
376
+ query(User, :latest => true).relation.should == [users(:john)]
377
+ query(User, :latest => false).relation.should == [users(:john), users(:jane)]
327
378
  end
328
379
 
329
- it 'does not modify scope specified at initialization' do
330
- scope = User.search('foo')
331
- q = query(scope, :enabled => true)
380
+ it 'does not modify relation specified at initialization' do
381
+ relation = User.search('foo')
382
+ q = query(relation, :enabled => true)
332
383
  expect {
333
384
  expect {
334
- q.scope
335
- }.to_not change { q.instance_variable_get('@scope') }
336
- }.to_not change { scope }
385
+ q.relation
386
+ }.to_not change { q.instance_variable_get('@relation') }
387
+ }.to_not change { relation }
337
388
  end
338
389
 
339
- it 'returns scope (#scoped) specified at construction if params are empty' do
340
- query.scope.should_not == User
341
- query.scope.should == User.scoped
390
+ it 'returns relation specified at construction if params are empty' do
391
+ query.relation.should_not == User
392
+ query.relation.should == User.all
342
393
  end
343
394
 
344
- it 'invokes many times scope if an array is given' do
345
- query(User, :search => ['John', 'Doe']).scope.should == [users(:john)]
346
- query(User, :search => ['John', 'Done']).scope.should == []
395
+ it 'invokes many times relation if an array is given' do
396
+ query(User, :search => ['John', 'Doe']).relation.should == [users(:john)]
397
+ query(User, :search => ['John', 'Done']).relation.should == []
347
398
  query(User, :search => ['John', 'Doe']).params.should == { 'search' => ['John', 'Doe'] }
348
399
  end
349
400
 
350
- it 'invokes many times scope if given twice (as string & symbol)' do
401
+ it 'invokes many times relation if given twice (as string & symbol)' do
351
402
  query(User, :search => 'John', 'search' => 'Done').params['search'].size.should be(2)
352
403
  query(User, :search => 'John', 'search' => 'Done').params['search'].should include('John', 'Done')
353
404
 
@@ -357,59 +408,29 @@ describe ScopedFrom::Query do
357
408
  end
358
409
 
359
410
  it 'invokes last order if an array is given' do
360
- query(User, :order => ['lastname', 'firstname']).scope.should == [users(:jane), users(:john)]
361
- query(User, :order => ['lastname', 'firstname.desc']).scope.should == [users(:john), users(:jane)]
362
- query(User, :order => ['firstname.desc', 'lastname']).scope.order_values.should == ['firstname DESC', 'lastname ASC']
411
+ create_user(:jane2, firstname: 'Jane', lastname: 'Zoe')
412
+
413
+ query(User, :order => ['lastname', 'firstname']).relation.should == [users(:jane), users(:john), users(:jane2)]
414
+ query(User, :order => ['lastname', 'firstname.desc']).relation.should == [users(:john), users(:jane), users(:jane2)]
415
+ query(User, :order => ['firstname', 'lastname.desc']).relation.should == [users(:jane2), users(:jane), users(:john)]
416
+ query(User, :order => ['firstname.desc', 'lastname']).relation.order_values.should == [{ 'firstname' => :desc }, { 'lastname' => :asc }]
363
417
  end
364
418
 
365
- it 'defines #query method on returned scoped' do
366
- query(User).scope.should respond_to(:query)
419
+ it 'defines #query method on returned relation' do
420
+ query(User).relation.should respond_to(:query)
367
421
  end
368
422
 
369
- it 'does not define #query method for future scopes' do
370
- query(User).scope.query.should be_present
423
+ it 'does not define #query method for future relations' do
424
+ query(User).relation.query.should be_present
371
425
  User.should_not respond_to(:query)
372
- User.scoped.should_not respond_to(:query)
426
+ User.all.should_not respond_to(:query)
373
427
  User.enabled.should_not respond_to(:query)
374
428
  end
375
429
 
376
430
  it 'defined #query method returns query' do
377
431
  q = query(User)
378
- q.scope.query.should be_a(ScopedFrom::Query)
379
- q.scope.query.should be(q)
380
- end
381
-
382
- end
383
-
384
- describe '#scoped' do
385
-
386
- it 'returns given scope if it has no scope with specified name' do
387
- query.send(:scoped, User, :foo, true).should == User
388
- end
389
-
390
- it 'returns given scope if scope takes more than 1 argument' do
391
- query.send(:scoped, User, :created_between, true).should == User
392
- end
393
-
394
- it 'invokes scope without arguments if scope takes no arguments' do
395
- query.send(:scoped, User.scoped, :enabled, true).should == [users(:john)]
396
- query.send(:scoped, User.scoped, :enabled, ' 1 ').should == [users(:john)]
397
- query.send(:scoped, User.scoped, :enabled, 'off').should == [users(:john)]
398
- end
399
-
400
- it 'invokes scope with value has argument if scope takes one argument' do
401
- query.send(:scoped, User.scoped, :search, 'doe').should == [users(:john), users(:jane)]
402
- query.send(:scoped, User.scoped, :search, 'john').should == [users(:john)]
403
- query.send(:scoped, User.scoped, :search, 'jane').should == [users(:jane)]
404
- end
405
-
406
- it 'scope on column conditions' do
407
- query.send(:scoped, User.scoped, :firstname, 'Jane').should == [users(:jane)]
408
- end
409
-
410
- it 'invokes "order"' do
411
- query.send(:scoped, User.scoped, :order, 'firstname.asc').should == [users(:jane), users(:john)]
412
- query.send(:scoped, User.scoped, :order, 'firstname.desc').should == [users(:john), users(:jane)]
432
+ q.relation.query.should be_a(ScopedFrom::Query)
433
+ q.relation.query.should be(q)
413
434
  end
414
435
 
415
436
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scoped_from
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Toulotte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-15 00:00:00.000000000 Z
11
+ date: 2013-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,56 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.0
19
+ version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.0
26
+ version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 3.2.0
33
+ version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 3.2.0
41
- - !ruby/object:Gem::Dependency
42
- name: byebug
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: 1.6.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: 1.6.0
40
+ version: 4.0.0
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ~>
60
46
  - !ruby/object:Gem::Version
61
- version: 10.0.0
47
+ version: 10.1.0
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - ~>
67
53
  - !ruby/object:Gem::Version
68
- version: 10.0.0
54
+ version: 10.1.0
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -127,7 +113,8 @@ files:
127
113
  - spec/support/bootsrap/database.rb
128
114
  - spec/support/macros/user_macro.rb
129
115
  homepage: https://github.com/alexistoulotte/scoped_from
130
- licenses: []
116
+ licenses:
117
+ - MIT
131
118
  metadata: {}
132
119
  post_install_message:
133
120
  rdoc_options: []