gardener 1.1.4 → 1.1.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.
- 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
|
|