convenient_scopes 0.4.0 → 0.5.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/Rakefile +2 -2
- data/VERSION +1 -1
- data/convenient_scopes.gemspec +27 -29
- data/lib/convenient_scopes.rb +7 -7
- data/test/test_conditions.rb +7 -0
- data/test/test_ordering.rb +16 -8
- metadata +22 -12
- data/.gitignore +0 -21
data/Rakefile
CHANGED
@@ -10,9 +10,9 @@ begin
|
|
10
10
|
gem.email = "isc@massivebraingames.com"
|
11
11
|
gem.homepage = "http://github.com/isc/convenient_scopes"
|
12
12
|
gem.authors = ["Ivan Schneider"]
|
13
|
-
gem.add_runtime_dependency "activerecord", ">= 3.0.
|
13
|
+
gem.add_runtime_dependency "activerecord", ">= 3.0.4"
|
14
14
|
gem.add_development_dependency "shoulda", ">= 0"
|
15
|
-
gem.add_development_dependency "sqlite3
|
15
|
+
gem.add_development_dependency "sqlite3"
|
16
16
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
17
|
end
|
18
18
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.5.0
|
data/convenient_scopes.gemspec
CHANGED
@@ -1,65 +1,63 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{convenient_scopes}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.5.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ivan Schneider"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-02-20}
|
13
13
|
s.description = %q{Dynamic scopes by convention for ActiveRecord 3}
|
14
14
|
s.email = %q{isc@massivebraingames.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
"LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"convenient_scopes.gemspec",
|
26
|
+
"lib/convenient_scopes.rb",
|
27
|
+
"test/helper.rb",
|
28
|
+
"test/test_all_and_any_conditions.rb",
|
29
|
+
"test/test_associations.rb",
|
30
|
+
"test/test_conditions.rb",
|
31
|
+
"test/test_ordering.rb"
|
32
32
|
]
|
33
33
|
s.homepage = %q{http://github.com/isc/convenient_scopes}
|
34
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
35
34
|
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version = %q{1.
|
35
|
+
s.rubygems_version = %q{1.5.2}
|
37
36
|
s.summary = %q{Dynamic scopes by convention for ActiveRecord 3}
|
38
37
|
s.test_files = [
|
39
38
|
"test/helper.rb",
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
"test/test_all_and_any_conditions.rb",
|
40
|
+
"test/test_associations.rb",
|
41
|
+
"test/test_conditions.rb",
|
42
|
+
"test/test_ordering.rb"
|
44
43
|
]
|
45
44
|
|
46
45
|
if s.respond_to? :specification_version then
|
47
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
48
46
|
s.specification_version = 3
|
49
47
|
|
50
|
-
if Gem::Version.new(Gem::
|
51
|
-
s.add_runtime_dependency(%q<activerecord>, [">= 3.0.
|
48
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 3.0.4"])
|
52
50
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
53
|
-
s.add_development_dependency(%q<sqlite3
|
51
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
54
52
|
else
|
55
|
-
s.add_dependency(%q<activerecord>, [">= 3.0.
|
53
|
+
s.add_dependency(%q<activerecord>, [">= 3.0.4"])
|
56
54
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
57
|
-
s.add_dependency(%q<sqlite3
|
55
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
58
56
|
end
|
59
57
|
else
|
60
|
-
s.add_dependency(%q<activerecord>, [">= 3.0.
|
58
|
+
s.add_dependency(%q<activerecord>, [">= 3.0.4"])
|
61
59
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
62
|
-
s.add_dependency(%q<sqlite3
|
60
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
63
61
|
end
|
64
62
|
end
|
65
63
|
|
data/lib/convenient_scopes.rb
CHANGED
@@ -13,7 +13,7 @@ module ConvenientScopes
|
|
13
13
|
|
14
14
|
def equals_scope name
|
15
15
|
return unless (column = match_suffix_and_column_name name, %w(equals eq is))
|
16
|
-
lambda {|value| where(column => value)}
|
16
|
+
lambda {|value| unscoped.where(column => value)}
|
17
17
|
end
|
18
18
|
|
19
19
|
def does_not_equal_scope name
|
@@ -73,7 +73,7 @@ module ConvenientScopes
|
|
73
73
|
def boolean_column_scope name
|
74
74
|
return unless column_names.include? name.to_s
|
75
75
|
return unless boolean_column? name
|
76
|
-
where(name => true)
|
76
|
+
unscoped.where(name => true)
|
77
77
|
end
|
78
78
|
|
79
79
|
def negative_boolean_column_scope name
|
@@ -81,7 +81,7 @@ module ConvenientScopes
|
|
81
81
|
return unless str_name.gsub!(/^not_/, '')
|
82
82
|
return unless column_names.include? str_name
|
83
83
|
return unless boolean_column? str_name
|
84
|
-
where(str_name => false)
|
84
|
+
unscoped.where(str_name => false)
|
85
85
|
end
|
86
86
|
|
87
87
|
end
|
@@ -108,7 +108,7 @@ module ConvenientScopes
|
|
108
108
|
|
109
109
|
def determine_order_scope_data name, direction
|
110
110
|
if column_names.include? name.to_s
|
111
|
-
order("#{quoted_table_name}.#{name} #{direction}")
|
111
|
+
unscoped.order("#{quoted_table_name}.#{name} #{direction}")
|
112
112
|
elsif assoc = (possible_association_for_scope name)
|
113
113
|
next_scope = name.to_s.split("#{assoc.name}_").last.to_sym # age
|
114
114
|
scope_arg = assoc.klass.determine_order_scope_data next_scope, direction
|
@@ -132,7 +132,7 @@ module ConvenientScopes
|
|
132
132
|
def define_scope name
|
133
133
|
[Conditions, Ordering].map(&:instance_methods).flatten.each do |scope_type|
|
134
134
|
if scope_arg = (send scope_type.to_sym, name)
|
135
|
-
return scope_arg
|
135
|
+
return scope_arg
|
136
136
|
end
|
137
137
|
end
|
138
138
|
association_scope name
|
@@ -141,12 +141,12 @@ module ConvenientScopes
|
|
141
141
|
def match_and_define_scope name, suffixes, sql_format, value_format = nil
|
142
142
|
return unless (column = match_suffix_and_column_name name, suffixes)
|
143
143
|
sql = formatted_sql column, sql_format
|
144
|
-
lambda {|value| where([sql, value_format ? (value_format % value) : value])}
|
144
|
+
lambda {|value| unscoped.where([sql, value_format ? (value_format % value) : value])}
|
145
145
|
end
|
146
146
|
|
147
147
|
def match_and_define_scope_without_value name, suffixes, sql_format
|
148
148
|
return unless (column = match_suffix_and_column_name name, suffixes)
|
149
|
-
where(formatted_sql column, sql_format)
|
149
|
+
unscoped.where(formatted_sql column, sql_format)
|
150
150
|
end
|
151
151
|
|
152
152
|
def formatted_sql column, sql_format
|
data/test/test_conditions.rb
CHANGED
@@ -14,6 +14,7 @@ class TestConditions < Test::Unit::TestCase
|
|
14
14
|
User.blabla_eq('Bob')
|
15
15
|
end
|
16
16
|
assert_equal [@bob], User.pseudo_eq('Bob')
|
17
|
+
assert_equal [@slim], User.pseudo_eq('Slim')
|
17
18
|
assert_equal [@slim], User.pseudo_is('Slim')
|
18
19
|
assert_equal [@bob], User.first_name_is('Robert')
|
19
20
|
end
|
@@ -66,5 +67,11 @@ class TestConditions < Test::Unit::TestCase
|
|
66
67
|
assert_equal [@slim], User.not_admin
|
67
68
|
end
|
68
69
|
|
70
|
+
should "not mix up scopes" do
|
71
|
+
User.age_gt(0).pseudo_null
|
72
|
+
sql = User.pseudo_null.to_sql
|
73
|
+
assert_nil sql['age']
|
74
|
+
end
|
75
|
+
|
69
76
|
end
|
70
77
|
end
|
data/test/test_ordering.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class TestOrdering < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
context "convenient_scopes" do
|
6
|
-
|
6
|
+
|
7
7
|
setup do
|
8
|
-
@bob = User.create :age => 43
|
9
|
-
@slim = User.create :age => 27
|
10
|
-
@avon = User.create :age => 37
|
8
|
+
@bob = User.create :age => 43, :pseudo => 'Bob'
|
9
|
+
@slim = User.create :age => 27, :pseudo => 'Slim'
|
10
|
+
@avon = User.create :age => 37, :pseudo => 'Avon'
|
11
11
|
@managers = Group.create :users => [@bob, @avon]
|
12
12
|
@developers = Group.create :users => [@slim]
|
13
13
|
end
|
@@ -16,12 +16,20 @@ class TestOrdering < Test::Unit::TestCase
|
|
16
16
|
assert_equal [@slim, @avon, @bob], User.ascend_by_age
|
17
17
|
assert_equal [@bob, @avon, @slim], User.descend_by_age
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
should "allow ordering by attributes of an association" do
|
21
21
|
assert_equal [@developers, @managers], Group.ascend_by_users_age.uniq
|
22
22
|
assert_equal [@managers, @developers], Group.descend_by_users_age.uniq
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
|
+
should "not screw stuff" do
|
26
|
+
User.where(:pseudo => 'Bob').descend_by_pseudo
|
27
|
+
sql = User.descend_by_pseudo.to_sql
|
28
|
+
assert_nil sql['Bob']
|
29
|
+
sql = User.where(:pseudo => 'Slim').descend_by_pseudo.to_sql
|
30
|
+
assert sql['Slim']
|
31
|
+
end
|
32
|
+
|
25
33
|
end
|
26
|
-
|
34
|
+
|
27
35
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: convenient_scopes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 11
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 0
|
7
|
-
-
|
8
|
+
- 5
|
8
9
|
- 0
|
9
|
-
version: 0.
|
10
|
+
version: 0.5.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Ivan Schneider
|
@@ -14,43 +15,48 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date:
|
18
|
+
date: 2011-02-20 00:00:00 +01:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: activerecord
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
27
30
|
segments:
|
28
31
|
- 3
|
29
32
|
- 0
|
30
|
-
-
|
31
|
-
|
32
|
-
version: 3.0.0.beta4
|
33
|
+
- 4
|
34
|
+
version: 3.0.4
|
33
35
|
type: :runtime
|
34
36
|
version_requirements: *id001
|
35
37
|
- !ruby/object:Gem::Dependency
|
36
38
|
name: shoulda
|
37
39
|
prerelease: false
|
38
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
39
42
|
requirements:
|
40
43
|
- - ">="
|
41
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
42
46
|
segments:
|
43
47
|
- 0
|
44
48
|
version: "0"
|
45
49
|
type: :development
|
46
50
|
version_requirements: *id002
|
47
51
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: sqlite3
|
52
|
+
name: sqlite3
|
49
53
|
prerelease: false
|
50
54
|
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
51
56
|
requirements:
|
52
57
|
- - ">="
|
53
58
|
- !ruby/object:Gem::Version
|
59
|
+
hash: 3
|
54
60
|
segments:
|
55
61
|
- 0
|
56
62
|
version: "0"
|
@@ -67,7 +73,6 @@ extra_rdoc_files:
|
|
67
73
|
- README.rdoc
|
68
74
|
files:
|
69
75
|
- .document
|
70
|
-
- .gitignore
|
71
76
|
- LICENSE
|
72
77
|
- README.rdoc
|
73
78
|
- Rakefile
|
@@ -75,6 +80,7 @@ files:
|
|
75
80
|
- convenient_scopes.gemspec
|
76
81
|
- lib/convenient_scopes.rb
|
77
82
|
- test/helper.rb
|
83
|
+
- test/test_all_and_any_conditions.rb
|
78
84
|
- test/test_associations.rb
|
79
85
|
- test/test_conditions.rb
|
80
86
|
- test/test_ordering.rb
|
@@ -83,28 +89,32 @@ homepage: http://github.com/isc/convenient_scopes
|
|
83
89
|
licenses: []
|
84
90
|
|
85
91
|
post_install_message:
|
86
|
-
rdoc_options:
|
87
|
-
|
92
|
+
rdoc_options: []
|
93
|
+
|
88
94
|
require_paths:
|
89
95
|
- lib
|
90
96
|
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
91
98
|
requirements:
|
92
99
|
- - ">="
|
93
100
|
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
94
102
|
segments:
|
95
103
|
- 0
|
96
104
|
version: "0"
|
97
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
98
107
|
requirements:
|
99
108
|
- - ">="
|
100
109
|
- !ruby/object:Gem::Version
|
110
|
+
hash: 3
|
101
111
|
segments:
|
102
112
|
- 0
|
103
113
|
version: "0"
|
104
114
|
requirements: []
|
105
115
|
|
106
116
|
rubyforge_project:
|
107
|
-
rubygems_version: 1.
|
117
|
+
rubygems_version: 1.5.2
|
108
118
|
signing_key:
|
109
119
|
specification_version: 3
|
110
120
|
summary: Dynamic scopes by convention for ActiveRecord 3
|