has_alter_ego 0.0.3 → 0.0.4
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.md +4 -0
- data/README.md +26 -8
- data/Rakefile +3 -3
- data/lib/has_alter_ego.rb +11 -7
- data/test/db/fixtures/alter_egos/cars.yml +3 -0
- data/test/db/fixtures/alter_egos/sellers.yml +5 -0
- data/test/has_alter_ego_test.rb +34 -0
- data/test/test_helper.rb +10 -0
- metadata +5 -4
data/Changelog.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
# 0.0.4 (2010-06-11)
|
2
|
+
* fix some bugs esp. wrt associations
|
3
|
+
* added a on_seed hook which allows for custom login on seed
|
4
|
+
|
1
5
|
# 0.0.3 (2010-06-10)
|
2
6
|
* Add a rake task for dumping the current database objects into an alter_egos YAML file
|
3
7
|
* Do not bring back destroyed objects
|
data/README.md
CHANGED
@@ -7,11 +7,6 @@ overridden it in the database.
|
|
7
7
|
# Installation
|
8
8
|
|
9
9
|
## Rails 2.3.x
|
10
|
-
### As a plugin
|
11
|
-
script/plugin install git://github.com/aduffeck/has_alter_ego.git
|
12
|
-
script/generate has_alter_ego
|
13
|
-
rake db:migrate
|
14
|
-
|
15
10
|
### As a gem
|
16
11
|
Add the following line to your **config/environment.rb** file:
|
17
12
|
config.gem "has_alter_ego"
|
@@ -20,12 +15,13 @@ Then
|
|
20
15
|
script/generate has_alter_ego
|
21
16
|
rake db:migrate
|
22
17
|
|
23
|
-
## Rails 3
|
24
18
|
### As a plugin
|
25
|
-
|
26
|
-
|
19
|
+
script/plugin install git://github.com/aduffeck/has_alter_ego.git
|
20
|
+
script/generate has_alter_ego
|
27
21
|
rake db:migrate
|
28
22
|
|
23
|
+
|
24
|
+
## Rails 3
|
29
25
|
### As a gem
|
30
26
|
Add the following line to your **Gemfile** file:
|
31
27
|
gem "has_alter_ego"
|
@@ -34,6 +30,12 @@ Then
|
|
34
30
|
rails generate has_alter_ego
|
35
31
|
rake db:migrate
|
36
32
|
|
33
|
+
### As a plugin
|
34
|
+
rails plugin install git://github.com/aduffeck/has_alter_ego.git
|
35
|
+
rails generate has_alter_ego
|
36
|
+
rake db:migrate
|
37
|
+
|
38
|
+
|
37
39
|
# Usage
|
38
40
|
## General
|
39
41
|
The seed data is defined in YAML files called after the model's table. The files are expected in **db/fixtures/alter_egos**.
|
@@ -122,6 +124,22 @@ If you don't want to inherit changes for an object without actually modifying it
|
|
122
124
|
@car.alter_ego_state
|
123
125
|
=> "default"
|
124
126
|
|
127
|
+
# Custom logic on seed
|
128
|
+
|
129
|
+
has_alter_ego provides a hook for adding custom logic when an object is created or updated from the seed definitions.
|
130
|
+
Just add a method *on_seed(attributes)* to your Model and you'll have access to all the seed attributes.
|
131
|
+
|
132
|
+
**Note:** You should not call save from within the hook or the objects will be marked as modified.
|
133
|
+
|
134
|
+
Example:
|
135
|
+
class Car < ActiveRecord::Base
|
136
|
+
has_alter_ego
|
137
|
+
|
138
|
+
def on_seed(attributes)
|
139
|
+
self.price = attributes["price_without_vat"] * VAT_FACTOR
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
125
143
|
# Generating seed data from the database
|
126
144
|
|
127
145
|
has_alter_ego has a rake task for dumping the current database content into a seed file. It is called like this:
|
data/Rakefile
CHANGED
@@ -17,10 +17,10 @@ end
|
|
17
17
|
desc 'Generate documentation for the has_alter_ego plugin.'
|
18
18
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
19
19
|
rdoc.rdoc_dir = 'rdoc'
|
20
|
-
rdoc.title = '
|
20
|
+
rdoc.title = 'HasAlterEgo'
|
21
21
|
rdoc.options << '--line-numbers' << '--inline-source'
|
22
|
-
rdoc.rdoc_files.include('README')
|
22
|
+
rdoc.rdoc_files.include('README.md')
|
23
23
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
24
24
|
end
|
25
25
|
|
26
|
-
Rake::GemPackageTask.new(eval(File.read("has_alter_ego.gemspec"))) { |pkg| }
|
26
|
+
Rake::GemPackageTask.new(eval(File.read("has_alter_ego.gemspec"))) { |pkg| }
|
data/lib/has_alter_ego.rb
CHANGED
@@ -28,7 +28,7 @@ module HasAlterEgo
|
|
28
28
|
o = self.new
|
29
29
|
o[self.primary_key] = space
|
30
30
|
o.save_without_alter_ego
|
31
|
-
o.
|
31
|
+
o.delete
|
32
32
|
return
|
33
33
|
end
|
34
34
|
|
@@ -47,8 +47,10 @@ module HasAlterEgo
|
|
47
47
|
raise "There is already a #{db_object.class} with id #{db_object.id} in the database." unless db_object.has_alter_ego?
|
48
48
|
if db_object.alter_ego.state == 'default'
|
49
49
|
yml[primary_key].keys.each do |attr|
|
50
|
-
|
50
|
+
next unless db_object.respond_to?(attr)
|
51
|
+
db_object.send(attr+"=", yml[primary_key][attr])
|
51
52
|
end
|
53
|
+
db_object.on_seed(yml[primary_key])
|
52
54
|
db_object.save_without_alter_ego
|
53
55
|
end
|
54
56
|
else
|
@@ -59,10 +61,12 @@ module HasAlterEgo
|
|
59
61
|
db_object = self.new
|
60
62
|
db_object[self.primary_key] = primary_key
|
61
63
|
yml[primary_key].keys.each do |attr|
|
62
|
-
|
64
|
+
next unless db_object.respond_to?(attr)
|
65
|
+
db_object.send(attr+"=" , yml[primary_key][attr])
|
63
66
|
end
|
64
67
|
db_object.build_alter_ego
|
65
68
|
db_object.alter_ego.state = 'default'
|
69
|
+
db_object.on_seed(yml[primary_key])
|
66
70
|
db_object.save_without_alter_ego
|
67
71
|
end
|
68
72
|
end
|
@@ -112,10 +116,6 @@ module HasAlterEgo
|
|
112
116
|
self.alter_ego.save
|
113
117
|
end
|
114
118
|
|
115
|
-
def ban!
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
119
|
def reset
|
120
120
|
self.alter_ego.state = 'default'
|
121
121
|
self.alter_ego.save
|
@@ -123,6 +123,10 @@ module HasAlterEgo
|
|
123
123
|
self.class.parse_yml_for self[self.class.primary_key]
|
124
124
|
self.reload
|
125
125
|
end
|
126
|
+
|
127
|
+
def on_seed attributes
|
128
|
+
# Not implemented
|
129
|
+
end
|
126
130
|
end
|
127
131
|
end
|
128
132
|
end
|
data/test/has_alter_ego_test.rb
CHANGED
@@ -1,8 +1,20 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
+
|
4
|
+
class Seller < ActiveRecord::Base
|
5
|
+
has_and_belongs_to_many :cars
|
6
|
+
has_alter_ego
|
7
|
+
end
|
8
|
+
|
3
9
|
class Car < ActiveRecord::Base
|
4
10
|
has_many :tires
|
11
|
+
has_and_belongs_to_many :sellers
|
5
12
|
has_alter_ego
|
13
|
+
attr_accessor :tires_count
|
14
|
+
|
15
|
+
def on_seed attributes
|
16
|
+
self[:tires_count] = attributes["custom_data"]["tires"] if attributes["custom_data"]
|
17
|
+
end
|
6
18
|
end
|
7
19
|
|
8
20
|
class Bike < ActiveRecord::Base
|
@@ -172,4 +184,26 @@ class HasAlterEgoTest < Test::Unit::TestCase
|
|
172
184
|
Car.parse_yml
|
173
185
|
assert !Car.find_by_id(5)
|
174
186
|
end
|
187
|
+
|
188
|
+
def test_on_seed
|
189
|
+
assert_nil Car.find(1).tires_count
|
190
|
+
assert_equal 4, Car.find(4)[:tires_count]
|
191
|
+
end
|
192
|
+
|
193
|
+
def test_habtm
|
194
|
+
assert_equal [1,2], Car.find(1).seller_ids
|
195
|
+
assert_equal 2, Car.find(1).sellers.size
|
196
|
+
|
197
|
+
c = Car.find(1)
|
198
|
+
c.sellers = [Seller.first]
|
199
|
+
c.reload
|
200
|
+
|
201
|
+
assert_equal [Seller.first], c.sellers
|
202
|
+
assert_equal [Seller.first.id], c.seller_ids
|
203
|
+
|
204
|
+
c.reset
|
205
|
+
c.reload
|
206
|
+
|
207
|
+
assert_equal [1,2], c.seller_ids
|
208
|
+
end
|
175
209
|
end
|
data/test/test_helper.rb
CHANGED
@@ -19,6 +19,7 @@ silence_stream(STDOUT) do
|
|
19
19
|
create_table :cars do |t|
|
20
20
|
t.string :brand
|
21
21
|
t.string :model
|
22
|
+
t.integer :tires_count
|
22
23
|
end
|
23
24
|
|
24
25
|
create_table :bikes
|
@@ -32,5 +33,14 @@ silence_stream(STDOUT) do
|
|
32
33
|
t.string :name
|
33
34
|
t.string :color
|
34
35
|
end
|
36
|
+
|
37
|
+
create_table :sellers do |t|
|
38
|
+
t.string :name
|
39
|
+
end
|
40
|
+
create_table :cars_sellers, :id => false do |t|
|
41
|
+
t.integer :car_id
|
42
|
+
t.integer :seller_id
|
43
|
+
end
|
44
|
+
|
35
45
|
end
|
36
46
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_alter_ego
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Andr\xC3\xA9 Duffeck"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-11 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- rails/init.rb
|
41
41
|
- generators/has_alter_ego/templates/create_alter_egos.rb
|
42
42
|
- generators/has_alter_ego/has_alter_ego_generator.rb
|
43
|
+
- test/db/fixtures/alter_egos/sellers.yml
|
43
44
|
- test/db/fixtures/alter_egos/bikes.yml
|
44
45
|
- test/db/fixtures/alter_egos/cars.yml
|
45
46
|
- test/db/fixtures/alter_egos/drinks.yml
|