active_nomad 0.0.2 → 0.0.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.
- data/CHANGELOG +4 -0
- data/README.markdown +28 -2
- data/lib/active_nomad/version.rb +1 -1
- data/lib/active_nomad.rb +16 -4
- data/spec/spec_helper.rb +0 -3
- data/spec/unit/active_nomad_spec.rb +24 -0
- metadata +4 -4
data/CHANGELOG
CHANGED
data/README.markdown
CHANGED
@@ -6,8 +6,8 @@ ActiveRecord objects with a customizable persistence strategy.
|
|
6
6
|
|
7
7
|
Sometimes you want an Active Record object that does not live in the database.
|
8
8
|
Perhaps it never needs to be persisted, or you'd like to store it in a cookie,
|
9
|
-
or
|
10
|
-
values, run validations, or fire callbacks.
|
9
|
+
or some other store, but it would still be handy to have ActiveRecord's ability
|
10
|
+
to cast values, run validations, or fire callbacks.
|
11
11
|
|
12
12
|
Ideally, the persistence strategy would be pluggable. With Active Nomad, it is!
|
13
13
|
|
@@ -41,6 +41,32 @@ Things to note:
|
|
41
41
|
* You may alternatively override `persist` in a subclass if you
|
42
42
|
don't want to register a proc for every instance.
|
43
43
|
|
44
|
+
## Transactions
|
45
|
+
|
46
|
+
In addition to customizing persistence, you can also customize
|
47
|
+
transaction semantics by overriding the `transaction` class method in
|
48
|
+
a base class. Example:
|
49
|
+
|
50
|
+
class RedisNomad < ActiveNomad::Base
|
51
|
+
def self.transaction
|
52
|
+
redis.multi
|
53
|
+
begin
|
54
|
+
yield
|
55
|
+
redis.exec
|
56
|
+
rescue Exception => e
|
57
|
+
redis.discard
|
58
|
+
raise
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.redis
|
63
|
+
@redis ||= Redis.new
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
`ActiveNomad::Base.transaction` simply calls the given block with no
|
68
|
+
real transaction semantics.
|
69
|
+
|
44
70
|
## Notes
|
45
71
|
|
46
72
|
Only ActiveRecord 2.3 compatible. ActiveRecord 3.0 has a more modular
|
data/lib/active_nomad/version.rb
CHANGED
data/lib/active_nomad.rb
CHANGED
@@ -27,6 +27,9 @@ module ActiveNomad
|
|
27
27
|
end.compact.sort.join('&')
|
28
28
|
end
|
29
29
|
|
30
|
+
#
|
31
|
+
# Recreate an object from a serialized string.
|
32
|
+
#
|
30
33
|
def self.deserialize(string)
|
31
34
|
params = string ? CGI.parse(string.strip) : {}
|
32
35
|
instance = new
|
@@ -54,7 +57,7 @@ module ActiveNomad
|
|
54
57
|
|
55
58
|
private
|
56
59
|
|
57
|
-
class FakeAdapter < ActiveRecord::ConnectionAdapters::AbstractAdapter
|
60
|
+
class FakeAdapter < ActiveRecord::ConnectionAdapters::AbstractAdapter # :nodoc:
|
58
61
|
def native_database_types
|
59
62
|
@native_database_types ||= Hash.new{|h,k| h[k] = k.to_s}
|
60
63
|
end
|
@@ -79,16 +82,25 @@ module ActiveNomad
|
|
79
82
|
reset_column_information
|
80
83
|
end
|
81
84
|
|
82
|
-
def columns
|
85
|
+
def columns # :nodoc:
|
83
86
|
@columns ||= []
|
84
87
|
end
|
85
88
|
|
86
|
-
|
87
|
-
|
89
|
+
def reset_column_information # :nodoc:
|
90
|
+
# Reset everything, except the column information.
|
88
91
|
columns = @columns
|
89
92
|
super
|
90
93
|
@columns = columns
|
91
94
|
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# Override to provide custom transaction semantics.
|
98
|
+
#
|
99
|
+
# The default #transaction simply yields to the given block.
|
100
|
+
#
|
101
|
+
def transaction
|
102
|
+
yield
|
103
|
+
end
|
92
104
|
end
|
93
105
|
|
94
106
|
self.abstract_class = true
|
data/spec/spec_helper.rb
CHANGED
@@ -235,4 +235,28 @@ describe ActiveNomad::Base do
|
|
235
235
|
it_should_roundtrip :boolean, true
|
236
236
|
it_should_roundtrip :boolean, false
|
237
237
|
end
|
238
|
+
|
239
|
+
describe ".transaction" do
|
240
|
+
before do
|
241
|
+
@class = Class.new(ActiveNomad::Base) do
|
242
|
+
cattr_accessor :transaction_called
|
243
|
+
def self.transaction
|
244
|
+
self.transaction_called = true
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
it "should be overridable to provide custom transaction semantics" do
|
250
|
+
instance = @class.new
|
251
|
+
instance.transaction{}
|
252
|
+
instance.transaction_called.should be_true
|
253
|
+
end
|
254
|
+
|
255
|
+
it "should be called by #save" do
|
256
|
+
instance = @class.new
|
257
|
+
instance.transaction_called.should be_false
|
258
|
+
instance.save
|
259
|
+
instance.transaction_called.should be_true
|
260
|
+
end
|
261
|
+
end
|
238
262
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_nomad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- George Ogata
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-29 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|