wize_upgrader 0.0.1
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/bin/wize_upgrader +12 -0
- data/lib/wize_upgrader.rb +178 -0
- metadata +49 -0
data/bin/wize_upgrader
ADDED
@@ -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:
|