sakuramochi 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/sakuramochi/predicate_builder.rb +0 -1
- data/lib/sakuramochi/relation.rb +36 -39
- data/lib/sakuramochi/version.rb +1 -1
- data/sakuramochi.gemspec +2 -1
- metadata +22 -11
@@ -62,7 +62,6 @@ module Sakuramochi
|
|
62
62
|
when ActiveRecord::Relation
|
63
63
|
value = value.select(value.klass.arel_table[value.klass.primary_key]) if value.select_values.empty?
|
64
64
|
attribute.in(value.arel.ast)
|
65
|
-
when Array, ActiveRecord::Associations::CollectionProxy
|
66
65
|
when Array, ActiveRecord::Associations::CollectionProxy
|
67
66
|
values = value.to_a.map {|x| x.is_a?(ActiveRecord::Base) ? x.id : x}
|
68
67
|
ranges, values = values.partition {|v| v.is_a?(Range) || v.is_a?(Arel::Relation)}
|
data/lib/sakuramochi/relation.rb
CHANGED
@@ -10,50 +10,47 @@ module Sakuramochi
|
|
10
10
|
alias :build_where :build_where_with_condition
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
left && right ? Arel::Nodes::Or.new(left, right) : left || right
|
27
|
-
end
|
28
|
-
|
29
|
-
when Sakuramochi::Condition::Nodes::Term
|
30
|
-
case node.operator.to_s
|
31
|
-
when 'not'
|
32
|
-
right = collapse_conditions(node.value, other)
|
33
|
-
Arel::Nodes::Not.new(right) if right
|
34
|
-
end
|
35
|
-
|
36
|
-
when Sakuramochi::Condition::Nodes::Factor
|
37
|
-
wheres = build_where_without_condition(node.value, other)
|
38
|
-
arel = table.from(table)
|
39
|
-
collapse_wheres(arel, (wheres - ['']).uniq)
|
40
|
-
arel.constraints.inject { |left, right| left.and(right) }
|
41
|
-
|
42
|
-
when Sakuramochi::Condition::Nodes::Group
|
43
|
-
expression = collapse_conditions(node.expression, other)
|
44
|
-
Arel::Nodes::Grouping.new(expression) if expression
|
13
|
+
def collapse_conditions(node, other)
|
14
|
+
case node
|
15
|
+
when Sakuramochi::Condition::Nodes::Expression
|
16
|
+
case node.operator.to_s
|
17
|
+
when 'and'
|
18
|
+
left = collapse_conditions(node.left, other)
|
19
|
+
right = collapse_conditions(node.right, other)
|
20
|
+
left && right ? Arel::Nodes::And.new([left, right]) : left || right
|
21
|
+
|
22
|
+
when 'or'
|
23
|
+
left = collapse_conditions(node.left, other)
|
24
|
+
right = collapse_conditions(node.right, other)
|
25
|
+
left && right ? Arel::Nodes::Or.new(left, right) : left || right
|
45
26
|
end
|
46
|
-
end
|
47
27
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
build_where_without_condition(opts, other)
|
28
|
+
when Sakuramochi::Condition::Nodes::Term
|
29
|
+
case node.operator.to_s
|
30
|
+
when 'not'
|
31
|
+
right = collapse_conditions(node.value, other)
|
32
|
+
Arel::Nodes::Not.new(right) if right
|
54
33
|
end
|
34
|
+
|
35
|
+
when Sakuramochi::Condition::Nodes::Factor
|
36
|
+
wheres = build_where_without_condition(node.value, other)
|
37
|
+
arel = table.from(table)
|
38
|
+
collapse_wheres(arel, (wheres - ['']).uniq)
|
39
|
+
arel.constraints.inject { |left, right| left.and(right) }
|
40
|
+
|
41
|
+
when Sakuramochi::Condition::Nodes::Group
|
42
|
+
expression = collapse_conditions(node.expression, other)
|
43
|
+
Arel::Nodes::Grouping.new(expression) if expression
|
55
44
|
end
|
56
45
|
end
|
57
46
|
|
47
|
+
def build_where_with_condition(opts, other = [])
|
48
|
+
if Sakuramochi::Condition.condition?(opts)
|
49
|
+
ast = Sakuramochi::Condition::Parser.new(opts.dup).parse
|
50
|
+
[collapse_conditions(ast, other)].compact
|
51
|
+
else
|
52
|
+
build_where_without_condition(opts, other)
|
53
|
+
end
|
54
|
+
end
|
58
55
|
end
|
59
56
|
end
|
data/lib/sakuramochi/version.rb
CHANGED
data/sakuramochi.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Sakuramochi::VERSION
|
8
8
|
s.authors = ["mashiro"]
|
9
9
|
s.email = ["mail@mashiro.org"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "https://github.com/mashiro/sakuramochi"
|
11
11
|
s.summary = %q{Minimal extensions for ActiveRecord 3}
|
12
12
|
s.description = %q{Predicates and conditions that extends to the ActiveRecord 3}
|
13
13
|
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.add_dependency "activesupport", "~> 3.0"
|
22
22
|
s.add_dependency "activerecord", "~> 3.0"
|
23
|
+
s.add_development_dependency "rake"
|
23
24
|
s.add_development_dependency "rspec"
|
24
25
|
s.add_development_dependency "sqlite3"
|
25
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sakuramochi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-10 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &22523360 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22523360
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
27
|
-
requirement: &
|
27
|
+
requirement: &22522740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,21 @@ dependencies:
|
|
32
32
|
version: '3.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *22522740
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &22461240 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *22461240
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: rspec
|
38
|
-
requirement: &
|
49
|
+
requirement: &22460780 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *22460780
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: sqlite3
|
49
|
-
requirement: &
|
60
|
+
requirement: &22460360 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *22460360
|
58
69
|
description: Predicates and conditions that extends to the ActiveRecord 3
|
59
70
|
email:
|
60
71
|
- mail@mashiro.org
|
@@ -85,7 +96,7 @@ files:
|
|
85
96
|
- spec/spec_helper.rb
|
86
97
|
- spec/support/matcher.rb
|
87
98
|
- spec/support/schema.rb
|
88
|
-
homepage:
|
99
|
+
homepage: https://github.com/mashiro/sakuramochi
|
89
100
|
licenses: []
|
90
101
|
post_install_message:
|
91
102
|
rdoc_options: []
|