gdatastore_mapper 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/gdatastore_mapper/relation.rb +7 -0
- data/lib/gdatastore_mapper/relation/query_methods.rb +83 -0
- data/lib/gdatastore_mapper/scoping.rb +7 -4
- data/lib/gdatastore_mapper/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e000cc4729803880f3e3e8ff0ec67db4e6569c1d
|
4
|
+
data.tar.gz: 567ca61e5a2f5e8aab79f10dd8fe370dd01678db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e202e556bb85658c2527f4bc553c01162b5f630c3570677ff780193e4be27f2a30c1f3bb9ff969441957ac939727acbba3d208dd43642001521ea0d58b19ae2c
|
7
|
+
data.tar.gz: 753114eb2ecdec0bc736e164c0972973d6a771d34766eb8426e9557d5370040bc2ede8a5cea96fe4a8ad84aac7fa991756e33862a85c5d0a448ef80aa5086f7e
|
data/README.md
CHANGED
@@ -15,6 +15,7 @@ Once you install GdatastoreMapper you can use Google Cloud Datastore like Active
|
|
15
15
|
- [Timestamp](#timestamp)
|
16
16
|
- [Associations](#associations)
|
17
17
|
- [One to Many](#one-to-many)
|
18
|
+
- [Method Chaining](#method-chaining)
|
18
19
|
- [Callbacks](#callbacks)
|
19
20
|
- [Validations](#validations)
|
20
21
|
- [Contact](#contact)
|
@@ -212,6 +213,16 @@ rowling.books.count
|
|
212
213
|
harry_poter.author
|
213
214
|
=> [#<Author:0x00 @name="J. K. Rowling" .... ]
|
214
215
|
```
|
216
|
+
### Method Chaining
|
217
|
+
|
218
|
+
```
|
219
|
+
rowling.books.order(created_at: :desc).limit(3)
|
220
|
+
=> [#<Book:0x00 @title="Harry Potter" .... ]
|
221
|
+
```
|
222
|
+
```
|
223
|
+
rowling.books.where(series: 'Harry Potter').order(published_at: :asc).limit(3)
|
224
|
+
=> [#<Book:0x00 @title="Harry Potter" .... ]
|
225
|
+
```
|
215
226
|
|
216
227
|
## Callbacks
|
217
228
|
|
@@ -1,5 +1,11 @@
|
|
1
|
+
require 'gdatastore_mapper/relation/query_methods'
|
2
|
+
|
1
3
|
module GdatastoreMapper
|
2
4
|
class Relation < Array
|
5
|
+
include QueryMethods
|
6
|
+
|
7
|
+
attr_accessor :klass, :association
|
8
|
+
|
3
9
|
def initialize(klass, association)
|
4
10
|
@klass = klass
|
5
11
|
@association = association
|
@@ -30,5 +36,6 @@ module GdatastoreMapper
|
|
30
36
|
owner_attr[@association.belonging_id] = (existing_ids << belonging.id)
|
31
37
|
@association.owner.update(owner_attr)
|
32
38
|
end
|
39
|
+
|
33
40
|
end
|
34
41
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module GdatastoreMapper
|
2
|
+
module QueryMethods
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def order condition, &block
|
6
|
+
return nil unless condition.is_a?(Hash)
|
7
|
+
dataset_run(order_query(condition), &block)
|
8
|
+
end
|
9
|
+
|
10
|
+
def where condition, &block
|
11
|
+
return nil unless condition.is_a?(Hash)
|
12
|
+
dataset_run(where_query(condition), &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
def find id
|
16
|
+
return nil if id.nil?
|
17
|
+
query = Google::Cloud::Datastore::Key.new in_class, id.to_i
|
18
|
+
entities = GdatastoreMapper::Session.dataset.lookup query
|
19
|
+
from_entity entities.first if entities.any?
|
20
|
+
end
|
21
|
+
|
22
|
+
def find_by condition
|
23
|
+
return nil unless condition.is_a?(Hash)
|
24
|
+
where(condition)&.first
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_or_create condition
|
28
|
+
return nil unless condition.is_a?(Hash)
|
29
|
+
if record = where(condition)&.first
|
30
|
+
record
|
31
|
+
else
|
32
|
+
create condition
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def limit condition
|
37
|
+
return nil unless condition.is_a?(Fixnum)
|
38
|
+
self[0..condition-1]
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def in_class
|
44
|
+
self&.first&.class&.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def order_query condition
|
48
|
+
query = Google::Cloud::Datastore::Query.new.kind(in_class)
|
49
|
+
condition.each do |property, value|
|
50
|
+
query.order(property.to_s, value)
|
51
|
+
end
|
52
|
+
query
|
53
|
+
end
|
54
|
+
|
55
|
+
def where_query condition
|
56
|
+
query = Google::Cloud::Datastore::Query.new.kind(in_class)
|
57
|
+
condition.each do |property, value|
|
58
|
+
query.where(property.to_s, '=', value)
|
59
|
+
end
|
60
|
+
query
|
61
|
+
end
|
62
|
+
|
63
|
+
def dataset_run query, &block
|
64
|
+
entities = GdatastoreMapper::Session.dataset.run query
|
65
|
+
result = GdatastoreMapper::Relation.new(in_class, self.association)
|
66
|
+
entities.each do |entity|
|
67
|
+
record = from_entity(entity)
|
68
|
+
block.call(record) if block_given?
|
69
|
+
result << record if record
|
70
|
+
end
|
71
|
+
result
|
72
|
+
end
|
73
|
+
|
74
|
+
def from_entity entity
|
75
|
+
record = self.first.class.new
|
76
|
+
record.id = entity.key.id
|
77
|
+
entity.properties.to_hash.each do |name, value|
|
78
|
+
record.send "#{name}=", value if record.respond_to? "#{name}="
|
79
|
+
end
|
80
|
+
record
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -51,11 +51,15 @@ module GdatastoreMapper
|
|
51
51
|
all.count
|
52
52
|
end
|
53
53
|
|
54
|
+
def limit condition
|
55
|
+
return nil unless condition.is_a?(Fixnum)
|
56
|
+
all[0..condition-1]
|
57
|
+
end
|
58
|
+
|
54
59
|
private
|
55
60
|
|
56
61
|
def where_query condition
|
57
|
-
query = Google::Cloud::Datastore::Query.new
|
58
|
-
query.kind self.to_s
|
62
|
+
query = Google::Cloud::Datastore::Query.new.kind(self.to_s)
|
59
63
|
condition.each do |property, value|
|
60
64
|
query.where(property.to_s, '=', value)
|
61
65
|
end
|
@@ -63,8 +67,7 @@ module GdatastoreMapper
|
|
63
67
|
end
|
64
68
|
|
65
69
|
def order_query condition
|
66
|
-
query = Google::Cloud::Datastore::Query.new
|
67
|
-
query.kind self.to_s
|
70
|
+
query = Google::Cloud::Datastore::Query.new.kind(self.to_s)
|
68
71
|
condition.each do |property, value|
|
69
72
|
query.order(property.to_s, value)
|
70
73
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gdatastore_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shinya Kitamura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-cloud-datastore
|
@@ -120,6 +120,7 @@ files:
|
|
120
120
|
- lib/gdatastore_mapper/persistence.rb
|
121
121
|
- lib/gdatastore_mapper/persistence/class_methods.rb
|
122
122
|
- lib/gdatastore_mapper/relation.rb
|
123
|
+
- lib/gdatastore_mapper/relation/query_methods.rb
|
123
124
|
- lib/gdatastore_mapper/scoping.rb
|
124
125
|
- lib/gdatastore_mapper/session.rb
|
125
126
|
- lib/gdatastore_mapper/validations.rb
|