gardener 1.1.4 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/gardener.rb +26 -8
- metadata +3 -3
data/lib/gardener.rb
CHANGED
@@ -8,7 +8,11 @@ module Gardener
|
|
8
8
|
module ClassMethods
|
9
9
|
|
10
10
|
attr_accessor :infinite_choice
|
11
|
-
|
11
|
+
|
12
|
+
# Deletes the file associated with this class, so you can plant new seeds. Should be done once per growing season.
|
13
|
+
def harrow
|
14
|
+
File.delete(garden_path)
|
15
|
+
end
|
12
16
|
|
13
17
|
# Dump every instance of a class (every record in the database for a model) into a file
|
14
18
|
# to be reconstituted later.
|
@@ -54,7 +58,6 @@ module Gardener
|
|
54
58
|
sprout(str) unless str.blank?
|
55
59
|
end
|
56
60
|
|
57
|
-
|
58
61
|
# Helper function to reconstitute a record from it's yaml representation.
|
59
62
|
def sprout(str)
|
60
63
|
return false if str.blank?
|
@@ -88,6 +91,7 @@ module Gardener
|
|
88
91
|
|
89
92
|
if res.match(/y/i)
|
90
93
|
scott = bob
|
94
|
+
scott.instance_variable_set("@new_record", false) # Want to do an update, not an insert
|
91
95
|
scott.save
|
92
96
|
elsif res.match(/a/i)
|
93
97
|
raise "Salting the earth. Nothing will grow here for some time ..."
|
@@ -104,9 +108,6 @@ module Gardener
|
|
104
108
|
|
105
109
|
end # End ClassMethods
|
106
110
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
111
|
##### Instance Methods #####
|
111
112
|
|
112
113
|
def diff(obj)
|
@@ -138,7 +139,6 @@ module Gardener
|
|
138
139
|
dir = File.join [Rails.root, 'db', 'garden']
|
139
140
|
Dir.mkdir(dir) unless File.exists?(dir)
|
140
141
|
|
141
|
-
|
142
142
|
File.open(File.join([Rails.root, 'db', 'garden', "#{c}.yml"] ), 'a') do |file|
|
143
143
|
file << self.to_yaml
|
144
144
|
end
|
@@ -149,10 +149,9 @@ module Gardener
|
|
149
149
|
tom = self.send(k) if self.respond_to?(k)
|
150
150
|
[*tom].each{|y| y.plant_seed({:include => v})}
|
151
151
|
end
|
152
|
-
|
152
|
+
true
|
153
153
|
end
|
154
154
|
|
155
|
-
|
156
155
|
def things_to_include(options)
|
157
156
|
# [*THING] is so that THING can be an array or a single instance of a class.
|
158
157
|
# .each will blow up if THING is just an instance, not an array, unless we explode and re-array it.
|
@@ -169,6 +168,25 @@ module Gardener
|
|
169
168
|
{"#{self.class.to_s.underscore}_#{self.id}" => self.attributes}.to_yaml
|
170
169
|
end
|
171
170
|
|
171
|
+
# Workaround for DelayedJob which has kind of an unfriendly monkey patch on ActiveRecord::Base
|
172
|
+
# This in itself is kind of rude, since I don't know if anyone besides DelayedJob has a (legitimate) reason
|
173
|
+
# for hanging :yaml_new on AR::Base. If you notice that my patch to unfuck the DJ patch is fucking you,
|
174
|
+
# please let me know, I want us all to get along. Hopefully we'll all get the refinements thing working soon
|
175
|
+
# and stop stepping on each others toes.
|
176
|
+
if ActiveRecord::Base.respond_to? :yaml_new
|
177
|
+
class ActiveRecord::Base
|
178
|
+
def self.yaml_new(klass, tag, val)
|
179
|
+
foo = klass.find(val['attributes']['id'])
|
180
|
+
rescue ActiveRecord::RecordNotFound
|
181
|
+
foo = klass.new
|
182
|
+
val['attributes'].each do |k, v|
|
183
|
+
meth = "#{k}="
|
184
|
+
foo.send(meth, v) if foo.respond_to?(meth)
|
185
|
+
end
|
186
|
+
foo
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
172
190
|
|
173
191
|
|
174
192
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 1.1.
|
8
|
+
- 5
|
9
|
+
version: 1.1.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Bob Larrick
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-03-
|
17
|
+
date: 2011-03-14 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|