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.
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: