dm-json-search 0.0.2 → 0.0.3
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/VERSION +1 -1
- data/dm-json-search.gemspec +11 -2
- data/lib/dm-json-search.rb +1 -0
- data/lib/dm-json-search/query_ext.rb +11 -1
- data/spec/.bacon +0 -0
- data/spec/dm-json-search_spec.rb +19 -0
- data/spec/spec_fixtures.rb +37 -0
- data/spec/spec_helper.rb +74 -0
- metadata +9 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/dm-json-search.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dm-json-search}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Nathan Herald"]
|
@@ -23,13 +23,22 @@ Gem::Specification.new do |s|
|
|
23
23
|
"dm-json-search.gemspec",
|
24
24
|
"lib/dm-json-search.rb",
|
25
25
|
"lib/dm-json-search/query_ext.rb",
|
26
|
-
"lib/dm-json-search/searchable.rb"
|
26
|
+
"lib/dm-json-search/searchable.rb",
|
27
|
+
"spec/.bacon",
|
28
|
+
"spec/dm-json-search_spec.rb",
|
29
|
+
"spec/spec_fixtures.rb",
|
30
|
+
"spec/spec_helper.rb"
|
27
31
|
]
|
28
32
|
s.homepage = %q{http://github.com/myobie/dm-json-search}
|
29
33
|
s.rdoc_options = ["--charset=UTF-8"]
|
30
34
|
s.require_paths = ["lib"]
|
31
35
|
s.rubygems_version = %q{1.3.5}
|
32
36
|
s.summary = %q{Search your models with JSON!}
|
37
|
+
s.test_files = [
|
38
|
+
"spec/dm-json-search_spec.rb",
|
39
|
+
"spec/spec_fixtures.rb",
|
40
|
+
"spec/spec_helper.rb"
|
41
|
+
]
|
33
42
|
|
34
43
|
if s.respond_to? :specification_version then
|
35
44
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/dm-json-search.rb
CHANGED
@@ -110,6 +110,11 @@ class DataMapper::Query
|
|
110
110
|
compare = comparison.values.first
|
111
111
|
subject = string_to_subject(compare.keys.first)
|
112
112
|
value = compare.values.first
|
113
|
+
|
114
|
+
if value.is_a?(Hash) && value.keys.length == 1 && value.keys.first == "collection"
|
115
|
+
value = DataMapper::Collection.new(DataMapper::Query.from_hash(value.values.first))
|
116
|
+
end
|
117
|
+
|
113
118
|
DataMapper::Query::Conditions::Comparison.new(slug, subject, value)
|
114
119
|
end
|
115
120
|
|
@@ -125,6 +130,8 @@ class DataMapper::Query
|
|
125
130
|
|
126
131
|
private
|
127
132
|
def operation_to_hash(operation)
|
133
|
+
return {} if operation.slug == :null # just forget null's, they don't exist
|
134
|
+
|
128
135
|
{
|
129
136
|
operation.slug => operation.operands.collect { |o| operand_to_hash(o) }
|
130
137
|
}
|
@@ -143,9 +150,12 @@ private
|
|
143
150
|
end
|
144
151
|
|
145
152
|
def comparison_to_hash(comparison)
|
153
|
+
value = comparison.value
|
154
|
+
value = { "collection" => value.query.to_hash } if value.class == DataMapper::Collection
|
155
|
+
|
146
156
|
{
|
147
157
|
comparison.slug => {
|
148
|
-
subject_to_hash(comparison.subject) =>
|
158
|
+
subject_to_hash(comparison.subject) => value
|
149
159
|
}
|
150
160
|
}
|
151
161
|
end
|
data/spec/.bacon
ADDED
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "dm-json-search" do
|
4
|
+
|
5
|
+
before do
|
6
|
+
DataMapper.auto_migrate!
|
7
|
+
end
|
8
|
+
|
9
|
+
should "produce the same json it wants to consume" do
|
10
|
+
j = Book.all(:author => Author.all(:place => Place.all)).query.to_json
|
11
|
+
k = Book.all_from_json(j).query.to_json
|
12
|
+
j.should == k
|
13
|
+
|
14
|
+
j = Book.all(:title.like => "foo").query.to_json
|
15
|
+
k = Book.all_from_json(j).query.to_json
|
16
|
+
j.should == k
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
include DataMapper::Sweatshop::Unique
|
2
|
+
|
3
|
+
class Book
|
4
|
+
include DataMapper::Resource
|
5
|
+
property :id, Serial
|
6
|
+
property :title, String
|
7
|
+
belongs_to :author
|
8
|
+
end
|
9
|
+
|
10
|
+
class Author
|
11
|
+
include DataMapper::Resource
|
12
|
+
property :id, Serial
|
13
|
+
property :name, String
|
14
|
+
has n, :books
|
15
|
+
belongs_to :place
|
16
|
+
end
|
17
|
+
|
18
|
+
class Place
|
19
|
+
include DataMapper::Resource
|
20
|
+
property :id, Serial
|
21
|
+
property :name, String
|
22
|
+
has n, :authors
|
23
|
+
end
|
24
|
+
|
25
|
+
Book.fixture {{
|
26
|
+
:title => ((/\w{10}/.gen+' ')*2).strip,
|
27
|
+
:author => Author.make
|
28
|
+
}}
|
29
|
+
|
30
|
+
Author.fixture {{
|
31
|
+
:name => ((/\w{10}/.gen+' ')*2).strip,
|
32
|
+
:place => Place.make
|
33
|
+
}}
|
34
|
+
|
35
|
+
Place.fixture {{
|
36
|
+
:name => ((/\w{10}/.gen+' ')*2).strip
|
37
|
+
}}
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require "bacon"
|
2
|
+
require "mocha"
|
3
|
+
require File.dirname(__FILE__) + "/../lib/dm-json-search"
|
4
|
+
|
5
|
+
require 'dm-sweatshop'
|
6
|
+
require File.join(File.dirname(__FILE__), 'spec_fixtures')
|
7
|
+
|
8
|
+
DataMapper.setup(:default, "sqlite3::memory:")
|
9
|
+
DataMapper.auto_migrate!
|
10
|
+
|
11
|
+
class Proc
|
12
|
+
def increase?
|
13
|
+
pre_result = yield
|
14
|
+
called = call
|
15
|
+
post_result = yield
|
16
|
+
pre_result < post_result
|
17
|
+
end
|
18
|
+
|
19
|
+
def decrease?
|
20
|
+
pre_result = yield
|
21
|
+
called = call
|
22
|
+
post_result = yield
|
23
|
+
pre_result > post_result
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# from 1 to 10 how likely, 1 being not very likely and 10 being all the time
|
28
|
+
def do_i?(i = 5)
|
29
|
+
rand(500) < 50 * i
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
##
|
36
|
+
# Hash additions.
|
37
|
+
#
|
38
|
+
# From
|
39
|
+
# * http://wincent.com/knowledge-base/Fixtures_considered_harmful%3F
|
40
|
+
# * Neil Rahilly
|
41
|
+
|
42
|
+
class Hash
|
43
|
+
|
44
|
+
##
|
45
|
+
# Filter keys out of a Hash.
|
46
|
+
#
|
47
|
+
# { :a => 1, :b => 2, :c => 3 }.except(:a)
|
48
|
+
# => { :b => 2, :c => 3 }
|
49
|
+
|
50
|
+
def except(*keys)
|
51
|
+
self.reject { |k,v| keys.include?(k || k.to_sym) }
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# Override some keys.
|
56
|
+
#
|
57
|
+
# { :a => 1, :b => 2, :c => 3 }.with(:a => 4)
|
58
|
+
# => { :a => 4, :b => 2, :c => 3 }
|
59
|
+
|
60
|
+
def with(overrides = {})
|
61
|
+
self.merge overrides
|
62
|
+
end
|
63
|
+
|
64
|
+
##
|
65
|
+
# Returns a Hash with only the pairs identified by +keys+.
|
66
|
+
#
|
67
|
+
# { :a => 1, :b => 2, :c => 3 }.only(:a)
|
68
|
+
# => { :a => 1 }
|
69
|
+
|
70
|
+
def only(*keys)
|
71
|
+
self.reject { |k,v| !keys.include?(k || k.to_sym) }
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-json-search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Herald
|
@@ -30,6 +30,10 @@ files:
|
|
30
30
|
- lib/dm-json-search.rb
|
31
31
|
- lib/dm-json-search/query_ext.rb
|
32
32
|
- lib/dm-json-search/searchable.rb
|
33
|
+
- spec/.bacon
|
34
|
+
- spec/dm-json-search_spec.rb
|
35
|
+
- spec/spec_fixtures.rb
|
36
|
+
- spec/spec_helper.rb
|
33
37
|
has_rdoc: true
|
34
38
|
homepage: http://github.com/myobie/dm-json-search
|
35
39
|
licenses: []
|
@@ -58,5 +62,7 @@ rubygems_version: 1.3.5
|
|
58
62
|
signing_key:
|
59
63
|
specification_version: 3
|
60
64
|
summary: Search your models with JSON!
|
61
|
-
test_files:
|
62
|
-
|
65
|
+
test_files:
|
66
|
+
- spec/dm-json-search_spec.rb
|
67
|
+
- spec/spec_fixtures.rb
|
68
|
+
- spec/spec_helper.rb
|