ransack 1.7.0 → 2.4.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.
Files changed (127) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +3 -0
  3. data/.github/SECURITY.md +12 -0
  4. data/.github/workflows/test.yml +120 -0
  5. data/.gitignore +3 -0
  6. data/CHANGELOG.md +463 -27
  7. data/CONTRIBUTING.md +52 -22
  8. data/Gemfile +24 -24
  9. data/README.md +453 -126
  10. data/Rakefile +6 -25
  11. data/lib/polyamorous/activerecord_5.2_ruby_2/join_association.rb +24 -0
  12. data/lib/polyamorous/activerecord_5.2_ruby_2/join_dependency.rb +79 -0
  13. data/lib/polyamorous/activerecord_5.2_ruby_2/reflection.rb +11 -0
  14. data/lib/polyamorous/activerecord_6.0_ruby_2/join_association.rb +1 -0
  15. data/lib/polyamorous/activerecord_6.0_ruby_2/join_dependency.rb +80 -0
  16. data/lib/polyamorous/activerecord_6.0_ruby_2/reflection.rb +1 -0
  17. data/lib/polyamorous/activerecord_6.1_ruby_2/join_association.rb +74 -0
  18. data/lib/polyamorous/activerecord_6.1_ruby_2/join_dependency.rb +93 -0
  19. data/lib/polyamorous/activerecord_6.1_ruby_2/reflection.rb +1 -0
  20. data/lib/polyamorous/join.rb +70 -0
  21. data/lib/polyamorous/polyamorous.rb +24 -0
  22. data/lib/polyamorous/swapping_reflection_class.rb +11 -0
  23. data/lib/polyamorous/tree_node.rb +7 -0
  24. data/lib/ransack/adapters/active_record/base.rb +27 -2
  25. data/lib/ransack/adapters/active_record/context.rb +213 -139
  26. data/lib/ransack/adapters/active_record/ransack/constants.rb +70 -55
  27. data/lib/ransack/adapters/active_record/ransack/context.rb +10 -18
  28. data/lib/ransack/adapters/active_record/ransack/nodes/condition.rb +42 -32
  29. data/lib/ransack/adapters/active_record/ransack/translate.rb +1 -5
  30. data/lib/ransack/adapters/active_record/ransack/visitor.rb +23 -0
  31. data/lib/ransack/adapters/active_record.rb +11 -10
  32. data/lib/ransack/adapters.rb +45 -23
  33. data/lib/ransack/configuration.rb +107 -4
  34. data/lib/ransack/constants.rb +13 -26
  35. data/lib/ransack/context.rb +45 -33
  36. data/lib/ransack/helpers/form_builder.rb +21 -12
  37. data/lib/ransack/helpers/form_helper.rb +75 -70
  38. data/lib/ransack/locale/ar.yml +70 -0
  39. data/lib/ransack/locale/az.yml +70 -0
  40. data/lib/ransack/locale/bg.yml +70 -0
  41. data/lib/ransack/locale/ca.yml +70 -0
  42. data/lib/ransack/locale/da.yml +70 -0
  43. data/lib/ransack/locale/el.yml +70 -0
  44. data/lib/ransack/locale/es.yml +22 -22
  45. data/lib/ransack/locale/fa.yml +70 -0
  46. data/lib/ransack/locale/fi.yml +71 -0
  47. data/lib/ransack/locale/id.yml +70 -0
  48. data/lib/ransack/locale/it.yml +70 -0
  49. data/lib/ransack/locale/ja.yml +70 -0
  50. data/lib/ransack/locale/nl.yml +4 -4
  51. data/lib/ransack/locale/pt-BR.yml +70 -0
  52. data/lib/ransack/locale/ru.yml +70 -0
  53. data/lib/ransack/locale/sk.yml +70 -0
  54. data/lib/ransack/locale/tr.yml +70 -0
  55. data/lib/ransack/locale/{zh.yml → zh-CN.yml} +13 -13
  56. data/lib/ransack/locale/zh-TW.yml +70 -0
  57. data/lib/ransack/nodes/attribute.rb +5 -2
  58. data/lib/ransack/nodes/bindable.rb +18 -6
  59. data/lib/ransack/nodes/condition.rb +85 -28
  60. data/lib/ransack/nodes/grouping.rb +17 -11
  61. data/lib/ransack/nodes/sort.rb +9 -5
  62. data/lib/ransack/nodes/value.rb +74 -68
  63. data/lib/ransack/nodes.rb +1 -1
  64. data/lib/ransack/predicate.rb +17 -20
  65. data/lib/ransack/search.rb +17 -8
  66. data/lib/ransack/translate.rb +115 -115
  67. data/lib/ransack/version.rb +1 -1
  68. data/lib/ransack/visitor.rb +1 -12
  69. data/lib/ransack.rb +9 -9
  70. data/logo/ransack-h.png +0 -0
  71. data/logo/ransack-h.svg +34 -0
  72. data/logo/ransack-v.png +0 -0
  73. data/logo/ransack-v.svg +34 -0
  74. data/logo/ransack.png +0 -0
  75. data/logo/ransack.svg +21 -0
  76. data/ransack.gemspec +7 -24
  77. data/spec/console.rb +4 -0
  78. data/spec/helpers/polyamorous_helper.rb +19 -0
  79. data/spec/polyamorous/join_association_spec.rb +35 -0
  80. data/spec/polyamorous/join_dependency_spec.rb +97 -0
  81. data/spec/polyamorous/join_spec.rb +19 -0
  82. data/spec/ransack/adapters/active_record/base_spec.rb +370 -75
  83. data/spec/ransack/adapters/active_record/context_spec.rb +72 -34
  84. data/spec/ransack/configuration_spec.rb +97 -14
  85. data/spec/ransack/helpers/form_builder_spec.rb +2 -11
  86. data/spec/ransack/helpers/form_helper_spec.rb +481 -113
  87. data/spec/ransack/nodes/condition_spec.rb +24 -0
  88. data/spec/ransack/nodes/grouping_spec.rb +56 -0
  89. data/spec/ransack/predicate_spec.rb +79 -5
  90. data/spec/ransack/search_spec.rb +207 -81
  91. data/spec/spec_helper.rb +8 -0
  92. data/spec/support/schema.rb +100 -42
  93. metadata +57 -184
  94. data/.travis.yml +0 -69
  95. data/lib/ransack/adapters/active_record/3.0/compat.rb +0 -179
  96. data/lib/ransack/adapters/active_record/3.0/context.rb +0 -201
  97. data/lib/ransack/adapters/active_record/3.1/context.rb +0 -215
  98. data/lib/ransack/adapters/active_record/3.2/context.rb +0 -44
  99. data/lib/ransack/adapters/active_record/compat.rb +0 -14
  100. data/lib/ransack/adapters/mongoid/3.2/.gitkeep +0 -0
  101. data/lib/ransack/adapters/mongoid/attributes/attribute.rb +0 -37
  102. data/lib/ransack/adapters/mongoid/attributes/order_predications.rb +0 -17
  103. data/lib/ransack/adapters/mongoid/attributes/predications.rb +0 -141
  104. data/lib/ransack/adapters/mongoid/base.rb +0 -130
  105. data/lib/ransack/adapters/mongoid/context.rb +0 -208
  106. data/lib/ransack/adapters/mongoid/inquiry_hash.rb +0 -23
  107. data/lib/ransack/adapters/mongoid/ransack/constants.rb +0 -88
  108. data/lib/ransack/adapters/mongoid/ransack/context.rb +0 -60
  109. data/lib/ransack/adapters/mongoid/ransack/nodes/condition.rb +0 -27
  110. data/lib/ransack/adapters/mongoid/ransack/translate.rb +0 -13
  111. data/lib/ransack/adapters/mongoid/ransack/visitor.rb +0 -24
  112. data/lib/ransack/adapters/mongoid/table.rb +0 -35
  113. data/lib/ransack/adapters/mongoid.rb +0 -13
  114. data/spec/mongoid/adapters/mongoid/base_spec.rb +0 -276
  115. data/spec/mongoid/adapters/mongoid/context_spec.rb +0 -56
  116. data/spec/mongoid/configuration_spec.rb +0 -102
  117. data/spec/mongoid/dependencies_spec.rb +0 -8
  118. data/spec/mongoid/helpers/ransack_helper.rb +0 -11
  119. data/spec/mongoid/nodes/condition_spec.rb +0 -34
  120. data/spec/mongoid/nodes/grouping_spec.rb +0 -13
  121. data/spec/mongoid/predicate_spec.rb +0 -155
  122. data/spec/mongoid/search_spec.rb +0 -446
  123. data/spec/mongoid/support/mongoid.yml +0 -6
  124. data/spec/mongoid/support/schema.rb +0 -128
  125. data/spec/mongoid/translate_spec.rb +0 -14
  126. data/spec/mongoid_spec_helper.rb +0 -59
  127. data/spec/ransack/dependencies_spec.rb +0 -12
@@ -6,8 +6,14 @@ module ActionView::Helpers::Tags
6
6
  # https://github.com/rails/rails/commit/c1a118a
7
7
  class Base
8
8
  private
9
- def value(object)
10
- object.send @method_name if object # use send instead of public_send
9
+ if defined? ::ActiveRecord
10
+ def value
11
+ if @allow_method_names_outside_object
12
+ object.send @method_name if object && object.respond_to?(@method_name, true)
13
+ else
14
+ object.send @method_name if object
15
+ end
16
+ end
11
17
  end
12
18
  end
13
19
  end
@@ -15,8 +21,7 @@ end
15
21
  RANSACK_FORM_BUILDER = 'RANSACK_FORM_BUILDER'.freeze
16
22
 
17
23
  require 'simple_form' if
18
- (ENV[RANSACK_FORM_BUILDER] || Ransack::Constants::EMPTY)
19
- .match('SimpleForm'.freeze)
24
+ (ENV[RANSACK_FORM_BUILDER] || ''.freeze).match('SimpleForm'.freeze)
20
25
 
21
26
  module Ransack
22
27
  module Helpers
@@ -47,7 +52,7 @@ module Ransack
47
52
  raise ArgumentError, formbuilder_error_message(
48
53
  "#{action}_select") unless object.respond_to?(:context)
49
54
  options[:include_blank] = true unless options.has_key?(:include_blank)
50
- bases = [Constants::EMPTY] + association_array(options[:associations])
55
+ bases = [''.freeze].freeze + association_array(options[:associations])
51
56
  if bases.size > 1
52
57
  collection = attribute_collection_for_bases(action, bases)
53
58
  object.name ||= default if can_use_default?(
@@ -66,13 +71,13 @@ module Ransack
66
71
  def sort_direction_select(options = {}, html_options = {})
67
72
  unless object.respond_to?(:context)
68
73
  raise ArgumentError,
69
- formbuilder_error_message(Constants::SORT_DIRECTION)
74
+ formbuilder_error_message('sort_direction'.freeze)
70
75
  end
71
76
  template_collection_select(:dir, sort_array, options, html_options)
72
77
  end
73
78
 
74
79
  def sort_select(options = {}, html_options = {})
75
- attribute_select(options, html_options, Constants::SORT) +
80
+ attribute_select(options, html_options, 'sort'.freeze) +
76
81
  sort_direction_select(options, html_options)
77
82
  end
78
83
 
@@ -84,6 +89,10 @@ module Ransack
84
89
  @template.sort_link @object, attribute, *args
85
90
  end
86
91
 
92
+ def sort_url(attribute, *args)
93
+ @template.sort_url @object, attribute, *args
94
+ end
95
+
87
96
  def condition_fields(*args, &block)
88
97
  search_fields(:c, args, block)
89
98
  end
@@ -135,7 +144,7 @@ module Ransack
135
144
  else
136
145
  only = Array.wrap(only).map(&:to_s)
137
146
  keys = keys.select {
138
- |k| only.include? k.sub(/_(any|all)$/, Constants::EMPTY)
147
+ |k| only.include? k.sub(/_(any|all)$/, ''.freeze)
139
148
  }
140
149
  end
141
150
  end
@@ -177,9 +186,9 @@ module Ransack
177
186
 
178
187
  def sort_array
179
188
  [
180
- [Constants::ASC, object.translate(Constants::ASC)],
181
- [Constants::DESC, object.translate(Constants::DESC)]
182
- ]
189
+ ['asc'.freeze, object.translate('asc'.freeze)].freeze,
190
+ ['desc'.freeze, object.translate('desc'.freeze)].freeze
191
+ ].freeze
183
192
  end
184
193
 
185
194
  def combinator_choices
@@ -234,7 +243,7 @@ module Ransack
234
243
  Translate.association(base, :context => object.context),
235
244
  collection_for_base(action, base)
236
245
  ]
237
- rescue UntraversableAssociationError => e
246
+ rescue UntraversableAssociationError
238
247
  nil
239
248
  end
240
249
  end
@@ -38,43 +38,53 @@ module Ransack
38
38
  #
39
39
  # <%= sort_link(@q, :name, [:name, 'kind ASC'], 'Player Name') %>
40
40
  #
41
- def sort_link(search_object, attribute, *args)
41
+ # You can also use a block:
42
+ #
43
+ # <%= sort_link(@q, :name, [:name, 'kind ASC']) do %>
44
+ # <strong>Player Name</strong>
45
+ # <% end %>
46
+ #
47
+ def sort_link(search_object, attribute, *args, &block)
42
48
  search, routing_proxy = extract_search_and_routing_proxy(search_object)
43
49
  unless Search === search
44
50
  raise TypeError, 'First argument must be a Ransack::Search!'
45
51
  end
46
- s = SortLink.new(search, attribute, args, params)
52
+ args[args.first.is_a?(Array) ? 1 : 0, 0] = capture(&block) if block_given?
53
+ s = SortLink.new(search, attribute, args, params, &block)
47
54
  link_to(s.name, url(routing_proxy, s.url_options), s.html_options(args))
48
55
  end
49
56
 
57
+ # +sort_url+
58
+ # <%= sort_url(@q, :created_at, default_order: :desc) %>
59
+ #
60
+ def sort_url(search_object, attribute, *args)
61
+ search, routing_proxy = extract_search_and_routing_proxy(search_object)
62
+ unless Search === search
63
+ raise TypeError, 'First argument must be a Ransack::Search!'
64
+ end
65
+ s = SortLink.new(search, attribute, args, params)
66
+ url(routing_proxy, s.url_options)
67
+ end
68
+
50
69
  private
51
70
 
52
71
  def options_for(record)
53
- record.map &method(:parse_record)
72
+ record.map { |r| parse_record(r) }
54
73
  end
55
74
 
56
75
  def parse_record(object)
57
- if object.is_a?(Ransack::Search)
58
- object.klass
59
- else
60
- object
61
- end
76
+ return object.klass if object.is_a?(Ransack::Search)
77
+ object
62
78
  end
63
79
 
64
80
  def html_option_for(option, search)
65
- if option.present?
66
- option.to_s
67
- else
68
- "#{search.klass.to_s.underscore}_search"
69
- end
81
+ return option.to_s if option.present?
82
+ "#{search.klass.to_s.underscore}_search"
70
83
  end
71
84
 
72
85
  def extract_search_and_routing_proxy(search)
73
- if search.is_a? Array
74
- [search.second, search.first]
75
- else
76
- [search, nil]
77
- end
86
+ return [search[1], search[0]] if search.is_a?(Array)
87
+ [search, nil]
78
88
  end
79
89
 
80
90
  def url(routing_proxy, options_for_url)
@@ -88,20 +98,33 @@ module Ransack
88
98
  class SortLink
89
99
  def initialize(search, attribute, args, params)
90
100
  @search = search
91
- @params = params
101
+ @params = parameters_hash(params)
92
102
  @field = attribute.to_s
93
103
  @sort_fields = extract_sort_fields_and_mutate_args!(args).compact
94
104
  @current_dir = existing_sort_direction
95
105
  @label_text = extract_label_and_mutate_args!(args)
96
106
  @options = extract_options_and_mutate_args!(args)
97
- @hide_indicator = @options.delete :hide_indicator
107
+ @hide_indicator = @options.delete(:hide_indicator) ||
108
+ Ransack.options[:hide_sort_order_indicators]
98
109
  @default_order = @options.delete :default_order
99
110
  end
100
111
 
112
+ def up_arrow
113
+ Ransack.options[:up_arrow]
114
+ end
115
+
116
+ def down_arrow
117
+ Ransack.options[:down_arrow]
118
+ end
119
+
120
+ def default_arrow
121
+ Ransack.options[:default_arrow]
122
+ end
123
+
101
124
  def name
102
125
  [ERB::Util.h(@label_text), order_indicator]
103
126
  .compact
104
- .join(Constants::NON_BREAKING_SPACE)
127
+ .join('&nbsp;'.freeze)
105
128
  .html_safe
106
129
  end
107
130
 
@@ -114,35 +137,34 @@ module Ransack
114
137
  def html_options(args)
115
138
  html_options = extract_options_and_mutate_args!(args)
116
139
  html_options.merge(
117
- class: [[Constants::SORT_LINK, @current_dir], html_options[:class]]
118
- .compact.join(Constants::SPACE)
140
+ class: [['sort_link'.freeze, @current_dir], html_options[:class]]
141
+ .compact.join(' '.freeze)
119
142
  )
120
143
  end
121
144
 
122
145
  private
123
146
 
124
- def extract_sort_fields_and_mutate_args!(args)
125
- if args.first.is_a? Array
126
- args.shift
147
+ def parameters_hash(params)
148
+ if ::ActiveRecord::VERSION::MAJOR >= 5 && params.respond_to?(:to_unsafe_h)
149
+ params.to_unsafe_h
127
150
  else
128
- [@field]
151
+ params
129
152
  end
130
153
  end
131
154
 
155
+ def extract_sort_fields_and_mutate_args!(args)
156
+ return args.shift if args[0].is_a?(Array)
157
+ [@field]
158
+ end
159
+
132
160
  def extract_label_and_mutate_args!(args)
133
- if args.first.is_a? String
134
- args.shift
135
- else
136
- Translate.attribute(@field, context: @search.context)
137
- end
161
+ return args.shift if args[0].is_a?(String)
162
+ Translate.attribute(@field, context: @search.context)
138
163
  end
139
164
 
140
165
  def extract_options_and_mutate_args!(args)
141
- if args.first.is_a? Hash
142
- args.shift.with_indifferent_access
143
- else
144
- {}
145
- end
166
+ return args.shift.with_indifferent_access if args[0].is_a?(Hash)
167
+ {}
146
168
  end
147
169
 
148
170
  def search_and_sort_params
@@ -155,11 +177,8 @@ module Ransack
155
177
 
156
178
  def sort_params
157
179
  sort_array = recursive_sort_params_build(@sort_fields)
158
- if sort_array.size == 1
159
- sort_array.first
160
- else
161
- sort_array
162
- end
180
+ return sort_array[0] if sort_array.length == 1
181
+ sort_array
163
182
  end
164
183
 
165
184
  def recursive_sort_params_build(fields)
@@ -179,52 +198,38 @@ module Ransack
179
198
  if sort_dir = existing_sort_direction(attr_name)
180
199
  direction_text(sort_dir)
181
200
  else
182
- default_sort_order(attr_name) || Constants::ASC
201
+ default_sort_order(attr_name) || 'asc'.freeze
183
202
  end
184
203
  end
185
204
 
186
- def existing_sort_direction(attr_name = @field)
187
- if sort = @search.sorts.detect { |s| s && s.name == attr_name }
188
- sort.dir
189
- end
205
+ def existing_sort_direction(f = @field)
206
+ return unless sort = @search.sorts.detect { |s| s && s.name == f }
207
+ sort.dir
190
208
  end
191
209
 
192
210
  def default_sort_order(attr_name)
193
- if Hash === @default_order
194
- @default_order[attr_name]
195
- else
196
- @default_order
197
- end
211
+ return @default_order[attr_name] if Hash === @default_order
212
+ @default_order
198
213
  end
199
214
 
200
215
  def order_indicator
201
- if @hide_indicator || no_sort_direction_specified?
202
- nil
216
+ return if @hide_indicator
217
+ return default_arrow if no_sort_direction_specified?
218
+ if @current_dir == 'desc'.freeze
219
+ up_arrow
203
220
  else
204
- direction_arrow
221
+ down_arrow
205
222
  end
206
223
  end
207
224
 
208
225
  def no_sort_direction_specified?(dir = @current_dir)
209
- !Constants::ASC_DESC.include?(dir)
210
- end
211
-
212
- def direction_arrow
213
- if @current_dir == Constants::DESC
214
- Constants::DESC_ARROW
215
- else
216
- Constants::ASC_ARROW
217
- end
226
+ dir != 'asc'.freeze && dir != 'desc'.freeze
218
227
  end
219
228
 
220
229
  def direction_text(dir)
221
- if dir == Constants::DESC
222
- Constants::ASC
223
- else
224
- Constants::DESC
225
- end
230
+ return 'asc'.freeze if dir == 'desc'.freeze
231
+ 'desc'.freeze
226
232
  end
227
-
228
233
  end
229
234
  end
230
235
  end
@@ -0,0 +1,70 @@
1
+ ar:
2
+ ransack:
3
+ search: "بحث"
4
+ predicate: "فاعل"
5
+ and: "و"
6
+ or: "أو"
7
+ any: "أيُّ"
8
+ all: "كل"
9
+ combinator: "دالة توافقية"
10
+ attribute: "خاصية"
11
+ value: "قيمة"
12
+ condition: "شرط"
13
+ sort: "ترتيب"
14
+ asc: "تصاعدي"
15
+ desc: "تنازلي"
16
+ predicates:
17
+ eq: "معادل"
18
+ eq_any: "معادل على اﻷقل لواحد"
19
+ eq_all: "معادل للجميع"
20
+ not_eq: "ليس معادلا لـ"
21
+ not_eq_any: "ليس معادلا على اﻷقل لواحد"
22
+ not_eq_all: "ليس معادلا للجميع"
23
+ matches: "موائم"
24
+ matches_any: "موائم لواحد على اﻷقل"
25
+ matches_all: "موائم للجميع"
26
+ does_not_match: "لا يتواءم"
27
+ does_not_match_any: "لا يتواءم مع واحد على اﻷقل"
28
+ does_not_match_all: "لا يتواءم مع الجميع"
29
+ lt: "أصغر من"
30
+ lt_any: "أصغر لواحد على اﻷقل"
31
+ lt_all: "أصغر من الجميع"
32
+ lteq: "أصغر أو مساو لـ"
33
+ lteq_any: "أصغر أو مساو لواحد على اﻷقل"
34
+ lteq_all: "أصغر أو مساو للجميع"
35
+ gt: "أكبر من"
36
+ gt_any: "أكبر من واحد على اﻷقل"
37
+ gt_all: "أكبر من الجميع"
38
+ gteq: "أكبر أو مساو لـ"
39
+ gteq_any: "أكبر أو مساو لواحد على اﻷقل"
40
+ gteq_all: "أكبر أو مساو للجميع"
41
+ in: "متضمن لـ"
42
+ in_any: "متضمن لواحد على اﻷقل"
43
+ in_all: "متضمن للجميع"
44
+ not_in: "غير متضمن"
45
+ not_in_any: "غير متضمن لواحد على اﻷقل"
46
+ not_in_all: "غير متضمن للجميع"
47
+ cont: "محتو"
48
+ cont_any: "محتو لواحد على اﻷقل"
49
+ cont_all: "محتو لجميع"
50
+ not_cont: "غير محتو"
51
+ not_cont_any: "غير محتو لواحد على اﻷقل"
52
+ not_cont_all: "غير محتو للجميع"
53
+ start: "يبدأ بـ"
54
+ start_any: "يبدأ بواحد على اﻷقل"
55
+ start_all: "يبدأ بالجميع"
56
+ not_start: "لا يبدأ بـ"
57
+ not_start_any: "لا يبدأ بواحد على اﻷقل"
58
+ not_start_all: "لا يبدأ بالجميع"
59
+ end: "ينتهي بـ"
60
+ end_any: "ينتهي بواحد على اﻷقل"
61
+ end_all: "ينتهي بالجميع"
62
+ not_end: "لا ينتهي بـ"
63
+ not_end_any: "لا ينتهي بواحد على اﻷقل"
64
+ not_end_all: "لا ينتهي بالجميع"
65
+ 'true': "صحيح"
66
+ 'false': "خطأ"
67
+ present: "مستقبل"
68
+ blank: "فراغ"
69
+ 'null': "عدم"
70
+ not_null: "غير مساو لقيمة عدم"
@@ -0,0 +1,70 @@
1
+ az:
2
+ ransack:
3
+ search: "axtar"
4
+ predicate: "təsdiqlə"
5
+ and: "və"
6
+ or: "və ya"
7
+ any: "hər hansı"
8
+ all: "hamısı"
9
+ combinator: "birləşdirici"
10
+ attribute: "xüsusiyyət"
11
+ value: "dəyər"
12
+ condition: "şərt"
13
+ sort: "sırala"
14
+ asc: "artan"
15
+ desc: "azalan"
16
+ predicates:
17
+ eq: "bərabər"
18
+ eq_any: "hər hansı birinə bərabər"
19
+ eq_all: "hamısına bərabər"
20
+ not_eq: "bərabər deyil"
21
+ not_eq_any: "hər hansı birinə bərabər deyil"
22
+ not_eq_all: "heç birinə bərabər deyil"
23
+ matches: "uyğunlaşan"
24
+ matches_any: "hər hansı biri ilə uyğunlaşan"
25
+ matches_all: "hamısı ilə uyğunlaşan"
26
+ does_not_match: "uyğunlaşmayan"
27
+ does_not_match_any: "hər hansı biri ilə uyğunlaşmayan"
28
+ does_not_match_all: "heç biri ilə uyğunlaşmayan"
29
+ lt: "daha kiçik"
30
+ lt_any: "hər hansı birindən kiçik"
31
+ lt_all: "hamısından kiçik"
32
+ lteq: "daha kiçik və ya bərabər"
33
+ lteq_any: "daha kiçik və ya hər hansı birinə bərabər"
34
+ lteq_all: "daha kiçik və ya hamısına bərabər"
35
+ gt: "daha böyük "
36
+ gt_any: "hər hansı birindən daha böyük"
37
+ gt_all: "hamısından daha böyük"
38
+ gteq: "daha böyük və ya bərabər"
39
+ gteq_any: "daha böyük və ya hər hansı birine bərabər"
40
+ gteq_all: "daha böyük və ya hamısıne bərabər"
41
+ in: "içində"
42
+ in_any: "hər hansı birində"
43
+ in_all: "hamısında"
44
+ not_in: "içində deyil"
45
+ not_in_any: "hər hansı birində deyil"
46
+ not_in_all: "heç birində deyil"
47
+ cont: "ehtiva edən"
48
+ cont_any: "hər hansı birini ehtiva edən"
49
+ cont_all: "hamısını ehtiva edən"
50
+ not_cont: "ehtiva etməyən"
51
+ not_cont_any: "hər hansı birini ehtiva etməyən"
52
+ not_cont_all: "heç birini birini ehtiva etməyən"
53
+ start: "ilə başlayan"
54
+ start_any: "hər hansı biri ilə başlayan"
55
+ start_all: "hamısı ilə başlayan"
56
+ not_start: "ilə başlamayan"
57
+ not_start_any: "hər hansı biri ilə başlamayan"
58
+ not_start_all: "hiçbiri ilə başlamayan"
59
+ end: "ilə bitən"
60
+ end_any: "hər hansı biri ilə bitən"
61
+ end_all: "hamısı ilə bitən"
62
+ not_end: "ilə bitməyən"
63
+ not_end_any: "hər hansı biri ilə bitməyən"
64
+ not_end_all: "heç biri ilə bitməyən"
65
+ 'true': "doğru"
66
+ 'false': "yanlış"
67
+ present: "mövcüd"
68
+ blank: "boş"
69
+ 'null': "keçərsiz"
70
+ not_null: "keçərli"
@@ -0,0 +1,70 @@
1
+ bg:
2
+ ransack:
3
+ search: "търсене"
4
+ predicate: "предикат"
5
+ and: "и"
6
+ or: "или"
7
+ any: "всякакво"
8
+ all: "всички"
9
+ combinator: "комбинатор"
10
+ attribute: "атрибут"
11
+ value: "стойност"
12
+ condition: "условие"
13
+ sort: "сортиране"
14
+ asc: "възходящ"
15
+ desc: "низходящ"
16
+ predicates:
17
+ eq: "се равнява на"
18
+ eq_any: "се равнява на всяко"
19
+ eq_all: "се равнява на всички"
20
+ not_eq: "не е равно на"
21
+ not_eq_any: "не е равно на никое от"
22
+ not_eq_all: "не е равно на всички"
23
+ matches: "съвпада"
24
+ matches_any: "съвпада с някое"
25
+ matches_all: "съвпада с всички"
26
+ does_not_match: "не съвпада"
27
+ does_not_match_any: "не съвпада с никое"
28
+ does_not_match_all: "не съвпада с всички"
29
+ lt: "по-малко от"
30
+ lt_any: "по-малко от някое"
31
+ lt_all: "по-малко от всички"
32
+ lteq: "по-малко или равно на"
33
+ lteq_any: "по-малко или равно на някое"
34
+ lteq_all: "по-малко или равно на всички"
35
+ gt: "по-голямо от"
36
+ gt_any: "по-голямо от всякое"
37
+ gt_all: "по-голямо от всички"
38
+ gteq: "по-голямо или равно на"
39
+ gteq_any: "по-голямо или равно на всякое"
40
+ gteq_all: "по-голямо или равно на всички"
41
+ in: "в"
42
+ in_any: "във всякое"
43
+ in_all: "във всички"
44
+ not_in: "не в"
45
+ not_in_any: "не в никое"
46
+ not_in_all: "не във всички"
47
+ cont: "съдържа"
48
+ cont_any: "съдържа всякое"
49
+ cont_all: "съдържа всички"
50
+ not_cont: "не съдържа"
51
+ not_cont_any: "не съдържа никое"
52
+ not_cont_all: "не съдържа всички"
53
+ start: "започва с"
54
+ start_any: "започва с всякое"
55
+ start_all: "започва с всички"
56
+ not_start: "не започва с"
57
+ not_start_any: "не започва с никое"
58
+ not_start_all: "не започва с всички"
59
+ end: "завършва с"
60
+ end_any: "завършва с всякое"
61
+ end_all: "завършва с всички"
62
+ not_end: "не завършва с"
63
+ not_end_any: "не завършва с никое"
64
+ not_end_all: "не завършва с всички"
65
+ 'true': "истина"
66
+ 'false': "неистина"
67
+ present: "присъства"
68
+ blank: "е празно"
69
+ 'null': "е нула"
70
+ not_null: "не е нула"
@@ -0,0 +1,70 @@
1
+ ca:
2
+ ransack:
3
+ search: "cercar"
4
+ predicate: "predicat"
5
+ and: "i"
6
+ or: "o"
7
+ any: "qualsevol"
8
+ all: "tots"
9
+ combinator: "combinador"
10
+ attribute: "atribut"
11
+ value: "valor"
12
+ condition: "condició"
13
+ sort: "ordenar"
14
+ asc: "ascendent"
15
+ desc: "descendent"
16
+ predicates:
17
+ eq: "és igual a"
18
+ eq_any: "és igual a qualsevol"
19
+ eq_all: "és igual a tots"
20
+ not_eq: "no és igual a"
21
+ not_eq_any: "no és igual a qualsevol"
22
+ not_eq_all: "no és igual a tots"
23
+ matches: "coincideix"
24
+ matches_any: "coincideix a qualsevol"
25
+ matches_all: "coincideix a tots"
26
+ does_not_match: "no coincideix"
27
+ does_not_match_any: "no coincideix amb cap"
28
+ does_not_match_all: "no coincideix amb tots"
29
+ lt: "menor que"
30
+ lt_any: "menor que qualsevol"
31
+ lt_all: "menor o igual a"
32
+ lteq: "menor que o igual a"
33
+ lteq_any: "menor o igual a qualsevol"
34
+ lteq_all: "menor o igual a tots"
35
+ gt: "major que"
36
+ gt_any: "major que qualsevol"
37
+ gt_all: "major que tots"
38
+ gteq: "major que o igual a"
39
+ gteq_any: "major que o igual a qualsevol"
40
+ gteq_all: "major que o igual a tots"
41
+ in: "en"
42
+ in_any: "en qualsevol"
43
+ in_all: "en tots"
44
+ not_in: "no en"
45
+ not_in_any: "no en qualsevol"
46
+ not_in_all: "no en tots"
47
+ cont: "conté"
48
+ cont_any: "conté qualsevol"
49
+ cont_all: "conté tots"
50
+ not_cont: "no conté"
51
+ not_cont_any: "no conté cap"
52
+ not_cont_all: "no conté tota"
53
+ start: "comença per"
54
+ start_any: "comença per qualsevol"
55
+ start_all: "comença per tot"
56
+ not_start: "no comença per"
57
+ not_start_any: "no comença per qualsevol"
58
+ not_start_all: "no comença per tot"
59
+ end: "acaba en"
60
+ end_any: "acaba en qualsevol"
61
+ end_all: "acaba en tot"
62
+ not_end: "no acaba en"
63
+ not_end_any: "no acaba en qualsevol"
64
+ not_end_all: "no acaba en tot"
65
+ 'true': "és verdader"
66
+ 'false': "és fals"
67
+ present: "és present"
68
+ blank: "està en blanc"
69
+ 'null': "és nul"
70
+ not_null: "no és nul"
@@ -0,0 +1,70 @@
1
+ da:
2
+ ransack:
3
+ search: "søg"
4
+ predicate: "predicate"
5
+ and: "og"
6
+ or: "eller"
7
+ any: "anhver"
8
+ all: "alle"
9
+ combinator: "kombinering"
10
+ attribute: "attribut"
11
+ value: "værdi"
12
+ condition: "betingelse"
13
+ sort: "sorter"
14
+ asc: "opstigende"
15
+ desc: "faldende"
16
+ predicates:
17
+ eq: "lig med"
18
+ eq_any: "lig med enhver"
19
+ eq_all: "lig med alle"
20
+ not_eq: "ikke lig med"
21
+ not_eq_any: "ikke lig med nogen"
22
+ not_eq_all: "ikke lig med alle"
23
+ matches: "matcher"
24
+ matches_any: "matcher enhver"
25
+ matches_all: "matcher alle"
26
+ does_not_match: "matcher ikke"
27
+ does_not_match_any: "matcher ikke nogen"
28
+ does_not_match_all: "matcher ikke alle"
29
+ lt: "mindre end"
30
+ lt_any: "mindre end nogen"
31
+ lt_all: "mindre end alle"
32
+ lteq: "mindre end eller lig med"
33
+ lteq_any: "mindre end eller lig med nogen"
34
+ lteq_all: "mindre end eller lig med alle"
35
+ gt: "større end"
36
+ gt_any: "større end nogen"
37
+ gt_all: "større end alle"
38
+ gteq: "større end eller lig med"
39
+ gteq_any: "større end eller lig med nogen"
40
+ gteq_all: "større end eller lig med alle"
41
+ in: "i"
42
+ in_any: "i nogen"
43
+ in_all: "i alle"
44
+ not_in: "ikke i"
45
+ not_in_any: "ikke i nogen"
46
+ not_in_all: "ikke i alle"
47
+ cont: "indeholder"
48
+ cont_any: "indeholder nogen"
49
+ cont_all: "indeholder alle"
50
+ not_cont: "indeholder ikke"
51
+ not_cont_any: "indeholder ikke nogen"
52
+ not_cont_all: "indeholder ikke alle"
53
+ start: "starter med"
54
+ start_any: "starter med nogen"
55
+ start_all: "starter med alle"
56
+ not_start: "starter ikke med"
57
+ not_start_any: "starter ikke med nogen"
58
+ not_start_all: "starter ikke med alle"
59
+ end: "slutter med"
60
+ end_any: "slutter med nogen"
61
+ end_all: "slutter med alle"
62
+ not_end: "slutter ikke med"
63
+ not_end_any: "slutter ikke med nogen"
64
+ not_end_all: "slutter ikke med alle"
65
+ 'true': "er sand"
66
+ 'false': "er falsk"
67
+ present: "er til stede"
68
+ blank: "er blank"
69
+ 'null': "er nul"
70
+ not_null: "er ikke nul"