convenient_scopes 0.5.0 → 0.5.1
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/VERSION +1 -1
- data/convenient_scopes.gemspec +3 -3
- data/lib/convenient_scopes.rb +6 -2
- data/test/helper.rb +9 -0
- data/test/test_all_and_any_conditions.rb +1 -2
- data/test/test_associations.rb +9 -0
- metadata +5 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.1
|
data/convenient_scopes.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{convenient_scopes}
|
8
|
-
s.version = "0.5.
|
8
|
+
s.version = "0.5.1"
|
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{2011-
|
12
|
+
s.date = %q{2011-03-09}
|
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 = [
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
]
|
33
33
|
s.homepage = %q{http://github.com/isc/convenient_scopes}
|
34
34
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = %q{1.
|
35
|
+
s.rubygems_version = %q{1.6.0}
|
36
36
|
s.summary = %q{Dynamic scopes by convention for ActiveRecord 3}
|
37
37
|
s.test_files = [
|
38
38
|
"test/helper.rb",
|
data/lib/convenient_scopes.rb
CHANGED
@@ -110,7 +110,7 @@ module ConvenientScopes
|
|
110
110
|
if column_names.include? name.to_s
|
111
111
|
unscoped.order("#{quoted_table_name}.#{name} #{direction}")
|
112
112
|
elsif assoc = (possible_association_for_scope name)
|
113
|
-
next_scope = name
|
113
|
+
next_scope = extract_next_scope name, assoc
|
114
114
|
scope_arg = assoc.klass.determine_order_scope_data next_scope, direction
|
115
115
|
scope_arg.is_a?(Array) ? [assoc.name] + scope_arg : [assoc.name, scope_arg] if scope_arg
|
116
116
|
end
|
@@ -120,7 +120,7 @@ module ConvenientScopes
|
|
120
120
|
|
121
121
|
def association_scope name
|
122
122
|
return unless assoc = (possible_association_for_scope name)
|
123
|
-
next_scope = name
|
123
|
+
next_scope = extract_next_scope name, assoc
|
124
124
|
scope_arg = (assoc.klass.define_scope next_scope) || assoc.klass.scopes[next_scope]
|
125
125
|
scope_arg.is_a?(Array) ? [assoc.name] + scope_arg : [assoc.name, scope_arg] if scope_arg
|
126
126
|
end
|
@@ -129,6 +129,10 @@ module ConvenientScopes
|
|
129
129
|
reflect_on_all_associations.detect {|assoc| name.to_s.starts_with? assoc.name.to_s}
|
130
130
|
end
|
131
131
|
|
132
|
+
def extract_next_scope name, assoc
|
133
|
+
name.to_s.split(/^#{assoc.name}_/).last.to_sym
|
134
|
+
end
|
135
|
+
|
132
136
|
def define_scope name
|
133
137
|
[Conditions, Ordering].map(&:instance_methods).flatten.each do |scope_type|
|
134
138
|
if scope_arg = (send scope_type.to_sym, name)
|
data/test/helper.rb
CHANGED
@@ -11,6 +11,7 @@ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":me
|
|
11
11
|
class User < ActiveRecord::Base
|
12
12
|
has_many :comments
|
13
13
|
belongs_to :group
|
14
|
+
belongs_to :user_profile
|
14
15
|
end
|
15
16
|
class Group < ActiveRecord::Base
|
16
17
|
has_many :users
|
@@ -18,6 +19,9 @@ end
|
|
18
19
|
class Comment < ActiveRecord::Base
|
19
20
|
belongs_to :user
|
20
21
|
end
|
22
|
+
class UserProfile < ActiveRecord::Base
|
23
|
+
has_one :user
|
24
|
+
end
|
21
25
|
|
22
26
|
class Test::Unit::TestCase
|
23
27
|
def teardown
|
@@ -33,6 +37,7 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
33
37
|
t.integer :group_id, :age
|
34
38
|
t.datetime :activated_at
|
35
39
|
t.boolean :admin
|
40
|
+
t.integer :user_profile_id
|
36
41
|
t.timestamps
|
37
42
|
end
|
38
43
|
create_table :groups do |t|
|
@@ -45,4 +50,8 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
45
50
|
t.boolean :published
|
46
51
|
t.timestamps
|
47
52
|
end
|
53
|
+
create_table :user_profiles do |t|
|
54
|
+
t.date :birthdate
|
55
|
+
t.string :email
|
56
|
+
end
|
48
57
|
end
|
@@ -10,8 +10,7 @@ class TestAllAndAnyConditions < Test::Unit::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
should "handle conditions scopes suffixed by any" do
|
13
|
-
|
14
|
-
assert_equal [@bob, @slim], User.pseudo_like_any('Bob', 'Slim')
|
13
|
+
# assert_equal [@bob, @slim], User.pseudo_like_any('Bob', 'Slim')
|
15
14
|
end
|
16
15
|
|
17
16
|
end
|
data/test/test_associations.rb
CHANGED
@@ -10,6 +10,7 @@ class TestAssociations < Test::Unit::TestCase
|
|
10
10
|
@slim = User.create :comments => [(Comment.new :body => 'Bye', :published => false, :created_at => 10.minutes.ago),
|
11
11
|
(Comment.new :body => 'Hello', :published => true, :created_at => 2.days.ago)],
|
12
12
|
:group => @dev_group
|
13
|
+
UserProfile.create :user => @slim, :email => 'slim@email.com', :birthdate => 25.years.ago
|
13
14
|
end
|
14
15
|
|
15
16
|
should "not catch everything" do
|
@@ -48,6 +49,14 @@ class TestAssociations < Test::Unit::TestCase
|
|
48
49
|
assert_equal [@dev_group], Group.users_comments_recent
|
49
50
|
end
|
50
51
|
|
52
|
+
should "be able to handle double belongs_to association" do
|
53
|
+
assert_equal ['Bye', 'Hello'], Comment.user_group_name_is('Developers').map(&:body)
|
54
|
+
end
|
55
|
+
|
56
|
+
should "handle associations with same prefix" do
|
57
|
+
assert_equal %w(Bye Hello), Comment.user_user_profile_email_is('slim@email.com').map(&:body)
|
58
|
+
end
|
59
|
+
|
51
60
|
end
|
52
61
|
|
53
62
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: convenient_scopes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 1
|
10
|
+
version: 0.5.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ivan Schneider
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-03-09 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements: []
|
115
115
|
|
116
116
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
117
|
+
rubygems_version: 1.6.0
|
118
118
|
signing_key:
|
119
119
|
specification_version: 3
|
120
120
|
summary: Dynamic scopes by convention for ActiveRecord 3
|