class SchemaDev::Gem
Attributes
email[RW]
fullname[RW]
gem_base_name[RW]
gem_lib_path[RW]
gem_module[RW]
gem_name[RW]
gem_parent_name[RW]
gem_root[RW]
Public Class Methods
build(name)
click to toggle source
# File lib/schema_dev/gem.rb, line 14 def self.build(name) new(name).build end
new(name)
click to toggle source
# File lib/schema_dev/gem.rb, line 62 def initialize(name) self.gem_name = name.underscore self.gem_root = Pathname.new(gem_name) if gem_name =~ /^(schema_plus)_(.*)/ parent, base = [$1, $2] self.gem_module = [parent, base].map(&:camelize).join('::') self.gem_lib_path = [parent, base].join('/') self.gem_parent_name = parent self.gem_base_name = base @subdir = true else self.gem_module = gem_name.camelize self.gem_lib_path = gem_name self.gem_base_name = gem_name @subdir = false end get_fullname_and_email end
Public Instance Methods
build()
click to toggle source
# File lib/schema_dev/gem.rb, line 81 def build ensure_not_in_git ensure_doesnt_exist copy_template self.gem_root = gem_root.realpath rename_files fixup_subdir if @subdir freshen git_init puts <<~TEXT Created #{gem_name}. Your recommended next steps are: $ cd #{gem_name} $ bundle install $ schema_dev bundle install $ schema_dev rspec TEXT end
copy_template()
click to toggle source
# File lib/schema_dev/gem.rb, line 125 def copy_template Templates.install_subtree src: 'gem', dst: gem_root, bound: template_binding end
die(msg)
click to toggle source
# File lib/schema_dev/gem.rb, line 101 def die(msg) abort "schema_dev: #{msg}" end
ensure_doesnt_exist()
click to toggle source
# File lib/schema_dev/gem.rb, line 111 def ensure_doesnt_exist if gem_root.exist? die "Cannot create new gem: '#{gem_root}' already exists" end end
ensure_not_in_git()
click to toggle source
# File lib/schema_dev/gem.rb, line 105 def ensure_not_in_git if system('git rev-parse >& /dev/null') die 'Cannot create new gem inside existing git worktree; please cd elsewhere' end end
erb(string)
click to toggle source
# File lib/schema_dev/gem.rb, line 153 def erb(string) ERB.new(string).result template_binding end
fixup_subdir()
click to toggle source
# File lib/schema_dev/gem.rb, line 140 def fixup_subdir libdir = gem_root + 'lib' aside = libdir.to_s + 'x' subdir = libdir + gem_parent_name FileUtils.mv libdir, aside libdir.mkpath FileUtils.mv aside, subdir (gem_root + 'lib' + "#{gem_name}.rb").write <<~RUBY require_relative '#{gem_parent_name}/#{gem_base_name}' RUBY end
freshen()
click to toggle source
# File lib/schema_dev/gem.rb, line 161 def freshen Dir.chdir gem_root do Runner.new(Config.read).freshen(quiet: true) end end
get_fullname_and_email()
click to toggle source
# File lib/schema_dev/gem.rb, line 117 def get_fullname_and_email { 'fullname' => 'name', 'email' => 'email' }.each do |myattr, gitattr| if (send myattr + '=', `git config user.#{gitattr}`.strip).blank? die "Who are you? Please run 'git config --global user.#{gitattr} <your-#{gitattr}>'" end end end
git_init()
click to toggle source
# File lib/schema_dev/gem.rb, line 167 def git_init Dir.chdir gem_name do system 'git init' add_param = gem_root.find .select(&:exist?) .reject { |e| e.basename.to_s == 'Gemfile.local' } .join(' ') system "git add #{add_param}" system "git commit -m 'Initial skeleton generated by `schema_dev gem #{gem_name}`'" end end
rename_files()
click to toggle source
# File lib/schema_dev/gem.rb, line 129 def rename_files (gem_root + 'gitignore').rename gem_root + '.gitignore' (gem_root + 'simplecov').rename gem_root + '.simplecov' Dir.glob(gem_root + '**/*GEM_NAME*').each do |path| FileUtils.mv path, path.gsub(/GEM_NAME/, gem_name) end Dir.glob(gem_root + '**/*GEM_BASE_NAME*').each do |path| FileUtils.mv path, path.gsub(/GEM_BASE_NAME/, gem_base_name) end end
template_binding()
click to toggle source
# File lib/schema_dev/gem.rb, line 157 def template_binding @template_binding ||= TemplateEnv.new(self).get_binding end