data_steroid 0.5.5 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d21c1b531a84b0697685ee26a421b7a56be967ab
4
- data.tar.gz: 2b5ff75e423fde47636072d39bee636c2ad05204
3
+ metadata.gz: 66803e91aebb7aa899c00d2fd2858ddf87b17793
4
+ data.tar.gz: 15c179bb49866215914ae0a3d8e8b5c5798cd763
5
5
  SHA512:
6
- metadata.gz: b91bd9dadb3913ee1bb4986d8966446258c1df86970b55d3ae11e4f48eefbc5836a285acc22b65694769f97b14275e53ed359a36b1b4826bb565b0a87dc1fb4b
7
- data.tar.gz: 1a8395bc413bbd51d3dff61e3b02fe55bd06cf6abc8f5776efffe544a7ffaed8d3e6d8eeab6b86d95587353f49141addcc3bf46ceb05541c5ce251a42eb35a47
6
+ metadata.gz: 0e090939ab90bceedffe09921cdfbb0837a6fb275652f62b6f52f7c6ca3fdc895ff361c5d0ea759bae45594450e5cacf4589ecb2eaa9f9f2d00b8660c3b87b3b
7
+ data.tar.gz: 2f93396f7b336b5c8514b53019c52ca15c62b669a775af30bd280c2b378bf2f33c7d595098e740eced2c22e7869f0714296967e0ec5da85805f225760397212b
data/README.md CHANGED
@@ -55,6 +55,13 @@ all_products_ordered = Product.fetch Product.query.order('name', :asc)
55
55
  # Fetch all
56
56
  iphones = Product.fetch Product.query.where('name', '=', 'iPhone 7')
57
57
 
58
+ # Parent/child
59
+
60
+ p1 = Product.new(barcode: '1233', name: 'Xyz', price: 2000).tap { |x| x.save }
61
+ p2 = Product.new(barcode: '1233.1', name: 'Xyz White', price: 1900, parent: p1).tap { |x| x.save }
62
+
63
+ xyz = Product.fetch Product.query.ancestor(p1.as_parent_key).where('price', '>', '1800')
64
+
58
65
  ```
59
66
 
60
67
  Develop
@@ -64,3 +71,10 @@ Develop
64
71
  gem build data_steroid
65
72
  gem install data_steroid-<version>.gem
66
73
  ```
74
+
75
+ Develop with docker
76
+ -------------------
77
+ ```
78
+ docker-compose run --rm data_steroid bash
79
+ rspec
80
+ ```
@@ -5,8 +5,8 @@ module DataSteroid
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  class_methods do
8
- def find(id)
9
- run query.where('__key__', '=', gcloud_key(id.to_i))
8
+ def find(id, parent: nil)
9
+ run query.where('__key__', '=', gcloud_key(id.to_i, parent: parent))
10
10
  end
11
11
  end
12
12
  end
@@ -12,7 +12,7 @@ module DataSteroid
12
12
  properties_names.each do |property_name|
13
13
  send("#{property_name}=", params[property_name.to_s])
14
14
  end
15
- send('id=', params.key.id)
15
+ send('id=', params.key.id || params.key.name)
16
16
  when ::Hash
17
17
  params.each_pair do |key, value|
18
18
  send("#{key}=", value)
@@ -18,12 +18,19 @@ module DataSteroid
18
18
 
19
19
  class_attribute :kind
20
20
 
21
+ attr_accessor :parent
22
+
21
23
  def persisted?
22
24
  id.present?
23
25
  end
24
26
 
25
27
  def gcloud_key
26
- self.class.datastore.key(kind, id)
28
+ self.class.gcloud_key(id, parent: parent)
29
+ end
30
+
31
+ def as_parent_key
32
+ raise DataSteroid::Errors::InvalidRecord.new('parent not persisted') unless persisted?
33
+ gcloud_key
27
34
  end
28
35
 
29
36
  def to_gcloud
@@ -70,10 +77,14 @@ module DataSteroid
70
77
  datastore.entity kind
71
78
  end
72
79
 
73
- protected
80
+ def create(*params)
81
+ new(*params).tap(&:save)
82
+ end
74
83
 
75
- def gcloud_key(id)
76
- datastore.key(kind, id)
84
+ def gcloud_key(id, parent: nil)
85
+ params = [[kind, id]]
86
+ params.unshift [parent.class.kind, parent.id] if parent.present?
87
+ datastore.key(*params)
77
88
  end
78
89
  end
79
90
  end
@@ -2,5 +2,8 @@ module DataSteroid
2
2
  module Errors
3
3
  class DatastoreError < StandardError
4
4
  end
5
+
6
+ class InvalidRecord < DatastoreError
7
+ end
5
8
  end
6
9
  end
@@ -17,7 +17,7 @@ module DataSteroid
17
17
  end
18
18
 
19
19
  to_gcloud.each_pair do |key, value|
20
- if key == 'id' && value.present?
20
+ if key == 'id' && (value.present? || parent.present?)
21
21
  gcloud_entity.key = gcloud_key unless gcloud_entity.persisted?
22
22
  elsif value.present?
23
23
  gcloud_entity[key] = value
@@ -27,7 +27,7 @@ module DataSteroid
27
27
  end
28
28
 
29
29
  if (result = self.class.datastore.save(gcloud_entity).first)
30
- send('id=', result.key.id) if id.nil?
30
+ send('id=', result.key.id || result.key.name) if id.nil?
31
31
  true
32
32
  else
33
33
  false
@@ -1,5 +1,5 @@
1
1
  module DataSteroid
2
2
  # version string
3
3
  # @api public
4
- VERSION = '0.5.5'
5
- end
4
+ VERSION = '0.6.2'
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_steroid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Tomio
@@ -14,58 +14,58 @@ dependencies:
14
14
  name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '4.2'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '4.2'
33
+ version: '5.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '4.2'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: coercible
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: google-cloud-datastore
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0.20'
61
+ version: '0.23'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '0.20'
68
+ version: '0.23'
69
69
  description: Simple ODM to Google Datastore based on Mongoid
70
70
  email: fabiotomio@gmail.com
71
71
  executables: []
@@ -73,21 +73,21 @@ extensions: []
73
73
  extra_rdoc_files: []
74
74
  files:
75
75
  - README.md
76
- - lib/data_steroid.rb
77
- - lib/data_steroid/criteria.rb
78
76
  - lib/data_steroid/criteria/findable.rb
79
77
  - lib/data_steroid/criteria/queryable.rb
80
- - lib/data_steroid/entity.rb
78
+ - lib/data_steroid/criteria.rb
81
79
  - lib/data_steroid/entity/initializable.rb
80
+ - lib/data_steroid/entity.rb
82
81
  - lib/data_steroid/errors/datastore_error.rb
83
- - lib/data_steroid/persistable.rb
84
82
  - lib/data_steroid/persistable/creatable.rb
85
83
  - lib/data_steroid/persistable/deletable.rb
86
84
  - lib/data_steroid/persistable/savable.rb
85
+ - lib/data_steroid/persistable.rb
87
86
  - lib/data_steroid/properties.rb
88
87
  - lib/data_steroid/timestamps.rb
89
88
  - lib/data_steroid/validatable.rb
90
89
  - lib/data_steroid/version.rb
90
+ - lib/data_steroid.rb
91
91
  homepage: http://github.com/b2beauty/data_steroid
92
92
  licenses:
93
93
  - MIT
@@ -98,17 +98,17 @@ require_paths:
98
98
  - lib
99
99
  required_ruby_version: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: 2.3.0
104
104
  required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  requirements:
106
- - - ">="
106
+ - - '>='
107
107
  - !ruby/object:Gem::Version
108
108
  version: '0'
109
109
  requirements: []
110
110
  rubyforge_project:
111
- rubygems_version: 2.6.7
111
+ rubygems_version: 2.0.14.1
112
112
  signing_key:
113
113
  specification_version: 4
114
114
  summary: Google Datastore ODM