nano-store 0.3.10 → 0.3.11
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/.gitignore +1 -0
- data/Rakefile +2 -2
- data/lib/nano_store/finder.rb +19 -24
- data/lib/nano_store/version.rb +1 -1
- data/spec/finder_spec.rb +32 -9
- data/spec/model_spec.rb +11 -0
- data/vendor/Podfile.lock +2 -2
- data/vendor/Pods/NanoStore/Classes/Public/NSFNanoSearch.m +54 -19
- metadata +8 -8
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -7,10 +7,10 @@ require 'motion-redgreen'
|
|
7
7
|
|
8
8
|
Motion::Project::App.setup do |app|
|
9
9
|
app.name = 'NanoStoreDemo'
|
10
|
-
|
10
|
+
app.redgreen_style = :full
|
11
11
|
app.files += Dir.glob(File.join(app.project_dir, 'lib/nano_store/*.rb'))
|
12
12
|
app.pods do
|
13
|
-
dependency 'NanoStore', '~> 2.1.
|
13
|
+
dependency 'NanoStore', '~> 2.1.4'
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
data/lib/nano_store/finder.rb
CHANGED
@@ -41,26 +41,26 @@ module NanoStore
|
|
41
41
|
else
|
42
42
|
sort_options = {}
|
43
43
|
end
|
44
|
+
elsif arg.empty?
|
45
|
+
options = {}
|
46
|
+
sort_options = {}
|
44
47
|
else
|
45
48
|
raise "unexpected parameters #{arg}"
|
46
49
|
end
|
47
50
|
search = NSFNanoSearch.searchWithStore(self.store)
|
48
51
|
|
49
|
-
|
50
|
-
|
51
|
-
search.expressions = expressions
|
52
|
-
end
|
52
|
+
expressions = expressions_with_options(options)
|
53
|
+
search.expressions = expressions
|
53
54
|
|
54
55
|
sort_descriptors = sort_descriptor_with_options(sort_options)
|
55
56
|
search.sort = sort_descriptors
|
56
|
-
search.filterClass = self.
|
57
|
+
search.filterClass = self.bare_class_name
|
57
58
|
|
58
59
|
error_ptr = Pointer.new(:id)
|
59
60
|
searchResults = search.searchObjectsWithReturnType(NSFReturnObjects, error:error_ptr)
|
60
61
|
raise NanoStoreError, error_ptr[0].description if error_ptr[0]
|
61
62
|
|
62
|
-
|
63
|
-
searchResults.select {|r| r.class.to_s == self.to_s }
|
63
|
+
searchResults
|
64
64
|
end
|
65
65
|
|
66
66
|
# find model keys by criteria
|
@@ -83,48 +83,43 @@ module NanoStore
|
|
83
83
|
end
|
84
84
|
elsif arg[0] && arg[1] && arg[2]
|
85
85
|
# standard way to find
|
86
|
-
options = {arg[0] => {arg[1] => arg[2]}}
|
86
|
+
options = {arg[0] => {arg[1] => arg[2]}}
|
87
87
|
if arg[4] && arg[4].is_a?(Hash)
|
88
88
|
sort_options = arg[4][:sort] || {}
|
89
89
|
else
|
90
90
|
sort_options = {}
|
91
91
|
end
|
92
|
+
elsif arg.empty?
|
93
|
+
options = {}
|
94
|
+
sort_options = {}
|
92
95
|
else
|
93
96
|
raise "unexpected parameters #{arg}"
|
94
97
|
end
|
95
98
|
|
96
99
|
search = NSFNanoSearch.searchWithStore(self.store)
|
97
100
|
|
98
|
-
|
99
|
-
|
100
|
-
search.expressions = expressions
|
101
|
-
end
|
101
|
+
expressions = expressions_with_options(options)
|
102
|
+
search.expressions = expressions
|
102
103
|
|
103
104
|
sort_descriptors = sort_descriptor_with_options(sort_options)
|
104
105
|
search.sort = sort_descriptors
|
105
|
-
search.filterClass = self.
|
106
|
+
search.filterClass = self.bare_class_name
|
106
107
|
|
107
108
|
error_ptr = Pointer.new(:id)
|
108
|
-
|
109
|
-
search.attributesToBeReturned = ["NSFObjectClass", "NSFKey"]
|
110
|
-
searchResults = search.searchObjectsWithReturnType(NSFReturnObjects, error:error_ptr)
|
109
|
+
searchResults = search.searchObjectsWithReturnType(NSFReturnKeys, error:error_ptr)
|
111
110
|
raise NanoStoreError, error_ptr[0].description if error_ptr[0]
|
112
|
-
|
113
|
-
|
114
|
-
searchResults.select {|r| r.class.to_s == self.to_s }.collect(&:key)
|
111
|
+
|
112
|
+
searchResults
|
115
113
|
end
|
116
114
|
|
117
115
|
def bare_class_name
|
118
|
-
self.to_s.split("::").last
|
119
|
-
end
|
120
|
-
|
121
|
-
def object_class_name
|
122
|
-
"k#{bare_class_name}"
|
116
|
+
self.to_s.split("::").last
|
123
117
|
end
|
124
118
|
|
125
119
|
private
|
126
120
|
def expressions_with_options(options)
|
127
121
|
expressions = []
|
122
|
+
|
128
123
|
options.each do |key, val|
|
129
124
|
attribute = NSFNanoPredicate.predicateWithColumn(NSFAttributeColumn, matching:NSFEqualTo, value:key.to_s)
|
130
125
|
expression = NSFNanoExpression.expressionWithPredicate(attribute)
|
data/lib/nano_store/version.rb
CHANGED
data/spec/finder_spec.rb
CHANGED
@@ -31,10 +31,15 @@ describe "Finder" do
|
|
31
31
|
user3.save
|
32
32
|
end
|
33
33
|
|
34
|
+
it "create object in their class" do
|
35
|
+
NanoStore.shared_store.allObjectClasses.should == ["User"]
|
36
|
+
Car.create(:name => "Bob")
|
37
|
+
NanoStore.shared_store.allObjectClasses.sort.should == ["User", "Car"].sort
|
38
|
+
end
|
39
|
+
|
34
40
|
it "search object traditional way: supply key, operator and value" do
|
35
41
|
users = User.find(:name, NSFEqualTo, "Bob")
|
36
42
|
users.should.not.be.nil
|
37
|
-
|
38
43
|
user = users.first
|
39
44
|
user.should.not.be.nil
|
40
45
|
user.name.should.be == "Bob"
|
@@ -46,7 +51,16 @@ describe "Finder" do
|
|
46
51
|
user.name.should.be == "Carl"
|
47
52
|
user.age.should.be == 4
|
48
53
|
end
|
49
|
-
|
54
|
+
|
55
|
+
it "search object with simple hash with two class" do
|
56
|
+
Car.create(:name => "Carl")
|
57
|
+
users = User.find(:name => "Carl")
|
58
|
+
users.size.should.be == 1
|
59
|
+
user = users.first
|
60
|
+
user.name.should.be == "Carl"
|
61
|
+
user.age.should.be == 4
|
62
|
+
end
|
63
|
+
|
50
64
|
it "search object with array (OR)" do
|
51
65
|
users = User.find(:name => ["Carl", "Amy"])
|
52
66
|
users.size.should == 2
|
@@ -105,8 +119,12 @@ describe "Finder" do
|
|
105
119
|
end
|
106
120
|
|
107
121
|
it "find object" do
|
108
|
-
|
122
|
+
users = User.find(:name, NSFEqualTo, "Bob")
|
123
|
+
users.size.should == 1
|
124
|
+
|
125
|
+
user = users.first
|
109
126
|
user.name.should == "Bob"
|
127
|
+
user.class.should == User
|
110
128
|
end
|
111
129
|
|
112
130
|
it "find all objects" do
|
@@ -130,17 +148,22 @@ describe "Finder" do
|
|
130
148
|
end
|
131
149
|
|
132
150
|
it "#all only return objects of the class" do
|
133
|
-
Car.create(:name => "Honda")
|
151
|
+
car = Car.create(:name => "Honda")
|
134
152
|
Car.count.should == 1
|
135
153
|
Car.all.size.should == 1
|
154
|
+
Car.all.first.key.should == car.key
|
136
155
|
end
|
137
156
|
|
138
157
|
it "#find only return objects of the class" do
|
139
|
-
Car.create(:name => "Honda")
|
140
|
-
Car.
|
141
|
-
Car.find
|
142
|
-
|
158
|
+
car = Car.create(:name => "Honda")
|
159
|
+
Car.find.size.should == 1
|
160
|
+
Car.find.first.key.should == car.key
|
161
|
+
end
|
162
|
+
|
163
|
+
it "#find_keys only return objects of the class" do
|
164
|
+
car = Car.create(:name => "Honda")
|
165
|
+
Car.find_keys.size.should == 1
|
166
|
+
Car.find_keys.first.should == car.key
|
143
167
|
end
|
144
|
-
|
145
168
|
|
146
169
|
end
|
data/spec/model_spec.rb
CHANGED
@@ -5,6 +5,11 @@ describe NanoStore::Model do
|
|
5
5
|
attribute :age
|
6
6
|
attribute :created_at
|
7
7
|
end
|
8
|
+
|
9
|
+
class Plane < NanoStore::Model
|
10
|
+
attribute :name
|
11
|
+
attribute :age
|
12
|
+
end
|
8
13
|
|
9
14
|
def stub_user(name, age, created_at)
|
10
15
|
user = User.new
|
@@ -92,10 +97,16 @@ describe NanoStore::Model do
|
|
92
97
|
|
93
98
|
user = stub_user("Kyu", 14, Time.now)
|
94
99
|
user.save
|
100
|
+
|
101
|
+
plane = Plane.create(:name => "A730", :age => 20)
|
95
102
|
|
96
103
|
User.count.should == 3
|
97
104
|
User.delete({:age => {NSFGreaterThan => 10}})
|
98
105
|
User.count.should == 1
|
106
|
+
|
107
|
+
User.delete({})
|
108
|
+
User.count.should == 0
|
109
|
+
Plane.count.should == 1
|
99
110
|
end
|
100
111
|
|
101
112
|
|
data/vendor/Podfile.lock
CHANGED
@@ -419,13 +419,25 @@
|
|
419
419
|
|
420
420
|
switch (aDateMatch) {
|
421
421
|
case NSFBeforeDate:
|
422
|
-
|
422
|
+
if (self.filterClass.length > 0) {
|
423
|
+
theSQLStatement = [[NSString alloc]initWithFormat:@"SELECT %@, %@, %@ FROM %@ WHERE (NSFObjectClass = '%@') AND %@ < '%@'", NSFKey, NSFPlist, NSFObjectClass, NSFKeys, self.filterClass, NSFCalendarDate, normalizedDateString];
|
424
|
+
} else {
|
425
|
+
theSQLStatement = [[NSString alloc]initWithFormat:@"SELECT %@, %@, %@ FROM %@ WHERE %@ < '%@'", NSFKey, NSFPlist, NSFObjectClass, NSFKeys, NSFCalendarDate, normalizedDateString];
|
426
|
+
}
|
423
427
|
break;
|
424
428
|
case NSFOnDate:
|
425
|
-
|
429
|
+
if (self.filterClass.length > 0) {
|
430
|
+
theSQLStatement = [[NSString alloc]initWithFormat:@"SELECT %@, %@, %@ FROM %@ WHERE (NSFObjectClass = '%@') AND %@ = '%@'", NSFKey, NSFPlist, NSFObjectClass, NSFKeys, self.filterClass, NSFCalendarDate, normalizedDateString];
|
431
|
+
} else {
|
432
|
+
theSQLStatement = [[NSString alloc]initWithFormat:@"SELECT %@, %@, %@ FROM %@ WHERE %@ = '%@'", NSFKey, NSFPlist, NSFObjectClass, NSFKeys, NSFCalendarDate, normalizedDateString];
|
433
|
+
}
|
426
434
|
break;
|
427
435
|
case NSFAfterDate:
|
428
|
-
|
436
|
+
if (self.filterClass.length > 0) {
|
437
|
+
theSQLStatement = [[NSString alloc]initWithFormat:@"SELECT %@, %@, %@ FROM %@ WHERE (NSFObjectClass = '%@') AND %@ > '%@'", NSFKey, NSFPlist, NSFObjectClass, NSFKeys, self.filterClass, NSFCalendarDate, normalizedDateString];
|
438
|
+
} else {
|
439
|
+
theSQLStatement = [[NSString alloc]initWithFormat:@"SELECT %@, %@, %@ FROM %@ WHERE %@ > '%@'", NSFKey, NSFPlist, NSFObjectClass, NSFKeys, NSFCalendarDate, normalizedDateString];
|
440
|
+
}
|
429
441
|
break;
|
430
442
|
}
|
431
443
|
|
@@ -582,6 +594,10 @@
|
|
582
594
|
} else {
|
583
595
|
theSQLStatement = [NSString stringWithFormat:@"SELECT DISTINCT (NSFKey),NSFPlist,NSFObjectClass FROM NSFKeys WHERE NSFKey IN (%@)", theSQLStatement];
|
584
596
|
}
|
597
|
+
} else {
|
598
|
+
if (self.filterClass.length > 0) {
|
599
|
+
theSQLStatement = [NSString stringWithFormat:@"SELECT (NSFKEY) FROM NSFKeys WHERE (NSFObjectClass = '%@') AND NSFKEY IN (%@)", self.filterClass, theSQLStatement];
|
600
|
+
}
|
585
601
|
}
|
586
602
|
|
587
603
|
return theSQLStatement;
|
@@ -594,21 +610,30 @@
|
|
594
610
|
NSMutableString *parentheses = [NSMutableString new];
|
595
611
|
NSFReturnType returnType = returnedObjectType;
|
596
612
|
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
613
|
+
if (count == 0) {
|
614
|
+
if (NSFReturnObjects == returnType) {
|
615
|
+
[sqlComponents addObject:@"SELECT NSFKEY FROM NSFValues"];
|
616
|
+
} else {
|
617
|
+
[sqlComponents addObject:@"SELECT DISTINCT (NSFKEY) FROM NSFValues"];
|
618
|
+
}
|
619
|
+
} else {
|
620
|
+
for (i = 0; i < count; i++) {
|
621
|
+
NSFNanoExpression *expression = [someExpressions objectAtIndex:i];
|
622
|
+
NSMutableString *theSQL = nil;;
|
623
|
+
|
624
|
+
if (NSFReturnObjects == returnType) {
|
625
|
+
theSQL = [[NSMutableString alloc]initWithFormat:@"SELECT NSFKEY FROM NSFValues WHERE %@", [expression description]];
|
626
|
+
} else {
|
627
|
+
theSQL = [[NSMutableString alloc]initWithFormat:@"SELECT DISTINCT (NSFKEY) FROM NSFValues WHERE %@", [expression description]];
|
628
|
+
}
|
629
|
+
|
630
|
+
if ((count > 1) && (i < count-1)) {
|
631
|
+
[theSQL appendString:@" AND NSFKEY IN ("];
|
632
|
+
[parentheses appendString:@")"];
|
633
|
+
}
|
634
|
+
|
635
|
+
[sqlComponents addObject:theSQL];
|
609
636
|
}
|
610
|
-
|
611
|
-
[sqlComponents addObject:theSQL];
|
612
637
|
}
|
613
638
|
|
614
639
|
if ([parentheses length] > 0)
|
@@ -616,8 +641,17 @@
|
|
616
641
|
|
617
642
|
NSString *theValue = [sqlComponents componentsJoinedByString:@""];
|
618
643
|
|
619
|
-
if (NSFReturnObjects == returnType)
|
620
|
-
|
644
|
+
if (NSFReturnObjects == returnType) {
|
645
|
+
if (self.filterClass.length > 0) {
|
646
|
+
theValue = [NSString stringWithFormat:@"SELECT DISTINCT (NSFKey),NSFPlist,NSFObjectClass FROM NSFKeys WHERE (NSFObjectClass = '%@') AND NSFKey IN (%@)", self.filterClass, theValue];
|
647
|
+
} else {
|
648
|
+
theValue = [NSString stringWithFormat:@"SELECT DISTINCT (NSFKey),NSFPlist,NSFObjectClass FROM NSFKeys WHERE NSFKey IN (%@)", theValue];
|
649
|
+
}
|
650
|
+
} else {
|
651
|
+
if (self.filterClass.length > 0) {
|
652
|
+
theValue = [NSString stringWithFormat:@"SELECT DISTINCT (NSFKey) FROM NSFKeys WHERE (NSFObjectClass = '%@') AND NSFKey IN (%@)", self.filterClass, theValue];
|
653
|
+
}
|
654
|
+
}
|
621
655
|
|
622
656
|
return theValue;
|
623
657
|
}
|
@@ -634,6 +668,7 @@
|
|
634
668
|
NSMutableString *theSQLStatement = [NSMutableString stringWithString:@"SELECT DISTINCT (NSFKEY) FROM NSFValues WHERE NSFKey IN ("];
|
635
669
|
[theSQLStatement appendString:[preparedKeys componentsJoinedByString:@","]];
|
636
670
|
[theSQLStatement appendString:@")"];
|
671
|
+
|
637
672
|
theSQLStatement = [NSString stringWithFormat:@"SELECT DISTINCT (NSFKey),NSFPlist,NSFObjectClass FROM NSFKeys WHERE NSFKey IN (%@)", theSQLStatement];
|
638
673
|
|
639
674
|
return theSQLStatement;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nano-store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bubble-wrap
|
16
|
-
requirement: &
|
16
|
+
requirement: &70222531211820 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70222531211820
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: motion-cocoapods
|
27
|
-
requirement: &
|
27
|
+
requirement: &70222531210900 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.1
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70222531210900
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: motion-redgreen
|
38
|
-
requirement: &
|
38
|
+
requirement: &70222531209960 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70222531209960
|
47
47
|
description: Wrapper for NanoStore, a lightweight schema-less key-value document database
|
48
48
|
based on sqlite, for RubyMotion.
|
49
49
|
email:
|