lib/inochi/engine.rb in inochi-4.0.1 vs lib/inochi/engine.rb in inochi-5.0.0

- old
+ new

@@ -9,11 +9,17 @@ require 'inochi/generate' include Inochi::Generate def run - register_rake_tasks + register_init_task + + if has_project_config? + load_project_config + register_rake_tasks + end + run_rake_tasks end ## # Renders the given RBS (ruby string) file @@ -38,9 +44,77 @@ def register_rake_tasks Dir[File.dirname(__FILE__) + '/tasks/*.rake'].sort.each do |file| instance_eval File.read(file), file end + end + + def register_init_task + desc 'Instill Inochi into current directory.' + task :init do + unless project_name = ENV['project'] + raise ArgumentError, 'project name not specified' + end + + library_name = Engine.calc_library_name(project_name) + package_name = ENV['package'] || Engine.calc_package_name(library_name) + + project_version = '0.0.0' + project_release = Time.now.strftime('%F') + + command_file = "bin/#{package_name}" + create_from_rbs binding, command_file, 'command' + chmod 0755, command_file + + create_from_rbs binding, PROJECT_CONFIG_FILE + + create_from_rbs binding, "lib/#{package_name}.rb", 'library' + create_from_rbs binding, "lib/#{package_name}/inochi.rb" + + create_from_rbs binding, 'test/runner', 'test_runner' + chmod 0755, 'test/runner' + create_from_rbs binding, 'test/helper.rb', 'test_helper.rb' + create_from_rbs binding, "test/#{package_name}_test.rb", 'library_test.rb' + + create_from_rbs binding, 'LICENSE' + create_from_rbs binding, 'MANUAL' + create_from_rbs binding, 'SYNOPSIS' + create_from_rbs binding, 'README' + create_from_rbs binding, 'INSTALL' + create_from_rbs binding, 'USAGE' + create_from_rbs binding, 'HACKING' + create_from_rbs binding, 'HISTORY' + create_from_rbs binding, 'CREDITS' + create_from_rbs binding, 'BEYOND' + end + end + + PROJECT_CONFIG_FILE = 'inochi.conf' + + def has_project_config? + File.exist? PROJECT_CONFIG_FILE + end + + def load_project_config + @project_config = YAML.load_file(PROJECT_CONFIG_FILE).to_hash + + # load the project module + library_file = Dir['lib/*/inochi.rb'].first + package_name = File.basename(File.dirname(library_file)) + library_name = File.read(library_file)[/\b(module|class)\b\s+(\w+)/, 2] + + $LOAD_PATH.unshift 'lib' + require "#{package_name}/inochi" + + @project_module = Object.const_get(library_name) + @project_package_name = package_name + @project_library_name = library_name + @project_gem_file = "#{@project_package_name}-#{@project_module::VERSION}.gem" + + rescue => error + error.message.insert 0, + "Could not load project configuration file #{PROJECT_CONFIG_FILE.inspect}: " + raise error end TEMPLATE_DIR = File.join(File.dirname(__FILE__), 'templates') ##