data_steroid 0.5.5 → 0.6.2

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 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