data_steroid 0.4.2 → 0.5.0
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 +12 -9
- data/lib/data_steroid.rb +1 -0
- data/lib/data_steroid/entity/initializable.rb +11 -6
- data/lib/data_steroid/properties.rb +33 -11
- data/lib/data_steroid/timestamps.rb +3 -3
- data/lib/data_steroid/version.rb +5 -0
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7a5e186754d83c716132814eb37a50587ffb4415
|
4
|
+
data.tar.gz: db5467bec9ee15e7f7076f2d7394f1648be267dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6adfc8f9715a5c1e95c0c31840a6d323d89e11fecdc8548bf783658087fbd771754439daaf1c199b587f5d57545cd06aac3c3839312dcaa86cf8fe9d35bee2f
|
7
|
+
data.tar.gz: f1107102e8d085a10636412b5f31396cc063c30a67f9c9b902b91ad2e263e3829eded2421520ae363a1ed68bb3a181ae80e3708ae074a3530f4d5be81f7a5022
|
data/README.md
CHANGED
@@ -4,13 +4,8 @@ DataSteroid is an ODM (Object-Document-Mapper) framework for Google Datastore in
|
|
4
4
|
|
5
5
|
Install
|
6
6
|
-------
|
7
|
-
```sh
|
8
|
-
gem build data_steroid
|
9
|
-
gem install data_steroid-<version>.gem
|
10
|
-
```
|
11
|
-
or
|
12
7
|
```ruby
|
13
|
-
gem 'data_steroid'
|
8
|
+
gem 'data_steroid'
|
14
9
|
```
|
15
10
|
|
16
11
|
Configure
|
@@ -33,8 +28,8 @@ class Product
|
|
33
28
|
kind 'Product' # Datastore Kind
|
34
29
|
|
35
30
|
property :barcode
|
36
|
-
property :name
|
37
|
-
property :price
|
31
|
+
property :name, String # optional type
|
32
|
+
property :price, Float # optional type
|
38
33
|
|
39
34
|
validates :barcode, :name, :price, presence: true
|
40
35
|
end
|
@@ -42,7 +37,7 @@ end
|
|
42
37
|
# Example
|
43
38
|
|
44
39
|
# Create and save
|
45
|
-
product = Product.new
|
40
|
+
product = Product.new(barcode: '7891231231234', name: 'iPhone 7', price: 3000.00)
|
46
41
|
product.save
|
47
42
|
|
48
43
|
# Find and update
|
@@ -61,3 +56,11 @@ all_products_ordered = Product.fetch Product.query.order('name', :asc)
|
|
61
56
|
iphones = Product.fetch Product.query.where('name', '=', 'iPhone 7')
|
62
57
|
|
63
58
|
```
|
59
|
+
|
60
|
+
Develop
|
61
|
+
-------
|
62
|
+
|
63
|
+
```sh
|
64
|
+
gem build data_steroid
|
65
|
+
gem install data_steroid-<version>.gem
|
66
|
+
```
|
data/lib/data_steroid.rb
CHANGED
@@ -5,13 +5,18 @@ module DataSteroid
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
7
|
included do
|
8
|
-
def initialize(
|
8
|
+
def initialize(params = nil)
|
9
9
|
set_default_values
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
case params
|
11
|
+
when Google::Cloud::Datastore::Entity
|
12
|
+
properties_names.each do |property_name|
|
13
|
+
send("#{property_name}=", params[property_name.to_s])
|
14
|
+
end
|
15
|
+
send('id=', params.key.id)
|
16
|
+
when ::Hash
|
17
|
+
params.each_pair do |key, value|
|
18
|
+
send("#{key}=", value)
|
19
|
+
end
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'coercible'
|
2
|
+
|
1
3
|
module DataSteroid
|
2
4
|
# Define behaviour to properties of entity.
|
3
5
|
module Properties
|
@@ -6,6 +8,10 @@ module DataSteroid
|
|
6
8
|
included do
|
7
9
|
class_attribute :properties
|
8
10
|
|
11
|
+
class << self
|
12
|
+
alias_method :property, :add_property
|
13
|
+
end
|
14
|
+
|
9
15
|
self.properties = {}
|
10
16
|
|
11
17
|
property :id # Default property
|
@@ -14,7 +20,7 @@ module DataSteroid
|
|
14
20
|
if properties.is_a? ::Hash
|
15
21
|
properties.each_pair { |key, value| send("#{key}=", value) }
|
16
22
|
else
|
17
|
-
raise Datastore::Errors::DatastoreError.new 'Properties params
|
23
|
+
raise Datastore::Errors::DatastoreError.new 'Properties params must be a Hash'
|
18
24
|
end
|
19
25
|
rescue
|
20
26
|
raise Datastore::Errors::DatastoreError.new 'Property invalid'
|
@@ -24,32 +30,48 @@ module DataSteroid
|
|
24
30
|
properties.keys
|
25
31
|
end
|
26
32
|
|
33
|
+
protected
|
34
|
+
|
27
35
|
def set_default_values
|
28
36
|
properties.each_pair do |name, options|
|
29
|
-
|
37
|
+
next unless options.key? :default
|
38
|
+
default = options[:default]
|
39
|
+
# Default might be a lambda
|
40
|
+
value = default.respond_to?(:call) ? default.call : default
|
41
|
+
send("#{name}=", value)
|
30
42
|
end
|
31
43
|
end
|
44
|
+
|
45
|
+
def coercer
|
46
|
+
@coercer ||= Coercible::Coercer.new
|
47
|
+
end
|
32
48
|
end
|
33
49
|
|
34
50
|
class_methods do
|
35
51
|
protected
|
36
52
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
create_accessors(name)
|
53
|
+
def add_property(name, *args)
|
54
|
+
options = args[-1].is_a?(Hash) ? args.pop : {}
|
55
|
+
options[:type] = args[0] if args[0].is_a?(Class)
|
56
|
+
properties[name.to_s] = options
|
57
|
+
create_accessors(name, options)
|
58
|
+
self
|
44
59
|
end
|
45
60
|
|
46
61
|
# https://www.leighhalliday.com/ruby-metaprogramming-creating-methods
|
47
|
-
def create_accessors(name)
|
62
|
+
def create_accessors(name, options)
|
48
63
|
define_method(name) do # Define get method
|
49
64
|
instance_variable_get("@#{name}")
|
50
65
|
end
|
66
|
+
|
51
67
|
define_method("#{name}=") do |value| # Define set method
|
52
|
-
|
68
|
+
coerced_value =
|
69
|
+
if options[:type]
|
70
|
+
coercer[value.class].send("to_#{options[:type].to_s.downcase}", value)
|
71
|
+
else
|
72
|
+
value
|
73
|
+
end
|
74
|
+
instance_variable_set("@#{name}", coerced_value)
|
53
75
|
end
|
54
76
|
end
|
55
77
|
end
|
@@ -6,12 +6,12 @@ module DataSteroid
|
|
6
6
|
extend ActiveSupport::Concern
|
7
7
|
|
8
8
|
included do
|
9
|
-
property :created_at, default: DateTime.now
|
9
|
+
property :created_at, default: ->{ DateTime.now }
|
10
10
|
property :updated_at
|
11
11
|
|
12
|
-
before_save :
|
12
|
+
before_save :set_updated_at
|
13
13
|
|
14
|
-
def
|
14
|
+
def set_updated_at
|
15
15
|
self.updated_at = DateTime.now
|
16
16
|
end
|
17
17
|
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.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Tomio
|
@@ -11,19 +11,19 @@ cert_chain: []
|
|
11
11
|
date: 2016-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activemodel
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '4.2'
|
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: '
|
26
|
+
version: '4.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,19 +39,33 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '4.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: coercible
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
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
|
-
version: '
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: google-cloud-datastore
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.20'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.20'
|
55
69
|
description: Simple ODM to Google Datastore based on Mongoid
|
56
70
|
email: fabiotomio@gmail.com
|
57
71
|
executables: []
|
@@ -73,6 +87,7 @@ files:
|
|
73
87
|
- lib/data_steroid/properties.rb
|
74
88
|
- lib/data_steroid/timestamps.rb
|
75
89
|
- lib/data_steroid/validatable.rb
|
90
|
+
- lib/data_steroid/version.rb
|
76
91
|
homepage: http://github.com/b2beauty/data_steroid
|
77
92
|
licenses:
|
78
93
|
- MIT
|