public
Rubygem
Description: Vanilla in Ruby
Homepage: http://lazyatom.com
Clone URL: git://github.com/lazyatom/vanilla-rb.git
We should be able to upgrade dynasnips without always clobbering modified 
attributes.
lazyatom (author)
Wed Jun 04 14:19:18 -0700 2008
commit  452d4f1d0492c4bd3ce0b02d788d43cae6465ccb
tree    a5139099ed905e414bbdcb97cbd4fe3edb44687b
parent  70ac35f39d721760a73151a05d1cb23f6fa5089c
...
1
2
3
4
5
6
7
8
 
9
10
11
...
13
14
15
16
17
18
 
19
 
 
 
 
20
21
22
...
35
36
37
38
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
41
42
...
1
2
3
 
 
4
5
 
6
7
8
9
...
11
12
13
 
 
 
14
15
16
17
18
19
20
21
22
...
35
36
37
 
 
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
0
@@ -1,11 +1,9 @@
0
 $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
0
 require 'vanilla'
0
 
0
-Soup.prepare 
0
-
0
 desc "Open an irb session preloaded with this library"
0
 task :console do
0
-  sh "irb -Ilib -rvanilla"
0
+  sh "irb -Ilib -rvanilla/console"
0
 end
0
 
0
 task :clean do
0
@@ -13,10 +11,12 @@ task :clean do
0
   FileUtils.rm "soup.db" if File.exist?("soup.db")
0
 end
0
 
0
-task :bootstrap do
0
-  require 'vanilla/snip_helper'
0
-  
0
+task :prepare do
0
   Soup.prepare
0
+end
0
+
0
+task :bootstrap => :prepare do
0
+  require 'vanilla/snip_helper'
0
   
0
   Dynasnip.persist_all!(overwrite=true)
0
   
0
@@ -35,8 +35,35 @@ task :reset => [:clean, :bootstrap]
0
 
0
 namespace :upgrade do
0
   desc 'Upgrade the dynasnips'
0
-  task :dynasnips do
0
-    Dynasnip.persist_all!
0
+  task :dynasnips => :prepare do
0
+    Dynasnip.all.each do |dynasnip|
0
+      print "Upgrading #{dynasnip.snip_name}... "
0
+      # TODO: our confused Soup interface might return an array.
0
+      snip = Soup[dynasnip.snip_name]
0
+      if snip.empty? || snip.nil?
0
+        # it's a new dyna
0
+        Soup << dynasnip.snip_attributes
0
+        puts "(new)"
0
+      elsif snip.created_at == snip.updated_at
0
+        # it's not been changed, let's upgrade
0
+        snip.destroy
0
+        Soup << dynasnip.snip_attributes
0
+        puts "(unedited)"
0
+      else
0
+        # the dyna exists and has been changed
0
+        dynasnip.snip_attributes.each do |name, value|
0
+          unless (existing_value = snip.get_value(name)) == value
0
+            puts "Conflict in attribute '#{name}':"
0
+            puts "> Your soup: '#{existing_value}'"
0
+            puts ">  New soup: '#{value}"
0
+            print "Upgrade? [Y/n]: "
0
+            upgrade_value = ["Y", "y", ""].include? STDIN.gets.chomp.strip
0
+            snip.set_value(name, value) if upgrade_value
0
+          end
0
+        end
0
+        snip.save
0
+      end
0
+    end
0
   end
0
 end
0
 

Comments