yeti 0.3.9 → 0.3.11

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.
data/lib/yeti/editor.rb CHANGED
@@ -87,6 +87,16 @@ module Yeti
87
87
  id.hash
88
88
  end
89
89
 
90
+ def attributes_for_persist
91
+ attributes = {}
92
+ self.class.attributes.each do |key|
93
+ value = send key
94
+ opts = self.class.attribute_options[key]
95
+ attributes[key] = format_input_for_persist value, opts
96
+ end
97
+ attributes
98
+ end
99
+
90
100
  protected
91
101
 
92
102
  # ~~~ methods to be implemented in subclasses ~~~
@@ -105,11 +115,15 @@ module Yeti
105
115
  opts[:from] = :edited unless opts.has_key? :from
106
116
  attribute_options[name.to_sym] = opts
107
117
  define_attribute_methods attributes
108
- from = case opts[:from].to_s
109
- when "" then "nil"
110
- when /^\./ then "self#{opts[:from]}"
111
- when /\./ then opts[:from]
112
- else "#{opts[:from]}.#{name}"
118
+ from = case opts[:from].to_s
119
+ when ""
120
+ "nil"
121
+ when /^\.(.*)/
122
+ $1
123
+ when /\./
124
+ opts[:from]
125
+ else
126
+ "#{opts[:from]}.#{name}"
113
127
  end
114
128
  class_eval """
115
129
  def #{name}
@@ -152,6 +166,20 @@ module Yeti
152
166
  value
153
167
  end
154
168
 
169
+ def format_input_for_persist(value, attribute_opts)
170
+ case attribute_opts[:as]
171
+ when :date
172
+ case value
173
+ when Date
174
+ value
175
+ else
176
+ Date.parse value
177
+ end
178
+ else
179
+ value
180
+ end
181
+ end
182
+
155
183
  def format_output(value, attribute_opts)
156
184
  value
157
185
  end
data/lib/yeti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yeti
2
- VERSION = "0.3.9"
2
+ VERSION = "0.3.11"
3
3
  end
@@ -242,12 +242,17 @@ describe ::Yeti::Editor do
242
242
  attribute :timestamp, from: ".timestamp_str"
243
243
  attribute :related_id, from: "related.id"
244
244
  attribute :invalid
245
+
245
246
  def related
246
247
  Struct.new(:id, :description).new 2, "Business man"
247
248
  end
249
+
250
+ private
251
+
248
252
  def timestamp_str
249
253
  "2001-01-01"
250
254
  end
255
+
251
256
  end.new context, existing_object
252
257
  end
253
258
  it "attribute default value comes from edited" do
@@ -325,4 +330,46 @@ describe ::Yeti::Editor do
325
330
  subject.hash.should == other.hash
326
331
  end
327
332
  end
333
+ describe "#attributes_for_persist" do
334
+ subject{ described_class.new context }
335
+ before{ described_class.stub(:new_object).with(context).and_return record }
336
+ context "parses date format" do
337
+ let :described_class do
338
+ Class.new ::Yeti::Editor do
339
+ attribute :valid_from, as: :date
340
+ end
341
+ end
342
+ let(:record){ mock :new_record, valid_from: Date.parse("2002-09-01") }
343
+ it "when a new value is assigned" do
344
+ subject.valid_from = "2002-12-31"
345
+ subject.attributes.should == {valid_from: "2002-12-31"}
346
+ subject.attributes_for_persist.should == {
347
+ valid_from: Date.parse("2002-12-31")
348
+ }
349
+ end
350
+ it "without new value" do
351
+ subject.attributes.should == {valid_from: Date.parse("2002-09-01")}
352
+ subject.attributes_for_persist.should == {
353
+ valid_from: Date.parse("2002-09-01")
354
+ }
355
+ end
356
+ end
357
+ context "formatting can be changed with #format_input_for_persist" do
358
+ let :described_class do
359
+ Class.new ::Yeti::Editor do
360
+ attribute :name
361
+ end
362
+ end
363
+ let(:record){ mock :new_record, name: nil }
364
+ it "uses format_input_for_persist on each value" do
365
+ subject.name = "Tony"
366
+ subject.should_receive(:format_input_for_persist).with(
367
+ "Tony",
368
+ attribute_name: :name,
369
+ from: :edited
370
+ ).and_return "Anthony"
371
+ subject.attributes_for_persist.should == {name: "Anthony"}
372
+ end
373
+ end
374
+ end
328
375
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yeti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.3.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-29 00:00:00.000000000 Z
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -116,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
116
  version: '0'
117
117
  segments:
118
118
  - 0
119
- hash: 8619314941788214
119
+ hash: -2480111560270293046
120
120
  required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements:
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: 8619314941788214
128
+ hash: -2480111560270293046
129
129
  requirements: []
130
130
  rubyforge_project:
131
131
  rubygems_version: 1.8.23