dymos 0.0.7 → 0.0.8

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: 7b894d9241914afc233192cd1da3794a69b92ab2
4
- data.tar.gz: e76acf5fddcbff9209328938dd0cd8467443c92a
3
+ metadata.gz: bcc2ca53b227af59529709c865fbec440d59b561
4
+ data.tar.gz: ae44901535497e1e3c0d771aa89167c82659d9fb
5
5
  SHA512:
6
- metadata.gz: 881ce83d77e2fcf3fc8f65c2b55e8b3b3dc2e472b1c3c38023e0867fae7da79ccc68f730489e5fa87f593f7d7c33f826cc20b1f7fcb1cd16a10bca7a79519f2b
7
- data.tar.gz: c26127e28cb0b5e0712939cf7afda440567d22088dd877712eff84c395273de8a873c00024271e37a8635e1d4ff75dea3e87511d6c71a61ab9bc4f8e06aa31ec
6
+ metadata.gz: 163fafcafb4f7d3b9501a85a39f209aa5bf003af6cb7eb9d262178fca672d4b2a6d953dd0cd1b162678bde892f7eb73ce8f182928fa0fd2722f989b01f1a436d
7
+ data.tar.gz: c2e1d1b19404ec4fc4d94575393eea33841c32b67b19d8e5913df4c2253ac1c2a2b6b76ced15cca79459ff49207ff3c0e78fac002f3953c0dbb500deadc01b60
data/dymos.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rspec"
24
24
  spec.add_development_dependency "fake_dynamo"
25
25
  spec.add_development_dependency "coveralls"
26
+ spec.add_development_dependency "timecop"
26
27
  spec.add_development_dependency "activemodel", '~> 4.1.5'
27
28
 
28
29
  spec.add_dependency "aws-sdk-core", "2.0.0.rc15"
data/lib/dymos.rb CHANGED
@@ -16,3 +16,25 @@ require "dymos/version"
16
16
 
17
17
  module Dymos
18
18
  end
19
+
20
+ module Aws
21
+ module DynamoDB
22
+ class AttributeValue
23
+ class Marshaler
24
+ def format(obj)
25
+ case obj
26
+ when String then { s: obj }
27
+ when Time then { s: obj.iso8601 }
28
+ when Numeric then { n: obj.to_s }
29
+ when StringIO, IO then { b: obj.read }
30
+ when Set then format_set(obj)
31
+ else
32
+ msg = "unsupported type, expected Set, String, Numeric, or "
33
+ msg << "IO object, got #{obj.class.name}"
34
+ raise ArgumentError, msg
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
data/lib/dymos/model.rb CHANGED
@@ -22,16 +22,28 @@ module Dymos
22
22
  default: default
23
23
  }
24
24
  define_attribute_methods attr
25
- define_method(attr) { read_attribute(attr) || default }
25
+ define_method(attr) {|raw=false|
26
+ val=read_attribute(attr) || default
27
+ return val if raw
28
+ if type == :time && val.present?
29
+ Time.parse val
30
+ else
31
+ val
32
+ end
33
+ }
26
34
  define_method("#{attr}_type") { type }
27
35
  define_method("#{attr}?") { !read_attribute(attr).nil? }
28
- define_method("#{attr}=") { |value| write_attribute(attr, value) }
36
+ define_method("#{attr}=") do |value, initialize=false|
37
+ value = value.iso8601 if self.class.fields.include?(attr) && value.is_a?(Time)
38
+ write_attribute(attr, value, initialize)
39
+ end
29
40
  end
30
41
 
31
42
  def self.fields
32
43
  @fields
33
44
  end
34
45
 
46
+
35
47
  def self.table(name)
36
48
  define_singleton_method('table_name') { name }
37
49
  define_method('table_name') { name }
@@ -40,15 +52,15 @@ module Dymos
40
52
  def attributes=(attributes = {}, initialize = false)
41
53
  if attributes
42
54
  attributes.each do |attr, value|
43
- write_attribute(attr, value, initialize)
55
+ send("#{attr}=", value, initialize) if respond_to? "#{attr}="
44
56
  end
45
57
  end
46
58
  end
47
59
 
48
- def attributes
60
+ def attributes(raw=false)
49
61
  attrs = {}
50
62
  @attributes.keys.each do |name|
51
- attrs[name] = read_attribute(name)
63
+ attrs[name] = send "#{name}", raw if respond_to? "#{name}"
52
64
  end
53
65
  attrs
54
66
  end
@@ -21,7 +21,7 @@ module Dymos
21
21
 
22
22
  def save(*)
23
23
  create_or_update
24
- rescue
24
+ rescue => e
25
25
  false
26
26
  end
27
27
 
@@ -43,10 +43,17 @@ module Dymos
43
43
  end
44
44
 
45
45
  def _update_record()
46
- _create_record
46
+ send :updated_at=, Time.new.iso8601 if respond_to? :updated_at
47
+ _execute
47
48
  end
48
49
 
49
50
  def _create_record()
51
+ send :created_at=, Time.new.iso8601 if respond_to? :created_at
52
+ send :updated_at=, Time.new.iso8601 if respond_to? :updated_at
53
+ _execute
54
+ end
55
+
56
+ def _execute()
50
57
  result = self.class.put.item(attributes).execute
51
58
  changes_applied
52
59
  @new_record = false
data/lib/dymos/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dymos
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -6,6 +6,9 @@ describe Dymos::Model do
6
6
  field :email, :string
7
7
  field :list, :string_set
8
8
 
9
+ field :created_at, :time
10
+ field :updated_at, :time
11
+
9
12
  validates :id, :presence => true
10
13
  validates :name, :presence => true, length: {maximum: 8}
11
14
  validates :email, :presence => true, format: {with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i}
@@ -32,17 +35,17 @@ describe Dymos::Model do
32
35
 
33
36
  client.delete_table(table_name: 'dummy') if client.list_tables[:table_names].include?('dummy')
34
37
  client.create_table(
35
- table_name: 'dummy',
36
- attribute_definitions: [
37
- {attribute_name: 'id', attribute_type: 'S'}
38
- ],
39
- key_schema: [
40
- {attribute_name: 'id', key_type: 'HASH'}
41
- ],
42
- provisioned_throughput: {
43
- read_capacity_units: 1,
44
- write_capacity_units: 1,
45
- })
38
+ table_name: 'dummy',
39
+ attribute_definitions: [
40
+ {attribute_name: 'id', attribute_type: 'S'}
41
+ ],
42
+ key_schema: [
43
+ {attribute_name: 'id', key_type: 'HASH'}
44
+ ],
45
+ provisioned_throughput: {
46
+ read_capacity_units: 1,
47
+ write_capacity_units: 1,
48
+ })
46
49
  client.put_item(table_name: 'dummy', item: {id: 'hoge', name: '太郎', list: Set['a', 'b', 'c']})
47
50
  client.put_item(table_name: 'dummy', item: {id: 'fuga', name: '次郎'})
48
51
  client.put_item(table_name: 'dummy', item: {id: 'piyo', name: '三郎'})
@@ -50,26 +53,26 @@ describe Dymos::Model do
50
53
 
51
54
  client.delete_table(table_name: 'post') if client.list_tables[:table_names].include?('post')
52
55
  client.create_table(
53
- table_name: 'post',
54
- attribute_definitions: [
55
- {attribute_name: 'id', attribute_type: 'S'},
56
- {attribute_name: 'timestamp', attribute_type: 'N'},
57
- ],
58
- key_schema: [
59
- {attribute_name: 'id', key_type: 'HASH'},
60
- {attribute_name: 'timestamp', key_type: 'RANGE'},
61
- ],
62
- provisioned_throughput: {
63
- read_capacity_units: 1,
64
- write_capacity_units: 1,
65
- })
56
+ table_name: 'post',
57
+ attribute_definitions: [
58
+ {attribute_name: 'id', attribute_type: 'S'},
59
+ {attribute_name: 'timestamp', attribute_type: 'N'},
60
+ ],
61
+ key_schema: [
62
+ {attribute_name: 'id', key_type: 'HASH'},
63
+ {attribute_name: 'timestamp', key_type: 'RANGE'},
64
+ ],
65
+ provisioned_throughput: {
66
+ read_capacity_units: 1,
67
+ write_capacity_units: 1,
68
+ })
66
69
  end
67
70
 
68
71
  # let(:model) { Dummy.new }
69
72
 
70
73
  describe :fields do
71
74
  it do
72
- expect(DummyUser.fields.keys).to eq([:id, :name, :email, :list])
75
+ expect(DummyUser.fields.keys).to eq([:id, :name, :email, :list, :created_at, :updated_at])
73
76
  end
74
77
  end
75
78
  describe "クラスマクロのデフォルト値" do
@@ -189,13 +192,34 @@ describe Dymos::Model do
189
192
  end
190
193
  end
191
194
 
192
- describe :save do
195
+ describe :save, :order => :defined do
193
196
  it '書き込み' do
194
197
  user = DummyUser.new
195
198
  user.id = 'aiueo'
196
199
  user.name = '四郎'
197
- result = user.save
200
+ user.email = 'hoge@sample.net'
201
+ expect(user.created_at).to eq(nil)
202
+ now = Time.now
203
+ Timecop.freeze(now)
204
+ result = user.save!
198
205
  expect(result).to eq(true)
206
+ expect(user.created_at.to_s).to eq(now.to_s)
207
+ expect(user.updated_at.to_s).to eq(now.to_s)
208
+ end
209
+
210
+ it '更新' do
211
+ user = DummyUser.new
212
+ user.id = 'aiueo'
213
+ user.name = '四郎'
214
+ user.email = 'hoge@sample.net'
215
+ now = Time.now
216
+ Timecop.freeze(now)
217
+ user.save!
218
+ user.email = 'hoge@sample.net'
219
+ Timecop.freeze(now+1)
220
+ user.save!
221
+ expect(user.created_at.to_s).to eq(now.to_s)
222
+ expect(user.updated_at.to_s).not_to eq(now.to_s)
199
223
  end
200
224
  end
201
225
 
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,7 @@ Coveralls.wear!
3
3
 
4
4
  require 'rubygems'
5
5
  require 'bundler/setup'
6
-
6
+ require 'timecop'
7
7
  require 'dymos'
8
8
 
9
9
  I18n.enforce_available_locales = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dymos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - hoshina85
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-11 00:00:00.000000000 Z
11
+ date: 2014-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: timecop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: activemodel
85
99
  requirement: !ruby/object:Gem::Requirement