ransack_ui 1.3.4 → 1.4.0

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
- SHA1:
3
- metadata.gz: 450cbf63ff25b9609e853303c1772d2ddd87b479
4
- data.tar.gz: 4135fc35e6a6e29275ad04857459e9dc9489abcb
2
+ SHA256:
3
+ metadata.gz: ac84bded42933bf2a64def821e3698e5182047397d2e8bb6f0321d6b38051d21
4
+ data.tar.gz: abdc1d7d87b36deb0648b320b7e65e4511a046e35455b0f7887bb22c60a75b19
5
5
  SHA512:
6
- metadata.gz: ecf779eea45d25fa69ceea221335f12509cf12106fb021b168cc3c7c60117553ca12124a120df361b30de851383e4bd78d8aab1c16d8d1f64174de6d0ea2cddc
7
- data.tar.gz: 621623bc8377f1e43aca92a2f826689131674e0d495865768d1edfe14f0bcb92bdfd1999b80c886db4c46dfbd2d65c60de8bdf336fd52881f3bad4468f6e33dd
6
+ metadata.gz: 70fa91e7584802f51d68c0990e4a27acbfc928954cc48d6833258507287826b9b71a9c066f11c06c5b44449a72025367d61cf69f572f57d105ab4f55e86778b8
7
+ data.tar.gz: 7356459d70de3031278ec4ef61b1197d7c533b221ec1d2966e3e1e32072778f260f06e50970525fef732e6e6b0d8be8aa0a880af5e0472cc3e64bbce1bca5d00
@@ -0,0 +1,129 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-11-08 16:20:08 +1030 using RuboCop version 0.76.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 1
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: TreatCommentsAsGroupSeparators, Include.
12
+ # Include: **/*.gemspec
13
+ Gemspec/OrderedDependencies:
14
+ Exclude:
15
+ - 'ransack_ui.gemspec'
16
+
17
+ # Offense count: 5
18
+ # Cop supports --auto-correct.
19
+ # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
20
+ Lint/UnusedMethodArgument:
21
+ Exclude:
22
+ - 'lib/ransack_ui/adapters/active_record/base.rb'
23
+ - 'lib/ransack_ui/ransack_overrides/adapters/active_record/base.rb'
24
+ - 'lib/ransack_ui/view_helpers.rb'
25
+
26
+ # Offense count: 6
27
+ Metrics/AbcSize:
28
+ Max: 53
29
+
30
+ # Offense count: 2
31
+ # Configuration parameters: CountComments, ExcludedMethods.
32
+ # ExcludedMethods: refine
33
+ Metrics/BlockLength:
34
+ Max: 200
35
+
36
+ # Offense count: 1
37
+ # Configuration parameters: CountBlocks.
38
+ Metrics/BlockNesting:
39
+ Max: 5
40
+
41
+ # Offense count: 3
42
+ Metrics/CyclomaticComplexity:
43
+ Max: 12
44
+
45
+ # Offense count: 7
46
+ # Configuration parameters: CountComments, ExcludedMethods.
47
+ Metrics/MethodLength:
48
+ Max: 46
49
+
50
+ # Offense count: 1
51
+ # Configuration parameters: CountComments.
52
+ Metrics/ModuleLength:
53
+ Max: 202
54
+
55
+ # Offense count: 3
56
+ Metrics/PerceivedComplexity:
57
+ Max: 13
58
+
59
+ # Offense count: 2
60
+ # Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
61
+ # NamePrefix: is_, has_, have_
62
+ # NamePrefixBlacklist: is_, has_, have_
63
+ # NameWhitelist: is_a?
64
+ # MethodDefinitionMacros: define_method, define_singleton_method
65
+ Naming/PredicateName:
66
+ Exclude:
67
+ - 'spec/**/*'
68
+ - 'lib/ransack_ui/adapters/active_record/base.rb'
69
+ - 'lib/ransack_ui/ransack_overrides/adapters/active_record/base.rb'
70
+
71
+ # Offense count: 2
72
+ # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
73
+ # AllowedNames: io, id, to, by, on, in, at, ip, db, os
74
+ Naming/UncommunicativeMethodParamName:
75
+ Exclude:
76
+ - 'lib/ransack_ui/view_helpers.rb'
77
+
78
+ # Offense count: 1
79
+ # Cop supports --auto-correct.
80
+ # Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
81
+ # SupportedStyles: assign_to_condition, assign_inside_condition
82
+ Style/ConditionalAssignment:
83
+ Exclude:
84
+ - 'lib/ransack_ui/ransack_overrides/helpers/form_builder.rb'
85
+
86
+ # Offense count: 11
87
+ Style/Documentation:
88
+ Exclude:
89
+ - 'spec/**/*'
90
+ - 'test/**/*'
91
+ - 'lib/ransack_ui/adapters/active_record/base.rb'
92
+ - 'lib/ransack_ui/controller_helpers.rb'
93
+ - 'lib/ransack_ui/rails/engine.rb'
94
+ - 'lib/ransack_ui/ransack_overrides/adapters/active_record/base.rb'
95
+ - 'lib/ransack_ui/ransack_overrides/configuration.rb'
96
+ - 'lib/ransack_ui/ransack_overrides/context.rb'
97
+ - 'lib/ransack_ui/ransack_overrides/helpers/form_builder.rb'
98
+ - 'lib/ransack_ui/ransack_overrides/nodes/attribute.rb'
99
+ - 'lib/ransack_ui/ransack_overrides/nodes/condition.rb'
100
+ - 'lib/ransack_ui/ransack_overrides/nodes/grouping.rb'
101
+ - 'lib/ransack_ui/view_helpers.rb'
102
+
103
+ # Offense count: 1
104
+ # Cop supports --auto-correct.
105
+ Style/EachWithObject:
106
+ Exclude:
107
+ - 'lib/ransack_ui/ransack_overrides/helpers/form_builder.rb'
108
+
109
+ # Offense count: 17
110
+ # Cop supports --auto-correct.
111
+ # Configuration parameters: EnforcedStyle.
112
+ # SupportedStyles: always, never
113
+ Style/FrozenStringLiteralComment:
114
+ Enabled: false
115
+
116
+ # Offense count: 1
117
+ # Cop supports --auto-correct.
118
+ # Configuration parameters: EnforcedStyle.
119
+ # SupportedStyles: use_perl_names, use_english_names
120
+ Style/SpecialGlobalVars:
121
+ Exclude:
122
+ - 'ransack_ui.gemspec'
123
+
124
+ # Offense count: 43
125
+ # Cop supports --auto-correct.
126
+ # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
127
+ # URISchemes: http, https
128
+ Metrics/LineLength:
129
+ Max: 144
data/Gemfile CHANGED
@@ -1,7 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Include rake in Gemfile so that `bundle exec rake` doesn't raise an error
4
- gem 'rake', :group => :test
4
+ gem 'rake', group: :test
5
+ gem 'rubocop', '~> 0.76.0'
5
6
 
6
7
  # Specify your gem's dependencies in ransack_ui.gemspec
7
8
  gemspec
data/README.md CHANGED
@@ -50,8 +50,9 @@ Now you can start playing with the results.
50
50
  4. Push to the branch (`git push origin my-new-feature`)
51
51
  5. Create new Pull Request
52
52
 
53
- ## Credits / Acknowledgements
53
+ ## Acknowledgements
54
54
 
55
- * Nathan Broadbent (ndbroadbent) - creator of ransack_ui code
56
- * Ernie Miller (ernie) for creating ransack - https://github.com/ernie/ransack
57
- * Steve Kenworthy (steveyken) - for tiny tweaks
55
+ * Ernie Miller (@ernie) - Creator of ransack (https://github.com/ernie/ransack)
56
+ * Nathan Broadbent (@ndbroadbent)
57
+ * Steve Kenworthy (@steveyken)
58
+ * Daniel O'Connor (@CloCkWeRX)
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
@@ -1,9 +1,9 @@
1
- require "ransack_ui/version"
2
- require "ransack_ui/rails/engine"
3
- require "ransack_chronic"
1
+ require 'ransack_ui/version'
2
+ require 'ransack_ui/rails/engine'
3
+ require 'ransack_chronic'
4
4
 
5
5
  # Require ransack overrides
6
6
  require 'ransack_ui/adapters/active_record'
7
- Dir.glob(File.expand_path('../ransack_ui/ransack_overrides/**/*.rb', __FILE__)) {|f| require f }
7
+ Dir.glob(File.expand_path('ransack_ui/ransack_overrides/**/*.rb', __dir__)) { |f| require f }
8
8
 
9
- require "ransack"
9
+ require 'ransack'
@@ -2,7 +2,6 @@ module RansackUI
2
2
  module Adapters
3
3
  module ActiveRecord
4
4
  module Base
5
-
6
5
  def self.extended(base)
7
6
  base.class_eval do
8
7
  class_attribute :_ransackable_associations
@@ -23,12 +22,12 @@ module RansackUI
23
22
  # Return array of attributes with [name, type]
24
23
  # (Default to :string type for ransackers)
25
24
  def ransackable_attributes(auth_object = nil)
26
- columns.map{|c| [c.name, c.type] } +
27
- _ransackers.keys.map {|k,v| [k, v.type || :string] }
25
+ columns.map { |c| [c.name, c.type] } +
26
+ _ransackers.keys.map { |k, v| [k, v.type || :string] }
28
27
  end
29
28
 
30
29
  def ransackable_associations(auth_object = nil)
31
- all_associations = reflect_on_all_associations.map {|a| a.name.to_s}
30
+ all_associations = reflect_on_all_associations.map { |a| a.name.to_s }
32
31
  if self._ransackable_associations.any?
33
32
  # Return intersection of all associations, and associations defined on the model
34
33
  all_associations & self._ransackable_associations
@@ -10,7 +10,7 @@ module RansackUI
10
10
  #
11
11
  def load_ransack_search(klass = nil)
12
12
  klass ||= controller_path.classify.constantize
13
- @ransack_search = klass.search(params[:q])
13
+ @ransack_search = klass.ransack(params[:q])
14
14
  @ransack_search.build_grouping if @ransack_search.groupings.empty?
15
15
  @ransack_search
16
16
  end
@@ -4,17 +4,17 @@ require 'ransack_ui/controller_helpers'
4
4
  module RansackUI
5
5
  module Rails
6
6
  class Engine < ::Rails::Engine
7
- initializer "ransack_ui.view_helpers" do
8
- ActionView::Base.send :include, ViewHelpers
7
+ initializer 'ransack_ui.view_helpers' do
8
+ ActionView::Base.include ViewHelpers
9
9
  end
10
10
 
11
- initializer "ransack_ui.controller_helpers" do
12
- ActionController::Base.send :include, ControllerHelpers
11
+ initializer 'ransack_ui.controller_helpers' do
12
+ ActionController::Base.include ControllerHelpers
13
13
  end
14
14
 
15
15
  config.before_configuration do
16
16
  # Add images to be precompiled
17
- ::Rails.application.config.assets.precompile += %w(ransack_ui/delete.png ransack_ui/calendar.png)
17
+ ::Rails.application.config.assets.precompile += %w[ransack_ui/delete.png ransack_ui/calendar.png]
18
18
  end
19
19
  end
20
20
  end
@@ -7,12 +7,12 @@ module Ransack
7
7
  # Return array of attributes with [name, type]
8
8
  # (Default to :string type for ransackers)
9
9
  def ransackable_attributes(auth_object = nil)
10
- columns.map{|c| [c.name, c.type] } +
11
- _ransackers.map {|k,v| [k, v.type || :string] }
10
+ columns.map { |c| [c.name, c.type] } +
11
+ _ransackers.map { |k, v| [k, v.type || :string] }
12
12
  end
13
13
 
14
14
  def self.extended(base)
15
- alias :search :ransack unless base.method_defined? :search
15
+ alias_method :search, :ransack unless base.method_defined? :search
16
16
  base.class_eval do
17
17
  class_attribute :_ransackers
18
18
  class_attribute :_ransackable_associations
@@ -32,7 +32,7 @@ module Ransack
32
32
  end
33
33
 
34
34
  def ransackable_associations(auth_object = nil)
35
- all_associations = reflect_on_all_associations.map {|a| a.name.to_s}
35
+ all_associations = reflect_on_all_associations.map { |a| a.name.to_s }
36
36
  if self._ransackable_associations.any?
37
37
  # Return intersection of all associations, and associations defined on the model
38
38
  all_associations & self._ransackable_associations
@@ -40,7 +40,6 @@ module Ransack
40
40
  all_associations
41
41
  end
42
42
  end
43
-
44
43
  end
45
44
  end
46
45
  end
@@ -12,4 +12,4 @@ module Ransack
12
12
  self.options[:ajax_options] = options
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -6,4 +6,4 @@ module Ransack
6
6
  klass.ransackable_attributes(auth_object).map(&:first).include? str
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -7,13 +7,12 @@ module Ransack
7
7
  self.cached_searchable_attributes_for_base = {}
8
8
 
9
9
  def attribute_select(options = {}, html_options = {})
10
- raise ArgumentError, "attribute_select must be called inside a search FormBuilder!" unless object.respond_to?(:context)
11
- options[:include_blank] = true unless options.has_key?(:include_blank)
10
+ raise ArgumentError, 'attribute_select must be called inside a search FormBuilder!' unless object.respond_to?(:context)
11
+
12
+ options[:include_blank] = true unless options.key?(:include_blank)
12
13
 
13
14
  # Set default associations set on model with 'has_ransackable_associations'
14
- if options[:associations].nil?
15
- options[:associations] = object.context.klass.ransackable_associations
16
- end
15
+ options[:associations] = object.context.klass.ransackable_associations if options[:associations].nil?
17
16
 
18
17
  bases = [''] + association_array(options[:associations])
19
18
  if bases.size > 1
@@ -31,32 +30,33 @@ module Ransack
31
30
  end
32
31
 
33
32
  def sort_select(options = {}, html_options = {})
34
- raise ArgumentError, "sort_select must be called inside a search FormBuilder!" unless object.respond_to?(:context)
35
- options[:include_blank] = true unless options.has_key?(:include_blank)
33
+ raise ArgumentError, 'sort_select must be called inside a search FormBuilder!' unless object.respond_to?(:context)
34
+
35
+ options[:include_blank] = true unless options.key?(:include_blank)
36
36
  bases = [''] + association_array(options[:associations])
37
37
  if bases.size > 1
38
38
  @template.select(
39
39
  @object_name, :name,
40
40
  @template.grouped_options_for_select(attribute_collection_for_bases(bases), object.name),
41
- objectify_options(options), @default_options.merge({:class => 'ransack_sort'}).merge(html_options)
41
+ objectify_options(options), @default_options.merge(class: 'ransack_sort').merge(html_options)
42
42
  ) + @template.collection_select(
43
43
  @object_name, :dir, [['asc', object.translate('asc')], ['desc', object.translate('desc')]], :first, :last,
44
- objectify_options(options.except(:include_blank)), @default_options.merge({:class => 'ransack_sort_order'}).merge(html_options)
44
+ objectify_options(options.except(:include_blank)), @default_options.merge(class: 'ransack_sort_order').merge(html_options)
45
45
  )
46
46
  else
47
47
  # searchable_attributes now returns [c, type]
48
- collection = object.context.searchable_attributes(bases.first).map do |c, type|
48
+ collection = object.context.searchable_attributes(bases.first).map do |c, _type|
49
49
  [
50
50
  attr_from_base_and_column(bases.first, c),
51
- Translate.attribute(attr_from_base_and_column(bases.first, c), :context => object.context)
51
+ Translate.attribute(attr_from_base_and_column(bases.first, c), context: object.context)
52
52
  ]
53
53
  end
54
54
  @template.collection_select(
55
55
  @object_name, :name, collection, :first, :last,
56
- objectify_options(options), @default_options.merge({:class => 'ransack_sort'}).merge(html_options)
56
+ objectify_options(options), @default_options.merge(class: 'ransack_sort').merge(html_options)
57
57
  ) + @template.collection_select(
58
58
  @object_name, :dir, [['asc', object.translate('asc')], ['desc', object.translate('desc')]], :first, :last,
59
- objectify_options(options.except(:include_blank)), @default_options.merge({:class => 'ransack_sort_order'}).merge(html_options)
59
+ objectify_options(options.except(:include_blank)), @default_options.merge(class: 'ransack_sort_order').merge(html_options)
60
60
  )
61
61
  end
62
62
  end
@@ -69,27 +69,27 @@ module Ransack
69
69
  condition.values.each do |value|
70
70
  # If value is present, and the attribute is an association,
71
71
  # load the selected record and include the record name as a data attribute
72
- if value.value.present?
73
- condition_attributes = condition.attributes
74
- if condition_attributes.any?
75
- attribute = condition_attributes.first.name
76
- klass_name = foreign_klass_for_attribute(attribute)
77
-
78
- if klass_name
79
- klass = klass_name.constantize
80
-
81
- value_object = klass.find_by_id(value.value)
82
- if value_object
83
- labels[attribute] ||= {}
84
-
85
- if value_object.respond_to? :full_name
86
- labels[attribute][value.value] = value_object.full_name
87
- elsif value_object.respond_to? :name
88
- labels[attribute][value.value] = value_object.name
89
- end
90
- end
91
- end
92
- end
72
+ next unless value.value.present?
73
+
74
+ condition_attributes = condition.attributes
75
+ next unless condition_attributes.any?
76
+
77
+ attribute = condition_attributes.first.name
78
+ klass_name = foreign_klass_for_attribute(attribute)
79
+
80
+ next unless klass_name
81
+
82
+ klass = klass_name.constantize
83
+
84
+ value_object = klass.find_by_id(value.value)
85
+ next unless value_object
86
+
87
+ labels[attribute] ||= {}
88
+
89
+ if value_object.respond_to? :full_name
90
+ labels[attribute][value.value] = value_object.full_name
91
+ elsif value_object.respond_to? :name
92
+ labels[attribute][value.value] = value_object.name
93
93
  end
94
94
  end
95
95
  end
@@ -98,18 +98,17 @@ module Ransack
98
98
  labels
99
99
  end
100
100
 
101
-
102
101
  def predicate_keys(options)
103
- keys = options[:compounds] ? Predicate.names : Predicate.names.reject {|k| k.match(/_(any|all)$/)}
104
- if only = options[:only]
102
+ keys = options[:compounds] ? Predicate.names : Predicate.names.reject { |k| k.match(/_(any|all)$/) }
103
+ if (only = options[:only])
105
104
  if only.respond_to? :call
106
- keys = keys.select {|k| only.call(k)}
105
+ keys = keys.select { |k| only.call(k) }
107
106
  else
108
107
  only = Array.wrap(only).map(&:to_s)
109
108
  # Create compounds hash, e.g. {"eq" => ["eq", "eq_any", "eq_all"], "blank" => ["blank"]}
110
- key_groups = keys.inject(Hash.new([])){ |h,k| h[k.sub(/_(any|all)$/, '')] += [k]; h }
109
+ key_groups = keys.inject(Hash.new([])) { |h, k| h[k.sub(/_(any|all)$/, '')] += [k]; h }
111
110
  # Order compounds hash by 'only' keys
112
- keys = only.map {|k| key_groups[k] }.flatten.compact
111
+ keys = only.map { |k| key_groups[k] }.flatten.compact
113
112
  end
114
113
  end
115
114
  keys
@@ -124,19 +123,19 @@ module Ransack
124
123
  # then replace the default predicate with the first in the ordered list
125
124
  @object.predicate_name = keys.first if @object.default?
126
125
  @template.collection_select(
127
- @object_name, :p, keys.map {|k| [k, Translate.predicate(k)]}, :first, :last,
126
+ @object_name, :p, keys.map { |k| [k, Translate.predicate(k)] }, :first, :last,
128
127
  objectify_options(options), @default_options.merge(html_options)
129
128
  )
130
129
  end
131
130
 
132
131
  def attribute_collection_for_bases(bases)
133
132
  bases.map do |base|
134
- if collection = attribute_collection_for_base(base)
135
- [
136
- Translate.association(base, :context => object.context),
137
- collection
138
- ]
139
- end
133
+ next unless (collection = attribute_collection_for_base(base))
134
+
135
+ [
136
+ Translate.association(base, context: object.context),
137
+ collection
138
+ ]
140
139
  end.compact
141
140
  end
142
141
 
@@ -146,21 +145,19 @@ module Ransack
146
145
 
147
146
  # Detect any inclusion validators to build list of options for a column
148
147
  column_select_options = klass.validators.each_with_object({}) do |v, hash|
149
- if v.is_a? ActiveModel::Validations::InclusionValidator
150
- v.attributes.each do |a|
151
- # Try to translate options from activerecord.attribute_options.<model>.<attribute>
152
- inclusions = v.send(:delimiter)
153
- inclusions = inclusions.call if inclusions.respond_to?(:call) # handle lambda
154
- hash[a.to_s] = inclusions.each_with_object({}) do |o, options|
155
- options[o.to_s] = I18n.translate("activerecord.attribute_options.#{klass.to_s.downcase}.#{a}.#{o}", :default => o.to_s.titleize)
156
- end
148
+ next unless v.is_a? ActiveModel::Validations::InclusionValidator
149
+
150
+ v.attributes.each do |a|
151
+ # Try to translate options from activerecord.attribute_options.<model>.<attribute>
152
+ inclusions = v.send(:delimiter)
153
+ inclusions = inclusions.call if inclusions.respond_to?(:call) # handle lambda
154
+ hash[a.to_s] = inclusions.each_with_object({}) do |o, options|
155
+ options[o.to_s] = I18n.translate("activerecord.attribute_options.#{klass.to_s.downcase}.#{a}.#{o}", default: o.to_s.titleize)
157
156
  end
158
157
  end
159
158
  end
160
159
 
161
- if klass.respond_to?(:ransack_column_select_options)
162
- column_select_options.merge!(klass.ransack_column_select_options)
163
- end
160
+ column_select_options.merge!(klass.ransack_column_select_options) if klass.respond_to?(:ransack_column_select_options)
164
161
 
165
162
  searchable_attributes_for_base(base).map do |attribute_data|
166
163
  column = attribute_data[:column]
@@ -175,17 +172,17 @@ module Ransack
175
172
  # Set column options if detected from inclusion validator
176
173
  if column_select_options[column]
177
174
  # Format options as an array of hashes with id and text columns, for Select2
178
- html_options[:'data-select-options'] = column_select_options[column].map {|id, text|
179
- {:id => id, :text => text}
180
- }.to_json
175
+ html_options[:'data-select-options'] = column_select_options[column].map do |id, text|
176
+ { id: id, text: text }
177
+ end.to_json
181
178
  end
182
179
 
183
180
  foreign_klass = attribute_data[:foreign_klass]
184
181
 
185
182
  if foreign_klass
186
183
  # If field is a foreign key, set up 'data-ajax-*' attributes for auto-complete
187
- controller = ActiveSupport::Inflector::tableize(foreign_klass.to_s)
188
- html_options[:'data-ajax-entity'] = I18n.translate(controller, :default => controller)
184
+ controller = ActiveSupport::Inflector.tableize(foreign_klass.to_s)
185
+ html_options[:'data-ajax-entity'] = I18n.translate(controller, default: controller)
189
186
  if ajax_options[:url]
190
187
  html_options[:'data-ajax-url'] = ajax_options[:url].sub(':controller', controller)
191
188
  else
@@ -201,11 +198,10 @@ module Ransack
201
198
  html_options
202
199
  ]
203
200
  end
204
- rescue UntraversableAssociationError => e
201
+ rescue UntraversableAssociationError
205
202
  nil
206
203
  end
207
204
 
208
-
209
205
  private
210
206
 
211
207
  def searchable_attributes_for_base(base)
@@ -214,22 +210,22 @@ module Ransack
214
210
 
215
211
  self.class.cached_searchable_attributes_for_base[cache_key] ||= object.context.searchable_attributes(base).map do |column, type|
216
212
  klass = object.context.traverse(base)
217
- foreign_keys = klass.reflect_on_all_associations.select(&:belongs_to?).
218
- each_with_object({}) {|r, h| h[r.foreign_key.to_sym] = r.class_name }
213
+ foreign_keys = klass.reflect_on_all_associations.select(&:belongs_to?)
214
+ .each_with_object({}) { |r, h| h[r.foreign_key.to_sym] = r.class_name }
219
215
 
220
216
  # Don't show 'id' column for base model
221
217
  next nil if base.blank? && column == 'id'
222
218
 
223
219
  attribute = attr_from_base_and_column(base, column)
224
- attribute_label = Translate.attribute(attribute, :context => object.context)
220
+ attribute_label = Translate.attribute(attribute, context: object.context)
225
221
 
226
222
  # Set model name as label for 'id' column on that model's table.
227
223
  if column == 'id'
228
224
  foreign_klass = object.context.traverse(base).model_name
229
225
  # Check that model can autocomplete. If not, skip this id column.
230
- next nil unless ActiveSupport::Inflector::constantize(foreign_klass.to_s)._ransack_can_autocomplete
226
+ next nil unless ActiveSupport::Inflector.constantize(foreign_klass.to_s)._ransack_can_autocomplete
231
227
 
232
- attribute_label = I18n.translate(foreign_klass, :default => foreign_klass)
228
+ attribute_label = I18n.translate(foreign_klass, default: foreign_klass)
233
229
  else
234
230
  foreign_klass = foreign_keys[column.to_sym]
235
231
  end
@@ -251,9 +247,7 @@ module Ransack
251
247
 
252
248
  bases.each do |base|
253
249
  searchable_attributes_for_base(base).each do |attribute_data|
254
- if attribute == attribute_data[:attribute]
255
- return attribute_data[:foreign_klass]
256
- end
250
+ return attribute_data[:foreign_klass] if attribute == attribute_data[:attribute]
257
251
  end
258
252
  end
259
253
  end
@@ -5,8 +5,8 @@ module Ransack
5
5
  Attribute.class_eval do
6
6
  def valid?
7
7
  bound? && attr &&
8
- context.klassify(parent).ransackable_attributes(context.auth_object)
9
- .map(&:first).include?(attr_name)
8
+ context.klassify(parent).ransackable_attributes(context.auth_object)
9
+ .map(&:first).include?(attr_name)
10
10
  end
11
11
  end
12
12
  end
@@ -10,4 +10,4 @@ module Ransack
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -3,7 +3,6 @@ require 'ransack/nodes/grouping'
3
3
  module Ransack
4
4
  module Nodes
5
5
  Grouping.class_eval do
6
-
7
6
  def new_condition(opts = {})
8
7
  attrs = opts[:attributes] || 1
9
8
  vals = opts[:values] || 1
@@ -14,7 +13,6 @@ module Ransack
14
13
  vals.times { condition.build_value }
15
14
  condition
16
15
  end
17
-
18
16
  end
19
17
  end
20
- end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module RansackUI
2
- VERSION = "1.3.4"
2
+ VERSION = '1.4.0'.freeze
3
3
  end
@@ -1,29 +1,29 @@
1
1
  module RansackUI
2
2
  module ViewHelpers
3
3
  def ransack_ui_search(options = {})
4
- render 'ransack_ui/search', :options => options
4
+ render 'ransack_ui/search', options: options
5
5
  end
6
6
 
7
7
  def link_to_add_fields(name, f, type, options)
8
8
  new_object = f.object.send "build_#{type}"
9
- fields = f.send("#{type}_fields", new_object, :child_index => "new_#{type}") do |builder|
10
- render "ransack_ui/#{type.to_s}_fields", :f => builder, :options => options
9
+ fields = f.send("#{type}_fields", new_object, child_index: "new_#{type}") do |builder|
10
+ render "ransack_ui/#{type}_fields", f: builder, options: options
11
11
  end
12
12
 
13
13
  if options[:theme].to_s == 'bootstrap'
14
- link_to nil, :class => "add_fields btn btn-small btn-primary", "data-field-type" => type, "data-content" => "#{fields}" do
14
+ link_to nil, :class => 'add_fields btn btn-small btn-primary', 'data-field-type' => type, 'data-content' => fields.to_s do
15
15
  "<i class=\"icon-plus icon-white\"></i><span>#{name}</span>".html_safe
16
16
  end
17
17
  else
18
- link_to name, nil, :class => "add_fields", "data-field-type" => type, "data-content" => "#{fields}"
18
+ link_to name, nil, :class => 'add_fields', 'data-field-type' => type, 'data-content' => fields.to_s
19
19
  end
20
20
  end
21
21
 
22
22
  def link_to_remove_fields(name, f, options)
23
23
  if options[:theme].to_s == 'bootstrap'
24
- link_to '<i class="icon-remove icon-white"></i>'.html_safe, nil, :class => "remove_fields btn btn-mini btn-danger"
24
+ link_to '<i class="icon-remove icon-white"></i>'.html_safe, nil, class: 'remove_fields btn btn-mini btn-danger'
25
25
  else
26
- link_to image_tag('ransack_ui/delete.png', :size => '16x16', :alt => name), nil, :class => "remove_fields"
26
+ link_to image_tag('ransack_ui/delete.png', size: '16x16', alt: name), nil, class: 'remove_fields'
27
27
  end
28
28
  end
29
29
  end
@@ -1,23 +1,22 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'ransack_ui/version'
5
4
 
6
5
  Gem::Specification.new do |gem|
7
- gem.name = "ransack_ui"
6
+ gem.name = 'ransack_ui'
8
7
  gem.version = RansackUI::VERSION
9
- gem.authors = ["Nathan Broadbent"]
10
- gem.email = ["nathan.f77@gmail.com"]
11
- gem.description = "Framework for building a search UI with Ransack"
12
- gem.summary = "UI Builder for Ransack"
13
- gem.homepage = "https://github.com/ndbroadbent/ransack_ui"
14
- gem.license = "MIT"
8
+ gem.authors = ['Nathan Broadbent']
9
+ gem.email = ['nathan.f77@gmail.com']
10
+ gem.description = 'Framework for building a search UI with Ransack'
11
+ gem.summary = 'UI Builder for Ransack'
12
+ gem.homepage = 'https://github.com/ndbroadbent/ransack_ui'
13
+ gem.license = 'MIT'
15
14
 
16
15
  gem.files = `git ls-files`.split($/)
17
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
16
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
18
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
- gem.require_paths = ["lib"]
18
+ gem.require_paths = ['lib']
20
19
 
21
20
  gem.add_dependency 'ransack_chronic', '>= 1.1.0'
22
- gem.add_dependency 'ransack'
21
+ gem.add_dependency 'ransack', '~> 2.0'
23
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack_ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Broadbent
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-02 00:00:00.000000000 Z
11
+ date: 2020-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ransack_chronic
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: ransack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '2.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '2.0'
41
41
  description: Framework for building a search UI with Ransack
42
42
  email:
43
43
  - nathan.f77@gmail.com
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
+ - ".rubocop_todo.yml"
49
50
  - Gemfile
50
51
  - LICENSE.txt
51
52
  - README.md
@@ -98,8 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
99
  - !ruby/object:Gem::Version
99
100
  version: '0'
100
101
  requirements: []
101
- rubyforge_project:
102
- rubygems_version: 2.4.3
102
+ rubygems_version: 3.1.2
103
103
  signing_key:
104
104
  specification_version: 4
105
105
  summary: UI Builder for Ransack