ransack_abbreviator 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ## Ransack Abbreviator [![Build Status](https://secure.travis-ci.org/jhdavids8/ransack-abbreviator.png)](http://travis-ci.org/jhdavids8/ransack-abbreviator)
1
+ ## Ransack Abbreviator [![Build Status](https://travis-ci.org/jhdavids8/ransack-abbreviator.png?branch=master)](http://travis-ci.org/jhdavids8/ransack-abbreviator)
2
2
  ===================
3
3
 
4
4
 
@@ -8,7 +8,7 @@ module RansackAbbreviator
8
8
  end
9
9
 
10
10
  def decode_parameter(param)
11
- str = param.dup
11
+ str = param.is_a?(Symbol) ? param.to_s : param.dup
12
12
  pred = Ransack::Predicate.detect_and_strip_from_string!(str)
13
13
  decoded_param = nil
14
14
  case str
@@ -18,7 +18,7 @@ module RansackAbbreviator
18
18
  conjunctions = str.split("_").select{|s| s == "and" || s == "or" }
19
19
  decoded_param = ""
20
20
  str.split(/_and_|_or_/).each do |possible_abbr|
21
- decoded_str = self.context.decode_possible_abbr(possible_abbr)
21
+ decoded_str = self.context.decode_association_and_column(possible_abbr)
22
22
  decoded_param << (!decoded_str.blank? ? decoded_str : possible_abbr)
23
23
  decoded_param << "_#{conjunctions.shift}_" if !conjunctions.blank?
24
24
  end
@@ -28,15 +28,15 @@ module RansackAbbreviator
28
28
  decoded_param
29
29
  end
30
30
 
31
- def decode_possible_abbr(possible_abbr)
31
+ def decode_association_and_column(possible_abbr)
32
32
  possible_assoc_abbr, possible_attr_abbr = extract_possible_assoc_and_attribute_abbr(possible_abbr)
33
33
  parent_of_attribute = @context.klass
34
34
  decoded_str = ""
35
35
  if possible_assoc_abbr
36
- decoded_str, parent_of_attribute = decode_assoc_abbr(possible_assoc_abbr)
36
+ decoded_str, parent_of_attribute = decode_association(possible_assoc_abbr)
37
37
  end
38
38
 
39
- if attr_name = decode_column_abbr(possible_attr_abbr, parent_of_attribute)
39
+ if attr_name = decode_attribute(possible_attr_abbr, parent_of_attribute)
40
40
  decoded_str << attr_name
41
41
  else
42
42
  decoded_str << possible_attr_abbr
@@ -45,7 +45,7 @@ module RansackAbbreviator
45
45
  decoded_str
46
46
  end
47
47
 
48
- def decode_assoc_abbr(possible_assoc_abbr)
48
+ def decode_association(possible_assoc_abbr)
49
49
  # possible_assoc_abbr can be a chain of abbreviated associations, so decode them all and reconstruct into
50
50
  # the format expected by Ransack
51
51
  decoded_str = ""
@@ -75,7 +75,7 @@ module RansackAbbreviator
75
75
  [decoded_str, klass]
76
76
  end
77
77
 
78
- def decode_column_abbr(possible_attr_abbr, klass=@context.klass)
78
+ def decode_attribute(possible_attr_abbr, klass=@context.klass)
79
79
  klass.ransackable_column_name_for(possible_attr_abbr)
80
80
  end
81
81
 
@@ -7,7 +7,21 @@ module RansackAbbreviator
7
7
  @context = context
8
8
  end
9
9
 
10
- def encode_ransack_str(str)
10
+ def encode_parameter(param)
11
+ str = param.is_a?(Symbol) ? param.to_s : param.dup
12
+ pred = Ransack::Predicate.detect_and_strip_from_string!(str)
13
+ encoded_param = ""
14
+ conjunctions = str.split("_").select{|s| s == "and" || s == "or" }
15
+ str.split(/_and_|_or_/).each do |s|
16
+ encoded_param << self.context.encode_association_and_column(s)
17
+ encoded_param << "_#{conjunctions.shift}_" if !conjunctions.blank?
18
+ end
19
+
20
+ encoded_param << "_#{pred}" if pred
21
+ encoded_param
22
+ end
23
+
24
+ def encode_association_and_column(str)
11
25
  encoded_str = ""
12
26
  associations, attr_name = @context.get_associations_and_attribute(str)
13
27
  parent_of_attribute = @context.klass
@@ -9,6 +9,26 @@ module RansackAbbreviator
9
9
  yield self
10
10
  end
11
11
 
12
+ def column_abbreviations=(abbreviations)
13
+ if abbreviations
14
+ if !(abbreviations.values & RansackAbbreviator::Constants::RESERVED_KEYWORDS).blank?
15
+ fail "You used a reserved keyword as a column abbreviation. Reserverd keywords: #{RansackAbbreviator::Constants::RESERVED_KEYWORDS.join(", ")}"
16
+ end
17
+
18
+ self.column_abbreviations = abbreviations
19
+ end
20
+ end
21
+
22
+ def assoc_abbreviations=(abbreviations)
23
+ if abbreviations
24
+ if !(abbreviations.values & RansackAbbreviator::Constants::RESERVED_KEYWORDS).blank?
25
+ fail "You used a reserved keyword as an association abbreviation. Reserverd keywords: #{RansackAbbreviator::Constants::RESERVED_KEYWORDS.join(", ")}"
26
+ end
27
+
28
+ self.assoc_abbreviations = abbreviations
29
+ end
30
+ end
31
+
12
32
  def add_column_abbreviation(column, abbr)
13
33
  self.column_abbreviations[column.to_s] = abbr.to_s
14
34
  end
@@ -4,11 +4,9 @@ require 'ransack_abbreviator/abbreviators/encoder'
4
4
  module Ransack
5
5
  class Context
6
6
  attr_reader :decoder, :encoder
7
- alias_method :full_ransackable_attribute?, :ransackable_attribute?
8
- alias_method :full_ransackable_association?, :ransackable_association?
9
7
 
10
- delegate :encode_ransack_str, to: :encoder
11
- delegate :decode_parameter, :decode_possible_abbr, to: :decoder
8
+ delegate :encode_parameter, :encode_association_and_column, to: :encoder
9
+ delegate :decode_parameter, :decode_association_and_column, to: :decoder
12
10
 
13
11
  def get_associations_and_attribute(str, klass = @klass, associations = [])
14
12
  attr_name = nil
@@ -37,22 +35,6 @@ module Ransack
37
35
  @encoder ||= RansackAbbreviator::Abbreviators::Encoder.new(self)
38
36
  end
39
37
 
40
- def ransackable_attribute?(str, klass)
41
- full_ransackable_attribute?(str, klass) || ransackable_attribute_abbreviation?(str, klass)
42
- end
43
-
44
- def ransackable_association?(str, klass)
45
- full_ransackable_association?(str, klass) || ransackable_assoc_abbreviation?(str, klass)
46
- end
47
-
48
- def ransackable_attribute_abbreviation?(str, klass)
49
- klass.ransackable_column_abbreviations.has_value?(str)
50
- end
51
-
52
- def ransackable_assoc_abbreviation?(str, klass)
53
- klass.ransackable_assoc_abbreviations.has_value?(str)
54
- end
55
-
56
38
  def self.polymorphic_association_specified?(str)
57
39
  str && str.match(/_of_([^_]+?)_type$/)
58
40
  end
@@ -1,3 +1,3 @@
1
1
  module RansackAbbreviator
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,16 +1,7 @@
1
1
  module RansackAbbreviator
2
2
  module ViewHelpers
3
- def ransack_abbreviation_for(ransack_search_object, ransack_name)
4
- str = ransack_name.is_a?(Symbol) ? ransack_name.to_s : ransack_name.dup
5
- pred = Ransack::Predicate.detect_and_strip_from_string!(str)
6
- conjunctions = str.split("_").select{|s| s == "and" || s == "or" }
7
- abbr_str = ""
8
- str.split(/_and_|_or_/).each do |s|
9
- abbr_str << ransack_search_object.context.encode_ransack_str(s)
10
- abbr_str << "_#{conjunctions.shift}_" if !conjunctions.blank?
11
- end
12
-
13
- pred ? "#{abbr_str}_#{pred}" : abbr_str
3
+ def ransack_abbreviation_for(ransack_search_object, param)
4
+ ransack_search_object.context.encode_parameter(param)
14
5
  end
15
6
 
16
7
  def ransack_abbreviations_for(ransack_search_object, params)
@@ -11,10 +11,6 @@ RansackAbbreviator.configure do |config|
11
11
  if File.exist?(config.config_dir.join("ransack_abbreviator.yml"))
12
12
  parsed_config = OpenStruct.new(YAML.load_file(config.config_dir.join("ransack_abbreviator.yml")))
13
13
  ransack_abbreviations = parsed_config.ransack_abbreviations
14
- if !(ransack_abbreviations["columns"].values & RansackAbbreviator::Constants::RESERVED_KEYWORDS).blank? ||
15
- !(ransack_abbreviations["associations"].values & RansackAbbreviator::Constants::RESERVED_KEYWORDS).blank?
16
- fail "You used a reserved keyword as an abbreviation. Reserverd keywords: #{RansackAbbreviator::Constants::RESERVED_KEYWORDS.join(", ")}"
17
- end
18
14
  config.column_abbreviations = ransack_abbreviations["columns"] if ransack_abbreviations["columns"]
19
15
  config.assoc_abbreviations = ransack_abbreviations["associations"] if ransack_abbreviations["associations"]
20
16
  end
@@ -58,7 +58,13 @@ module RansackAbbreviator
58
58
  end
59
59
  end
60
60
 
61
- context 'when an undefined abbreviation' do
61
+ context 'when a defined association' do
62
+ it "returns the full association name" do
63
+ Person.ransackable_assoc_name_for("articles").should eq "articles"
64
+ end
65
+ end
66
+
67
+ context 'when an undefined abbreviation and association' do
62
68
  it "returns nil" do
63
69
  Person.ransackable_assoc_name_for("you_fake").should be_nil
64
70
  end
@@ -254,6 +254,11 @@ module Ransack # We're testing Ransack's Search wih abbreviations
254
254
  search.result.should be_an ActiveRecord::Relation
255
255
  where = search.result.where_values.first
256
256
  where.to_sql.should match /"people"."name" = 'Ernie'/
257
+
258
+ search.build(ransack_abbreviation_for(search, :notable_of_Article_type_title_eq) => 'Test')
259
+ search.result.should be_an ActiveRecord::Relation
260
+ where = search.result.where_values.first
261
+ where.to_sql.should match /"articles"."title" = 'Test'/
257
262
  end
258
263
 
259
264
  it 'evaluates nested conditions' do
@@ -377,23 +382,35 @@ module Ransack # We're testing Ransack's Search wih abbreviations
377
382
  end
378
383
 
379
384
  describe '#method_missing' do
380
- before do
381
- @search = Search.new(Person)
382
- end
383
-
384
- it 'support abbreviations' do
385
- abbr_search = ransack_abbreviation_for(@search, :middle_name_eq)
386
- @search.send "#{abbr_search}=", 'Ernie'
387
- @search.middle_name_eq.should eq 'Ernie'
385
+ context "when sent valid abbreviations" do
386
+ before do
387
+ @search = Search.new(Person)
388
+ end
389
+
390
+ it 'sets condition attributes' do
391
+ abbr_search = ransack_abbreviation_for(@search, :middle_name_eq)
392
+ @search.send "#{abbr_search}=", 'Ernie'
393
+ @search.middle_name_eq.should eq 'Ernie'
388
394
 
389
- abbr_search = ransack_abbreviation_for(@search, :authored_article_comments_vote_count_lteq)
390
- @search.send "#{abbr_search}=", 10
391
- @search.authored_article_comments_vote_count_lteq.should eq 10
395
+ abbr_search = ransack_abbreviation_for(@search, :authored_article_comments_vote_count_lteq)
396
+ @search.send "#{abbr_search}=", 10
397
+ @search.authored_article_comments_vote_count_lteq.should eq 10
392
398
 
393
- note_search = Search.new(Note)
394
- abbr_search = ransack_abbreviation_for(note_search, :notable_of_Person_type_name_eq)
395
- note_search.send "#{abbr_search}=", 'Ernie'
396
- note_search.notable_of_Person_type_name_eq.should eq 'Ernie'
399
+ note_search = Search.new(Note)
400
+ abbr_search = ransack_abbreviation_for(note_search, :notable_of_Person_type_name_eq)
401
+ note_search.send "#{abbr_search}=", 'Ernie'
402
+ note_search.notable_of_Person_type_name_eq.should eq 'Ernie'
403
+ end
404
+ end
405
+ context 'when sent valid attributes' do
406
+ before do
407
+ @search = Search.new(Person)
408
+ end
409
+
410
+ it 'sets condition attributes' do
411
+ @search.name_eq = 'Ernie'
412
+ @search.name_eq.should eq 'Ernie'
413
+ end
397
414
  end
398
415
 
399
416
  it 'raises NoMethodError when sent an invalid attribute/abreviation' do
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.3
5
+ version: 0.0.4
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-03 00:00:00 Z
13
+ date: 2013-02-04 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ransack