ransack 1.8.0 → 1.8.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a6333c22fc3b35aec6fea8a410ec2705e570031
4
- data.tar.gz: ae8c1df141e8944b0509ba07d2e50d19b9c14c66
3
+ metadata.gz: 0000005ab1d9a09827cede9e9d949a7b87308f75
4
+ data.tar.gz: 72f3bddda6c78c9014b6a4fb1c6e49a622c9e7f2
5
5
  SHA512:
6
- metadata.gz: d6ed3d7bc6024116ac43c27888dc98b77ce265bab21046c7ac9dd0cb98a12077d7cf8ded176b073f825d11c92cbd02433b29ee5224b858bd5208e1a3edb19724
7
- data.tar.gz: 9a6a06c4ee47b701e2ba2f6f29007c5dd00b16a34f7bbb57f9bada3d787a1caf2b6db8107dfaf5cdc0ac433665bc03e86a3e21c15a9e30daff509df5ea043c8d
6
+ metadata.gz: 0fcba1e08c4c8a1096182999c56da5765c9acb8adbb6ccc1e15870b436c9420baafb755ae5988568e14dee0212a062c6cc519e9d8e9eb4e4ee8776c8b1c9912d
7
+ data.tar.gz: 9d77b3d4de15b392e621d9ad11e546d933f2963075eac390414066dc5957a674c3dad7ccf105a669eaa2c329dae02b2d7d08dbe11666b16ced46c019a39187a3
@@ -1,5 +1,39 @@
1
1
  # Change Log
2
2
 
3
+ ## Version 1.8.1 - 2016-07-27
4
+ ### Fixed
5
+
6
+ * Fix `rake console` to run a command-line console with ransack + seed data.
7
+ Commits
8
+ [2cc781e](https://github.com/activerecord-hackery/ransack/commit/2cc781e),
9
+ [f2e85ad](https://github.com/activerecord-hackery/ransack/commit/f2e85ad),
10
+ [6a059ba](https://github.com/activerecord-hackery/ransack/commit/6a059ba).
11
+
12
+ *Jon Atack*
13
+
14
+ * Fix returned value of `Ransack::Nodes::Condition#format_predicate`. PR
15
+ [#692](https://github.com/activerecord-hackery/ransack/pull/692).
16
+
17
+ *Masahiro Saito*
18
+
19
+ * Better test coverage on passing arrays to ransackers. Commit
20
+ [98df2c5](https://github.com/activerecord-hackery/ransack/commit/98df2c5).
21
+
22
+ *Jon Atack*
23
+
24
+ * Fix missing Ransack::Constants::ASC constant. Commit
25
+ [aece23c](https://github.com/activerecord-hackery/ransack/commit/aece23c).
26
+
27
+ *Jon Atack*
28
+
29
+ ### Changed
30
+
31
+ * Replace arrow constants with frozen strings in public methods. Commits
32
+ [c0dff33](https://github.com/activerecord-hackery/ransack/commit/c0dff33),
33
+ [e489ca7](https://github.com/activerecord-hackery/ransack/commit/e489ca7).
34
+
35
+ *Jon Atack*
36
+
3
37
  ## Version 1.8.0 - 2016-07-14
4
38
  ### Added
5
39
 
@@ -8,18 +42,18 @@
8
42
 
9
43
  *Josef Šimánek*
10
44
 
11
- * Added optional block argument for the `sort_link` method. PR
45
+ * Add optional block argument for the `sort_link` method. PR
12
46
  [#604](https://github.com/activerecord-hackery/ransack/pull/604).
13
47
 
14
48
  *Andrea Dal Ponte*
15
49
 
16
- * Added `ransack_alias` to allow users to customize the names for long
50
+ * Add `ransack_alias` to allow users to customize the names for long
17
51
  ransack field names. PR
18
52
  [#623](https://github.com/activerecord-hackery/ransack/pull/623).
19
53
 
20
54
  *Ray Zane*
21
55
 
22
- * Added support for searching on attributes that have been added to
56
+ * Add support for searching on attributes that have been added to
23
57
  Active Record models with `alias_attribute` (Rails >= 4 only). PR
24
58
  [#592](https://github.com/activerecord-hackery/ransack/pull/592), commit
25
59
  [549342a](https://github.com/activerecord-hackery/ransack/commit/549342a).
data/README.md CHANGED
@@ -29,7 +29,7 @@ instead.
29
29
  If you're viewing this at
30
30
  [github.com/activerecord-hackery/ransack](https://github.com/activerecord-hackery/ransack),
31
31
  you're reading the documentation for the master branch with the latest features.
32
- [View documentation for the last release (1.8.0).](https://github.com/activerecord-hackery/ransack/tree/v1.8.0)
32
+ [View documentation for the last release (1.8.1).](https://github.com/activerecord-hackery/ransack/tree/v1.8.1)
33
33
 
34
34
  ## Getting started
35
35
 
@@ -56,9 +56,8 @@ branch:
56
56
  gem 'ransack', github: 'activerecord-hackery/ransack'
57
57
  ```
58
58
 
59
- September 2015 update: If you are using Rails 5 (master) and need pagination
60
- that works with Ransack, there is an
61
- [updated version of the `will_paginate` gem here](https://github.com/jonatack/will_paginate).
59
+ If you are using Rails 5 or master and need pagination compatible with it and
60
+ Ransack, there is a [Rails 5 version of the `will_paginate` gem here](https://github.com/jonatack/will_paginate).
62
61
  It is also optimized for Ruby 2.2+. To use it, in your Gemfile:
63
62
  `gem 'will_paginate', github: 'jonatack/will_paginate'`.
64
63
 
data/Rakefile CHANGED
@@ -26,11 +26,10 @@ end
26
26
 
27
27
  desc "Open an irb session with Ransack and the sample data used in specs"
28
28
  task :console do
29
- require 'irb'
30
- require 'irb/completion'
31
- require 'console'
29
+ require 'pry'
30
+ require File.expand_path('../spec/console.rb', __FILE__)
32
31
  ARGV.clear
33
- IRB.start
32
+ Pry.start
34
33
  end
35
34
 
36
35
  desc "Open an irb session with Ransack, Mongoid and the sample data used in specs"
@@ -26,17 +26,23 @@ module Ransack
26
26
  arel_pred = arel_predicate_for_attribute(attribute)
27
27
  arel_values = formatted_values_for_attribute(attribute)
28
28
  predicate = attribute.attr.public_send(arel_pred, arel_values)
29
- if casted_array_with_in_predicate?(predicate)
30
- predicate.right[0] = format_values_for(predicate.right[0])
29
+
30
+ if in_predicate?(predicate)
31
+ predicate.right = predicate.right.map do |predicate|
32
+ casted_array?(predicate) ? format_values_for(predicate) : predicate
33
+ end
31
34
  end
35
+
32
36
  predicate
33
37
  end
34
38
 
35
- def casted_array_with_in_predicate?(predicate)
39
+ def in_predicate?(predicate)
36
40
  return unless defined?(Arel::Nodes::Casted)
37
- predicate.class == Arel::Nodes::In &&
38
- predicate.right[0].respond_to?(:val) &&
39
- predicate.right[0].val.is_a?(Array)
41
+ predicate.class == Arel::Nodes::In
42
+ end
43
+
44
+ def casted_array?(predicate)
45
+ predicate.respond_to?(:val) && predicate.val.is_a?(Array)
40
46
  end
41
47
 
42
48
  def format_values_for(predicate)
@@ -1,8 +1,5 @@
1
1
  module Ransack
2
2
  module Constants
3
- ASC_ARROW = '▲'.freeze
4
- DESC_ARROW = '▼'.freeze
5
-
6
3
  OR = 'or'.freeze
7
4
  AND = 'and'.freeze
8
5
 
@@ -176,9 +176,9 @@ module Ransack
176
176
 
177
177
  def sort_array
178
178
  [
179
- [Constants::ASC, object.translate(Constants::ASC)],
180
- [Constants::DESC, object.translate(Constants::DESC)]
181
- ]
179
+ ['asc'.freeze, object.translate('asc'.freeze)].freeze,
180
+ ['desc'.freeze, object.translate('desc'.freeze)].freeze
181
+ ].freeze
182
182
  end
183
183
 
184
184
  def combinator_choices
@@ -97,6 +97,14 @@ module Ransack
97
97
  @default_order = @options.delete :default_order
98
98
  end
99
99
 
100
+ def up_arrow
101
+ '▼'.freeze
102
+ end
103
+
104
+ def down_arrow
105
+ '▲'.freeze
106
+ end
107
+
100
108
  def name
101
109
  [ERB::Util.h(@label_text), order_indicator]
102
110
  .compact
@@ -190,16 +198,15 @@ module Ransack
190
198
 
191
199
  def order_indicator
192
200
  return if @hide_indicator || no_sort_direction_specified?
193
- direction_arrow
201
+ if @current_dir == 'desc'.freeze
202
+ up_arrow
203
+ else
204
+ down_arrow
205
+ end
194
206
  end
195
207
 
196
208
  def no_sort_direction_specified?(dir = @current_dir)
197
- !['asc'.freeze, 'desc'.freeze].freeze.include?(dir)
198
- end
199
-
200
- def direction_arrow
201
- return Constants::DESC_ARROW if @current_dir == 'desc'.freeze
202
- Constants::ASC_ARROW
209
+ dir != 'asc'.freeze && dir != 'desc'.freeze
203
210
  end
204
211
 
205
212
  def direction_text(dir)
@@ -38,7 +38,7 @@ module Ransack
38
38
  def dir=(dir)
39
39
  dir = dir.downcase if dir
40
40
  @dir =
41
- if ['asc'.freeze, 'desc'.freeze].freeze.include?(dir)
41
+ if dir == 'asc'.freeze || dir == 'desc'.freeze
42
42
  dir
43
43
  else
44
44
  'asc'.freeze
@@ -1,3 +1,3 @@
1
1
  module Ransack
2
- VERSION = '1.8.0'
2
+ VERSION = '1.8.1'
3
3
  end
@@ -16,6 +16,10 @@ Sham.define do
16
16
  salary { |index| 30000 + (index * 1000) }
17
17
  tag_name { Faker::Lorem.words(3).join(' ') }
18
18
  note { Faker::Lorem.words(7).join(' ') }
19
+ only_admin { Faker::Lorem.words(3).join(' ') }
20
+ only_search { Faker::Lorem.words(3).join(' ') }
21
+ only_sort { Faker::Lorem.words(3).join(' ') }
22
+ notable_id { |id| id }
19
23
  end
20
24
 
21
25
  Schema.create
@@ -314,14 +314,26 @@ module Ransack
314
314
 
315
315
  context 'searching on an `in` predicate with a ransacker' do
316
316
  it 'should function correctly when passing an array of ids' do
317
- s = Person.ransack(array_users_in: true)
317
+ s = Person.ransack(array_people_ids_in: true)
318
318
  expect(s.result.count).to be > 0
319
+
320
+ s = Person.ransack(array_where_people_ids_in: [1, '2', 3])
321
+ expect(s.result.count).to be 3
322
+ expect(s.result.map(&:id)).to eq [3, 2, 1]
319
323
  end
320
324
 
321
325
  it 'should function correctly when passing an array of strings' do
322
- Person.create!(name: Person.first.id.to_s)
323
- s = Person.ransack(array_names_in: true)
326
+ a, b = Person.select(:id).order(:id).limit(2).map { |a| a.id.to_s }
327
+
328
+ Person.create!(name: a)
329
+ s = Person.ransack(array_people_names_in: true)
324
330
  expect(s.result.count).to be > 0
331
+ s = Person.ransack(array_where_people_names_in: a)
332
+ expect(s.result.count).to be 1
333
+
334
+ Person.create!(name: b)
335
+ s = Person.ransack(array_where_people_names_in: [a, b])
336
+ expect(s.result.count).to be 2
325
337
  end
326
338
 
327
339
  it 'should function correctly with an Arel SqlLiteral' do
@@ -66,16 +66,26 @@ class Person < ActiveRecord::Base
66
66
  parent.table[:name]
67
67
  end
68
68
 
69
- ransacker :array_users,
69
+ ransacker :array_people_ids,
70
70
  formatter: proc { |v| Person.first(2).map(&:id) } do |parent|
71
71
  parent.table[:id]
72
72
  end
73
73
 
74
- ransacker :array_names,
74
+ ransacker :array_where_people_ids,
75
+ formatter: proc { |v| Person.where(id: v).map(&:id) } do |parent|
76
+ parent.table[:id]
77
+ end
78
+
79
+ ransacker :array_people_names,
75
80
  formatter: proc { |v| Person.first(2).map { |p| p.id.to_s } } do |parent|
76
81
  parent.table[:name]
77
82
  end
78
83
 
84
+ ransacker :array_where_people_names,
85
+ formatter: proc { |v| Person.where(id: v).map { |p| p.id.to_s } } do |parent|
86
+ parent.table[:name]
87
+ end
88
+
79
89
  ransacker :doubled_name do |parent|
80
90
  Arel::Nodes::InfixOperation.new(
81
91
  '||', parent.table[:name], parent.table[:name]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernie Miller
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-07-15 00:00:00.000000000 Z
13
+ date: 2016-07-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack