Module: GenericGem

Defined in:
lib/generic_gem.rb,
lib/generic_gem/version.rb

Constant Summary collapse

VERSION =
'0.1.2'.freeze

Class Method Summary collapse

Class Method Details

.add_bash_scripts(gem_name) ⇒ Object



158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/generic_gem.rb', line 158

def self.add_bash_scripts(gem_name)
  puts '-------------------'
  puts 'Adding Bash scripts'
  system("cp #{ENV['DIR_MAIN']}/lib/files_to_add/*.sh #{gem_name}")

  puts '----------------------------------------------'
  puts "Adding 'gem uninstall' command to Bash scripts"
  str_old = '# uninstall'
  str_new = "gem uninstall #{gem_name}"
  StringInFile.replace(str_old, str_new, "#{gem_name}/code_test.sh")
  StringInFile.replace(str_old, str_new, "#{gem_name}/gem_test.sh")
  StringInFile.replace(str_old, str_new, "#{gem_name}/gem_install.sh")
  StringInFile.replace(str_old, str_new, "#{gem_name}/gem_console.sh")
end

.add_gem_dep(gem_name, gem_dep) ⇒ Object



108
109
110
111
112
113
114
# File 'lib/generic_gem.rb', line 108

def self.add_gem_dep(gem_name, gem_dep)
  puts '----------------------------------------'
  puts "Adding #{gem_dep} development dependency"
  str1 = "spec.add_development_dependency 'rspec'"
  str2 = "\n  spec.add_development_dependency '#{gem_dep}'"
  LineContaining.add_after(str1, str2, "#{gem_name}/#{gem_name}.gemspec")
end

.add_rakefile(gem_name) ⇒ Object



146
147
148
149
150
# File 'lib/generic_gem.rb', line 146

def self.add_rakefile(gem_name)
  puts '-------------------'
  puts 'Adding the Rakefile'
  system("cp #{ENV['DIR_MAIN']}/lib/files_to_add/Rakefile #{gem_name}")
end

.add_readme_todo(gem_name) ⇒ Object



152
153
154
155
156
# File 'lib/generic_gem.rb', line 152

def self.add_readme_todo(gem_name)
  puts '--------------------------------'
  puts 'Adding the README-to_do.txt file'
  system("cp #{ENV['DIR_MAIN']}/lib/files_to_add/README-to_do.txt #{gem_name}")
end

.add_rubocop_yml(gem_name) ⇒ Object



219
220
221
222
223
224
# File 'lib/generic_gem.rb', line 219

def self.add_rubocop_yml(gem_name)
  puts '-------------------'
  puts 'Adding .rubocop.yml'
  system("cp #{ENV['DIR_MAIN']}/lib/files_to_add/rubocop.yml #{gem_name}/.rubocop.yml")
  StringInFile.replace('gemspec_file', "#{gem_name}.gemspec", "#{gem_name}/.rubocop.yml")
end

.bundle_configObject



39
40
41
42
43
44
45
46
# File 'lib/generic_gem.rb', line 39

def self.bundle_config
  puts '----------------------------------------'
  puts "Setting up #{ENV['HOME']}/.bundle/config"
  puts 'Includes the Code of Conduct (CODE_OF_CONDUCT.md file) and MIT license (LICENSE.txt file)'
  puts 'Using rspec testing'
  system("mkdir -p #{ENV['HOME']}/.bundle")
  system("cp #{ENV['DIR_MAIN']}/lib/files_to_add/config #{ENV['HOME']}/.bundle/config")
end

.bundle_gem(gem_name) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/generic_gem.rb', line 48

def self.bundle_gem(gem_name)
  t1 = Thread.new do
    puts '--------------------'
    puts 'Creating the new gem'
    puts "bundle gem #{gem_name}"
    system("bundle gem #{gem_name}")
  end
  t1.join
end

.copy_credentials_sh(gem_name) ⇒ Object



58
59
60
61
62
# File 'lib/generic_gem.rb', line 58

def self.copy_credentials_sh(gem_name)
  puts '----------------------'
  puts 'Copying credentials.sh'
  system("cp #{ENV['DIR_MAIN']}/credentials.sh #{gem_name}")
end

.create(gem_name) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/generic_gem.rb', line 8

def self.create(gem_name)
  puts '**********************'
  puts 'Welcome to Generic Gem'
  puts "GEM NAME: #{gem_name}"
  ENV['DIR_MAIN'] = File.expand_path('../../', __FILE__)

  bundle_config
  bundle_gem(gem_name)
  copy_credentials_sh(gem_name)
  enter_credentials_sh(gem_name)
  update_version(gem_name)
  update_gemspec(gem_name)
  add_gem_dep(gem_name, 'rubocop')
  add_gem_dep(gem_name, 'sandi_meter')
  add_gem_dep(gem_name, 'bundler-audit')
  add_gem_dep(gem_name, 'gemsurance')
  add_gem_dep(gem_name, 'ruby-graphviz')
  add_gem_dep(gem_name, 'simplecov')
  update_spec_helper(gem_name)
  update_tests(gem_name)
  update_bin_scripts(gem_name)
  add_rakefile(gem_name)
  add_readme_todo(gem_name)
  add_bash_scripts(gem_name)
  update_gitignore(gem_name)
  update_readme(gem_name)
  update_main_module(gem_name)
  add_rubocop_yml(gem_name)
  reset_git(gem_name)
end

.enter_credentials_sh(gem_name) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/generic_gem.rb', line 64

def self.enter_credentials_sh(gem_name)
  puts '-----------------------------------'
  puts 'Entering credentials (if necessary)'

  # Skip this step in Travis
  system("sh #{gem_name}/credentials.sh") if ENV['TRAVIS'] != 'true'
end

.reset_git(gem_name) ⇒ Object



226
227
228
229
230
231
232
# File 'lib/generic_gem.rb', line 226

def self.reset_git(gem_name)
  puts '---------'
  puts 'Reset Git'
  system("cd #{gem_name} && git init")
  system("cd #{gem_name} && git add .")
  system("cd #{gem_name} && git commit -m 'Initial commit'")
end

.update_bin_scripts(gem_name) ⇒ Object



139
140
141
142
143
144
# File 'lib/generic_gem.rb', line 139

def self.update_bin_scripts(gem_name)
  puts '----------------------------------'
  puts 'Updating bin/console and bin/setup'
  ReplaceQuotes.update("#{gem_name}/bin/console")
  system("chmod +x #{gem_name}/bin/*")
end

.update_gemspec(gem_name) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/generic_gem.rb', line 81

def self.update_gemspec(gem_name)
  puts '-----------------------------------------------------'
  puts "Filling in the gem description in #{gem_name}.gemspec"
  StringInFile.replace('TODO: Write a longer description or delete this line.', 'GENERIC DESCRIPTION', "#{gem_name}/#{gem_name}.gemspec")
  StringInFile.replace('%q{GENERIC DESCRIPTION}', "'GENERIC DESCRIPTION'", "#{gem_name}/#{gem_name}.gemspec")

  puts '-------------------------------------------------'
  puts "Filling in the gem summary in #{gem_name}.gemspec"
  StringInFile.replace('TODO: Write a short summary, because Rubygems requires one.', 'GENERIC SUMMARY', "#{gem_name}/#{gem_name}.gemspec")
  StringInFile.replace('%q{GENERIC SUMMARY}', "'GENERIC SUMMARY'", "#{gem_name}/#{gem_name}.gemspec")

  puts '---------------------------------------------------'
  puts "Updating #{gem_name}.gemspec for RuboCop compliance"
  ReplaceQuotes.update("#{gem_name}/#{gem_name}.gemspec")
  StringInFile.replace("'\\x0'", '"\\x0"', "#{gem_name}/#{gem_name}.gemspec")

  puts '----------------------------------------------------'
  puts "Updating #{gem_name}.gemspec to remove excess spaces"
  while StringInFile.present('  =', "#{gem_name}/#{gem_name}.gemspec")
    StringInFile.replace('  =', ' =', "#{gem_name}/#{gem_name}.gemspec")
  end

  puts '------------------------------------------------------------------'
  puts "Updating #{gem_name}.gemspec to add empty line after magic comment"
  LineContaining.add_after('# coding: utf-8', '', "#{gem_name}/#{gem_name}.gemspec")
end

.update_gitignore(gem_name) ⇒ Object



173
174
175
176
177
178
179
180
181
182
183
# File 'lib/generic_gem.rb', line 173

def self.update_gitignore(gem_name)
  puts '----------------------------'
  puts 'Updating the .gitignore file'
  puts 'Adding tmp* and .DS_Store'
  open("#{gem_name}/.gitignore", 'a') do |f|
    f << "\nlog/"
    f << "\ntmp*"
    f << "\n.DS_Store"
    f << "\n*.gem"
  end
end

.update_main_module(gem_name) ⇒ Object



206
207
208
209
210
211
212
213
214
215
216
217
# File 'lib/generic_gem.rb', line 206

def self.update_main_module(gem_name)
  puts '--------------------------------------------------------------'
  puts "Updating #{gem_name}/lib/#{gem_name}.rb to comply with RuboCop"
  ReplaceQuotes.update("#{gem_name}/lib/#{gem_name}.rb")
  StringInFile.replace('module', "#\nmodule", "#{gem_name}/lib/#{gem_name}.rb")

  puts '-------------------------------------------------------------------------------'
  puts "Adding the suggestion of using a class or module to the lib/#{gem_name}.rb file"
  open("#{gem_name}/lib/#{gem_name}.rb", 'a') do |f|
    f << "# Your new gem is a module by default.  You may wish to use a class instead.\n"
  end
end

.update_readme(gem_name) ⇒ Object



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/generic_gem.rb', line 185

def self.update_readme(gem_name)
  puts '---------------------------'
  puts 'Updating the README.md file'
  t1 = Thread.new do
    file_w = open("#{gem_name}/README.md", 'a')
    file_w.write("## Bash Scripts\n")
    file_w.write("### Testing this gem\n")
    file_w.write("After you download this source code, enter `sh gem_test.sh` to set up and test this gem.\n\n")
    file_w.write("### Testing this gem's source code\n")
    file_w.write("Enter `sh code_test.sh` to test the quality of this gem's source code.\n")
    file_w.write("### Running this gem in irb\n")
    file_w.write("Enter `sh gem_console.sh`.\n\n")
    file_w.write("### Installing this gem\n")
    file_w.write("Enter `sh gem_install.sh`.\n")
    file_w.write("### Testing the gem, source code, and installation process\n")
    file_w.write("Enter `sh all.sh` to run the gem_test.sh, code_test.sh, and gem_install.sh scripts.\n")
    file_w.close
  end
  t1.join
end

.update_spec_helper(gem_name) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/generic_gem.rb', line 116

def self.update_spec_helper(gem_name)
  puts '----------------------------'
  puts 'Updating spec/spec_helper.rb'
  file_new = "#{gem_name}/spec/spec_helper_new.rb"
  file_old = "#{gem_name}/spec/spec_helper.rb"
  open(file_new, 'a') do |f|
    f << "require 'simplecov'\n"
    f << "SimpleCov.start\n\n"
    f << File.read(file_old)
  end
  system("mv #{file_new} #{file_old}")
  ReplaceQuotes.update(file_old)
end

.update_tests(gem_name) ⇒ Object



130
131
132
133
134
135
136
137
# File 'lib/generic_gem.rb', line 130

def self.update_tests(gem_name)
  puts '--------------------------------'
  puts 'Revising the initial rspec tests'
  StringInFile.replace('expect(false).to eq(true)', 'expect(true).to eq(true)', "#{gem_name}/spec/#{gem_name}_spec.rb")
  puts '----------------------------------------'
  puts 'Convering double quotes to single quotes'
  ReplaceQuotes.update("#{gem_name}/spec/#{gem_name}_spec.rb")
end

.update_version(gem_name) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/generic_gem.rb', line 72

def self.update_version(gem_name)
  puts '----------------------'
  puts 'Initial version: 0.0.0'
  StringInFile.replace('0.1.0', '0.0.0', "#{gem_name}/lib/#{gem_name}/version.rb")
  ReplaceQuotes.update("#{gem_name}/lib/#{gem_name}/version.rb")
  StringInFile.replace('module', "#\nmodule", "#{gem_name}/lib/#{gem_name}/version.rb")
  StringInFile.replace("'0.0.0'", "'0.0.0'.freeze", "#{gem_name}/lib/#{gem_name}/version.rb")
end