ransack 1.7.0 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
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"