ransack 1.6.4 → 1.6.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 954c9a11f9682b9e3fe5689c40d56d1978c24bb9
4
- data.tar.gz: 58f30b75616e213c3afc8a91f92c8a940b4ac837
3
+ metadata.gz: ab38816eaa6fefc0b47ab0814d69ddf4f9dfbbf8
4
+ data.tar.gz: ed98ed6e4ede9c729fb05cc4ddfb00d646a79149
5
5
  SHA512:
6
- metadata.gz: bcbd765da64c6a1919651d7e8544ee74eedf95d69c69b0e777fffc5ebc624fe6312ae6ef88f4789dcaa54a622787f5f67804bdcfd07025163cae71b6100c0fbd
7
- data.tar.gz: 876abe7e9d6faf89b99b64e993645add3d1c64bca934c4066c5b97790c46401ed581df97b8ffdc98685a9fd7fd5d4885196374e7a2d9ac5c581a0caba10725bc
6
+ metadata.gz: 837ce300a188d1e7cf59eff19548d4dc1b1c817276249d83326b9b776b8ba3ae49072ebf1850e3437a54d70a1fafbf3473165856d88afdbb5f139d505ea4309d
7
+ data.tar.gz: d1cbcb0ec2d6876511b4624a93c9a85f3d5500705305faf8dc566e54c16c3d5572b5838882723d9ee3fc6df696dd5b3ccfe8dfbb73ed47008f782d42983e496c
@@ -5,7 +5,7 @@ language: ruby
5
5
  sudo: false
6
6
 
7
7
  rvm:
8
- - 2.2
8
+ - 2.2.1
9
9
  - 2.1
10
10
  - 2.0
11
11
  - 1.9
@@ -33,10 +33,6 @@ env:
33
33
  - RAILS=3-1-stable DB=mysql
34
34
  - RAILS=3-1-stable DB=postgres
35
35
 
36
- - RAILS=3-0-stable DB=sqlite
37
- - RAILS=3-0-stable DB=mysql
38
- - RAILS=3-0-stable DB=postgres
39
-
40
36
  matrix:
41
37
  include:
42
38
  - rvm: 2.2
@@ -52,12 +48,6 @@ matrix:
52
48
  env: RAILS=3-1-stable DB=mysql
53
49
  - rvm: 2.2
54
50
  env: RAILS=3-1-stable DB=postgres
55
- - rvm: 2.2
56
- env: RAILS=3-0-stable DB=sqlite
57
- - rvm: 2.2
58
- env: RAILS=3-0-stable DB=mysql
59
- - rvm: 2.2
60
- env: RAILS=3-0-stable DB=postgres
61
51
  allow_failures:
62
52
  - env: RAILS=master DB=sqlite3
63
53
  - env: RAILS=master DB=mysql
@@ -1,6 +1,48 @@
1
1
  # Change Log
2
2
 
3
- ## Version 1.6.4 - 2015-03-20
3
+ ## Version 1.6.5 - 2015-03-28 - Rails 5.0.0 update
4
+ ### Added
5
+
6
+ * [WIP/experimental] Add compatibility with Rails 5/master and Arel 7.
7
+
8
+ * Update the [Contributing Guide](CONTRIBUTING.md) with detailed steps for
9
+ contributing to Ransack.
10
+
11
+ * Broaden the test suite database options in `schema.rb` and add
12
+ code documentation.
13
+
14
+ * Improve the header message when running tests.
15
+
16
+ *Jon Atack*
17
+
18
+ * Allow `:wants_array` to be set to `false` in the predicate options
19
+ ([#32](https://github.com/activerecord-hackery/ransack/issues/32)).
20
+
21
+ *Michael Pavling*
22
+
23
+ * Add a failing spec for issue
24
+ [#374](https://github.com/activerecord-hackery/ransack/issues/374).
25
+
26
+ *Jamie Davidson*, *Jon Atack*
27
+
28
+ ### Fixed
29
+
30
+ * Stop relying on `Active Record::relation#where_values` which are deprecated
31
+ in Rails 5.
32
+
33
+ * Make the test for passing search arguments to a ransacker
34
+ (`ransacker_args`) work correctly with Sqlite3.
35
+
36
+ *Jon Atack*
37
+
38
+ ### Changed
39
+
40
+ * Stop CI testing for Rails 3.0 to reduce the size of the Travis test matrix.
41
+
42
+ *Jon Atack*
43
+
44
+
45
+ ## Version 1.6.4 - 2015-03-20 - Rails 4.2.1 update
4
46
 
5
47
  * ActionView patch to maintain compatibility with Rails 4.2.1 released today.
6
48
 
@@ -16,6 +58,7 @@
16
58
 
17
59
  *Denis Tataurov*, *Jon Atack*
18
60
 
61
+
19
62
  ## Version 1.6.3 - 2015-01-21
20
63
 
21
64
  * Fix a regression
@@ -147,24 +190,22 @@
147
190
 
148
191
 
149
192
  ## Version 1.5.1 - 2014-10-30
150
- ### Fixed
151
-
152
- * Fix a regression caused by incorrect string constants in `context.rb`.
153
-
154
- *Kazuhiro Nishiyama*
155
-
156
193
  ### Added
157
194
 
158
195
  * Add base specs for search on fields with `_start` and `_end`.
159
196
 
160
- *Jon Atack*
161
-
162
197
  * Add a failing spec for detecting attribute fields containing `_and_` that
163
198
  needs to be fixed. Attribute names containing `_and_` and `_or_` are still
164
199
  not parsed/detected correctly.
165
200
 
166
201
  *Jon Atack*
167
202
 
203
+ ### Fixed
204
+
205
+ * Fix a regression caused by incorrect string constants in `context.rb`.
206
+
207
+ *Kazuhiro Nishiyama*
208
+
168
209
  ### Changed
169
210
 
170
211
  * Remove duplicate code in `spec/support/schema.rb`.
@@ -241,7 +282,6 @@
241
282
 
242
283
 
243
284
  ## Version 1.4.1 - 2014-09-23
244
- ### Fixed
245
285
 
246
286
  * Fix README markdown so RubyGems documentation picks up the formatting correctly.
247
287
 
@@ -34,7 +34,8 @@ if the information requested is provided.
34
34
  ## Pull requests
35
35
 
36
36
  We gladly accept pull requests to fix bugs and, in some circumstances, add new
37
- features to Ransack.
37
+ features to Ransack. If you'd like to contribute and wonder what would be
38
+ helpful, simply run a search for "FIXME" and "TODO" on the codebase :smiley:
38
39
 
39
40
  If you're new to contributing to open source, welcome! It can seem scary, so
40
41
  here is a [great blog post to help you get started]
@@ -47,37 +48,47 @@ backward compatibility has a very good reason for doing so.
47
48
 
48
49
  Here's a quick guide:
49
50
 
50
- 1. Fork the repo, clone it, create a thoughtfully-named branch for your changes,
51
- and install the development dependencies by running `bundle install`.
51
+ 1. Fork the repo.
52
52
 
53
- 2. Begin by running the tests. We only take pull requests with passing tests,
53
+ 2. Create a thoughtfully-named branch for your changes (`git checkout -b my-new-feature`).
54
+
55
+ 3. Install the development dependencies by running `bundle install`.
56
+
57
+ 4. Begin by running the tests. We only take pull requests with passing tests,
54
58
  and it's great to know that you have a clean slate:
55
59
 
56
60
  $ bundle exec rake spec
57
61
 
58
- 3. Hack away! Please use Ruby features that are compatible down to Ruby 1.9.
62
+ The test suite runs by default with SQLite3. To run the test suite with PostgreSQL or MySQL, use:
63
+
64
+ $ DB=postgresql bundle exec rake spec (`DB=pg` & `DB=postgres` work too)
65
+ $ DB=mysql bundle exec rake spec
66
+
67
+ 5. Hack away! Please use Ruby features that are compatible down to Ruby 1.9.
59
68
  Since version 1.5, Ransack no longer maintains Ruby 1.8 compatibility.
60
69
 
61
- 4. Add tests for your changes. Only refactoring and documentation changes
70
+ 6. Add tests for your changes. Only refactoring and documentation changes
62
71
  require no new tests. If you are adding functionality or fixing a bug, we
63
72
  need a test!
64
73
 
65
- 5. Make the tests pass.
74
+ 7. Make the tests pass.
66
75
 
67
- 6. Update the Change Log. If you are adding new functionality, document it in
76
+ 8. Update the Change Log. If you are adding new functionality, document it in
68
77
  the README.
69
78
 
70
- 7. Do not change the version number; we will do that on our end.
79
+ 9. Commit your changes (`git commit -am 'Add feature/fix bug/improve docs'`).
71
80
 
72
- 8. If necessary, rebase your commits into logical chunks, without errors.
81
+ 10. If necessary, rebase your commits into logical chunks, without errors. To
82
+ interactively rebase and cherry-pick from, say, the last 10 commits:
83
+ `git rebase -i HEAD~10`, then `git push -f`.
73
84
 
74
- 9. Push the branch up to your fork on Github and submit a pull request. If the
75
- changes will apply cleanly to the latest stable branches and master branch,
76
- you will only need to submit one pull request.
85
+ 11. Push the branch up to your fork on Github
86
+ (`git push origin my-new-feature`) and from Github submit a pull request to
87
+ Ransack's `master` branch.
77
88
 
78
- 10. If your pull request only contains documentation changes, please remember to
79
- add `[skip ci]` to your commit message so the Travis test suite doesn't run
80
- needlessly.
89
+ 12. If your pull request only contains documentation changes, please remember
90
+ to add `[skip ci]` to the beginning of your commit message so the Travis
91
+ test suite doesn't :runner: needlessly.
81
92
 
82
93
  At this point you're waiting on us. We like to at least comment on, if not
83
94
  accept, pull requests within three business days (and, typically, one business
@@ -85,14 +96,14 @@ day). We may suggest some changes or improvements or alternatives.
85
96
 
86
97
  Some things that will increase the chance that your pull request is accepted:
87
98
 
88
- * Use idiomatic Ruby and follow the syntax conventions below.
89
99
  * Include tests that fail without your code, and pass with it.
90
100
  * Update the README, the change log, the wiki documentation... anything that is
91
101
  affected by your contribution.
102
+ * Use idiomatic Ruby and follow the syntax conventions below.
92
103
 
93
104
  Syntax:
94
105
 
95
- * Two spaces, no tabs.
106
+ * Indent with two spaces, no tabs.
96
107
  * 80 characters per line.
97
108
  * No trailing whitespace. Blank lines should not have any space.
98
109
  * Prefer `&&`/`||` over `and`/`or`.
data/README.md CHANGED
@@ -27,17 +27,18 @@ instead.
27
27
  If you're viewing this at
28
28
  [github.com/activerecord-hackery/ransack](https://github.com/activerecord-hackery/ransack),
29
29
  you're reading the documentation for the master branch with the latest features.
30
- [View documentation for the last release (1.6.4).]
31
- (https://github.com/activerecord-hackery/ransack/tree/v1.6.4)
30
+ [View documentation for the last release (1.6.5).]
31
+ (https://github.com/activerecord-hackery/ransack/tree/v1.6.5)
32
32
 
33
33
  ## Getting started
34
34
 
35
- Ransack is compatible with Rails 3 and 4 (including 4.2) on Ruby 1.9 and later.
36
- We try to keep it functioning with Rails master too, although frequent changes
37
- in Arel and Active Record make that a moving target. Ransack works
38
- out-of-the-box with Active Record and features new support for Mongoid 4.0
39
- (without associations, further details below). If you are on Ruby 1.8, you may
40
- need to use an earlier version of Ransack like 1.3.0.
35
+ Ransack is compatible with Rails 3 and 4 (including 4.2.1) on Ruby 1.9 and
36
+ later. It currently works with Rails 5 as well, though changes in Arel and
37
+ Active Record keep that a moving target. If you are using Ruby 1.8, you can use
38
+ an earlier version of Ransack up to v1.3.0.
39
+
40
+ Ransack works out-of-the-box with Active Record and also features experimental
41
+ support for Mongoid 4.0 (without associations, further details below).
41
42
 
42
43
  In your Gemfile, for the last officially released Ransack gem:
43
44
 
@@ -51,29 +52,6 @@ Or, if you would like to use the latest updates, use the `master` branch:
51
52
  gem 'ransack', github: 'activerecord-hackery/ransack'
52
53
  ```
53
54
 
54
- The other branches (`rails-4`, `rails-4.1`, and `rails-4.2`) were each used for
55
- developing and running Ransack with the latest upcoming version of Rails at the
56
- time. They are smaller and possibly slightly faster because they do not have to
57
- support previous versions of Rails and Active Record. Once support for that
58
- Rails version is merged from the branch into Ransack master, the branch is no
59
- longer actively maintained -- unless the open source community submits pull
60
- requests to maintain them. You are welcome to do so!
61
-
62
- To use one of the branches, for example the `rails-4.1` branch:
63
-
64
- ```ruby
65
- gem 'ransack', github: 'activerecord-hackery/ransack', branch: 'rails-4.1'
66
- ```
67
-
68
- If you are using Rails master, be advised that Ransack master does not yet work
69
- with the breaking changes in Rails master and Arel master added since December
70
- 2014. The most recent working commits are:
71
-
72
- ```ruby
73
- gem 'rails', github: 'rails/rails', ref: '266ff70'
74
- gem 'arel', github: 'rails/arel', ref: '008445d'
75
- ```
76
-
77
55
  ## Usage
78
56
 
79
57
  Ransack can be used in one of two modes, simple or advanced.
@@ -96,7 +96,7 @@ module Ransack
96
96
  def join_sources
97
97
  base =
98
98
  if ::ActiveRecord::VERSION::MAJOR >= 5
99
- Arel::SelectManager.new(@object.engine)
99
+ Arel::SelectManager.new(@object.table)
100
100
  else
101
101
  Arel::SelectManager.new(@object.engine, @object.table)
102
102
  end
@@ -171,39 +171,37 @@ module Ransack
171
171
  if relation.respond_to?(:join_dependency) # Squeel will enable this
172
172
  relation.join_dependency
173
173
  else
174
- build_join_dependency(relation)
174
+ build_joins(relation)
175
175
  end
176
176
  end
177
177
 
178
178
  # Checkout active_record/relation/query_methods.rb +build_joins+ for
179
179
  # reference. Lots of duplicated code maybe we can avoid it
180
- def build_join_dependency(relation)
180
+ def build_joins(relation)
181
181
  buckets = relation.joins_values.group_by do |join|
182
182
  case join
183
183
  when String
184
- Constants::STRING_JOIN
184
+ :string_join
185
185
  when Hash, Symbol, Array
186
- Constants::ASSOCIATION_JOIN
187
- when JoinDependency, JoinDependency::JoinAssociation
188
- Constants::STASHED_JOIN
186
+ :association_join
187
+ when ActiveRecord::Associations::JoinDependency
188
+ :stashed_join
189
189
  when Arel::Nodes::Join
190
- Constants::JOIN_NODE
190
+ :join_node
191
191
  else
192
192
  raise 'unknown class: %s' % join.class.name
193
193
  end
194
194
  end
195
-
196
- association_joins = buckets[Constants::ASSOCIATION_JOIN] || []
197
-
198
- stashed_association_joins = buckets[Constants::STASHED_JOIN] || []
199
-
200
- join_nodes = buckets[Constants::JOIN_NODE] || []
201
-
202
- string_joins = (buckets[Constants::STRING_JOIN] || []).map(&:strip).uniq
195
+ buckets.default = []
196
+ association_joins = buckets[:association_join]
197
+ stashed_association_joins = buckets[:stashed_join]
198
+ join_nodes = buckets[:join_node].uniq
199
+ string_joins = buckets[:string_join].map(&:strip).uniq
203
200
 
204
201
  join_list =
205
202
  if ::ActiveRecord::VERSION::MAJOR >= 5
206
- relation.send :custom_join_ast, relation.table.from, string_joins
203
+ join_nodes +
204
+ convert_join_strings_to_ast(relation.table, string_joins)
207
205
  else
208
206
  relation.send :custom_join_ast,
209
207
  relation.table.from(relation.table), string_joins
@@ -224,6 +222,13 @@ module Ransack
224
222
  end
225
223
  end
226
224
 
225
+ def convert_join_strings_to_ast(table, joins)
226
+ joins
227
+ .flatten
228
+ .reject(&:blank?)
229
+ .map { |join| table.create_string_join(Arel.sql(join)) }
230
+ end
231
+
227
232
  if ::ActiveRecord::VERSION::STRING >= Constants::RAILS_4_1
228
233
 
229
234
  def build_or_find_association(name, parent = @base, klass = nil)
@@ -37,7 +37,7 @@ module Ransack
37
37
  end
38
38
 
39
39
  @default_table = Arel::Table.new(
40
- @base.table_name, :as => @base.aliased_table_name, :engine => @engine
40
+ @base.table_name, as: @base.aliased_table_name, type_caster: self
41
41
  )
42
42
  @bind_pairs = Hash.new do |hash, key|
43
43
  parent, attr_name = get_parent_and_attribute_name(key.to_s)
@@ -48,8 +48,8 @@ module Ransack
48
48
  @validator = opts[:validator] ||
49
49
  lambda { |v| v.respond_to?(:empty?) ? !v.empty? : !v.nil? }
50
50
  @compound = opts[:compound]
51
- @wants_array = opts[:wants_array] == true || @compound ||
52
- Constants::IN_NOT_IN.include?(@arel_predicate)
51
+ @wants_array = opts.fetch(:wants_array,
52
+ @compound || Constants::IN_NOT_IN.include?(@arel_predicate))
53
53
  end
54
54
 
55
55
  def eql?(other)
@@ -150,11 +150,6 @@ module Ransack
150
150
  end
151
151
 
152
152
  def self.i18n_key(klass)
153
- # if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR == 0
154
- # klass.model_name.i18n_key.to_s.tr('.', '/')
155
- # else
156
- # klass.model_name.i18n_key.to_s
157
- # end
158
153
  raise "not implemented"
159
154
  end
160
155
  end
@@ -1,3 +1,3 @@
1
1
  module Ransack
2
- VERSION = "1.6.4"
2
+ VERSION = "1.6.5"
3
3
  end
@@ -62,5 +62,41 @@ module Ransack
62
62
  expect(Ransack.predicates).not_to have_key 'test_array_predicate_any'
63
63
  expect(Ransack.predicates).not_to have_key 'test_array_predicate_all'
64
64
  end
65
+
66
+ describe '`wants_array` option takes precedence over Arel predicate' do
67
+ it 'implicitly wants an array for in/not in predicates' do
68
+ Ransack.configure do |config|
69
+ config.add_predicate(
70
+ :test_in_predicate,
71
+ :arel_predicate => 'in'
72
+ )
73
+ config.add_predicate(
74
+ :test_not_in_predicate,
75
+ :arel_predicate => 'not_in'
76
+ )
77
+ end
78
+
79
+ expect(Ransack.predicates['test_in_predicate'].wants_array).to eq true
80
+ expect(Ransack.predicates['test_not_in_predicate'].wants_array).to eq true
81
+ end
82
+
83
+ it 'explicitly does not want array for in/not_in predicates' do
84
+ Ransack.configure do |config|
85
+ config.add_predicate(
86
+ :test_in_predicate_no_array,
87
+ :arel_predicate => 'in',
88
+ :wants_array => false
89
+ )
90
+ config.add_predicate(
91
+ :test_not_in_predicate_no_array,
92
+ :arel_predicate => 'not_in',
93
+ :wants_array => false
94
+ )
95
+ end
96
+
97
+ expect(Ransack.predicates['test_in_predicate_no_array'].wants_array).to eq false
98
+ expect(Ransack.predicates['test_not_in_predicate_no_array'].wants_array).to eq false
99
+ end
100
+ end
65
101
  end
66
102
  end
@@ -71,7 +71,7 @@ module Ransack
71
71
  end
72
72
 
73
73
  it 'does not raise exception for string :params argument' do
74
- lambda { Person.ransack('') }.should_not raise_error
74
+ expect { Person.ransack('') }.to_not raise_error
75
75
  end
76
76
 
77
77
  it 'does not modify the parameters' do
@@ -319,19 +319,20 @@ module Ransack
319
319
  c: [{
320
320
  a: {
321
321
  '0' => {
322
- name: 'with_passed_arguments', ransacker_args: [10, 100]
322
+ name: 'with_arguments', ransacker_args: [10, 100]
323
323
  }
324
324
  },
325
325
  p: 'cont',
326
- v: ['Rails has been released']
326
+ v: ['Passing arguments to ransackers!']
327
327
  }]
328
328
  )
329
329
  expect(s.result.to_sql).to match(
330
- /CHAR_LENGTH\(articles.body\) BETWEEN 10 AND 100/
330
+ /LENGTH\(articles.body\) BETWEEN 10 AND 100/
331
331
  )
332
332
  expect(s.result.to_sql).to match(
333
- /LIKE \'\%Rails has been released\%\'/
334
- )
333
+ /LIKE \'\%Passing arguments to ransackers!\%\'/
334
+ )
335
+ expect { s.result.first }.to_not raise_error
335
336
  end
336
337
  end
337
338