fork_rails_project 0.0.1 → 0.0.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/fork_rails_project.rb +4 -107
  3. data/lib/forker.rb +133 -0
  4. metadata +32 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85d7578a6118f56d8cb0b3543575a431fab26658
4
- data.tar.gz: b5bd6bcd80540e79bf84a6334e002bb22e400065
3
+ metadata.gz: 183319270c8a7869b9b146514adbefe97baba73a
4
+ data.tar.gz: 6a78cf625f8030189c909f9a7275ad3b79459598
5
5
  SHA512:
6
- metadata.gz: 6c613cedd47e76841729a05d3d00030d9243140121d028b19c5d67b1056dc22ce4ff98641ab7aed4a7d80a85ca128527a1098f4b7a1785d1f0709b1d25d6eae0
7
- data.tar.gz: b3589828a488c516e29218068318cf89927aac9e78a16b02a48518dd78aaefc9bc590a437ecfd8158248ffe4b3e03f62d95cbab85a4027d5199d972f62099c1c
6
+ metadata.gz: 6894a38ab8fb7e6de22ece86de809e62e231f99504b3865d7b4f9d13f5ac5e96677cba539125f402639a794f5d4639387cb46a13b8b4e754c6a03afe6677c291
7
+ data.tar.gz: c72563313cc5fe379a2aaccf951956607d022190239dd8b5febf2382416386087a4e3c794bee68903187068232d37906effe9f287e5cbafe4a9c36845ecd1cac
@@ -1,114 +1,11 @@
1
1
  #!/usr/bin/ruby
2
- require "active_support/all"
3
- require "find"
4
- # require "pry"
5
-
6
-
7
- def copy_files(dest_path, ignored_files)
8
- copy_string = "rsync -ax "
9
- ignored_files.each do |file_name|
10
- copy_string << "--exclude #{file_name} "
11
- end
12
- copy_string << ". #{dest_path}"
13
- begin
14
- puts "Copying files from #{Dir.pwd} to #{dest_path}"
15
- puts "Ignored files/directories: #{ignored_files.join(' ')}"
16
- puts "Executing #{copy_string}"
17
- %x[#{copy_string}]
18
- puts
19
- rescue IOError
20
- puts "Unable to copy files!"
21
- end
22
- end
23
-
24
- def rename_file_objects(old_name, new_name)
25
- old_file_paths = []
26
- Find.find(".") do |path|
27
- old_file_paths << path if path =~ /#{old_name}/
28
- end
29
- old_file_paths = yield(old_file_paths) if block_given?
30
- files_to_move = Hash.new
31
- old_file_paths.each do |path|
32
- new_path = path.gsub(/#{old_name}/, new_name)
33
- files_to_move[path] = new_path
34
- end
35
- files_to_move.each do |old, new|
36
- puts "Renaming #{old} -> #{new}"
37
- `mv #{old} #{new}`
38
- end
39
- end
40
-
41
- def substitute_names(old_name, new_name)
42
- puts "Replacing string '#{old_name}' in application files..."
43
- occurrence = %x{grep -iR "#{old_name}" --exclude-dir=log --exclude-dir=tmp --exclude=tags .}
44
- occurrence = occurrence.split("\n")
45
- files = []
46
- occurrence.each do |occ|
47
- occ.slice!(0..1)
48
- file_name = occ.slice(0...occ.index(":"))
49
- files << file_name
50
- end
51
- files.uniq!
52
-
53
- begin
54
- files.each do |file|
55
- text = File.read(file)
56
- text = text.gsub(old_name, new_name)
57
- File.open(file, "w+") { |line| line.puts text }
58
- end
59
- rescue IOError
60
- puts "Unable to alter new files!"
61
- end
62
-
63
- puts "Finished replacing string '#{old_name}' in application files. Altered files:"
64
- files.each do |filename|
65
- puts filename
66
- end
67
- end
2
+ require "forker"
68
3
 
69
4
 
70
5
  source_project_name = ARGV[0].dup
71
6
  dest_project_name = ARGV[1].dup
72
- folder_names = []
73
- folder_names << source_project_name << dest_project_name
74
-
75
- folder_names.each do |a|
76
- a.strip!
77
- if a.start_with? "/"
78
- a.slice!(0)
79
- end
80
- end
81
-
82
- raise RuntimeError, "#{source_project_name} is not a valid dir!" if !File.directory?("./#{source_project_name}")
83
- raise RuntimeError, "Destination directory already exists!" if File.directory?("./#{dest_project_name}")
84
-
85
- base_dir_path = Dir.pwd
86
- dest_path = base_dir_path + "/" + dest_project_name
87
- ignored_files = ARGV[2..-1]
88
-
89
- begin
90
- %x{mkdir "#{dest_path}"}
91
- rescue Error
92
- puts "Cant't create new directory!"
93
- end
94
-
95
- Dir.chdir(base_dir_path + "/" + source_project_name)
96
- copy_files(dest_path, ignored_files)
97
- Dir.chdir(dest_path)
98
-
99
- old_app_name = source_project_name.camelize
100
- new_app_name = dest_project_name.camelize
101
-
102
- # Are we inside an engine? If so, we have to rename some files and folders
103
- if File.exists?("lib/#{source_project_name}/engine.rb")
104
- rename_file_objects(source_project_name, dest_project_name) do |old_paths|
105
- old_paths.keep_if { |path| File.directory?(path) }
106
- end
7
+ ignored_files = ARGV[2..-1]
107
8
 
108
- rename_file_objects(source_project_name, dest_project_name)
109
- puts
110
- end
9
+ forker = ForkRailsProject::Forker.new(source_project_name, dest_project_name, ignored_files)
10
+ forker.fork!
111
11
 
112
- substitute_names(source_project_name, dest_project_name)
113
- puts
114
- substitute_names(old_app_name, new_app_name)
data/lib/forker.rb ADDED
@@ -0,0 +1,133 @@
1
+ require "active_support/all"
2
+ require "open3"
3
+ require "find"
4
+
5
+ module ForkRailsProject
6
+ class Forker
7
+
8
+ attr_accessor :source_project_name, :dest_project_name, :ignored_files
9
+
10
+ def initialize(source_project_name, dest_project_name, ignored_files = [])
11
+ @source_project_name = source_project_name
12
+ @dest_project_name = dest_project_name
13
+ @ignored_files = ignored_files
14
+ folder_names = [] << @source_project_name << @dest_project_name
15
+
16
+ folder_names.each do |a|
17
+ a.strip!
18
+ if a.start_with?("/")
19
+ a.slice!(0)
20
+ end
21
+ end
22
+
23
+ if !File.directory?("./#{@source_project_name}")
24
+ raise RuntimeError, "#{@source_project_name} is not a valid dir!"
25
+ end
26
+
27
+ if File.directory?("./#{@dest_project_name}")
28
+ raise RuntimeError, "Destination directory already exists!"
29
+ end
30
+ end
31
+
32
+ def fork!
33
+ base_dir_path = Dir.pwd
34
+ dest_path = [base_dir_path, "/", @dest_project_name].join
35
+
36
+ begin
37
+ %x[mkdir "#{dest_path}"]
38
+ rescue Error
39
+ puts "Cant't create new directory!"
40
+ end
41
+
42
+ Dir.chdir([base_dir_path, "/", @source_project_name].join)
43
+ copy_files(dest_path, @ignored_files)
44
+ Dir.chdir(dest_path)
45
+
46
+ old_app_name = @source_project_name.camelize
47
+ new_app_name = @dest_project_name.camelize
48
+
49
+ # Are we inside an engine? If so, we have to rename some files and folders:
50
+ if File.exists?("lib/#{@source_project_name}/engine.rb")
51
+ # first step: copy and rename directories
52
+ rename_file_objects(@source_project_name, @dest_project_name) do |old_paths|
53
+ old_paths.keep_if { |path| File.directory?(path) }
54
+ end
55
+
56
+ # called without above block: copy and rename files in engine
57
+ rename_file_objects(@source_project_name, @dest_project_name)
58
+ puts
59
+ end
60
+
61
+ # alter snake_cased strings
62
+ substitute_names(@source_project_name, dest_project_name)
63
+ puts
64
+ # alter CamelCased strings
65
+ substitute_names(old_app_name, new_app_name)
66
+ end
67
+
68
+ private
69
+
70
+ def copy_files(dest_path, ignored_files)
71
+ copy_string = "rsync -ax "
72
+ ignored_files.each do |file_name|
73
+ copy_string << "--exclude #{file_name} "
74
+ end
75
+ copy_string << ". #{dest_path}"
76
+ begin
77
+ puts "Copying files from #{Dir.pwd} to #{dest_path}"
78
+ puts "Ignored files/directories: #{ignored_files.join(' ')}"
79
+ puts "Executing #{copy_string}"
80
+ %x[#{copy_string}]
81
+ puts
82
+ rescue IOError
83
+ puts "Unable to copy files!"
84
+ end
85
+ end
86
+
87
+ def rename_file_objects(old_name, new_name)
88
+ old_file_paths = Find.find(".").flat_map do |path|
89
+ path if path =~ /#{old_name}/
90
+ end.compact
91
+ old_file_paths = yield(old_file_paths) if block_given?
92
+ files_to_move = old_file_paths.inject({}) do |hash, path|
93
+ new_path = path.gsub(/#{old_name}/, new_name)
94
+ hash[path] = new_path
95
+ hash
96
+ end
97
+ files_to_move.each do |old, new|
98
+ puts "Renaming #{old} -> #{new}"
99
+ # we don't want 'no such file' output for duplicate paths
100
+ stdin, stdout, stderr = Open3.popen3("mv #{old} #{new}")
101
+ end
102
+ end
103
+
104
+ def substitute_names(old_name, new_name)
105
+ puts "Replacing string '#{old_name}' in application files..."
106
+ occurrences = %x[grep -iR "#{old_name}" --exclude-dir=log --exclude-dir=tmp --exclude=tags .]
107
+ occurrences = occurrences.split("\n")
108
+ files = occurrences.each.flat_map do |occ|
109
+ occ.slice!(0..1)
110
+ occ.slice(0...occ.index(":")) if occ.include?(":")
111
+ end.uniq.compact
112
+
113
+ begin
114
+ files.each do |file|
115
+ if File.exist?(file)
116
+ text = File.read(file)
117
+ text = text.gsub(old_name, new_name)
118
+ File.open(file, "w+") { |line| line.puts text }
119
+ end
120
+ end
121
+ rescue IOError
122
+ puts "Unable to alter new files!"
123
+ end
124
+
125
+ puts "Finished replacing string '#{old_name}' in application files."\
126
+ " Altered files:"
127
+ files.each do |filename|
128
+ puts filename
129
+ end
130
+ end
131
+ end
132
+ end
133
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fork_rails_project
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Huber
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-13 00:00:00.000000000 Z
11
+ date: 2014-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,34 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 3.1.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.10.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.10.1
27
55
  description: Generates copies of existing app directories with automatic renaming/namespacing
28
56
  of contained files
29
57
  email: alih83@gmx.de
@@ -34,6 +62,7 @@ extra_rdoc_files: []
34
62
  files:
35
63
  - bin/fork-rails-project
36
64
  - lib/fork_rails_project.rb
65
+ - lib/forker.rb
37
66
  homepage: https://github.com/alihuber/fork_rails_project
38
67
  licenses:
39
68
  - MIT
@@ -54,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
54
83
  version: '0'
55
84
  requirements: []
56
85
  rubyforge_project:
57
- rubygems_version: 2.3.0
86
+ rubygems_version: 2.4.2
58
87
  signing_key:
59
88
  specification_version: 4
60
89
  summary: Script to set up forks of existing rails apps/engines