scopify 0.1.0 → 0.1.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/README.md CHANGED
@@ -45,9 +45,21 @@ Roll your own condition composing.
45
45
  # better now !
46
46
  MyDBWrapper.scoped(:order => 'a').scoped(:order => 'b).all --> {:order => "a AND b"}
47
47
 
48
- ### first
49
- When calling first on and scope, `:limit => 1` will be added
50
- MyDBWrapper.scoped(:limit => 1).all == MyDBWrapper.first
48
+ ### Advanced: return_scope?(method_name)
49
+ Get raw arguments instead of a merged options hash.
50
+ class MyDBWrapper
51
+ def self.return_scope?(method_name)
52
+ return true if super
53
+ method_name == :i_return_scope
54
+ end
55
+
56
+ def self.i_return_scope(pure_args)
57
+ scoped(pure_args.merge(:offset => 1))
58
+ end
59
+ end
60
+
61
+ MyDBWrapper.scoped(:limit=>1).i_return_scope(:order => 'x')
62
+ --> receives {:order => 'x'}, not a merged options hash.
51
63
 
52
64
  Author
53
65
  ======
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -12,6 +12,11 @@ module Scopify
12
12
  Scope.build(self, options)
13
13
  end
14
14
 
15
+ # overwrite tis to enable your custom scopes
16
+ def return_scope?(method_name)
17
+ respond_to?("#{method_name}_scope_options")
18
+ end
19
+
15
20
  def scope(name, options)
16
21
  # give access to current options inside of evaled method
17
22
  meta_class = (class << self; self; end)
@@ -42,6 +42,7 @@ module Scopify
42
42
  @options.map do |k,v|
43
43
  result = case k
44
44
  when :limit, :offset then v.min
45
+ when :conditions then "(#{v * ") AND ("})"
45
46
  when :order then v * ', '
46
47
  else v
47
48
  end
@@ -58,14 +59,13 @@ module Scopify
58
59
  end
59
60
 
60
61
  def method_missing(method_name, *args, &block)
61
- if @base.respond_to?("#{method_name}_scope_options")
62
+ if @base.respond_to?(:return_scope?) and @base.return_scope?(method_name)
62
63
  # the method we call is a scope, continue chaining
63
- scope = @base.send(method_name, *args)
64
+ scope = @base.send(method_name, *args, &block)
64
65
  scope.scoped(self)
65
66
  else
66
67
  # the method we call is a normal method, flatten everything
67
68
  options = (args.first||{})
68
- options = options.merge(:limit => 1) if method_name.to_sym == :first
69
69
  options = scoped(options).to_hash
70
70
  @base.send(method_name, options, &block)
71
71
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{scopify}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
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-13}
12
+ s.date = %q{2010-05-14}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.extra_rdoc_files = [
15
15
  "README.md"
@@ -26,6 +26,22 @@ class T2
26
26
  end
27
27
  end
28
28
 
29
+ class T3
30
+ include Scopify
31
+ def self.foo(options)
32
+ options
33
+ end
34
+
35
+ def self.return_scope?(name)
36
+ return true if super
37
+ name == :i_return_scope
38
+ end
39
+
40
+ def self.i_return_scope(options)
41
+ scoped(options)
42
+ end
43
+ end
44
+
29
45
  describe Scopify do
30
46
  describe :scoped do
31
47
  it "returns a new scope" do
@@ -40,10 +56,6 @@ describe Scopify do
40
56
  T1.scoped({:limit => 1}).foo(:offset => 1).should == {:limit => 1, :offset => 1}
41
57
  end
42
58
 
43
- it "adds limit => 1 to first queries" do
44
- T1.scoped({:order => 'FOO'}).first.should == {:limit => 1, :order => 'FOO'}
45
- end
46
-
47
59
  it "can stack" do
48
60
  T1.scoped(:limit => 1).scoped(:order => 'X').foo.should == {:limit => 1, :order => 'X'}
49
61
  end
@@ -95,6 +107,17 @@ describe Scopify do
95
107
  T1.scope(:ccc2, :order => 'b')
96
108
  T1.ccc2.ccc.foo.should == {:order => 'b, a'}
97
109
  end
110
+
111
+ it "calls methods with a options if they dont accept scopes" do
112
+ T3.scope(:aaa, :limit => 1)
113
+ T3.aaa.foo(:offset => 1).should == {:offset => 1, :limit => 1}
114
+ end
115
+
116
+ it "calls method with raw arguments if they return scope" do
117
+ T3.scope(:bbb, :limit => 1)
118
+ T3.should_receive(:i_return_scope).with(:offset => 1).and_return T3.bbb
119
+ T3.bbb.i_return_scope(:offset => 1).scope_options.should == T3.bbb.bbb.scope_options
120
+ end
98
121
  end
99
122
 
100
123
  it "has a VERSION" do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
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-13 00:00:00 +02:00
17
+ date: 2010-05-14 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies: []
20
20