ruby-ext-js 0.2.1 → 0.3.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/README.markdown +4 -0
- data/VERSION +1 -1
- data/lib/ruby-ext-js.rb +34 -8
- data/ruby-ext-js.gemspec +2 -2
- data/spec/ruby-ext-js_spec.rb +52 -1
- metadata +5 -5
data/README.markdown
CHANGED
@@ -65,6 +65,10 @@ Examples:
|
|
65
65
|
|
66
66
|
Version number conventions: Patch-level bumps for bug fixes, minor-level bumps for changes that break backwards-compatibility, major-level bumps for major new features.
|
67
67
|
|
68
|
+
## 0.3.0
|
69
|
+
|
70
|
+
* `ExtJs::Mongo` now supports 'date' filter params with "gt" and "lt" params.
|
71
|
+
|
68
72
|
## 0.2.1
|
69
73
|
|
70
74
|
* `ExtJs::Mongo.options` fixes.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/ruby-ext-js.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "date"
|
2
|
+
|
1
3
|
module ExtJs
|
2
4
|
class Postgres
|
3
5
|
def self.db_opts(params, opts = {}); raise NotImplementedError; end
|
@@ -127,14 +129,7 @@ module ExtJs
|
|
127
129
|
|
128
130
|
next unless params["filter"][i]
|
129
131
|
|
130
|
-
field = (params["filter"][i]
|
131
|
-
values = Array( params["filter"][i]["data"] ? params["filter"][i]["data"]["value"] : nil )
|
132
|
-
|
133
|
-
if values.size == 1
|
134
|
-
values = values[0]
|
135
|
-
elsif values.size > 1
|
136
|
-
values = { "$in" => values }
|
137
|
-
end
|
132
|
+
field, values = self.filter_for( params["filter"][i] )
|
138
133
|
|
139
134
|
unless field.empty? || !allowed_filters.include?( field ) || values.empty?
|
140
135
|
conds.merge! field => values
|
@@ -144,5 +139,36 @@ module ExtJs
|
|
144
139
|
|
145
140
|
conds
|
146
141
|
end
|
142
|
+
|
143
|
+
def self.filter_for( hash )
|
144
|
+
hash["data"] ||= {}
|
145
|
+
hash["field"] ||= ""
|
146
|
+
|
147
|
+
field = hash["field"].gsub(/[^\.\w\d_-]/, "").strip
|
148
|
+
values = Array( hash["data"]["value"] )
|
149
|
+
comparison = self.comparison_for( hash["data"]["comparison"] )
|
150
|
+
|
151
|
+
case hash["data"]["type"]
|
152
|
+
when "date"
|
153
|
+
values.map!{ |date| Date.parse( date ) }
|
154
|
+
values = { comparison => values[0] }
|
155
|
+
else
|
156
|
+
if values.size == 1
|
157
|
+
values = values[0]
|
158
|
+
elsif values.size > 1
|
159
|
+
values = { comparison => values }
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
return field, values
|
164
|
+
end
|
165
|
+
|
166
|
+
def self.comparison_for( str )
|
167
|
+
case str
|
168
|
+
when "lt"; "$lt"
|
169
|
+
when "gt"; "$gt"
|
170
|
+
else; "$in"
|
171
|
+
end
|
172
|
+
end
|
147
173
|
end
|
148
174
|
end
|
data/ruby-ext-js.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-ext-js}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tyson Tate"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-24}
|
13
13
|
s.description = %q{Ultra-basic classes for working with Ext.js requests and translating them to DataMapper / Mongood query opts.}
|
14
14
|
s.email = %q{tyson@doloreslabs.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/ruby-ext-js_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "date"
|
1
2
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
3
|
|
3
4
|
describe "ExtJs" do
|
@@ -20,7 +21,7 @@ describe "ExtJs" do
|
|
20
21
|
|
21
22
|
class TestMongoWithFilters < ExtJs::Mongo
|
22
23
|
def self.allowed_filters
|
23
|
-
["state", "score"]
|
24
|
+
["state", "score", "inserted_at"]
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -85,6 +86,56 @@ describe "ExtJs" do
|
|
85
86
|
mongo = TestMongoWithFilters.new( params )
|
86
87
|
mongo.conditions.should == { "state" => "open", "score" => { "$in" => ["5", "4"] } }
|
87
88
|
end
|
89
|
+
|
90
|
+
it "handles date range params" do
|
91
|
+
date = Date.parse "11/26/2010"
|
92
|
+
|
93
|
+
params = { "filter" => {
|
94
|
+
"0" => {
|
95
|
+
"data" => {
|
96
|
+
"type" => "date",
|
97
|
+
"value" => "11/26/2010",
|
98
|
+
"comparison" => "lt"
|
99
|
+
},
|
100
|
+
"field" => "inserted_at"
|
101
|
+
}
|
102
|
+
}}
|
103
|
+
|
104
|
+
mongo = TestMongoWithFilters.new( params )
|
105
|
+
mongo.conditions.should == { "inserted_at" => { "$lt" => date } }
|
106
|
+
|
107
|
+
params = { "filter" => {
|
108
|
+
"0" => {
|
109
|
+
"data" => {
|
110
|
+
"type" => "date",
|
111
|
+
"value" => "11/26/2010",
|
112
|
+
"comparison" => "gt"
|
113
|
+
},
|
114
|
+
"field" => "inserted_at"
|
115
|
+
}
|
116
|
+
}}
|
117
|
+
|
118
|
+
mongo = TestMongoWithFilters.new( params )
|
119
|
+
mongo.conditions.should == { "inserted_at" => { "$gt" => date } }
|
120
|
+
end
|
121
|
+
|
122
|
+
it "handles invalid comparison operators by falling back to $in" do
|
123
|
+
date = Date.parse "11/26/2010"
|
124
|
+
|
125
|
+
params = { "filter" => {
|
126
|
+
"0" => {
|
127
|
+
"data" => {
|
128
|
+
"type" => "date",
|
129
|
+
"value" => "11/26/2010",
|
130
|
+
"comparison" => "BOO"
|
131
|
+
},
|
132
|
+
"field" => "inserted_at"
|
133
|
+
}
|
134
|
+
}}
|
135
|
+
|
136
|
+
mongo = TestMongoWithFilters.new( params )
|
137
|
+
mongo.conditions.should == { "inserted_at" => { "$in" => date } }
|
138
|
+
end
|
88
139
|
end
|
89
140
|
|
90
141
|
describe "opts" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-ext-js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tyson Tate
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-24 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|