dymos 0.1.3 → 0.1.4

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: 912347a161333fca91118262b83e43abe53d2d89
4
- data.tar.gz: 18e35289cca3e09a2d8f4695772685fa3260717b
3
+ metadata.gz: 4f5e6582dcf6a0992c22f3d13d6fcb87fec0bd0f
4
+ data.tar.gz: bc4a0800891429d8a80eeeeb08c2250f594c3709
5
5
  SHA512:
6
- metadata.gz: e1a4c85c416d29fa8f7f4a2e9d5a654c5c68aac9b48a5d0490596b8cbed2441c277a1421666e06772d10873492006ae6976c79972a60a2f30852bc5c17b93a22
7
- data.tar.gz: 822c361c91bc0f0b62f3adc39964ebaaef8b1c177ce234345978cd880bc00481075584259ea02a6275ed39ca70c1ccaa9092fbde25eeadb44a8e1582a5d272e7
6
+ metadata.gz: 1053e6b53a07c7cd72357860c883e46b5d38151fb3fe0f0cca29391a36501814b21359442c21d20c64b0b1c875b37a3983020cc3cd705758104e2513883e32ce
7
+ data.tar.gz: 1204f174b48bc4a007bfa973738f5e4c06d03e7eab8e6a03e3c38dfefbd05935669ae833ee49c4407ab307e477d3a355aa947c47f8ca924c003d8d20fc04d8e7
data/lib/dymos/model.rb CHANGED
@@ -5,10 +5,13 @@ module Dymos
5
5
  class Model
6
6
  include ActiveModel::Model
7
7
  include ActiveModel::Dirty
8
+ include ActiveModel::Callbacks
8
9
  include Dymos::Persistence
9
10
  extend Dymos::Command
10
11
  attr_accessor :metadata
11
12
 
13
+ define_model_callbacks :save
14
+
12
15
  def initialize(params={})
13
16
  @attributes={}
14
17
  send :attributes=, params, true
@@ -17,7 +20,7 @@ module Dymos
17
20
 
18
21
  def self.field(attr, type, default: nil, desc: nil)
19
22
  fail StandardError('attribute name is invalid') if attr =~ /[\!\?]$/
20
- fail StandardError('require "default" option') if(type == :bool && default.nil?)
23
+ fail StandardError('require "default" option') if (type == :bool && default.nil?)
21
24
 
22
25
  @fields ||= {}
23
26
  @fields[attr]={
@@ -25,10 +28,12 @@ module Dymos
25
28
  default: default
26
29
  }
27
30
  define_attribute_methods attr
31
+
32
+ define_model_callbacks attr
28
33
  define_method(attr) { |raw=false|
34
+ run_callbacks attr do
29
35
  val = read_attribute(attr) || default
30
36
  return val if raw || !val.present?
31
-
32
37
  case type
33
38
  when :bool
34
39
  to_b(val)
@@ -39,6 +44,7 @@ module Dymos
39
44
  else
40
45
  val
41
46
  end
47
+ end
42
48
 
43
49
  }
44
50
  define_method("#{attr}_type") { type }
@@ -51,9 +57,13 @@ module Dymos
51
57
  !val.nil?
52
58
  end
53
59
  end
60
+
61
+ define_model_callbacks :"set_#{attr}"
54
62
  define_method("#{attr}=") do |value, initialize=false|
63
+ run_callbacks :"set_#{attr}" do
55
64
  value = value.iso8601 if self.class.fields.include?(attr) && value.is_a?(Time)
56
65
  write_attribute(attr, value, initialize)
66
+ end
57
67
  end
58
68
  end
59
69
 
@@ -20,13 +20,17 @@ module Dymos
20
20
  end
21
21
 
22
22
  def save(*)
23
- create_or_update
23
+ run_callbacks :save do
24
+ create_or_update
25
+ end
24
26
  rescue => e
25
27
  false
26
28
  end
27
29
 
28
30
  def save!(*)
29
- create_or_update || raise(Dymos::RecordNotSaved)
31
+ run_callbacks :save do
32
+ create_or_update || raise(Dymos::RecordNotSaved)
33
+ end
30
34
  end
31
35
 
32
36
  def delete
data/lib/dymos/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dymos
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
@@ -49,39 +49,39 @@ describe Dymos::Model do
49
49
 
50
50
  client.delete_table(table_name: 'dummy') if client.list_tables[:table_names].include?('dummy')
51
51
  client.create_table(
52
- table_name: 'dummy',
53
- attribute_definitions: [
54
- {attribute_name: 'id', attribute_type: 'S'}
55
- ],
56
- key_schema: [
57
- {attribute_name: 'id', key_type: 'HASH'}
58
- ],
59
- provisioned_throughput: {
60
- read_capacity_units: 1,
61
- write_capacity_units: 1,
62
- })
52
+ table_name: 'dummy',
53
+ attribute_definitions: [
54
+ {attribute_name: 'id', attribute_type: 'S'}
55
+ ],
56
+ key_schema: [
57
+ {attribute_name: 'id', key_type: 'HASH'}
58
+ ],
59
+ provisioned_throughput: {
60
+ read_capacity_units: 1,
61
+ write_capacity_units: 1,
62
+ })
63
63
  client.put_item(table_name: 'dummy', item: {id: 'hoge', name: '太郎', list: Set['a', 'b', 'c']})
64
64
  client.put_item(table_name: 'dummy', item: {id: 'fuga', name: '次郎'})
65
65
  client.put_item(table_name: 'dummy', item: {id: 'piyo', name: '三郎'})
66
66
  client.put_item(table_name: 'dummy', item: {id: 'musashi', name: '巴'}) #削除用
67
- client.put_item(table_name: 'dummy', item: {id: 'enable_id', name: 'enable', enable:1})
68
- client.put_item(table_name: 'dummy', item: {id: 'disable_id', name: 'disable', enable:0})
67
+ client.put_item(table_name: 'dummy', item: {id: 'enable_id', name: 'enable', enable: 1})
68
+ client.put_item(table_name: 'dummy', item: {id: 'disable_id', name: 'disable', enable: 0})
69
69
 
70
70
  client.delete_table(table_name: 'post') if client.list_tables[:table_names].include?('post')
71
71
  client.create_table(
72
- table_name: 'post',
73
- attribute_definitions: [
74
- {attribute_name: 'id', attribute_type: 'S'},
75
- {attribute_name: 'timestamp', attribute_type: 'N'},
76
- ],
77
- key_schema: [
78
- {attribute_name: 'id', key_type: 'HASH'},
79
- {attribute_name: 'timestamp', key_type: 'RANGE'},
80
- ],
81
- provisioned_throughput: {
82
- read_capacity_units: 1,
83
- write_capacity_units: 1,
84
- })
72
+ table_name: 'post',
73
+ attribute_definitions: [
74
+ {attribute_name: 'id', attribute_type: 'S'},
75
+ {attribute_name: 'timestamp', attribute_type: 'N'},
76
+ ],
77
+ key_schema: [
78
+ {attribute_name: 'id', key_type: 'HASH'},
79
+ {attribute_name: 'timestamp', key_type: 'RANGE'},
80
+ ],
81
+ provisioned_throughput: {
82
+ read_capacity_units: 1,
83
+ write_capacity_units: 1,
84
+ })
85
85
  end
86
86
 
87
87
  # let(:model) { Dummy.new }
@@ -323,5 +323,40 @@ describe Dymos::Model do
323
323
  end
324
324
  end
325
325
  end
326
+
327
+ describe :callbacks do
328
+ class DummyArticle < Dymos::Model
329
+ table :dummy
330
+ field :id, :integer
331
+ field :title, :string
332
+ field :updated_at, :time
333
+
334
+ after_set_title do
335
+ self.updated_at = Time.now
336
+ end
337
+ end
338
+ it 'タイトルが挿入されるとタイトルを2回繰り返して更新時間が自動的に挿入される' do
339
+ article = DummyArticle.new
340
+ expect(article.title).to eq(nil)
341
+ expect(article.updated_at).to eq(nil)
342
+ article.title="hoge"*2
343
+ expect(article.title).to eq("hogehoge")
344
+ expect(article.updated_at.class).to eq(Time)
345
+ end
346
+ class DummyTable < Dymos::Model
347
+ table :dummy
348
+ before_save do
349
+ fail StandardError
350
+ end
351
+ end
352
+ it "DummyTableをsaveするとfalseを返す" do
353
+ d = DummyTable.new
354
+ result=d.save
355
+ expect(result).to eq(false)
356
+ end
357
+ it "DummyTableをsave!すると例外を返す" do
358
+ expect{DummyTable.new.save!}.to raise_error
359
+ end
360
+ end
326
361
  end
327
362
 
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.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - hoshina85
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-04 00:00:00.000000000 Z
11
+ date: 2014-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler