scopify 0.1.3 → 0.1.5
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/README.md +8 -0
- data/VERSION +1 -1
- data/lib/scopify.rb +12 -0
- data/lib/scopify/scope.rb +6 -3
- data/scopify.gemspec +2 -2
- data/spec/scopify_spec.rb +40 -5
- metadata +3 -3
data/README.md
CHANGED
@@ -23,6 +23,14 @@ Create named scopes, with options, lambdas or other scopes
|
|
23
23
|
MyDBWrapper.good.first
|
24
24
|
MyDBWrapper.good.goodness(3).first
|
25
25
|
|
26
|
+
### simple_scope
|
27
|
+
Defines otherwise repetitive named scopes for you.
|
28
|
+
|
29
|
+
simple_scope :limit, :order, :where => :conditions
|
30
|
+
--> MyDBWrapper.limit(3).order('foo').where("1 = 2") ==
|
31
|
+
{:limit => 3, :order => 'foo', :conditions => "1 = 2"}
|
32
|
+
|
33
|
+
|
26
34
|
### Custom scope helpers
|
27
35
|
class MyDBWrapper
|
28
36
|
def self.foo(num)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/lib/scopify.rb
CHANGED
@@ -37,5 +37,17 @@ module Scopify
|
|
37
37
|
end
|
38
38
|
CODE
|
39
39
|
end
|
40
|
+
|
41
|
+
def simple_scope(*args)
|
42
|
+
args.each do |names|
|
43
|
+
if names.is_a?(Hash)
|
44
|
+
names.each do |name, value|
|
45
|
+
scope name, lambda{|x| {value => x}}
|
46
|
+
end
|
47
|
+
else
|
48
|
+
scope names, lambda{|x| {names => x}}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
40
52
|
end
|
41
53
|
end
|
data/lib/scopify/scope.rb
CHANGED
@@ -68,10 +68,13 @@ module Scopify
|
|
68
68
|
result = @base.send(method_name, *args, &block)
|
69
69
|
result.is_a?(Scope) ? scoped(result) : result
|
70
70
|
else
|
71
|
-
# the method we call is a normal method
|
72
|
-
options
|
71
|
+
# the method we call is a normal method
|
72
|
+
# - scope by options from last method call
|
73
|
+
# - flatten scope to options hash
|
74
|
+
options = (args.last.is_a?(Hash) ? args.pop : {})
|
73
75
|
options = scoped(options).to_hash
|
74
|
-
|
76
|
+
args << options
|
77
|
+
@base.send(method_name, *args, &block)
|
75
78
|
end
|
76
79
|
end
|
77
80
|
end
|
data/scopify.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{scopify}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Grosser"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-24}
|
13
13
|
s.email = %q{grosser.michael@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.md"
|
data/spec/scopify_spec.rb
CHANGED
@@ -42,22 +42,47 @@ class T3
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
class T4
|
46
|
+
include Scopify
|
47
|
+
simple_scope :limit, :where => :conditions
|
48
|
+
end
|
49
|
+
|
50
|
+
class T5
|
51
|
+
include Scopify
|
52
|
+
|
53
|
+
def self.foo(*args)
|
54
|
+
args
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
45
58
|
describe Scopify do
|
46
59
|
describe :scoped do
|
47
60
|
it "returns a new scope" do
|
48
61
|
T1.scoped({}).class.should == Scopify::Scope
|
49
62
|
end
|
50
63
|
|
64
|
+
it "can call hash on scope to reach base" do
|
65
|
+
T5.scoped({:limit => 1}).foo.should == [{:limit => 1}]
|
66
|
+
end
|
67
|
+
|
51
68
|
it "can call anything on scope to reach base" do
|
52
|
-
|
69
|
+
T5.scoped({:limit => 1}).foo(:xxx).should == [:xxx, {:limit => 1}]
|
53
70
|
end
|
54
71
|
|
55
|
-
it "can call
|
56
|
-
|
72
|
+
it "can call giving additional options" do
|
73
|
+
T5.scoped({:limit => 1}).foo(:offset => 1).should == [{:limit => 1, :offset => 1}]
|
74
|
+
end
|
75
|
+
|
76
|
+
it "can call with args and giving additional options" do
|
77
|
+
T5.scoped({:limit => 1}).foo(:xxx, :offset => 1).should == [:xxx, {:limit => 1, :offset => 1}]
|
57
78
|
end
|
58
79
|
|
59
80
|
it "can stack" do
|
60
|
-
|
81
|
+
T5.scoped(:limit => 1).scoped(:order => 'X').foo.should == [{:limit => 1, :order => 'X'}]
|
82
|
+
end
|
83
|
+
|
84
|
+
it "can stack with additional args" do
|
85
|
+
T5.scoped(:limit => 1).scoped(:order => 'X').foo(:xxx).should == [:xxx, {:limit => 1, :order => 'X'}]
|
61
86
|
end
|
62
87
|
|
63
88
|
it "overwrites limit with the minimum" do
|
@@ -119,7 +144,7 @@ describe Scopify do
|
|
119
144
|
T3.bbb.i_scope(:offset => 2)
|
120
145
|
end
|
121
146
|
|
122
|
-
it "scopes in
|
147
|
+
it "scopes in correct order when using scope-returning method" do
|
123
148
|
T3.scope(:ccc, :limit => 1)
|
124
149
|
T3.stub!(:i_scope).and_return T3.scoped(:offset => 2)
|
125
150
|
T3.bbb.i_scope(:offset => 2).scope_options.should == T3.bbb.scoped(:offset => 2).scope_options
|
@@ -132,6 +157,16 @@ describe Scopify do
|
|
132
157
|
end
|
133
158
|
end
|
134
159
|
|
160
|
+
describe :simple_scope do
|
161
|
+
it "builds simple scopes" do
|
162
|
+
T4.limit(1).scope_options.should == {:limit => [1]}
|
163
|
+
end
|
164
|
+
|
165
|
+
it "builds renamed scopes" do
|
166
|
+
T4.where('x').scope_options.should == {:conditions => ['x']}
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
135
170
|
describe "default to_hash" do
|
136
171
|
it "merges conditions that are hashes" do
|
137
172
|
T1.scoped(:conditions => {:x=>true}).scoped(:conditions => {:y => true}).to_hash.should == {:conditions => {:x => true, :y => true}}
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Michael Grosser
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-24 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|