rails_copier 0.1.2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: '096548f3c9325dbe20290e0a9fbc0e05f651a439'
4
+ data.tar.gz: 2cd5582c82d3a0cc0a53c8f0f6d1a4c09d3aa73a
5
+ SHA512:
6
+ metadata.gz: c19e9d94a9a1db94d65ffc08f98b92437471af6f05b029e43667032f7d760a70124df9d6de537cabe2b20ca10f4c9e293b1aa92515eb8951d7ce6e62653e3c4a
7
+ data.tar.gz: e6b2a0c799ad4b66c67b12044723847519a3ab30e377139adb78e0b39cf9995623731041fc794ecf4012a58e52250b5ae4abd9558635cfbfd44d92df132c0e86
data/bin/rails_copier ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rails_copier'
4
+ require 'slop'
5
+
6
+ @options = Slop.parse do |o|
7
+ o.string '-f', '--from', '* Root path of the rails project to be copied'
8
+ o.string '-t', '--to', '* Path on which a new folder will be created with the copy project'
9
+ o.string '-n', '--name', '* New project name (in CammelCase)'
10
+ o.on '-h', '--help', 'Shows this description' do
11
+ puts o
12
+ exit
13
+ end
14
+ end
15
+
16
+ def missing_key(argument)
17
+ "missing required key: --#{argument}"
18
+ end
19
+
20
+ def help
21
+ ['All the options are required',
22
+ @options]
23
+ end
24
+
25
+ def valid_options?
26
+ @options.from? && @options.to? && @options.name?
27
+ end
28
+
29
+ if valid_options?
30
+ RailsCopier::Project.create(@options[:from], @options[:to], @options[:name])
31
+ else
32
+ puts missing_key('from') unless @options.from?
33
+ puts missing_key('to') unless @options.to?
34
+ puts missing_key('name') unless @options.name?
35
+ puts help
36
+ end
data/lib/ext/string.rb ADDED
@@ -0,0 +1,5 @@
1
+ class String
2
+ def underscore
3
+ self.scan(/[A-Z][a-z]*/).join("_").downcase
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ module RailsCopier
2
+ class Folder
3
+ attr_accessor :new_name, :new_dir, :from, :to
4
+
5
+ def self.create(from, to, new_name)
6
+ new(from, to, new_name).save
7
+ end
8
+
9
+ def initialize(from, to, new_name)
10
+ @new_name = new_name
11
+ @from = from
12
+ @to = to
13
+ end
14
+
15
+ def save
16
+ @new_dir = FileUtils::mkdir_p("#{to}/#{new_name.underscore}").join
17
+ self
18
+ end
19
+
20
+ def path_to_secrets
21
+ "#{new_dir}/config/secrets.yml"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,93 @@
1
+ require 'fileutils'
2
+ require 'yaml'
3
+ require 'sudo'
4
+
5
+ module RailsCopier
6
+ class Project
7
+ def self.create(from, to, new_name)
8
+ new(from, to, new_name).save
9
+ end
10
+
11
+ def initialize(from, to, new_name)
12
+ @folder = Folder.create(from, to, new_name)
13
+ end
14
+
15
+ def save
16
+ copy_entry
17
+ replace_old_name_ocurrencies
18
+ remove_git_repo
19
+ remove_tmp
20
+ replace_rails_secret
21
+ touch_log_folder
22
+ remove_database_yml
23
+ self
24
+ end
25
+
26
+ private
27
+
28
+ def copy_entry
29
+ Sudo::Wrapper.run do |sudo|
30
+ sudo[FileUtils].copy_entry(@folder.from, @folder.new_dir)
31
+ end
32
+ end
33
+
34
+ def replace_rails_secret
35
+ data = YAML.load_file(@folder.path_to_secrets)
36
+ data["development"]["secret_key_base"] = bundle_exec_secret
37
+ Sudo::Wrapper.run do |sudo|
38
+ sudo[File].write(@folder.path_to_secrets, data.to_yaml)
39
+ end
40
+ end
41
+
42
+ def replace_old_name_ocurrencies
43
+ `sudo grep -r -l #{old_name} #{@folder.new_dir} |
44
+ sudo sort |
45
+ sudo uniq |
46
+ sudo xargs perl -e 's/#{old_name}/#{@folder.new_name}/' -pi`
47
+ end
48
+
49
+ def old_name
50
+ file_path = "#{@folder.from}/config/application.rb"
51
+ File.open(file_path).each do |line|
52
+ return line.chomp.gsub('module ', '') if line.include?("module")
53
+ end
54
+ end
55
+
56
+ def remove_git_repo
57
+ Sudo::Wrapper.run do |sudo|
58
+ git_ignore = "#{@folder.new_dir}/.gitignore"
59
+ git_dir = "#{@folder.new_dir}/.git"
60
+ sudo[FileUtils].rm(git_ignore) if File.exist?(git_ignore)
61
+ sudo[FileUtils].rm_rf(git_dir) if Dir.exist?(git_dir)
62
+ end
63
+ end
64
+
65
+ def remove_tmp
66
+ Sudo::Wrapper.run do |sudo|
67
+ tmp = "#{@folder.new_dir}/tmp"
68
+ sudo[FileUtils].rm_rf(tmp) if Dir.exist?(tmp)
69
+ end
70
+ end
71
+
72
+ def bundle_exec_secret
73
+ Dir.chdir(@folder.new_dir) do
74
+ secret = `bundle exec rake secret`
75
+ raise "Unable to run 'bundle exec' on #{@folder.new_dir}" if secret.empty?
76
+ return secret.chomp
77
+ end
78
+ end
79
+
80
+ def touch_log_folder
81
+ Sudo::Wrapper.run do |sudo|
82
+ Dir["#{@folder.new_dir}/log/**.log"].each { |file| sudo[File].truncate(file, 0) }
83
+ end
84
+ end
85
+
86
+ def remove_database_yml
87
+ Sudo::Wrapper.run do |sudo|
88
+ database_yml = "#{@folder.new_dir}/config/database.yml"
89
+ sudo[FileUtils].rm(database_yml) if File.exist?(database_yml)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,3 @@
1
+ module RailsCopier
2
+ VERSION = '0.1.2'.freeze
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'rails_copier/version'
2
+
3
+ module RailsCopier
4
+ require 'ext/string'
5
+
6
+ autoload :Project, 'rails_copier/project'
7
+ autoload :Folder, 'rails_copier/folder'
8
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_copier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Leonardo Santos
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-12-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.16'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: slop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.6.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.6.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: sudo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.1.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.1.1
69
+ description:
70
+ email:
71
+ - aleotory@gmail.com
72
+ executables:
73
+ - rails_copier
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - bin/rails_copier
78
+ - lib/ext/string.rb
79
+ - lib/rails_copier.rb
80
+ - lib/rails_copier/folder.rb
81
+ - lib/rails_copier/project.rb
82
+ - lib/rails_copier/version.rb
83
+ homepage: https://github.com/leodcs/rails_copier
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.6.13
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: A simple gem that allows you to copy a rails project
107
+ test_files: []