data_steroid 0.4.2 → 0.5.0

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