squeel 1.0.13 → 1.0.14

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/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