dymos 0.1.2 → 0.1.3

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