squeel 1.0.13 → 1.0.14

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.0.14 (2012-12-04 OpenHack Louisville Edition!)
2
+
3
+ * Use bind values in where_values_hash, to prep for compatibility with 3.2.10
4
+ * Allow Symbol#to_proc blocks to fall through to Array's select method
5
+
1
6
  ## 1.0.13 (2012-10-11)
2
7
 
3
8
  * Allow strings in from_value. Fixes incompatibility with acts-as-taggable-on.
@@ -167,7 +167,7 @@ module Squeel
167
167
 
168
168
  def select(value = Proc.new)
169
169
  if block_given? && Proc === value
170
- if value.arity > 0
170
+ if value.arity > 0 || (Squeel.sane_arity? && value.arity < 0)
171
171
  to_a.select {|*block_args| value.call(*block_args)}
172
172
  else
173
173
  relation = clone
@@ -388,7 +388,12 @@ module Squeel
388
388
  def where_values_hash_with_squeel
389
389
  equalities = find_equality_predicates(where_visit(with_default_scope.where_values))
390
390
 
391
- Hash[equalities.map { |where| [where.left.name, where.right] }]
391
+ binds = Hash[bind_values.find_all(&:first).map { |column, v| [column.name, v] }]
392
+
393
+ Hash[equalities.map { |where|
394
+ name = where.left.name
395
+ [name, binds.fetch(name.to_s) { where.right }]
396
+ }]
392
397
  end
393
398
 
394
399
  end
@@ -1,3 +1,3 @@
1
1
  module Squeel
2
- VERSION = "1.0.13"
2
+ VERSION = "1.0.14"
3
3
  end
data/lib/squeel.rb CHANGED
@@ -18,6 +18,12 @@ module Squeel
18
18
  warn "DEPRECATION WARNING: #{message} (called from #{external_caller})"
19
19
  end
20
20
 
21
+ # Ruby 1.9 has a zero arity on a Proc with no arity. Prior to that, it mimics
22
+ # Symbol#to_proc and returns -1.
23
+ def self.sane_arity?
24
+ @sane_arity ||= Proc.new {}.arity == 0
25
+ end
26
+
21
27
  # Set up initial predicate aliases
22
28
  Constants::PREDICATE_ALIASES.each do |original, aliases|
23
29
  aliases.each do |aliaz|
@@ -364,12 +364,21 @@ module Squeel
364
364
  block.to_sql.should eq standard.to_sql
365
365
  end
366
366
 
367
- it 'falls back to Array#select behavior with a block that has an arity' do
367
+ it 'falls back to Array#select with a block that has an arity > 0' do
368
368
  people = Person.select{|p| p.id == 1}
369
369
  people.should have(1).person
370
370
  people.first.id.should eq 1
371
371
  end
372
372
 
373
+ it 'falls back to Array#select with Symbol#to_proc block' do
374
+ if Squeel.sane_arity?
375
+ people = Person.select(&:odd?)
376
+ people.map(&:id)[0..3].should eq [1, 3, 5, 7]
377
+ else
378
+ pending 'This version of Ruby has insane Proc#arity behavior.'
379
+ end
380
+ end
381
+
373
382
  it 'behaves as normal with standard parameters' do
374
383
  people = Person.select(:id)
375
384
  people.should have(332).people
@@ -21,6 +21,10 @@ class Person < ActiveRecord::Base
21
21
  sifter :name_starts_or_ends_with do |value|
22
22
  (name =~ "#{value}%") | (name =~ "%#{value}")
23
23
  end
24
+
25
+ def odd?
26
+ id.odd?
27
+ end
24
28
  end
25
29
 
26
30
  class PersonWithNamePrimaryKey < ActiveRecord::Base
metadata CHANGED
@@ -1,138 +1,142 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: squeel
3
- version: !ruby/object:Gem::Version
4
- version: 1.0.13
3
+ version: !ruby/object:Gem::Version
4
+ hash: 11
5
5
  prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 14
10
+ version: 1.0.14
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Ernie Miller
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-10-11 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2012-12-05 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: activerecord
16
- requirement: !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
17
23
  none: false
18
- requirements:
24
+ requirements:
19
25
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '3.0'
26
+ - !ruby/object:Gem::Version
27
+ hash: 7
28
+ segments:
29
+ - 3
30
+ - 0
31
+ version: "3.0"
22
32
  type: :runtime
33
+ requirement: *id001
23
34
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '3.0'
30
- - !ruby/object:Gem::Dependency
35
+ - !ruby/object:Gem::Dependency
31
36
  name: activesupport
32
- requirement: !ruby/object:Gem::Requirement
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
33
38
  none: false
34
- requirements:
39
+ requirements:
35
40
  - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '3.0'
41
+ - !ruby/object:Gem::Version
42
+ hash: 7
43
+ segments:
44
+ - 3
45
+ - 0
46
+ version: "3.0"
38
47
  type: :runtime
48
+ requirement: *id002
39
49
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '3.0'
46
- - !ruby/object:Gem::Dependency
50
+ - !ruby/object:Gem::Dependency
47
51
  name: polyamorous
48
- requirement: !ruby/object:Gem::Requirement
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
49
53
  none: false
50
- requirements:
54
+ requirements:
51
55
  - - ~>
52
- - !ruby/object:Gem::Version
56
+ - !ruby/object:Gem::Version
57
+ hash: 11
58
+ segments:
59
+ - 0
60
+ - 5
61
+ - 0
53
62
  version: 0.5.0
54
63
  type: :runtime
64
+ requirement: *id003
55
65
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 0.5.0
62
- - !ruby/object:Gem::Dependency
66
+ - !ruby/object:Gem::Dependency
63
67
  name: rspec
64
- requirement: !ruby/object:Gem::Requirement
68
+ version_requirements: &id004 !ruby/object:Gem::Requirement
65
69
  none: false
66
- requirements:
70
+ requirements:
67
71
  - - ~>
68
- - !ruby/object:Gem::Version
72
+ - !ruby/object:Gem::Version
73
+ hash: 23
74
+ segments:
75
+ - 2
76
+ - 6
77
+ - 0
69
78
  version: 2.6.0
70
79
  type: :development
80
+ requirement: *id004
71
81
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 2.6.0
78
- - !ruby/object:Gem::Dependency
82
+ - !ruby/object:Gem::Dependency
79
83
  name: machinist
80
- requirement: !ruby/object:Gem::Requirement
84
+ version_requirements: &id005 !ruby/object:Gem::Requirement
81
85
  none: false
82
- requirements:
86
+ requirements:
83
87
  - - ~>
84
- - !ruby/object:Gem::Version
88
+ - !ruby/object:Gem::Version
89
+ hash: 27
90
+ segments:
91
+ - 1
92
+ - 0
93
+ - 6
85
94
  version: 1.0.6
86
95
  type: :development
96
+ requirement: *id005
87
97
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: 1.0.6
94
- - !ruby/object:Gem::Dependency
98
+ - !ruby/object:Gem::Dependency
95
99
  name: faker
96
- requirement: !ruby/object:Gem::Requirement
100
+ version_requirements: &id006 !ruby/object:Gem::Requirement
97
101
  none: false
98
- requirements:
102
+ requirements:
99
103
  - - ~>
100
- - !ruby/object:Gem::Version
104
+ - !ruby/object:Gem::Version
105
+ hash: 49
106
+ segments:
107
+ - 0
108
+ - 9
109
+ - 5
101
110
  version: 0.9.5
102
111
  type: :development
112
+ requirement: *id006
103
113
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ~>
108
- - !ruby/object:Gem::Version
109
- version: 0.9.5
110
- - !ruby/object:Gem::Dependency
114
+ - !ruby/object:Gem::Dependency
111
115
  name: sqlite3
112
- requirement: !ruby/object:Gem::Requirement
116
+ version_requirements: &id007 !ruby/object:Gem::Requirement
113
117
  none: false
114
- requirements:
118
+ requirements:
115
119
  - - ~>
116
- - !ruby/object:Gem::Version
120
+ - !ruby/object:Gem::Version
121
+ hash: 29
122
+ segments:
123
+ - 1
124
+ - 3
125
+ - 3
117
126
  version: 1.3.3
118
127
  type: :development
128
+ requirement: *id007
119
129
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ~>
124
- - !ruby/object:Gem::Version
125
- version: 1.3.3
126
- description: ! "\n Squeel unlocks the power of ARel in your Rails 3 application
127
- with\n a handy block-based syntax. You can write subqueries, access named\n
128
- \ functions provided by your RDBMS, and more, all without writing\n SQL
129
- strings.\n "
130
- email:
130
+ description: "\n Squeel unlocks the power of ARel in your Rails 3 application with\n a handy block-based syntax. You can write subqueries, access named\n functions provided by your RDBMS, and more, all without writing\n SQL strings.\n "
131
+ email:
131
132
  - ernie@erniemiller.org
132
133
  executables: []
134
+
133
135
  extensions: []
136
+
134
137
  extra_rdoc_files: []
135
- files:
138
+
139
+ files:
136
140
  - .gitignore
137
141
  - .travis.yml
138
142
  - .yardopts
@@ -243,35 +247,38 @@ files:
243
247
  - squeel.gemspec
244
248
  homepage: http://erniemiller.org/projects/squeel
245
249
  licenses: []
250
+
246
251
  post_install_message:
247
252
  rdoc_options: []
248
- require_paths:
253
+
254
+ require_paths:
249
255
  - lib
250
- required_ruby_version: !ruby/object:Gem::Requirement
256
+ required_ruby_version: !ruby/object:Gem::Requirement
251
257
  none: false
252
- requirements:
253
- - - ! '>='
254
- - !ruby/object:Gem::Version
255
- version: '0'
256
- segments:
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ hash: 3
262
+ segments:
257
263
  - 0
258
- hash: 2470259262111794419
259
- required_rubygems_version: !ruby/object:Gem::Requirement
264
+ version: "0"
265
+ required_rubygems_version: !ruby/object:Gem::Requirement
260
266
  none: false
261
- requirements:
262
- - - ! '>='
263
- - !ruby/object:Gem::Version
264
- version: '0'
265
- segments:
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ hash: 3
271
+ segments:
266
272
  - 0
267
- hash: 2470259262111794419
273
+ version: "0"
268
274
  requirements: []
275
+
269
276
  rubyforge_project: squeel
270
277
  rubygems_version: 1.8.24
271
278
  signing_key:
272
279
  specification_version: 3
273
280
  summary: ActiveRecord 3, improved.
274
- test_files:
281
+ test_files:
275
282
  - spec/blueprints/articles.rb
276
283
  - spec/blueprints/comments.rb
277
284
  - spec/blueprints/notes.rb