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 CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
@@ -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.0"
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-02-20}
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.5.2}
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",
@@ -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.to_s.split("#{assoc.name}_").last.to_sym # age
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.to_s.split("#{assoc.name}_").last.to_sym
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
- flunk "not implemented yet"
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
@@ -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: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 0
10
- version: 0.5.0
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-02-20 00:00:00 +01:00
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.5.2
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