dinamo 0.1.1 → 0.1.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: 56bab2629674a74a9919cfc6781e5d400215d486
4
- data.tar.gz: ba4761aff802517a7e8ce5c75c1260dcaf32fe56
3
+ metadata.gz: f9236c52dc01154fdf5f115443a79d207c9f3777
4
+ data.tar.gz: 3f14b1b5ab4d34b35a1f7ffefd6702cf2f113d04
5
5
  SHA512:
6
- metadata.gz: 34aa8ba58dd4d595202df5b1d769e7f68366364d0db6dc8712fc97bb36a63e3ece92bedeaeadaf10b5e599064cec2be2dc80d9a6a6e871a071250124074aa645
7
- data.tar.gz: 5c8edbb7e455b97665cf0cc6d273a55e0cbdbe6bb7afa91ae4a806504a2dc5de8c218520f7b2c47fdd0486c7e31e3f51df71b38f90d63ff6eeed9265f3672acb
6
+ metadata.gz: 857e718c30243a71349767f0d72255d0a73dfc4eeef4c4259c76de7d2b9bc62a1777cf4f937b1881f5dbd735a216d79465f4782a012bf117d7b7602621ddf317
7
+ data.tar.gz: ecde0c36408095d0874c6e3e3399331b6eb3f413f262947cd25460a8055bc8ec5de760604e0b586bdb6406a2fb6113443f41b4218ce0775a338317129df0d2bc
@@ -50,7 +50,7 @@ module Dinamo
50
50
 
51
51
  def delete(key)
52
52
  find_or_abort!(**key)
53
- @database.update_item(
53
+ @database.delete_item(
54
54
  table_name: @table_name,
55
55
  key: key
56
56
  )
@@ -35,6 +35,14 @@ module Dinamo
35
35
  def table_name=(name)
36
36
  @table_name = name
37
37
  end
38
+
39
+ def strict(bool)
40
+ @strict = bool
41
+ end
42
+
43
+ def strict?
44
+ @strict.nil? ? true : @strict
45
+ end
38
46
  end
39
47
 
40
48
  default_casters do
@@ -15,6 +15,9 @@ module Dinamo
15
15
  silent_assign(**attributes)
16
16
  self.class.define_attribute_methods(*attributes.keys)
17
17
  end
18
+ after(:initialize) do
19
+ @attributes = self.class.default_values.merge(@attributes)
20
+ end
18
21
 
19
22
  before :attribute_update do |attribute, value|
20
23
  pkey = primary_keys[attribute]
@@ -22,6 +25,13 @@ module Dinamo
22
25
  raise Exceptions::PrimaryKeyError, "%p cannot be modified" % attribute
23
26
  end
24
27
  end
28
+
29
+ after :attribute_update do |attribute, value|
30
+ unless self.class.strict? ||
31
+ self.class.supported_fields.find { |key| key.name == attribute.to_s }
32
+ attributes.delete(attribute)
33
+ end
34
+ end
25
35
  end
26
36
 
27
37
  module ClassMethods
@@ -52,6 +62,11 @@ module Dinamo
52
62
  attribute_methods << attr
53
63
  end
54
64
 
65
+ def default_values
66
+ Hash[supported_fields.select { |field| not field.default.nil? }
67
+ .map { |field| [field.name, field.default] }].with_indifferent_access
68
+ end
69
+
55
70
  def primary_keys
56
71
  @primary_keys ||= {}
57
72
  end
@@ -138,19 +153,20 @@ module Dinamo
138
153
  alias equal? ==
139
154
 
140
155
  def primary_keys
141
- @primary_keys ||= self.class.primary_keys.inject({}) do |keys, (_, key)|
156
+ self.class.primary_keys.inject({}) do |keys, (_, key)|
142
157
  keys.merge(key => attributes[key])
143
158
  end
144
159
  end
145
160
 
146
161
  class Key
147
- attr_reader :name, :type
162
+ attr_reader :name, :type, :default
148
163
 
149
- def initialize(name, type: nil, required: false, primary: false, **options)
150
- @name = name
151
- @type = type
164
+ def initialize(name, type: nil, required: false, primary: false, default: nil, **options)
165
+ @name = name
166
+ @type = type
152
167
  @required = required
153
- @primary = primary
168
+ @primary = primary
169
+ @default = default
154
170
  end
155
171
 
156
172
  def required?
@@ -17,7 +17,13 @@ module Dinamo
17
17
  item = adapter.get(**keys).item
18
18
  fail Exceptions::RecordNotFoundError,
19
19
  "Corresponding record (%p) can not be found" % keys unless item
20
- new(**symbolize(item))
20
+ object = new(**symbolize(item))
21
+ object.new_record = false
22
+ object
23
+ end
24
+
25
+ def exist?(**keys)
26
+ adapter.exist?(**keys)
21
27
  end
22
28
 
23
29
  def create(attributes = nil, &block)
@@ -2,9 +2,6 @@ class Dinamo::Model
2
2
  module Validation
3
3
  class PresenceValidator < EachValidator
4
4
  def validate_each(record, key, value)
5
- #p record
6
- #p key
7
- #p value
8
5
  record.errors.add(key, :blank) if value.blank?
9
6
  end
10
7
  end
@@ -1,3 +1,3 @@
1
1
  module Dinamo
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dinamo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - namusyaka
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-16 00:00:00.000000000 Z
11
+ date: 2016-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  version: '0'
161
161
  requirements: []
162
162
  rubyforge_project:
163
- rubygems_version: 2.4.5.1
163
+ rubygems_version: 2.5.1
164
164
  signing_key:
165
165
  specification_version: 4
166
166
  summary: DynamoDB ORM for Ruby