wize_upgrader 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/bin/wize_upgrader +12 -0
  2. data/lib/wize_upgrader.rb +178 -0
  3. metadata +49 -0
data/bin/wize_upgrader ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'wize_upgrader'
4
+
5
+ if ARGV[0]
6
+ old_app_name = ARGV[0]
7
+ else
8
+ print "\nPlease enter filename for old app: "
9
+ old_app_name = gets.chomp
10
+ end
11
+
12
+ Wize::Upgrader.new(old_app_name).upgrade
@@ -0,0 +1,178 @@
1
+ require 'fileutils'
2
+ require 'active_support/inflector'
3
+
4
+ module Wize
5
+ class Upgrader
6
+ SOFT_DIR_MAPPINGS = {
7
+ ".git" => ".git",
8
+ "app" => "app",
9
+ "script" => "bin",
10
+ "db" => "db",
11
+ "vendor" => "vendor"
12
+ }
13
+ HARD_DIR_MAPPINGS = {
14
+ "config/locales" => "config/locales",
15
+ "config/initializers" => "config/initializers"
16
+ }
17
+ COMMON_GEMS = [
18
+ "gem 'jquery-rails'",
19
+ "gem 'pg'",
20
+ "gem 'sqlite3'",
21
+ "gem 'rails', '3.2.10'",
22
+ "gem 'rails', '3.2.11'",
23
+ "gem 'rails', '3.2.12'",
24
+ "gem 'rails', '3.2.13'",
25
+ "gem 'rails', '3.2.14'",
26
+ "gem 'rails', '3.2.15'"
27
+ ]
28
+ COMMON_FILES = [
29
+ "config/application.yml",
30
+ "config/database.yml",
31
+ "config/routes.rb"
32
+ ]
33
+
34
+ def initialize(old_app_name)
35
+ @old_name = "#{ old_app_name }_old" # name of rails 3 app
36
+ @new_name = old_app_name
37
+ end
38
+
39
+ def upgrade
40
+ puts "------- UPGRADING #{ @new_name } FROM RAILS 3.2 to RAILS 4 -------"
41
+
42
+ begin
43
+ rename_old
44
+ rails_gen_new
45
+ copy_common_dirs
46
+ copy_special_files
47
+ upgrade_gemfile("#{ @old_name }/Gemfile", "#{ @new_name }/Gemfile")
48
+ rescue => e
49
+ puts e.message
50
+ puts "something went wrong!"
51
+ ensure
52
+ end
53
+ puts "------ DONE UPGRADING! HAVE FUN ------"
54
+ end
55
+
56
+ def attr_accessibles
57
+ @attr_accessibles ||= Hash.new { [] }
58
+ end
59
+
60
+ def fix_controllers
61
+ files_for("#{ @new_name }/app/controllers").each { |c| fix_controller(c) }
62
+ end
63
+
64
+ def fix_controller(file)
65
+ model = File.basename(file).gsub("_controller.rb", "").singularize
66
+ return if attr_accessibles[model].empty?
67
+
68
+ columns = attr_accessibles[model]
69
+ params_block = <<-rb
70
+
71
+ private
72
+ def #{ model }_params
73
+ params.require(:#{ model }).permit(#{ columns.join(", ") })
74
+ end
75
+ rb
76
+
77
+ # find last occurance of end and replace with params_block
78
+ ctrlr = File.read("#{ @new_name }/app/controllers/#{ file }")
79
+ end_idx = ctrlr.rindex("end")
80
+ puts "last index of end is #{ end_idx }"
81
+ ctrlr.insert(end_idx, params_block)
82
+ ctrlr.gsub!("params[:#{ model }]", "#{ model }_params")
83
+
84
+ File.open("#{ @new_name }/app/controllers/#{ file }.tmp", "w") do |n|
85
+ n.write(ctrlr)
86
+ end
87
+ `mv #{ @new_name }/app/controllers/#{ file }.tmp #{ @new_name }/app/controllers/#{ file }`
88
+ end
89
+
90
+ def fix_models
91
+ puts "pulling out attr_accessible from models"
92
+ files_for("#{ @new_name }/app/models").each { |m| fix_model(m) }
93
+ end
94
+
95
+ def fix_model(file)
96
+ File.open("#{ @new_name }/app/models/#{ file }", "r") do |old|
97
+ File.open("#{ @new_name }/app/models/#{ file }.tmp", "w") do |n|
98
+ old.each_line do |line|
99
+ if line.strip.start_with?("attr_accessible")
100
+ lower_model = file.gsub(".rb", "")
101
+ attr_accessibles[lower_model] += line
102
+ .strip
103
+ .gsub("attr_accessible", "")
104
+ .split(",")
105
+ .map(&:strip)
106
+ else
107
+ n.write(line)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ `mv #{ @new_name }/app/models/#{ file }.tmp #{ @new_name }/app/models/#{ file }`
113
+ end
114
+
115
+ def files_for(dir)
116
+ [].tap do |files|
117
+ Dir.foreach(dir) do |node|
118
+ next if node.start_with?(".")
119
+ files << node if node.end_with?(".rb")
120
+ if File.directory?("#{ dir }/#{ node }")
121
+ sub_files = files_for("#{ dir }/#{ node }")
122
+ sub_files.map! { |f| "#{ node }/#{ f }" }
123
+ files += sub_files
124
+ end
125
+ end
126
+ end
127
+ end
128
+
129
+ def downgrade
130
+ `mv #{ @new_name }/ #{ @new_name }_arch/`
131
+ `mv #{ @old_name }/ #{ @new_name }/`
132
+ end
133
+
134
+ def upgrade_gemfile(from, to)
135
+ # gsub " for '
136
+ File.open(to, "a") do |f|
137
+ unusual_gems(from).each do |gem|
138
+ f.write(gem)
139
+ end
140
+ end
141
+ end
142
+
143
+ def unusual_gems(gemfile)
144
+ old_gems = File.readlines(gemfile)
145
+ old_gems.select! do |gem|
146
+ gem.start_with?("gem") && !COMMON_GEMS.include?(gem.chomp)
147
+ end
148
+ puts "Special gems: "
149
+ old_gems
150
+ end
151
+
152
+ def rails_gen_new
153
+ `rails new #{ @new_name } -T`
154
+ `mkdir #{ @new_name }/.git`
155
+ end
156
+
157
+ def rename_old
158
+ `mv #{ @new_name } #{ @old_name }`
159
+ end
160
+
161
+ def copy_common_dirs
162
+ SOFT_DIR_MAPPINGS.each do |src, dest|
163
+ `cp -rn #{ @old_name }/#{ src }/* #{ @new_name }/#{ dest }/`
164
+ end
165
+ HARD_DIR_MAPPINGS.each do |src, dest|
166
+ next if src.include?("wrap_parameters")
167
+ `cp -r #{ @old_name }/#{ src }/* #{ @new_name }/#{ dest }/`
168
+ end
169
+ end
170
+
171
+ def copy_special_files
172
+ COMMON_FILES.each do |file|
173
+ `cp #{ @old_name }/#{ file } #{ @new_name }/#{ file }`
174
+ end
175
+ end
176
+ end
177
+ end
178
+
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wize_upgrader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - CJ Avilla
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Simple upgrade by copying over files and folders
15
+ email: cjavilla@gmail.com
16
+ executables:
17
+ - wize_upgrader
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/wize_upgrader.rb
22
+ - bin/wize_upgrader
23
+ homepage: https://github.com/w1zeman1p/wize_upgrader
24
+ licenses:
25
+ - MIT
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.25
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: Upgrades rails apps from 3.2 to 4
48
+ test_files: []
49
+ has_rdoc: