cia 0.3.4 → 0.3.5

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cia (0.3.4)
4
+ cia (0.3.5)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/mgrosser/code/tools/cia
3
3
  specs:
4
- cia (0.3.3)
4
+ cia (0.3.4)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: /Users/mgrosser/code/tools/cia
3
3
  specs:
4
- cia (0.3.3)
4
+ cia (0.3.4)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/lib/cia.rb CHANGED
@@ -32,12 +32,13 @@ module CIA
32
32
 
33
33
  return if not message and changes.empty? and action.to_s == "update"
34
34
 
35
- event = CIA::Event.create!(current_transaction.merge(
35
+ event = CIA::Event.new(current_transaction.merge(
36
36
  :action => action.to_s,
37
37
  :source => source,
38
38
  :message => message
39
39
  ))
40
- event.record_attribute_changes!(changes)
40
+ event.add_attribute_changes(changes)
41
+ event.save!
41
42
  event
42
43
  rescue Object => e
43
44
  if exception_handler
@@ -19,9 +19,10 @@ module CIA
19
19
  end
20
20
 
21
21
  # tested via transaction_test.rb
22
- def record_attribute_changes!(changes)
22
+ def add_attribute_changes(changes)
23
23
  changes.each do |attribute_name, (old_value, new_value)|
24
- attribute_changes.create!(
24
+ attribute_changes.build(
25
+ :event => self,
25
26
  :attribute_name => attribute_name,
26
27
  :old_value => old_value,
27
28
  :new_value => new_value,
@@ -1,3 +1,3 @@
1
1
  module CIA
2
- VERSION = '0.3.4'
2
+ VERSION = '0.3.5'
3
3
  end
@@ -1,6 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe CIA::AttributeChange do
4
+ it "stores times as db format" do
5
+ create_change(:old_value => Time.at(123456789)).reload.old_value.sub(/\.\d+$/,'').should == "1973-11-29 13:33:09"
6
+ end
7
+
8
+ it "stores dates as db format" do
9
+ create_change(:old_value => Date.new(2012)).reload.old_value.should == "2012-01-01"
10
+ end
11
+
12
+ it "stores booleans as db format" do
13
+ create_change(:old_value => false).reload.old_value.should == "f"
14
+ create_change(:old_value => true).reload.old_value.should == "t"
15
+ end
16
+
17
+ it "stores nil as nil" do
18
+ create_change(:old_value => nil).reload.old_value.should == nil
19
+ end
20
+
4
21
  it "delegates create_at to event" do
5
22
  t = Time.now
6
23
  event = CIA::Event.new(:created_at => t)
@@ -119,32 +119,40 @@ describe CIA do
119
119
  it "records attribute creations" do
120
120
  source = Car.create!
121
121
  source.wheels = 4
122
- event = CIA.record(:update, source)
122
+ event = CIA.record(:update, source).reload
123
123
 
124
124
  parse_event_changes(event).should == [["wheels", nil, "4"]]
125
125
  end
126
126
 
127
+ it "can act on attributes in before_save" do
128
+ x = nil
129
+ CIA.current_transaction[:hacked_before_save_action] = lambda{|event| x = event.attribute_changes.size }
130
+ source = Car.create!
131
+ source.wheels = 4
132
+ CIA.record(:update, source)
133
+ x.should == 1
134
+ end
135
+
127
136
  it "records multiple attributes" do
128
137
  source = CarWith3Attributes.create!
129
138
  source.wheels = 4
130
139
  source.drivers = 2
131
140
  source.color = "red"
132
- event = CIA.record(:update, source)
133
-
141
+ event = CIA.record(:update, source).reload
134
142
  parse_event_changes(event).should =~ [["wheels", nil, "4"], ["drivers", nil, "2"], ["color", nil, "red"]]
135
143
  end
136
144
 
137
145
  it "records attribute changes" do
138
146
  source = Car.create!(:wheels => 2)
139
147
  source.wheels = 4
140
- event = CIA.record(:update, source)
148
+ event = CIA.record(:update, source).reload
141
149
  parse_event_changes(event).should == [["wheels", "2", "4"]]
142
150
  end
143
151
 
144
152
  it "records attribute deletions" do
145
153
  source = Car.create!(:wheels => 2)
146
154
  source.wheels = nil
147
- event = CIA.record(:update, source)
155
+ event = CIA.record(:update, source).reload
148
156
  parse_event_changes(event).should == [["wheels", "2", nil]]
149
157
  end
150
158
 
@@ -68,3 +68,13 @@ def create_change(options={})
68
68
  event = options.delete(:event) || create_event
69
69
  CIA::AttributeChange.create!({:event => event, :source => event.source, :attribute_name => "bar"}.merge(options))
70
70
  end
71
+
72
+ # simulate a hacked cia event
73
+ CIA::Event.class_eval do
74
+ before_save :hacked_before_save
75
+ attr_accessor :hacked_before_save_action
76
+
77
+ def hacked_before_save
78
+ hacked_before_save_action.call(self) if hacked_before_save_action
79
+ end
80
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
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: 2012-07-10 00:00:00.000000000 Z
12
+ date: 2012-09-11 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: michael@grosser.it
@@ -53,7 +53,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
53
  version: '0'
54
54
  segments:
55
55
  - 0
56
- hash: 1027248915022211509
56
+ hash: 4110523684065790258
57
57
  required_rubygems_version: !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
@@ -62,7 +62,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
62
62
  version: '0'
63
63
  segments:
64
64
  - 0
65
- hash: 1027248915022211509
65
+ hash: 4110523684065790258
66
66
  requirements: []
67
67
  rubyforge_project:
68
68
  rubygems_version: 1.8.24