sakuramochi 0.5.8 → 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a6e50b44a4de3ce664fb316393ada00b3623a54c
4
+ data.tar.gz: 44e8e4257655ae97585c7702d1f513194e0721ef
5
+ SHA512:
6
+ metadata.gz: 47d54d72735e47c685cc737598acec787c27d451fedeed35b07743dafc2d88e123427e2b002c9d91abde738298131fa54bb77638c99d4e773bbcaf47576fb8a7
7
+ data.tar.gz: 11199b04b1176f6b05fd944eea152d18f0e60aeb84e8c55a4994bcd67fb85f57299f626d83729a56e22ee48fbd83159ed990862f99cfd1259f6e22383e631f5b
@@ -8,37 +8,31 @@ module Sakuramochi
8
8
  included do
9
9
  unless respond_to? :build
10
10
  def self.build(attribute, value)
11
- model_class = defined?(ActiveRecord::Model) ? ActiveRecord::Model : ActiveRecord::Base
12
-
13
11
  case value
14
12
  when ActiveRecord::Relation
15
13
  value = value.select(value.klass.arel_table[value.klass.primary_key]) if value.select_values.empty?
16
14
  attribute.in(value.arel.ast)
17
15
  when Array, ActiveRecord::Associations::CollectionProxy
18
- values = value.to_a.map {|x| x.is_a?(model_class) ? x.id : x}
19
- ranges, values = values.partition {|v| v.is_a?(Range)}
16
+ values = value.to_a.map {|x| x.is_a?(ActiveRecord::Base) ? x.id : x}
17
+ ranges, values = values.partition {|v| v.is_a?(Range) || v.is_a?(Arel::Relation)}
20
18
 
21
- values_predicate = if values.include?(nil)
22
- values = values.compact
19
+ array_predicates = ranges.map {|range| attribute.in(range)}
23
20
 
24
- case values.length
25
- when 0
26
- attribute.eq(nil)
27
- when 1
28
- attribute.eq(values.first).or(attribute.eq(nil))
21
+ if values.include?(nil)
22
+ values = values.compact
23
+ if values.empty?
24
+ array_predicates << attribute.eq(nil)
29
25
  else
30
- attribute.in(values).or(attribute.eq(nil))
26
+ array_predicates << attribute.in(values.compact).or(attribute.eq(nil))
31
27
  end
32
28
  else
33
- attribute.in(values)
29
+ array_predicates << attribute.in(values)
34
30
  end
35
31
 
36
- array_predicates = ranges.map { |range| attribute.in(range) }
37
- array_predicates << values_predicate
38
- array_predicates.inject { |composite, predicate| composite.or(predicate) }
39
- when Range
32
+ array_predicates.inject {|composite, predicate| composite.or(predicate)}
33
+ when Range, Arel::Relation
40
34
  attribute.in(value)
41
- when model_class
35
+ when ActiveRecord::Base
42
36
  attribute.eq(value.id)
43
37
  when Class
44
38
  # FIXME: I think we need to deprecate this behavior
@@ -56,17 +50,22 @@ module Sakuramochi
56
50
  end
57
51
 
58
52
  module ClassMethods
59
- def build_from_hash_with_predicate(engine, attributes, default_table)
60
- attributes.map do |column, value|
53
+ def build_from_hash_with_predicate(engine, attributes, default_table, allow_table_name = true)
54
+ predicates = attributes.map do |column, value|
61
55
  table = default_table
62
56
 
63
- if value.is_a?(Hash)
57
+ if allow_table_name && value.is_a?(Hash)
64
58
  table = Arel::Table.new(column, engine)
65
- build_from_hash_with_predicate(engine, value, table)
59
+
60
+ if value.empty?
61
+ '1 = 2'
62
+ else
63
+ build_from_hash_with_predicate(engine, value, table, false)
64
+ end
66
65
  else
67
66
  column = column.to_s
68
67
 
69
- if column.include?('.')
68
+ if allow_table_name && column.include?('.')
70
69
  table_name, column = column.split('.', 2)
71
70
  table = Arel::Table.new(table_name, engine)
72
71
  end
@@ -80,7 +79,9 @@ module Sakuramochi
80
79
  build(attribute, value)
81
80
  end
82
81
  end
83
- end.flatten
82
+ end
83
+
84
+ predicates.flatten
84
85
  end
85
86
 
86
87
  private
@@ -1,3 +1,3 @@
1
1
  module Sakuramochi
2
- VERSION = "0.5.8"
2
+ VERSION = "0.5.9"
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sakuramochi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.8
5
- prerelease:
4
+ version: 0.5.9
6
5
  platform: ruby
7
6
  authors:
8
7
  - mashiro
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-05-08 00:00:00.000000000 Z
11
+ date: 2013-05-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activerecord
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,49 +41,43 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: sqlite3
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - '>='
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - '>='
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  description: Predicates and conditions that extends to the ActiveRecord 3
@@ -123,32 +112,25 @@ files:
123
112
  - spec/support/schema.rb
124
113
  homepage: https://github.com/mashiro/sakuramochi
125
114
  licenses: []
115
+ metadata: {}
126
116
  post_install_message:
127
117
  rdoc_options: []
128
118
  require_paths:
129
119
  - lib
130
120
  required_ruby_version: !ruby/object:Gem::Requirement
131
- none: false
132
121
  requirements:
133
- - - ! '>='
122
+ - - '>='
134
123
  - !ruby/object:Gem::Version
135
124
  version: '0'
136
- segments:
137
- - 0
138
- hash: 2940093351635761929
139
125
  required_rubygems_version: !ruby/object:Gem::Requirement
140
- none: false
141
126
  requirements:
142
- - - ! '>='
127
+ - - '>='
143
128
  - !ruby/object:Gem::Version
144
129
  version: '0'
145
- segments:
146
- - 0
147
- hash: 2940093351635761929
148
130
  requirements: []
149
131
  rubyforge_project: sakuramochi
150
- rubygems_version: 1.8.21
132
+ rubygems_version: 2.0.0
151
133
  signing_key:
152
- specification_version: 3
134
+ specification_version: 4
153
135
  summary: Minimal extensions for ActiveRecord 3
154
136
  test_files: []