gdatastore_mapper 0.1.7 → 0.1.8
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.
- 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
|