mongoid_query_string_interface 0.1.7 → 0.2.0

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/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem "rake", "0.8.7"
6
+ gem 'bson'
7
+ gem 'bson_ext'
8
+
9
+ platforms :mri_18 do
10
+ gem "ruby-debug"
11
+ end
12
+
13
+ platforms :mri_19 do
14
+ gem "ruby-debug19", :require => 'ruby-debug' if RUBY_VERSION < "1.9.3"
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,75 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mongoid_query_string_interface (0.2.0)
5
+ json (>= 1.4.6)
6
+ mongoid (~> 2.0.0.rc)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ activemodel (3.0.3)
12
+ activesupport (= 3.0.3)
13
+ builder (~> 2.1.2)
14
+ i18n (~> 0.4)
15
+ activesupport (3.0.3)
16
+ archive-tar-minitar (0.5.2)
17
+ bson (1.2.0)
18
+ bson_ext (1.2.0)
19
+ builder (2.1.2)
20
+ columnize (0.3.2)
21
+ database_cleaner (0.6.1)
22
+ diff-lcs (1.1.2)
23
+ i18n (0.5.0)
24
+ json (1.4.6)
25
+ linecache (0.43)
26
+ linecache19 (0.5.11)
27
+ ruby_core_source (>= 0.1.4)
28
+ mongo (1.2.0)
29
+ bson (>= 1.2.0)
30
+ mongoid (2.0.0.rc.7)
31
+ activemodel (~> 3.0)
32
+ mongo (~> 1.2)
33
+ tzinfo (~> 0.3.22)
34
+ will_paginate (~> 3.0.pre)
35
+ rake (0.8.7)
36
+ rspec (2.4.0)
37
+ rspec-core (~> 2.4.0)
38
+ rspec-expectations (~> 2.4.0)
39
+ rspec-mocks (~> 2.4.0)
40
+ rspec-core (2.4.0)
41
+ rspec-expectations (2.4.0)
42
+ diff-lcs (~> 1.1.2)
43
+ rspec-mocks (2.4.0)
44
+ ruby-debug (0.10.4)
45
+ columnize (>= 0.1)
46
+ ruby-debug-base (~> 0.10.4.0)
47
+ ruby-debug-base (0.10.4)
48
+ linecache (>= 0.3)
49
+ ruby-debug-base19 (0.11.24)
50
+ columnize (>= 0.3.1)
51
+ linecache19 (>= 0.5.11)
52
+ ruby_core_source (>= 0.1.4)
53
+ ruby-debug19 (0.11.6)
54
+ columnize (>= 0.3.1)
55
+ linecache19 (>= 0.5.11)
56
+ ruby-debug-base19 (>= 0.11.19)
57
+ ruby_core_source (0.1.4)
58
+ archive-tar-minitar (>= 0.5.2)
59
+ tzinfo (0.3.24)
60
+ will_paginate (3.0.pre2)
61
+
62
+ PLATFORMS
63
+ ruby
64
+
65
+ DEPENDENCIES
66
+ bson
67
+ bson_ext
68
+ database_cleaner (>= 0.5.0)
69
+ json (>= 1.4.6)
70
+ mongoid (~> 2.0.0.rc)
71
+ mongoid_query_string_interface!
72
+ rake (= 0.8.7)
73
+ rspec (>= 2.3.0)
74
+ ruby-debug
75
+ ruby-debug19
@@ -0,0 +1,25 @@
1
+ module Mongoid
2
+ module QueryStringInterface
3
+ module Parsers
4
+ class ArrayParser
5
+ ARRAY_SEPARATOR = '|'
6
+ ARRAY_CONDITIONAL_OPERATORS = [:$all, :$in, :$nin]
7
+
8
+ def parseable?(value, operator)
9
+ operator && ARRAY_CONDITIONAL_OPERATORS.include?(operator.to_sym)
10
+ end
11
+
12
+ def parse(value)
13
+ value.split(ARRAY_SEPARATOR).map(&:strip).map do |item|
14
+ regex_parser.parse(item) or item
15
+ end
16
+ end
17
+
18
+ private
19
+ def regex_parser
20
+ @regex_parser ||= RegexParser.new
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ module Mongoid
2
+ module QueryStringInterface
3
+ module Parsers
4
+ class BooleanAndNilParser
5
+ def parseable?(value, operator)
6
+ !value.nil? && !value.empty?
7
+ end
8
+
9
+ def parse(value)
10
+ if boolean?(value)
11
+ value.strip == 'true'
12
+ elsif value.nil? or value.empty? or nil_value?(value)
13
+ nil
14
+ else
15
+ value
16
+ end
17
+ end
18
+
19
+ private
20
+ def boolean?(value)
21
+ value && ['true', 'false'].include?(value.strip)
22
+ end
23
+
24
+ def nil_value?(value)
25
+ value && ['nil', 'null'].include?(value.strip)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ module Mongoid
2
+ module QueryStringInterface
3
+ module Parsers
4
+ class DateTimeParser
5
+ def parseable?(value, operator)
6
+ not parse(value).nil?
7
+ end
8
+
9
+ def parse(value)
10
+ value.to_time and Time.parse(value)
11
+ rescue Exception
12
+ nil
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ module Mongoid
2
+ module QueryStringInterface
3
+ module Parsers
4
+ class NumberParser
5
+ def parseable?(value, operator)
6
+ integer?(value) or float?(value)
7
+ end
8
+
9
+ def parse(value)
10
+ if integer?(value)
11
+ value.to_i
12
+ elsif float?(value)
13
+ value.to_f
14
+ end
15
+ end
16
+
17
+ private
18
+ def integer?(value)
19
+ value =~ /^\d+$/
20
+ end
21
+
22
+ def float?(value)
23
+ value =~ /^(\d+)(\.?\d*)$/
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ module Mongoid
2
+ module QueryStringInterface
3
+ module Parsers
4
+ class RegexParser
5
+ def parseable?(value, operator)
6
+ value =~ /^\/(.*)\/(i|m|x)?$/
7
+ end
8
+
9
+ def parse(value)
10
+ if value =~ /^\/(.*)\/(i|m|x)?$/
11
+ eval($&)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,212 @@
1
+ require File.expand_path(File.join('parsers', 'date_time_parser'), File.dirname(__FILE__))
2
+ require File.expand_path(File.join('parsers', 'number_parser'), File.dirname(__FILE__))
3
+ require File.expand_path(File.join('parsers', 'array_parser'), File.dirname(__FILE__))
4
+ require File.expand_path(File.join('parsers', 'regex_parser'), File.dirname(__FILE__))
5
+ require File.expand_path(File.join('parsers', 'boolean_and_nil_parser'), File.dirname(__FILE__))
6
+
7
+ module Mongoid
8
+ module QueryStringInterface
9
+ CONDITIONAL_OPERATORS = [:all, :exists, :gte, :gt, :in, :lte, :lt, :ne, :nin, :size, :near, :within]
10
+ SORTING_OPERATORS = [:asc, :desc]
11
+ OR_OPERATOR = :or
12
+
13
+ ATTRIBUTE_REGEX = /(.*)\.(#{(CONDITIONAL_OPERATORS + SORTING_OPERATORS + [OR_OPERATOR]).join('|')})/
14
+
15
+ PARSERS = [
16
+ Mongoid::QueryStringInterface::Parsers::DateTimeParser.new,
17
+ Mongoid::QueryStringInterface::Parsers::NumberParser.new,
18
+ Mongoid::QueryStringInterface::Parsers::ArrayParser.new,
19
+ Mongoid::QueryStringInterface::Parsers::RegexParser.new,
20
+ Mongoid::QueryStringInterface::Parsers::BooleanAndNilParser.new
21
+ ]
22
+
23
+ def filter_by(params={})
24
+ params = hash_with_indifferent_access(params)
25
+ filter_only_by(params).order_by(*sorting_options(params)).paginate(pagination_options(params))
26
+ end
27
+
28
+ def filter_only_by(params={})
29
+ where(filtering_options(hash_with_indifferent_access(params)))
30
+ end
31
+
32
+ def paginated_collection_with_filter_by(params={})
33
+ params = hash_with_indifferent_access(params)
34
+
35
+ pagination = pagination_options(params)
36
+ pager = WillPaginate::Collection.new pagination[:page], pagination[:per_page], where(filtering_options(params)).count
37
+
38
+ [:total_entries, :total_pages, :per_page, :offset, :previous_page, :current_page, :next_page].inject({}) do |result, attr|
39
+ result[attr] = pager.send(attr)
40
+ result
41
+ end
42
+ end
43
+
44
+ def default_filtering_options
45
+ {}
46
+ end
47
+
48
+ def default_sorting_options
49
+ []
50
+ end
51
+
52
+ private
53
+ def pagination_options(options)
54
+ options.reverse_merge :per_page => 12, :page => 1
55
+ end
56
+
57
+ def filtering_options(options)
58
+ default_filtering_options.merge(parse_operators(only_filtering(options)))
59
+ end
60
+
61
+ def sorting_options(options)
62
+ options = only_sorting(options)
63
+
64
+ sorting_options = []
65
+ sorting_options.concat(parse_order_by(options))
66
+ sorting_options.concat(parse_sorting(options))
67
+
68
+ sorting_options.empty? ? default_sorting_options : sorting_options
69
+ end
70
+
71
+ def parse_operators(options)
72
+ options.inject({}) do |result, item|
73
+ key, value = item
74
+
75
+ attribute = attribute_from(key)
76
+
77
+ if or_attribute?(attribute)
78
+ parse_or_attribute(attribute, key, value, result)
79
+ else
80
+ parse_normal_attribute(attribute, key, value, result)
81
+ end
82
+ end
83
+ end
84
+
85
+ def parse_or_attribute(attribute, key, value, result)
86
+ result["$or"] = ::JSON.parse(unescape(value)).map do |filters|
87
+ parse_operators(filters)
88
+ end
89
+
90
+ result
91
+ end
92
+
93
+ def parse_normal_attribute(attribute, key, value, result)
94
+ operator = operator_from(key)
95
+ value = parse_value(value, operator)
96
+
97
+ if operator
98
+ filter = { operator => value }
99
+
100
+ if result.has_key?(attribute)
101
+ result[attribute].merge!(filter)
102
+ else
103
+ result[attribute] = filter
104
+ end
105
+ else
106
+ result[attribute] = value
107
+ end
108
+
109
+ result
110
+ end
111
+
112
+ def attribute_from(key)
113
+ if key =~ ATTRIBUTE_REGEX
114
+ $1.to_sym
115
+ else
116
+ key.to_sym
117
+ end
118
+ end
119
+
120
+ def or_attribute?(attribute)
121
+ OR_OPERATOR == attribute
122
+ end
123
+
124
+ def operator_from(key)
125
+ if match = key.match(/.*\.(#{CONDITIONAL_OPERATORS.join('|')})/)
126
+ "$#{match[1]}".to_sym
127
+ end
128
+ end
129
+
130
+ def unescape(value)
131
+ URI.unescape(value)
132
+ end
133
+
134
+ def parse_value(value, operator)
135
+ if value.is_a?(String)
136
+ value = unescape(value)
137
+
138
+ PARSERS.each do |parser|
139
+ return parser.parse(value) if parser.parseable?(value, operator)
140
+ end
141
+
142
+ return nil
143
+ else
144
+ value
145
+ end
146
+ end
147
+
148
+ def hash_with_indifferent_access(params)
149
+ params.is_a?(HashWithIndifferentAccess) ? params : HashWithIndifferentAccess.new(params)
150
+ end
151
+
152
+ def only_filtering(options)
153
+ options.except(*only_sorting(options).keys).except(:per_page, :page, :action, :controller, :format, :order_by)
154
+ end
155
+
156
+ def only_sorting(options)
157
+ options.inject({}) do |result, item|
158
+ key, value = item
159
+ result[key] = value if sorting_parameter?(key, value)
160
+ result
161
+ end
162
+ end
163
+
164
+ def sorting_parameter?(key, value)
165
+ order_by_parameter?(key) or sorting_key_parameter?(key) or sorting_value_parameter?(value)
166
+ end
167
+
168
+ def order_by_parameter?(key)
169
+ key.to_s == 'order_by'
170
+ end
171
+
172
+ def sorting_key_parameter?(key)
173
+ key.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
174
+ end
175
+
176
+ def sorting_value_parameter?(value)
177
+ value.present? && SORTING_OPERATORS.include?(value.to_sym)
178
+ end
179
+
180
+ def parse_order_by(options)
181
+ sorting_options = []
182
+
183
+ if order_by = options.delete('order_by')
184
+ if match = order_by.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
185
+ sorting_options << match[1].to_sym.send(match[2])
186
+ else
187
+ sorting_options << order_by.to_sym.asc
188
+ end
189
+ end
190
+
191
+ sorting_options
192
+ end
193
+
194
+ def parse_sorting(options)
195
+ options.inject([]) do |result, item|
196
+ key, value = item
197
+
198
+ attribute = attribute_from(key)
199
+ sorting_operator = sorting_operator_from(key)
200
+
201
+ result << attribute.send(sorting_operator || value)
202
+ result
203
+ end
204
+ end
205
+
206
+ def sorting_operator_from(key)
207
+ if match = key.match(/.*\.(#{SORTING_OPERATORS.join('|')})/)
208
+ match[1].to_sym
209
+ end
210
+ end
211
+ end
212
+ end
@@ -1,220 +1 @@
1
- module Mongoid
2
- module QueryStringInterface
3
- CONDITIONAL_OPERATORS = [:all, :exists, :gte, :gt, :in, :lte, :lt, :ne, :nin, :size, :near, :within]
4
- ARRAY_CONDITIONAL_OPERATORS = [:all, :in, :nin]
5
- SORTING_OPERATORS = [:asc, :desc]
6
-
7
- def filter_by(params={})
8
- params = hash_with_indifferent_access(params)
9
- filter_only_by(params).order_by(*sorting_options(params)).paginate(pagination_options(params))
10
- end
11
-
12
- def filter_only_by(params={})
13
- where(filtering_options(hash_with_indifferent_access(params)))
14
- end
15
-
16
- def paginated_collection_with_filter_by(params={})
17
- params = hash_with_indifferent_access(params)
18
-
19
- pagination = pagination_options(params)
20
- pager = WillPaginate::Collection.new pagination[:page], pagination[:per_page], where(filtering_options(params)).count
21
-
22
- [:total_entries, :total_pages, :per_page, :offset, :previous_page, :current_page, :next_page].inject({}) do |result, attr|
23
- result[attr] = pager.send(attr)
24
- result
25
- end
26
- end
27
-
28
- def default_filtering_options
29
- {}
30
- end
31
-
32
- def default_sorting_options
33
- []
34
- end
35
-
36
- private
37
- def pagination_options(options)
38
- options.reverse_merge :per_page => 12, :page => 1
39
- end
40
-
41
- def filtering_options(options)
42
- default_filtering_options.merge(parse_operators(only_filtering(options)))
43
- end
44
-
45
- def sorting_options(options)
46
- options = only_sorting(options)
47
-
48
- sorting_options = []
49
- sorting_options.concat(parse_order_by(options))
50
- sorting_options.concat(parse_sorting(options))
51
-
52
- sorting_options.empty? ? default_sorting_options : sorting_options
53
- end
54
-
55
- def parse_operators(options)
56
- options.inject({}) do |result, item|
57
- key, value = item
58
-
59
- attribute = attribute_from(key)
60
- operator = operator_from(key)
61
- value = parse_value(unescape(value), operator)
62
-
63
- if operator
64
- filter = { operator => value }
65
-
66
- if result.has_key?(attribute)
67
- result[attribute].merge!(filter)
68
- else
69
- result[attribute] = filter
70
- end
71
- else
72
- result[attribute] = value
73
- end
74
-
75
- result
76
- end
77
- end
78
-
79
- def attribute_from(key)
80
- if match = key.match(/(.*)\.(#{(CONDITIONAL_OPERATORS + SORTING_OPERATORS).join('|')})/)
81
- match[1].to_sym
82
- else
83
- key.to_sym
84
- end
85
- end
86
-
87
- def operator_from(key)
88
- if match = key.match(/.*\.(#{CONDITIONAL_OPERATORS.join('|')})/)
89
- "$#{match[1]}".to_sym
90
- end
91
- end
92
-
93
- def unescape(value)
94
- URI.unescape(value)
95
- end
96
-
97
- def parse_value(value, operator)
98
- parse_date(value) or
99
- parse_integer(value) or
100
- parse_float(value) or
101
- parse_array(value, operator) or
102
- parse_regex(value) or
103
- parse_boolean_and_nil(value)
104
- end
105
-
106
- def parse_date(date)
107
- date.to_time and Time.parse(date)
108
- rescue Exception
109
- nil
110
- end
111
-
112
- def parse_integer(integer)
113
- if match = integer.match(/^\d+$/)
114
- match[0].to_i
115
- end
116
- end
117
-
118
- def parse_float(float)
119
- if match = float.match(/^(\d+)(\.?\d*)$/)
120
- match[0].to_f
121
- end
122
- end
123
-
124
- def parse_array(value, operator)
125
- if array_operator?(operator)
126
- split_and_strip(value).map { |item| parse_regex(item) or item }
127
- end
128
- end
129
-
130
- def parse_regex(regex)
131
- if match = regex.match(/^\/(.*)\/(i|m|x)?$/)
132
- eval(match[0])
133
- end
134
- end
135
-
136
- def parse_boolean_and_nil(value)
137
- unless value.nil? || value.empty?
138
- if ['true', 'false'].include?(value.strip)
139
- value.strip == 'true'
140
- elsif value.strip == 'nil'
141
- nil
142
- else
143
- value
144
- end
145
- end
146
- end
147
-
148
- def array_operator?(operator)
149
- ARRAY_CONDITIONAL_OPERATORS.map { |op| "$#{op}" }.include?(operator.to_s)
150
- end
151
-
152
- def split_and_strip(values)
153
- values.split('|').map(&:strip)
154
- end
155
-
156
- def hash_with_indifferent_access(params)
157
- params.is_a?(HashWithIndifferentAccess) ? params : HashWithIndifferentAccess.new(params)
158
- end
159
-
160
- def only_filtering(options)
161
- options.except(*only_sorting(options).keys).except(:per_page, :page, :action, :controller, :format, :order_by)
162
- end
163
-
164
- def only_sorting(options)
165
- options.inject({}) do |result, item|
166
- key, value = item
167
- result[key] = value if sorting_parameter?(key, value)
168
- result
169
- end
170
- end
171
-
172
- def sorting_parameter?(key, value)
173
- order_by_parameter?(key) or sorting_key_parameter?(key) or sorting_value_parameter?(value)
174
- end
175
-
176
- def order_by_parameter?(key)
177
- key.to_s == 'order_by'
178
- end
179
-
180
- def sorting_key_parameter?(key)
181
- key.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
182
- end
183
-
184
- def sorting_value_parameter?(value)
185
- value.present? && SORTING_OPERATORS.include?(value.to_sym)
186
- end
187
-
188
- def parse_order_by(options)
189
- sorting_options = []
190
-
191
- if order_by = options.delete('order_by')
192
- if match = order_by.match(/(.*)\.(#{SORTING_OPERATORS.join('|')})/)
193
- sorting_options << match[1].to_sym.send(match[2])
194
- else
195
- sorting_options << order_by.to_sym.asc
196
- end
197
- end
198
-
199
- sorting_options
200
- end
201
-
202
- def parse_sorting(options)
203
- options.inject([]) do |result, item|
204
- key, value = item
205
-
206
- attribute = attribute_from(key)
207
- sorting_operator = sorting_operator_from(key)
208
-
209
- result << attribute.send(sorting_operator || value)
210
- result
211
- end
212
- end
213
-
214
- def sorting_operator_from(key)
215
- if match = key.match(/.*\.(#{SORTING_OPERATORS.join('|')})/)
216
- match[1].to_sym
217
- end
218
- end
219
- end
220
- end
1
+ require File.expand_path(File.join('mongoid', 'query_string_interface'), File.dirname(__FILE__))
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.1.7"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_query_string_interface
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 7
10
- version: 0.1.7
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Vicente Mundim
@@ -15,43 +15,74 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-10 00:00:00 -03:00
18
+ date: 2011-02-01 00:00:00 -02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: mongoid
22
+ name: json
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 11
30
+ segments:
31
+ - 1
32
+ - 4
33
+ - 6
34
+ version: 1.4.6
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: mongoid
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
25
41
  none: false
26
42
  requirements:
27
43
  - - ~>
28
44
  - !ruby/object:Gem::Version
29
- hash: 31098209
45
+ hash: 7712058
30
46
  segments:
31
47
  - 2
32
48
  - 0
33
49
  - 0
34
- - beta
35
- version: 2.0.0.beta
50
+ - rc
51
+ version: 2.0.0.rc
36
52
  type: :runtime
37
- version_requirements: *id001
53
+ version_requirements: *id002
38
54
  - !ruby/object:Gem::Dependency
39
55
  name: rspec
40
56
  prerelease: false
41
- requirement: &id002 !ruby/object:Gem::Requirement
57
+ requirement: &id003 !ruby/object:Gem::Requirement
42
58
  none: false
43
59
  requirements:
44
- - - ~>
60
+ - - ">="
45
61
  - !ruby/object:Gem::Version
46
- hash: 31098209
62
+ hash: 3
47
63
  segments:
48
64
  - 2
65
+ - 3
66
+ - 0
67
+ version: 2.3.0
68
+ type: :development
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: database_cleaner
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 11
79
+ segments:
49
80
  - 0
81
+ - 5
50
82
  - 0
51
- - beta
52
- version: 2.0.0.beta
83
+ version: 0.5.0
53
84
  type: :development
54
- version_requirements: *id002
85
+ version_requirements: *id004
55
86
  description: Gives a method that can parse query string parameters into a set of criterias that Mongoid can use to perform actual queries in MongoDB databases for a given model.
56
87
  email:
57
88
  - vicente.mundim@gmail.com
@@ -62,10 +93,18 @@ extensions: []
62
93
  extra_rdoc_files: []
63
94
 
64
95
  files:
96
+ - lib/mongoid/parsers/array_parser.rb
97
+ - lib/mongoid/parsers/boolean_and_nil_parser.rb
98
+ - lib/mongoid/parsers/date_time_parser.rb
99
+ - lib/mongoid/parsers/number_parser.rb
100
+ - lib/mongoid/parsers/regex_parser.rb
101
+ - lib/mongoid/query_string_interface.rb
65
102
  - lib/mongoid_query_string_interface.rb
66
103
  - lib/version.rb
67
104
  - MIT_LICENSE
68
105
  - README.rdoc
106
+ - Gemfile
107
+ - Gemfile.lock
69
108
  has_rdoc: true
70
109
  homepage: http://github.com/vicentemundim/mongoid_query_string_interface
71
110
  licenses: []