activerecord-refinements 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,54 @@
1
+ module ActiveRecord
2
+ module Refinements
3
+ module WhereBlockSyntax
4
+ refine Symbol do
5
+ %i[== != =~ > >= < <=].each do |op|
6
+ define_method(op) {|val| [self, op, val] }
7
+ end
8
+ end
9
+ end
10
+
11
+ class WhereBlockEvaluator
12
+ using ActiveRecord::Refinements::WhereBlockSyntax
13
+
14
+ def initialize(table)
15
+ @table = table
16
+ end
17
+
18
+ def evaluate(&block)
19
+ col, op, val = instance_eval &block
20
+ case op
21
+ when :==
22
+ @table[col].eq val
23
+ when :!=
24
+ @table[col].not_eq val
25
+ when :=~
26
+ @table[col].matches val
27
+ when :>
28
+ @table[col].gt val
29
+ when :>=
30
+ @table[col].gteq val
31
+ when :<
32
+ @table[col].lt val
33
+ when :<=
34
+ @table[col].lteq val
35
+ else
36
+ raise "unexpected op: #{op}"
37
+ end
38
+ end
39
+ end
40
+
41
+ module QueryMethods
42
+ def where(opts = nil, *rest, &block)
43
+ if block
44
+ evaluator = ActiveRecord::Refinements::WhereBlockEvaluator.new(table)
45
+ clone.tap do |relation|
46
+ relation.where_values += build_where(evaluator.evaluate(&block))
47
+ end
48
+ else
49
+ super
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,5 +1,5 @@
1
1
  module Activerecord
2
2
  module Refinements
3
- VERSION = '0.1.0'
3
+ VERSION = '0.1.1'
4
4
  end
5
5
  end
@@ -1,60 +1,8 @@
1
1
  require 'activerecord-refinements/version'
2
2
  require 'active_record'
3
+ require 'active_record/refinements'
3
4
 
4
5
  module ActiveRecord
5
- module Refinements
6
- module WhereBlockSyntax
7
- refine Symbol do
8
- %i[== != =~ > >= < <=].each do |op|
9
- define_method(op) {|val| [self, op, val] }
10
- end
11
- end
12
- end
13
-
14
- class WhereBlockEvaluator
15
- using ActiveRecord::Refinements::WhereBlockSyntax
16
-
17
- def initialize(table)
18
- @table = table
19
- end
20
-
21
- def evaluate(&block)
22
- col, op, val = instance_eval &block
23
- case op
24
- when :==
25
- @table[col].eq val
26
- when :!=
27
- @table[col].not_eq val
28
- when :=~
29
- @table[col].matches val
30
- when :>
31
- @table[col].gt val
32
- when :>=
33
- @table[col].gteq val
34
- when :<
35
- @table[col].lt val
36
- when :<=
37
- @table[col].lteq val
38
- else
39
- raise "unexpected op: #{op}"
40
- end
41
- end
42
- end
43
-
44
- module QueryMethods
45
- def where(opts = nil, *rest, &block)
46
- if block
47
- evaluator = ActiveRecord::Refinements::WhereBlockEvaluator.new(table)
48
- clone.tap do |relation|
49
- relation.where_values += build_where(evaluator.evaluate(&block))
50
- end
51
- else
52
- super
53
- end
54
- end
55
- end
56
- end
57
-
58
6
  module QueryMethods
59
7
  prepend ActiveRecord::Refinements::QueryMethods
60
8
  end
data/spec/where_spec.rb CHANGED
@@ -6,7 +6,7 @@ describe 'Symbol enhancements' do
6
6
  it { should =~ /WHERE "users"."name" = 'matz'/ }
7
7
  end
8
8
 
9
- describe '#=~' do
9
+ describe '#!=' do
10
10
  subject { User.where { :name != 'nobu' }.to_sql }
11
11
  it { should =~ /WHERE \("users"."name" != 'nobu'\)/ }
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-refinements
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -72,6 +72,7 @@ files:
72
72
  - README.md
73
73
  - Rakefile
74
74
  - activerecord-refinements.gemspec
75
+ - lib/active_record/refinements.rb
75
76
  - lib/activerecord-refinements.rb
76
77
  - lib/activerecord-refinements/version.rb
77
78
  - spec/spec_helper.rb