mongoid_query_string_interface 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/mongoid/helpers.rb +14 -0
- data/lib/mongoid/parsers/filter_parser.rb +7 -4
- data/lib/mongoid/parsers/filters_parser.rb +4 -3
- data/lib/mongoid/query_string_interface.rb +18 -15
- data/lib/version.rb +2 -2
- metadata +8 -7
data/Gemfile.lock
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module QueryStringInterface
|
3
|
+
module Helpers
|
4
|
+
def hash_with_indifferent_access(params)
|
5
|
+
params.is_a?(HashWithIndifferentAccess) ? params : params.with_indifferent_access
|
6
|
+
end
|
7
|
+
|
8
|
+
def replace_attribute(attribute, hash_with_attributes_to_replace)
|
9
|
+
hash = hash_with_indifferent_access(hash_with_attributes_to_replace)
|
10
|
+
hash.has_key?(attribute) ? hash[attribute] : attribute
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -10,6 +10,8 @@ module Mongoid
|
|
10
10
|
module QueryStringInterface
|
11
11
|
module Parsers
|
12
12
|
class FilterParser
|
13
|
+
include Mongoid::QueryStringInterface::Helpers
|
14
|
+
|
13
15
|
attr_reader :raw_attribute, :raw_value
|
14
16
|
|
15
17
|
PARSERS = [
|
@@ -20,13 +22,14 @@ module Mongoid
|
|
20
22
|
Mongoid::QueryStringInterface::Parsers::BooleanAndNilParser.new
|
21
23
|
]
|
22
24
|
|
23
|
-
def initialize(raw_attribute, raw_value)
|
25
|
+
def initialize(raw_attribute, raw_value, attributes_to_replace={})
|
24
26
|
@raw_attribute = raw_attribute
|
25
27
|
@raw_value = raw_value
|
28
|
+
@attributes_to_replace = attributes_to_replace
|
26
29
|
end
|
27
30
|
|
28
31
|
def attribute
|
29
|
-
@attribute ||= parsed_attribute
|
32
|
+
@attribute ||= replace_attribute(parsed_attribute, @attributes_to_replace).to_s
|
30
33
|
end
|
31
34
|
|
32
35
|
def value
|
@@ -120,7 +123,7 @@ module Mongoid
|
|
120
123
|
raise "$or query filters must be given as an array of hashes" unless valid_or_filters?(raw_or_data)
|
121
124
|
|
122
125
|
raw_or_data.map do |filters|
|
123
|
-
FiltersParser.new(filters)
|
126
|
+
FiltersParser.new(filters, {}, @attributes_to_replace)
|
124
127
|
end
|
125
128
|
end
|
126
129
|
|
@@ -146,4 +149,4 @@ module Mongoid
|
|
146
149
|
end
|
147
150
|
end
|
148
151
|
end
|
149
|
-
end
|
152
|
+
end
|
@@ -4,9 +4,10 @@ module Mongoid
|
|
4
4
|
class FiltersParser
|
5
5
|
attr_reader :filters, :default_filters
|
6
6
|
|
7
|
-
def initialize(filters, default_filters={})
|
7
|
+
def initialize(filters, default_filters={}, attributes_to_replace={})
|
8
8
|
@filters = filters.with_indifferent_access
|
9
9
|
@default_filters = default_filters.with_indifferent_access
|
10
|
+
@attributes_to_replace = attributes_to_replace.with_indifferent_access
|
10
11
|
end
|
11
12
|
|
12
13
|
def parse
|
@@ -15,7 +16,7 @@ module Mongoid
|
|
15
16
|
|
16
17
|
def filter_parsers
|
17
18
|
@filter_parsers ||= filters.map do |raw_attribute, raw_value|
|
18
|
-
FilterParser.new(raw_attribute, raw_value)
|
19
|
+
FilterParser.new(raw_attribute, raw_value, @attributes_to_replace)
|
19
20
|
end
|
20
21
|
end
|
21
22
|
|
@@ -65,4 +66,4 @@ module Mongoid
|
|
65
66
|
end
|
66
67
|
end
|
67
68
|
end
|
68
|
-
end
|
69
|
+
end
|
@@ -1,8 +1,11 @@
|
|
1
|
+
require File.expand_path(File.join('helpers'), File.dirname(__FILE__))
|
1
2
|
require File.expand_path(File.join('parsers', 'filter_parser'), File.dirname(__FILE__))
|
2
3
|
require File.expand_path(File.join('parsers', 'filters_parser'), File.dirname(__FILE__))
|
3
4
|
|
4
5
|
module Mongoid
|
5
6
|
module QueryStringInterface
|
7
|
+
include Mongoid::QueryStringInterface::Helpers
|
8
|
+
|
6
9
|
NORMAL_CONDITIONAL_OPERATORS = [:exists, :gte, :gt, :lte, :lt, :ne, :size, :near, :within]
|
7
10
|
ARRAY_CONDITIONAL_OPERATORS = [:all, :in, :nin]
|
8
11
|
CONDITIONAL_OPERATORS = ARRAY_CONDITIONAL_OPERATORS + NORMAL_CONDITIONAL_OPERATORS
|
@@ -17,8 +20,9 @@ module Mongoid
|
|
17
20
|
ORDER_BY_PARAMETER = :order_by
|
18
21
|
PAGINATION_PARAMTERS = [:per_page, :page]
|
19
22
|
FRAMEWORK_PARAMETERS = [:controller, :action, :format]
|
20
|
-
|
21
|
-
|
23
|
+
CONTROL_PARAMETERS = [:disable_default_filters]
|
24
|
+
RESERVED_PARAMETERS = FRAMEWORK_PARAMETERS + PAGINATION_PARAMTERS + [ORDER_BY_PARAMETER] + CONTROL_PARAMETERS
|
25
|
+
|
22
26
|
def filter_by(params={})
|
23
27
|
params = hash_with_indifferent_access(params)
|
24
28
|
filter_only_and_order_by(params).paginate(pagination_options(params))
|
@@ -55,10 +59,10 @@ module Mongoid
|
|
55
59
|
|
56
60
|
def paginated_collection_with_filter_by(params={})
|
57
61
|
params = hash_with_indifferent_access(params)
|
58
|
-
|
62
|
+
|
59
63
|
pagination = pagination_options(params)
|
60
64
|
pager = WillPaginate::Collection.new pagination[:page], pagination[:per_page], where(filtering_options(params)).count
|
61
|
-
|
65
|
+
|
62
66
|
PAGER_ATTRIBUTES.inject({}) do |result, attr|
|
63
67
|
result[attr] = pager.send(attr)
|
64
68
|
result
|
@@ -68,31 +72,30 @@ module Mongoid
|
|
68
72
|
def default_filtering_options; {}; end
|
69
73
|
def default_sorting_options; []; end
|
70
74
|
def default_pagination_options; { :per_page => 12, :page => 1 }; end
|
75
|
+
def sorting_attributes_to_replace; {} end
|
76
|
+
def filtering_attributes_to_replace; {} end
|
71
77
|
|
72
78
|
protected
|
73
79
|
def pagination_options(options)
|
74
80
|
hash_with_indifferent_access(default_pagination_options).merge(options)
|
75
81
|
end
|
76
|
-
|
82
|
+
|
77
83
|
def filtering_options(options)
|
78
84
|
Mongoid::QueryStringInterface::Parsers::FiltersParser.new(
|
79
85
|
only_filtering(options),
|
80
|
-
default_filtering_options
|
86
|
+
options.has_key?(:disable_default_filters) ? {} : default_filtering_options,
|
87
|
+
filtering_attributes_to_replace
|
81
88
|
).parse
|
82
89
|
end
|
83
|
-
|
90
|
+
|
84
91
|
def sorting_options(options)
|
85
92
|
parse_order_by(options) || default_sorting_options
|
86
93
|
end
|
87
|
-
|
88
|
-
def hash_with_indifferent_access(params)
|
89
|
-
params.is_a?(HashWithIndifferentAccess) ? params : params.with_indifferent_access
|
90
|
-
end
|
91
|
-
|
94
|
+
|
92
95
|
def only_filtering(options)
|
93
96
|
options.except(*RESERVED_PARAMETERS)
|
94
97
|
end
|
95
|
-
|
98
|
+
|
96
99
|
def parse_order_by(options)
|
97
100
|
if options.has_key?('order_by')
|
98
101
|
options['order_by'].split('|').map do |field|
|
@@ -103,9 +106,9 @@ module Mongoid
|
|
103
106
|
|
104
107
|
def sorting_operator_for(field)
|
105
108
|
if match = field.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
|
106
|
-
match[1].to_sym.send(match[2])
|
109
|
+
replace_attribute(match[1], sorting_attributes_to_replace).to_sym.send(match[2])
|
107
110
|
else
|
108
|
-
field.to_sym.asc
|
111
|
+
replace_attribute(field, sorting_attributes_to_replace).to_sym.asc
|
109
112
|
end
|
110
113
|
end
|
111
114
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
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-
|
17
|
+
date: 2011-06-04 00:00:00 -03:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -88,16 +88,17 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
|
90
90
|
files:
|
91
|
+
- lib/version.rb
|
92
|
+
- lib/mongoid_query_string_interface.rb
|
91
93
|
- lib/mongoid/parsers/array_parser.rb
|
92
|
-
- lib/mongoid/parsers/boolean_and_nil_parser.rb
|
93
94
|
- lib/mongoid/parsers/date_time_parser.rb
|
94
|
-
- lib/mongoid/parsers/filter_parser.rb
|
95
95
|
- lib/mongoid/parsers/filters_parser.rb
|
96
96
|
- lib/mongoid/parsers/number_parser.rb
|
97
|
+
- lib/mongoid/parsers/filter_parser.rb
|
98
|
+
- lib/mongoid/parsers/boolean_and_nil_parser.rb
|
97
99
|
- lib/mongoid/parsers/regex_parser.rb
|
98
100
|
- lib/mongoid/query_string_interface.rb
|
99
|
-
- lib/
|
100
|
-
- lib/version.rb
|
101
|
+
- lib/mongoid/helpers.rb
|
101
102
|
- MIT_LICENSE
|
102
103
|
- README.rdoc
|
103
104
|
- Gemfile
|