mongoid_query_string_interface 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid_query_string_interface (0.4.0)
4
+ mongoid_query_string_interface (0.4.1)
5
5
  json (>= 1.4.6)
6
6
  mongoid (~> 2.0.0.rc)
7
7
 
@@ -9,6 +9,16 @@ module Mongoid
9
9
  hash = hash_with_indifferent_access(hash_with_attributes_to_replace)
10
10
  hash.has_key?(attribute) ? hash[attribute] : attribute
11
11
  end
12
+
13
+ def replaced_attribute_name(attribute, hash_with_attributes_to_replace)
14
+ attribute = replace_attribute(attribute, hash_with_attributes_to_replace)
15
+ attribute.is_a?(Hash) ? attribute[:to] : attribute
16
+ end
17
+
18
+ def replaced_attribute_value(attribute, value, hash_with_attributes_to_replace, raw_params)
19
+ attribute = replace_attribute(attribute, hash_with_attributes_to_replace)
20
+ attribute.is_a?(Hash) ? attribute[:convert_value_to].call(value, raw_params) : value
21
+ end
12
22
  end
13
23
  end
14
24
  end
@@ -22,14 +22,15 @@ module Mongoid
22
22
  Mongoid::QueryStringInterface::Parsers::BooleanAndNilParser.new
23
23
  ]
24
24
 
25
- def initialize(raw_attribute, raw_value, attributes_to_replace={})
25
+ def initialize(raw_attribute, raw_value, attributes_to_replace={}, raw_params={})
26
26
  @raw_attribute = raw_attribute
27
27
  @raw_value = raw_value
28
28
  @attributes_to_replace = attributes_to_replace
29
+ @raw_params = raw_params
29
30
  end
30
31
 
31
32
  def attribute
32
- @attribute ||= replace_attribute(parsed_attribute, @attributes_to_replace).to_s
33
+ @attribute ||= replaced_attribute_name(parsed_attribute, @attributes_to_replace).to_s
33
34
  end
34
35
 
35
36
  def value
@@ -90,10 +91,10 @@ module Mongoid
90
91
  if or_attribute?
91
92
  parsed_json_value
92
93
  else
93
- { operator => parsed_value }
94
+ { operator => replaced_attribute_value(parsed_attribute, parsed_value, @attributes_to_replace, @raw_params) }
94
95
  end
95
96
  else
96
- parsed_value
97
+ replaced_attribute_value(parsed_attribute, parsed_value, @attributes_to_replace, @raw_params)
97
98
  end
98
99
  end
99
100
 
@@ -123,7 +124,7 @@ module Mongoid
123
124
  raise "$or query filters must be given as an array of hashes" unless valid_or_filters?(raw_or_data)
124
125
 
125
126
  raw_or_data.map do |filters|
126
- FiltersParser.new(filters, {}, @attributes_to_replace)
127
+ FiltersParser.new(filters, {}, @attributes_to_replace, @raw_params)
127
128
  end
128
129
  end
129
130
 
@@ -146,6 +147,7 @@ module Mongoid
146
147
  "$#{$1}"
147
148
  end
148
149
  end
150
+
149
151
  end
150
152
  end
151
153
  end
@@ -2,21 +2,29 @@ module Mongoid
2
2
  module QueryStringInterface
3
3
  module Parsers
4
4
  class FiltersParser
5
+ include Mongoid::QueryStringInterface::Helpers
6
+
5
7
  attr_reader :filters, :default_filters
6
8
 
7
- def initialize(filters, default_filters={}, attributes_to_replace={})
9
+ def initialize(filters, default_filters={}, attributes_to_replace={}, raw_filters=nil)
8
10
  @filters = filters.with_indifferent_access
9
11
  @default_filters = default_filters.with_indifferent_access
10
12
  @attributes_to_replace = attributes_to_replace.with_indifferent_access
13
+ @raw_filters = raw_filters.nil? ? @filters : raw_filters.with_indifferent_access
11
14
  end
12
15
 
13
16
  def parse
14
- default_filters.merge(parsed_filters)
17
+ result = default_filters.inject({}) do |result, item|
18
+ raw_attribute, raw_value = item
19
+ result[replaced_attribute_name(raw_attribute, @attributes_to_replace).to_s] = replaced_attribute_value(raw_attribute, raw_value, @attributes_to_replace, @raw_filters)
20
+ result
21
+ end
22
+ result.merge(parsed_filters)
15
23
  end
16
24
 
17
25
  def filter_parsers
18
26
  @filter_parsers ||= filters.map do |raw_attribute, raw_value|
19
- FilterParser.new(raw_attribute, raw_value, @attributes_to_replace)
27
+ FilterParser.new(raw_attribute, raw_value, @attributes_to_replace, @raw_filters)
20
28
  end
21
29
  end
22
30
 
@@ -89,7 +89,7 @@ module Mongoid
89
89
  end
90
90
 
91
91
  def sorting_options(options)
92
- parse_order_by(options) || default_sorting_options
92
+ parse_order_by(options) || default_sorting_options.map { |field| sorting_operator_for(field) }
93
93
  end
94
94
 
95
95
  def only_filtering(options)
@@ -105,7 +105,9 @@ module Mongoid
105
105
  end
106
106
 
107
107
  def sorting_operator_for(field)
108
- if match = field.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
108
+ if field.is_a?(Mongoid::Criterion::Complex)
109
+ replace_attribute(field.key, sorting_attributes_to_replace).to_sym.send(field.operator)
110
+ elsif match = field.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
109
111
  replace_attribute(match[1], sorting_attributes_to_replace).to_sym.send(match[2])
110
112
  else
111
113
  replace_attribute(field, sorting_attributes_to_replace).to_sym.asc
data/lib/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid #:nodoc
3
3
  module QueryStringInterface #:nodoc
4
- VERSION = "0.4.0"
4
+ VERSION = "0.4.1"
5
5
  end
6
6
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 0
9
- version: 0.4.0
8
+ - 1
9
+ version: 0.4.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Vicente Mundim
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-06-04 00:00:00 -03:00
17
+ date: 2011-06-07 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency