convenient_scopes 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
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