dymos 0.1.2 → 0.1.3

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: d120f06017607fb9eac8f20c509a8b7fc5251578
4
- data.tar.gz: 308faec3aef05cbc5d43de8d835879627ede7b7f
3
+ metadata.gz: 912347a161333fca91118262b83e43abe53d2d89
4
+ data.tar.gz: 18e35289cca3e09a2d8f4695772685fa3260717b
5
5
  SHA512:
6
- metadata.gz: 0c263b7024367346b0d221f5bef727c5ea03facf99db2f10e15c48952345890c4936e6c503bb05c2e02045b04d72d5f9be214ce5c556819676a5eb4666f496ff
7
- data.tar.gz: 915eda6da5fd254b974d9ac05e9dbf8f86315b4c59c9bfc6d39d361621222a01e5597a499b9ba4dacccd05e633b36e87de02aa884decc3862c9377f899c5eb91
6
+ metadata.gz: e1a4c85c416d29fa8f7f4a2e9d5a654c5c68aac9b48a5d0490596b8cbed2441c277a1421666e06772d10873492006ae6976c79972a60a2f30852bc5c17b93a22
7
+ data.tar.gz: 822c361c91bc0f0b62f3adc39964ebaaef8b1c177ce234345978cd880bc00481075584259ea02a6275ed39ca70c1ccaa9092fbde25eeadb44a8e1582a5d272e7
data/lib/dymos.rb CHANGED
@@ -25,6 +25,8 @@ module Aws
25
25
  alias :orig_format :format
26
26
  def format(obj)
27
27
  case obj
28
+ when TrueClass then { n:"1" }
29
+ when FalseClass then { n:"0" }
28
30
  when Time then { s: obj.iso8601 }
29
31
  else
30
32
  orig_format obj
data/lib/dymos/model.rb CHANGED
@@ -15,27 +15,42 @@ module Dymos
15
15
  super
16
16
  end
17
17
 
18
- def self.field(attr, type, default: nil, desc:nil)
18
+ def self.field(attr, type, default: nil, desc: nil)
19
+ fail StandardError('attribute name is invalid') if attr =~ /[\!\?]$/
20
+ fail StandardError('require "default" option') if(type == :bool && default.nil?)
21
+
19
22
  @fields ||= {}
20
23
  @fields[attr]={
21
- type: type,
22
- default: default
24
+ type: type,
25
+ default: default
23
26
  }
24
27
  define_attribute_methods attr
25
28
  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
- elsif type == :integer && val.present?
31
- val.to_i
32
- else
33
- val
29
+ val = read_attribute(attr) || default
30
+ return val if raw || !val.present?
31
+
32
+ case type
33
+ when :bool
34
+ to_b(val)
35
+ when :time
36
+ Time.parse val
37
+ when :integer
38
+ val.to_i
39
+ else
40
+ val
34
41
  end
42
+
35
43
  }
36
44
  define_method("#{attr}_type") { type }
37
45
  define_method("#{attr}_desc") { desc }
38
- define_method("#{attr}?") { !read_attribute(attr).nil? }
46
+ define_method("#{attr}?") do
47
+ val = self.send attr
48
+ if type == :bool
49
+ val
50
+ else
51
+ !val.nil?
52
+ end
53
+ end
39
54
  define_method("#{attr}=") do |value, initialize=false|
40
55
  value = value.iso8601 if self.class.fields.include?(attr) && value.is_a?(Time)
41
56
  write_attribute(attr, value, initialize)
@@ -123,5 +138,15 @@ module Dymos
123
138
  @attributes[name.to_sym] = value
124
139
  end
125
140
 
141
+ def to_b(val)
142
+ compare_value = val.class == String ? val.downcase : val
143
+ case compare_value
144
+ when "yes", "true", "ok", true, "1", 1, :true, :ok, :yes
145
+ true
146
+ else
147
+ false
148
+ end
149
+ end
150
+
126
151
  end
127
152
  end
data/lib/dymos/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dymos
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -1,4 +1,16 @@
1
1
  describe Dymos::Model do
2
+ describe "不正なfield" do
3
+ it "末尾に?は使えない" do
4
+ expect { Class.new(Dymos::Model) do
5
+ field "hoge?", :string
6
+ end }.to raise_error
7
+ end
8
+ it "type:boolには初期値が必須" do
9
+ expect { Class.new(Dymos::Model) do
10
+ field "hoge", :bool
11
+ end }.to raise_error
12
+ end
13
+ end
2
14
  class DummyUser < Dymos::Model
3
15
  table :dummy
4
16
  field :id, :string, desc: 'hoge'
@@ -6,6 +18,7 @@ describe Dymos::Model do
6
18
  field :email, :string
7
19
  field :list, :string_set
8
20
  field :count, :integer
21
+ field :enable, :bool, default: false
9
22
 
10
23
  field :created_at, :time
11
24
  field :updated_at, :time
@@ -51,6 +64,8 @@ describe Dymos::Model do
51
64
  client.put_item(table_name: 'dummy', item: {id: 'fuga', name: '次郎'})
52
65
  client.put_item(table_name: 'dummy', item: {id: 'piyo', name: '三郎'})
53
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})
54
69
 
55
70
  client.delete_table(table_name: 'post') if client.list_tables[:table_names].include?('post')
56
71
  client.create_table(
@@ -73,7 +88,7 @@ describe Dymos::Model do
73
88
 
74
89
  describe :fields do
75
90
  it do
76
- expect(DummyUser.fields.keys).to eq([:id, :name, :email, :list, :count, :created_at, :updated_at])
91
+ expect(DummyUser.fields.keys).to eq([:id, :name, :email, :list, :count, :enable, :created_at, :updated_at])
77
92
  end
78
93
  end
79
94
  describe "クラスマクロのデフォルト値" do
@@ -93,7 +108,12 @@ describe Dymos::Model do
93
108
  it "bodyは'none'を返す" do
94
109
  expect(DummyModel.new.body).to eq('none')
95
110
  end
96
-
111
+ it "enable?はfalseを返す" do
112
+ model = DummyUser.new
113
+ expect(model.enable?).to eq(false)
114
+ model.enable = true
115
+ expect(model.enable?).to eq(true)
116
+ end
97
117
  it "上書きすることができる" do
98
118
  model = DummyModel.new
99
119
  model.id=1
@@ -201,6 +221,7 @@ describe Dymos::Model do
201
221
  user.id = 'aiueo'
202
222
  user.name = '四郎'
203
223
  user.email = 'hoge@sample.net'
224
+ user.enable = true
204
225
  expect(user.created_at).to eq(nil)
205
226
  now = Time.now
206
227
  Timecop.freeze(now)
@@ -229,7 +250,7 @@ describe Dymos::Model do
229
250
  describe :all do
230
251
  it "すべてのユーザを抽出" do
231
252
  users = DummyUser.all
232
- expect(users.size).to eq(5)
253
+ expect(users.size).to eq(7)
233
254
  end
234
255
  end
235
256
 
@@ -291,6 +312,14 @@ describe Dymos::Model do
291
312
  expect(user.destroyed?).to eq(true)
292
313
  expect(DummyUser.get.key(id: 'musashi').execute).to eq(nil)
293
314
  end
315
+ it 'enableはBoolとして扱われる' do
316
+ user = DummyUser.get.key(id: 'enable_id').execute
317
+ expect(user.enable).to eq(true)
318
+ expect(user.enable?).to eq(true)
319
+ user = DummyUser.get.key(id: 'disable_id').execute
320
+ expect(user.enable).to eq(false)
321
+ expect(user.enable?).to eq(false)
322
+ end
294
323
  end
295
324
  end
296
325
  end
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.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - hoshina85
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-29 00:00:00.000000000 Z
11
+ date: 2014-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler