ransack_abbreviator 0.0.7 → 0.0.8
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.
- data/lib/ransack_abbreviator.rb +0 -1
- data/lib/ransack_abbreviator/abbreviators/decoder.rb +4 -2
- data/lib/ransack_abbreviator/configuration.rb +2 -1
- data/lib/ransack_abbreviator/version.rb +1 -1
- data/spec/ransack_abbreviator/configuration_spec.rb +1 -1
- data/spec/ransack_abbreviator/decoder_spec.rb +92 -0
- data/spec/ransack_abbreviator/encoder_spec.rb +92 -0
- data/spec/ransack_abbreviator/search_spec.rb +25 -38
- data/spec/spec_helper.rb +0 -2
- metadata +6 -5
- data/lib/ransack_abbreviator/view_helpers.rb +0 -30
- data/spec/ransack_abbreviator/helper_spec.rb +0 -90
data/lib/ransack_abbreviator.rb
CHANGED
@@ -23,5 +23,4 @@ require "ransack_abbreviator/ransack_extensions/nodes/condition"
|
|
23
23
|
require "ransack_abbreviator/ransack_extensions/context"
|
24
24
|
require "ransack_abbreviator/ransack_extensions/search"
|
25
25
|
require 'ransack_abbreviator/adapters/active_record'
|
26
|
-
require "ransack_abbreviator/view_helpers"
|
27
26
|
require "ransack_abbreviator/ransack_extensions/helpers/form_builder"
|
@@ -82,7 +82,8 @@ module RansackAbbreviator
|
|
82
82
|
private
|
83
83
|
|
84
84
|
def get_polymorphic_assoc_and_class_type(possible_assoc_abbr)
|
85
|
-
assoc_name =
|
85
|
+
assoc_name = nil
|
86
|
+
class_type = nil
|
86
87
|
if (match = possible_assoc_abbr.match(/_of_([^_]+?)_type$/))
|
87
88
|
assoc_name = @context.klass.ransackable_assoc_name_for(match.pre_match)
|
88
89
|
class_type = RansackAbbreviator.assoc_name_for(match.captures.first).camelize
|
@@ -91,7 +92,8 @@ module RansackAbbreviator
|
|
91
92
|
end
|
92
93
|
|
93
94
|
def extract_possible_assoc_and_attribute_abbr(s)
|
94
|
-
possible_assoc =
|
95
|
+
possible_assoc = nil
|
96
|
+
possible_attr_name = nil
|
95
97
|
if s.include?(".")
|
96
98
|
parts = s.split(".")
|
97
99
|
possible_assoc = parts[0]
|
@@ -3,7 +3,8 @@ require "pathname"
|
|
3
3
|
module RansackAbbreviator
|
4
4
|
module Configuration
|
5
5
|
mattr_accessor :column_abbreviations, :assoc_abbreviations
|
6
|
-
self.column_abbreviations =
|
6
|
+
self.column_abbreviations = {}
|
7
|
+
self.assoc_abbreviations = {}
|
7
8
|
|
8
9
|
def configure
|
9
10
|
yield self
|
@@ -15,7 +15,7 @@ module RansackAbbreviator
|
|
15
15
|
|
16
16
|
RansackAbbreviator.column_abbreviations.should have_key('tag_id')
|
17
17
|
RansackAbbreviator.column_abbreviation_for(:tag_id).should eq 'tid'
|
18
|
-
RansackAbbreviator.
|
18
|
+
RansackAbbreviator.column_name_for('tid').should eq 'tag_id'
|
19
19
|
end
|
20
20
|
|
21
21
|
it "adds association abbreviations" do
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RansackAbbreviator
|
4
|
+
module Abbreviators
|
5
|
+
describe Decoder do
|
6
|
+
describe '#decode_parameter' do
|
7
|
+
context "a lookup of a defined column abbr" do
|
8
|
+
it "returns the full column name" do
|
9
|
+
search = Ransack::Search.new(Person)
|
10
|
+
search.context.decode_parameter("nm_eq").should == "name_eq"
|
11
|
+
search.context.decode_parameter("mn_eq").should == "middle_name_eq"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "a lookup of an undefined column" do
|
16
|
+
it "returns the full column name" do
|
17
|
+
search = Ransack::Search.new(Person)
|
18
|
+
search.context.decode_parameter(:salary_eq).should == "salary_eq"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "a lookup of a defined association abbr" do
|
23
|
+
context "a lookup of a defined column abbr" do
|
24
|
+
it "returns the full assoc & column pair" do
|
25
|
+
search = Ransack::Search.new(Article)
|
26
|
+
search.context.decode_parameter("pr.nm_eq").should == "person_name_eq"
|
27
|
+
search.context.decode_parameter("pr.mn_eq").should == "person_middle_name_eq"
|
28
|
+
search = Ransack::Search.new(Person)
|
29
|
+
search.context.decode_parameter("a_ac.vc_lteq").should == "authored_article_comments_vote_count_lteq"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "a lookup of a column without an abbr" do
|
34
|
+
it "returns the table and full column" do
|
35
|
+
search = Ransack::Search.new(Article)
|
36
|
+
search.context.decode_parameter("pr.salary_eq").should == "person_salary_eq"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "a lookup of an association without an abbr" do
|
42
|
+
context "a lookup of a column with an abbr" do
|
43
|
+
it "returns the full association and full column" do
|
44
|
+
search = Ransack::Search.new(Person)
|
45
|
+
search.context.decode_parameter("articles.tl_cont").should == "articles_title_cont"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "a lookup of a column without an abbr" do
|
50
|
+
it "returns a full association & column pair" do
|
51
|
+
search = Ransack::Search.new(Person)
|
52
|
+
search.context.decode_parameter("articles.body_cont").should == "articles_body_cont"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "a lookup of a multi-condition string" do
|
58
|
+
it "returns full forms for all conditions" do
|
59
|
+
search = Ransack::Search.new(Person)
|
60
|
+
search.context.decode_parameter("ch.nm_or_ch.salary_eq").should == "children_name_or_children_salary_eq"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "a lookup of an abbreviated polymorphic belongs_to association" do
|
65
|
+
it "returns the full name for the polymorphic association" do
|
66
|
+
search = Ransack::Search.new(Note)
|
67
|
+
search.context.decode_parameter("nbl_of_pr_type.nm_eq").should == "notable_of_Person_type_name_eq"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "a lookup of a nested condition" do
|
72
|
+
it "returns the full name for each association and column" do
|
73
|
+
search = Ransack::Search.new(Person)
|
74
|
+
search.context.decode_parameter("articles_cm.body_cont").should == "articles_comments_body_cont"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "returns the full name for nested conditions for polymorphic associations" do
|
78
|
+
search = Ransack::Search.new(Note)
|
79
|
+
search.context.decode_parameter("nbl_of_pr_type_ch.nm_eq").should == "notable_of_Person_type_children_name_eq"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "a lookup of something totally random" do
|
84
|
+
it "does absolutely nothing" do
|
85
|
+
search = Ransack::Search.new(Note)
|
86
|
+
search.context.decode_parameter("i_am_garbage").should == "i_am_garbage"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module RansackAbbreviator
|
4
|
+
module Abbreviators
|
5
|
+
describe Encoder do
|
6
|
+
describe '#encode_parameter' do
|
7
|
+
context "a lookup of a defined column" do
|
8
|
+
it "returns an abbreviated column name" do
|
9
|
+
search = Ransack::Search.new(Person)
|
10
|
+
search.context.encode_parameter(:name_eq).should == "nm_eq"
|
11
|
+
search.context.encode_parameter(:middle_name_eq).should == "mn_eq"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "a lookup of an undefined column" do
|
16
|
+
it "returns the full column name" do
|
17
|
+
search = Ransack::Search.new(Person)
|
18
|
+
search.context.encode_parameter(:salary_eq).should == "salary_eq"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "a lookup of a defined association" do
|
23
|
+
context "a lookup of a defined column" do
|
24
|
+
it "returns an abbreviated assoc & column pair" do
|
25
|
+
search = Ransack::Search.new(Article)
|
26
|
+
search.context.encode_parameter(:person_name_eq).should == "pr.nm_eq"
|
27
|
+
search.context.encode_parameter(:person_middle_name_eq).should == "pr.mn_eq"
|
28
|
+
search = Ransack::Search.new(Person)
|
29
|
+
search.context.encode_parameter(:authored_article_comments_vote_count_lteq).should == "a_ac.vc_lteq"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "a lookup of an undefined column" do
|
34
|
+
it "returns an abbreviated table but full column" do
|
35
|
+
search = Ransack::Search.new(Article)
|
36
|
+
search.context.encode_parameter(:person_salary_eq).should == "pr.salary_eq"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "a lookup of an undefined association" do
|
42
|
+
context "a lookup of a defined column" do
|
43
|
+
it "returns the full association but abbreviated column" do
|
44
|
+
search = Ransack::Search.new(Person)
|
45
|
+
search.context.encode_parameter(:articles_title_cont).should == "articles.tl_cont"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "a lookup of an undefined column" do
|
50
|
+
it "returns a full association & column pair" do
|
51
|
+
search = Ransack::Search.new(Person)
|
52
|
+
search.context.encode_parameter(:articles_body_cont).should == "articles.body_cont"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "a lookup of a multi-condition string" do
|
58
|
+
it "returns abbreviated forms for all conditions" do
|
59
|
+
search = Ransack::Search.new(Person)
|
60
|
+
search.context.encode_parameter(:children_name_or_children_salary_eq).should == "ch.nm_or_ch.salary_eq"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "a lookup of a defined polymorphic belongs_to association" do
|
65
|
+
it "returns the abbreviated name for the polymorphic association" do
|
66
|
+
search = Ransack::Search.new(Note)
|
67
|
+
search.context.encode_parameter(:notable_of_Person_type_name_eq).should == "nbl_of_pr_type.nm_eq"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "a lookup of a nested condition" do
|
72
|
+
it "abbreviates each association and column" do
|
73
|
+
search = Ransack::Search.new(Person)
|
74
|
+
search.context.encode_parameter(:articles_comments_body_cont).should == "articles_cm.body_cont"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "abbreviates nested conditions for polymorphic associations" do
|
78
|
+
search = Ransack::Search.new(Note)
|
79
|
+
search.context.encode_parameter(:notable_of_Person_type_children_name_eq).should == "nbl_of_pr_type_ch.nm_eq"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "a lookup of something totally random" do
|
84
|
+
it "does absolutely nothing" do
|
85
|
+
search = Ransack::Search.new(Note)
|
86
|
+
search.context.encode_parameter(:i_am_garbage).should == "i_am_garbage"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -6,7 +6,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
6
6
|
context "with abbreviations" do
|
7
7
|
it 'creates Conditions for top-level attributes' do
|
8
8
|
search = Search.new(Person)
|
9
|
-
search.build(
|
9
|
+
search.build(search.context.encode_parameter(:name_eq) => 'Ernie')
|
10
10
|
condition = search.base[:name_eq]
|
11
11
|
condition.should be_a Nodes::Condition
|
12
12
|
condition.predicate.name.should eq 'eq'
|
@@ -16,7 +16,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
16
16
|
|
17
17
|
it 'creates Conditions for association attributes' do
|
18
18
|
search = Search.new(Person)
|
19
|
-
search.build(
|
19
|
+
search.build(search.context.encode_parameter(:children_name_eq) => 'Ernie')
|
20
20
|
condition = search.base[:children_name_eq]
|
21
21
|
condition.should be_a Nodes::Condition
|
22
22
|
condition.predicate.name.should eq 'eq'
|
@@ -26,7 +26,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
26
26
|
|
27
27
|
it 'creates Conditions for polymorphic belongs_to association attributes' do
|
28
28
|
search = Search.new(Note)
|
29
|
-
search.build(
|
29
|
+
search.build(search.context.encode_parameter(:notable_of_Person_type_name_eq) => 'Ernie')
|
30
30
|
condition = search.base[:notable_of_Person_type_name_eq]
|
31
31
|
condition.should be_a Nodes::Condition
|
32
32
|
condition.predicate.name.should eq 'eq'
|
@@ -36,7 +36,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
36
36
|
|
37
37
|
it 'creates Conditions for multiple polymorphic belongs_to association attributes' do
|
38
38
|
search = Search.new(Note)
|
39
|
-
search.build(
|
39
|
+
search.build(search.context.encode_parameter(:notable_of_Person_type_name_or_notable_of_Article_type_title_eq) => 'Ernie')
|
40
40
|
condition = search.base[:notable_of_Person_type_name_or_notable_of_Article_type_title_eq]
|
41
41
|
condition.should be_a Nodes::Condition
|
42
42
|
condition.predicate.name.should eq 'eq'
|
@@ -47,7 +47,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
47
47
|
|
48
48
|
it 'discards empty conditions' do
|
49
49
|
search = Search.new(Person)
|
50
|
-
search.build(
|
50
|
+
search.build(search.context.encode_parameter(:children_name_eq) => '')
|
51
51
|
condition = search.base[:children_name_eq]
|
52
52
|
condition.should be_nil
|
53
53
|
end
|
@@ -56,8 +56,8 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
56
56
|
search = Search.new(Person)
|
57
57
|
search.build(
|
58
58
|
:g => [
|
59
|
-
|
60
|
-
|
59
|
+
{:m => 'or', search.context.encode_parameter(:name_eq) => 'Ernie', search.context.encode_parameter(:children_name_eq) => 'Ernie'},
|
60
|
+
{:m => 'or', search.context.encode_parameter(:name_eq) => 'Bert', search.context.encode_parameter(:children_name_eq) => 'Bert'}
|
61
61
|
]
|
62
62
|
)
|
63
63
|
ors = search.groupings
|
@@ -73,8 +73,8 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
73
73
|
search = Search.new(Person)
|
74
74
|
search.build(
|
75
75
|
:g => {
|
76
|
-
'0' =>
|
77
|
-
'1' =>
|
76
|
+
'0' => {:m => 'or', search.context.encode_parameter(:name_eq) => 'Ernie', search.context.encode_parameter(:children_name_eq) => 'Ernie'},
|
77
|
+
'1' => {:m => 'or', search.context.encode_parameter(:name_eq) => 'Bert', search.context.encode_parameter(:children_name_eq) => 'Bert'}
|
78
78
|
}
|
79
79
|
)
|
80
80
|
ors = search.groupings
|
@@ -86,19 +86,6 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
86
86
|
or2.combinator.should eq 'or'
|
87
87
|
end
|
88
88
|
|
89
|
-
it 'accepts "attributes" hashes for conditions' do
|
90
|
-
search = Search.new(Person)
|
91
|
-
search.build(
|
92
|
-
:c => {
|
93
|
-
'0' => {:a => ransack_abbreviations_for(search, ['name']), :p => 'eq', :v => ['Ernie']},
|
94
|
-
'1' => {:a => ransack_abbreviations_for(search, ['children_name', 'parent_name']), :p => 'eq', :v => ['Ernie'], :m => 'or'}
|
95
|
-
}
|
96
|
-
)
|
97
|
-
conditions = search.base.conditions
|
98
|
-
conditions.should have(2).items
|
99
|
-
conditions.map {|c| c.class}.should eq [Nodes::Condition, Nodes::Condition]
|
100
|
-
end
|
101
|
-
|
102
89
|
it 'creates Conditions for custom predicates that take arrays' do
|
103
90
|
Ransack.configure do |config|
|
104
91
|
config.add_predicate 'ary_pred',
|
@@ -106,7 +93,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
106
93
|
end
|
107
94
|
|
108
95
|
search = Search.new(Person)
|
109
|
-
search.build(
|
96
|
+
search.build(search.context.encode_parameter(:name_ary_pred) => ['Ernie', 'Bert'])
|
110
97
|
condition = search.base[:name_ary_pred]
|
111
98
|
condition.should be_a Nodes::Condition
|
112
99
|
condition.predicate.name.should eq 'ary_pred'
|
@@ -116,7 +103,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
116
103
|
|
117
104
|
it 'does not evaluate the query on #inspect' do
|
118
105
|
search = Search.new(Person)
|
119
|
-
search.build(
|
106
|
+
search.build(search.context.encode_parameter(:children_id_in) => [1, 2, 3])
|
120
107
|
search.inspect.should_not match /ActiveRecord/
|
121
108
|
end
|
122
109
|
end
|
@@ -235,7 +222,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
235
222
|
context "with abbreviations" do
|
236
223
|
it "evaluates a basic condition" do
|
237
224
|
search = Search.new(Person)
|
238
|
-
search.build(
|
225
|
+
search.build(search.context.encode_parameter(:name_eq) => 'Ernie')
|
239
226
|
search.result.should be_an ActiveRecord::Relation
|
240
227
|
where = search.result.where_values.first
|
241
228
|
where.to_sql.should match /"people"\."name" = 'Ernie'/
|
@@ -243,7 +230,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
243
230
|
|
244
231
|
it 'evaluates conditions contextually' do
|
245
232
|
search = Search.new(Person)
|
246
|
-
search.build(
|
233
|
+
search.build(search.context.encode_parameter(:children_name_eq) => 'Ernie')
|
247
234
|
search.result.should be_an ActiveRecord::Relation
|
248
235
|
where = search.result.where_values.first
|
249
236
|
where.to_sql.should match /"children_people"\."name" = 'Ernie'/
|
@@ -251,12 +238,12 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
251
238
|
|
252
239
|
it 'evaluates polymorphic belongs_to association conditions contextually' do
|
253
240
|
search = Search.new(Note)
|
254
|
-
search.build(
|
241
|
+
search.build(search.context.encode_parameter(:notable_of_Person_type_name_eq) => 'Ernie')
|
255
242
|
search.result.should be_an ActiveRecord::Relation
|
256
243
|
where = search.result.where_values.first
|
257
244
|
where.to_sql.should match /"people"."name" = 'Ernie'/
|
258
245
|
|
259
|
-
search.build(
|
246
|
+
search.build(search.context.encode_parameter(:notable_of_Article_type_title_eq) => 'Test')
|
260
247
|
search.result.should be_an ActiveRecord::Relation
|
261
248
|
where = search.result.where_values.first
|
262
249
|
where.to_sql.should match /"articles"."title" = 'Test'/
|
@@ -265,9 +252,9 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
265
252
|
it 'evaluates nested conditions' do
|
266
253
|
search = Search.new(Person)
|
267
254
|
search.build(
|
268
|
-
|
255
|
+
search.context.encode_parameter(:children_name_eq) => 'Ernie',
|
269
256
|
:g => [
|
270
|
-
|
257
|
+
{:m => 'or', search.context.encode_parameter(:name_eq) => 'Ernie', search.context.encode_parameter(:children_children_name_eq) => 'Ernie'}
|
271
258
|
]
|
272
259
|
)
|
273
260
|
search.result.should be_an ActiveRecord::Relation
|
@@ -281,8 +268,8 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
281
268
|
search = Search.new(Person)
|
282
269
|
search.build(
|
283
270
|
:g => [
|
284
|
-
|
285
|
-
|
271
|
+
{:m => 'or', search.context.encode_parameter(:name_eq) => 'Ernie', search.context.encode_parameter(:children_name_eq) => 'Ernie'},
|
272
|
+
{:m => 'or', search.context.encode_parameter(:name_eq) => 'Bert', search.context.encode_parameter(:children_name_eq) => 'Bert'}
|
286
273
|
]
|
287
274
|
)
|
288
275
|
search.result.should be_an ActiveRecord::Relation
|
@@ -298,7 +285,7 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
298
285
|
it 'returns distinct records when passed :distinct => true' do
|
299
286
|
search = Search.new(Person)
|
300
287
|
search.build(
|
301
|
-
:g => [
|
288
|
+
:g => [{:m => 'or', search.context.encode_parameter(:comments_body_cont) => 'e', search.context.encode_parameter(:articles_comments_body_cont) => 'e'}]
|
302
289
|
)
|
303
290
|
search.result.all.should have(920).items
|
304
291
|
search.result(:distinct => true).should have(330).items
|
@@ -372,12 +359,12 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
372
359
|
# Just some random sanity checks
|
373
360
|
search = Search.new(Person, :authored_article_comments_vote_count_lteq => 10)
|
374
361
|
abbr_search = Search.new(Person)
|
375
|
-
abbr_search.build(
|
362
|
+
abbr_search.build(abbr_search.context.encode_parameter(:authored_article_comments_vote_count_lteq) => 10)
|
376
363
|
search.result.where_values.first.to_sql.should eq abbr_search.result.where_values.first.to_sql
|
377
364
|
|
378
365
|
search = Search.new(Note, :notable_of_Person_type_children_name_eq => "Ernie")
|
379
366
|
abbr_search = Search.new(Note)
|
380
|
-
abbr_search.build(
|
367
|
+
abbr_search.build(abbr_search.context.encode_parameter(:notable_of_Person_type_children_name_eq) => "Ernie")
|
381
368
|
search.result.where_values.first.to_sql.should eq abbr_search.result.where_values.first.to_sql
|
382
369
|
end
|
383
370
|
end
|
@@ -389,16 +376,16 @@ module Ransack # We're testing Ransack's Search wih abbreviations
|
|
389
376
|
end
|
390
377
|
|
391
378
|
it 'sets condition attributes' do
|
392
|
-
abbr_search =
|
379
|
+
abbr_search = @search.context.encode_parameter(:middle_name_eq)
|
393
380
|
@search.send "#{abbr_search}=", 'Ernie'
|
394
381
|
@search.middle_name_eq.should eq 'Ernie'
|
395
382
|
|
396
|
-
abbr_search =
|
383
|
+
abbr_search = @search.context.encode_parameter(:authored_article_comments_vote_count_lteq)
|
397
384
|
@search.send "#{abbr_search}=", 10
|
398
385
|
@search.authored_article_comments_vote_count_lteq.should eq 10
|
399
386
|
|
400
387
|
note_search = Search.new(Note)
|
401
|
-
abbr_search =
|
388
|
+
abbr_search = note_search.context.encode_parameter(:notable_of_Person_type_name_eq)
|
402
389
|
note_search.send "#{abbr_search}=", 'Ernie'
|
403
390
|
note_search.notable_of_Person_type_name_eq.should eq 'Ernie'
|
404
391
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -20,8 +20,6 @@ Sham.define do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
RSpec.configure do |config|
|
23
|
-
config.include RansackAbbreviator::ViewHelpers
|
24
|
-
|
25
23
|
config.before(:suite) do
|
26
24
|
puts '=' * 80
|
27
25
|
puts "Running specs against ActiveRecord #{ActiveRecord::VERSION::STRING} and ARel #{Arel::VERSION}..."
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ransack_abbreviator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jamie Davidson
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2013-02-
|
13
|
+
date: 2013-02-14 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: ransack
|
@@ -108,7 +108,6 @@ files:
|
|
108
108
|
- lib/ransack_abbreviator/ransack_extensions/nodes/condition.rb
|
109
109
|
- lib/ransack_abbreviator/ransack_extensions/search.rb
|
110
110
|
- lib/ransack_abbreviator/version.rb
|
111
|
-
- lib/ransack_abbreviator/view_helpers.rb
|
112
111
|
- ransack_abbreviator.gemspec
|
113
112
|
- spec/blueprints/articles.rb
|
114
113
|
- spec/blueprints/comments.rb
|
@@ -117,7 +116,8 @@ files:
|
|
117
116
|
- spec/blueprints/tags.rb
|
118
117
|
- spec/ransack_abbreviator/adapters/active_record/base_spec.rb
|
119
118
|
- spec/ransack_abbreviator/configuration_spec.rb
|
120
|
-
- spec/ransack_abbreviator/
|
119
|
+
- spec/ransack_abbreviator/decoder_spec.rb
|
120
|
+
- spec/ransack_abbreviator/encoder_spec.rb
|
121
121
|
- spec/ransack_abbreviator/helpers/form_builder_spec.rb
|
122
122
|
- spec/ransack_abbreviator/search_spec.rb
|
123
123
|
- spec/spec_helper.rb
|
@@ -157,7 +157,8 @@ test_files:
|
|
157
157
|
- spec/blueprints/tags.rb
|
158
158
|
- spec/ransack_abbreviator/adapters/active_record/base_spec.rb
|
159
159
|
- spec/ransack_abbreviator/configuration_spec.rb
|
160
|
-
- spec/ransack_abbreviator/
|
160
|
+
- spec/ransack_abbreviator/decoder_spec.rb
|
161
|
+
- spec/ransack_abbreviator/encoder_spec.rb
|
161
162
|
- spec/ransack_abbreviator/helpers/form_builder_spec.rb
|
162
163
|
- spec/ransack_abbreviator/search_spec.rb
|
163
164
|
- spec/spec_helper.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module RansackAbbreviator
|
2
|
-
module ViewHelpers
|
3
|
-
def ransack_abbreviation_for(ransack_search_object, param)
|
4
|
-
ransack_search_object.context.encode_parameter(param)
|
5
|
-
end
|
6
|
-
|
7
|
-
def ransack_abbreviations_for(ransack_search_object, params)
|
8
|
-
new_params = nil
|
9
|
-
|
10
|
-
case params
|
11
|
-
when Hash
|
12
|
-
new_params = {}
|
13
|
-
params.each do |ransack_name, value|
|
14
|
-
new_params[ransack_abbreviation_for(ransack_search_object, ransack_name)] = value
|
15
|
-
end
|
16
|
-
when Array
|
17
|
-
new_params = []
|
18
|
-
params.each do |ransack_name|
|
19
|
-
new_params << ransack_abbreviation_for(ransack_search_object, ransack_name)
|
20
|
-
end
|
21
|
-
else
|
22
|
-
raise ArgumentError, "don't know how to interpret abbreviations for #{params}"
|
23
|
-
end
|
24
|
-
|
25
|
-
new_params
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
ActionView::Base.send :include, RansackAbbreviator::ViewHelpers
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module RansackAbbreviator
|
4
|
-
module ViewHelpers
|
5
|
-
describe "#ransack_abbreviation_for" do
|
6
|
-
context "a lookup of a defined column" do
|
7
|
-
it "returns an abbreviated column name" do
|
8
|
-
search = Ransack::Search.new(Person)
|
9
|
-
ransack_abbreviation_for(search, :name_eq).should == "nm_eq"
|
10
|
-
ransack_abbreviation_for(search, :middle_name_eq).should == "mn_eq"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "a lookup of an undefined column" do
|
15
|
-
it "returns the full column name" do
|
16
|
-
search = Ransack::Search.new(Person)
|
17
|
-
ransack_abbreviation_for(search, :salary_eq).should == "salary_eq"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context "a lookup of a defined association" do
|
22
|
-
context "a lookup of a defined column" do
|
23
|
-
it "returns an abbreviated assoc & column pair" do
|
24
|
-
search = Ransack::Search.new(Article)
|
25
|
-
ransack_abbreviation_for(search, :person_name_eq).should == "pr.nm_eq"
|
26
|
-
ransack_abbreviation_for(search, :person_middle_name_eq).should == "pr.mn_eq"
|
27
|
-
search = Ransack::Search.new(Person)
|
28
|
-
ransack_abbreviation_for(search, :authored_article_comments_vote_count_lteq).should == "a_ac.vc_lteq"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "a lookup of an undefined column" do
|
33
|
-
it "returns an abbreviated table but full column" do
|
34
|
-
search = Ransack::Search.new(Article)
|
35
|
-
ransack_abbreviation_for(search, :person_salary_eq).should == "pr.salary_eq"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "a lookup of an undefined association" do
|
41
|
-
context "a lookup of a defined column" do
|
42
|
-
it "returns the full association but abbreviated column" do
|
43
|
-
search = Ransack::Search.new(Person)
|
44
|
-
ransack_abbreviation_for(search, :articles_title_cont).should == "articles.tl_cont"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "a lookup of an undefined column" do
|
49
|
-
it "returns a full association & column pair" do
|
50
|
-
search = Ransack::Search.new(Person)
|
51
|
-
ransack_abbreviation_for(search, :articles_body_cont).should == "articles.body_cont"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context "a lookup of a multi-condition string" do
|
57
|
-
it "returns abbreviated forms for all conditions" do
|
58
|
-
search = Ransack::Search.new(Person)
|
59
|
-
ransack_abbreviation_for(search, :children_name_or_children_salary_eq).should == "ch.nm_or_ch.salary_eq"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "a lookup of a defined polymorphic belongs_to association" do
|
64
|
-
it "returns the abbreviated name for the polymorphic association" do
|
65
|
-
search = Ransack::Search.new(Note)
|
66
|
-
ransack_abbreviation_for(search, :notable_of_Person_type_name_eq).should == "nbl_of_pr_type.nm_eq"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
context "a lookup of a nested condition" do
|
71
|
-
it "abbreviates each association and column" do
|
72
|
-
search = Ransack::Search.new(Person)
|
73
|
-
ransack_abbreviation_for(search, :articles_comments_body_cont).should == "articles_cm.body_cont"
|
74
|
-
end
|
75
|
-
|
76
|
-
it "abbreviates nested conditions for polymorphic associations" do
|
77
|
-
search = Ransack::Search.new(Note)
|
78
|
-
ransack_abbreviation_for(search, :notable_of_Person_type_children_name_eq).should == "nbl_of_pr_type_ch.nm_eq"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context "a lookup of something totally random" do
|
83
|
-
it "does absolutely nothing" do
|
84
|
-
search = Ransack::Search.new(Note)
|
85
|
-
ransack_abbreviation_for(search, :i_am_garbage).should == "i_am_garbage"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|