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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d75b802d4f14a15e7d8640a7bf8d95c00339ec53
4
- data.tar.gz: 11b36efab09ad1ae2161354185486f4adcbc6c7d
3
+ metadata.gz: 7a5e186754d83c716132814eb37a50587ffb4415
4
+ data.tar.gz: db5467bec9ee15e7f7076f2d7394f1648be267dd
5
5
  SHA512:
6
- metadata.gz: 8f33a2f2538917096de0ae5751c6d0fdc2818e8106dcf456d49b988dfd03074b1e1b259c49ad49b2a56bd7678a5ac22ff45b24662be2a1f61794a54d1e679259
7
- data.tar.gz: 8f052b9b11cd68979f65728b5d245051c312003b8b24e386d3b1eb71ee25b332d307f4f341693e0ed38b24ac9a221c1d6be3856e27757805ef0ced4dce051cd0
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', '~> 0.4.0', git: 'https://github.com/b2beauty/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 { barcode: '7891231231234', name: 'iPhone 7', price: 3000.00 }
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
@@ -17,4 +17,5 @@ module DataSteroid
17
17
  require 'data_steroid/errors/datastore_error'
18
18
  require 'data_steroid/persistable'
19
19
  require 'data_steroid/timestamps'
20
+ require 'data_steroid/version'
20
21
  end
@@ -5,13 +5,18 @@ module DataSteroid
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- def initialize(options = nil)
8
+ def initialize(params = nil)
9
9
  set_default_values
10
- if options.is_a? Google::Cloud::Datastore::Entity
11
- properties_names.each { |a| send("#{a}=", options[a.to_s]) }
12
- send('id=', options.key.id)
13
- elsif options.is_a? ::Hash
14
- options.each_pair { |key, value| send("#{key}=", value) }
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 need is Hash'
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
- send("#{name}=", properties[name][:default]) if options.key? :default
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 property(name, options = {})
38
- add_property(name.to_s, options)
39
- end
40
-
41
- def add_property(name, options)
42
- properties[name] = options
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
- instance_variable_set("@#{name}", value)
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 :update_updated_at
12
+ before_save :set_updated_at
13
13
 
14
- def update_updated_at
14
+ def set_updated_at
15
15
  self.updated_at = DateTime.now
16
16
  end
17
17
  end
@@ -0,0 +1,5 @@
1
+ module DataSteroid
2
+ # version string
3
+ # @api public
4
+ VERSION = '0.5.0'
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.4.2
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: google-cloud-datastore
14
+ name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.20'
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: '0.20'
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: activemodel
42
+ name: coercible
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '4.2'
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: '4.2'
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