lib/lotus/generators/application/container.rb in lotusrb-0.4.1 vs lib/lotus/generators/application/container.rb in lotusrb-0.5.0

- old
+ new

@@ -1,33 +1,34 @@ require 'shellwords' require 'lotus/generators/abstract' +require 'lotus/generators/database_config' require 'lotus/generators/slice' module Lotus module Generators module Application class Container < Abstract def initialize(command) super - @slice_generator = Slice.new(command) - @lotus_head = options.fetch(:lotus_head) - @test = options[:test] - @database = options[:database] - @lotus_model_version = '~> 0.4' + @slice_generator = Slice.new(command) + @database_config = DatabaseConfig.new(options[:database], app_name) + @lotus_head = options.fetch(:lotus_head) + @test = options[:test] + @lotus_model_version = '~> 0.5' cli.class.source_root(source) end def start opts = { - app_name: app_name, - lotus_head: @lotus_head, - test: @test, - database: @database, - database_config: database_config, - lotus_model_version: @lotus_model_version, + app_name: app_name, + lotus_head: @lotus_head, + test: @test, + database: @database_config.engine, + database_config: @database_config.to_hash, + lotus_model_version: @lotus_model_version, } templates = { 'lotusrc.tt' => '.lotusrc', '.env.tt' => '.env', @@ -40,14 +41,15 @@ 'lib/config/mapping.rb.tt' => 'lib/config/mapping.rb', } empty_directories = [ "lib/#{ app_name }/entities", - "lib/#{ app_name }/repositories" + "lib/#{ app_name }/repositories", + "lib/#{ app_name }/mailers" ] - empty_directories << if sql_database? + empty_directories << if @database_config.sql? "db/migrations" else "db" end @@ -66,19 +68,20 @@ 'spec_helper.rb.minitest.tt' => 'spec/spec_helper.rb', 'features_helper.rb.minitest.tt' => 'spec/features_helper.rb' ) end - if sql_database? + if @database_config.sql? templates.merge!( 'schema.sql.tt' => 'db/schema.sql' ) end empty_directories << [ "spec/#{ app_name }/entities", "spec/#{ app_name }/repositories", + "spec/#{ app_name }/mailers", "spec/support" ] templates.each do |src, dst| cli.template(source.join(src), target.join(dst), opts) @@ -88,89 +91,20 @@ gitkeep = '.gitkeep' cli.template(source.join(gitkeep), target.join(dir, gitkeep), opts) end unless git_dir_present? - cli.template(source.join(database_type == :file_system ? 'gitignore.tt' : '.gitignore'), target.join('.gitignore'), opts) + cli.template(source.join(@database_config.type == :file_system ? 'gitignore.tt' : '.gitignore'), target.join('.gitignore'), opts) cli.run("git init #{Shellwords.escape(target)}", capture: true) end @slice_generator.start end private def git_dir_present? File.directory?(source.join('.git')) - end - - def database_config - { - gem: database_gem, - uri: database_uri, - type: database_type - } - end - - def database_gem - { - 'mysql' => 'mysql', - 'mysql2' => 'mysql2', - 'postgresql' => 'pg', - 'postgres' => 'pg', - 'sqlite' => 'sqlite3', - 'sqlite3' => 'sqlite3' - }[@database] - end - - def database_type - case @database - when 'mysql', 'mysql2', 'postgresql', 'postgres', 'sqlite', 'sqlite3' - :sql - when 'filesystem' - :file_system - when 'memory' - :memory - end - end - - def sql_database? - database_type == :sql - end - - def database_uri - { - development: database_environment_uri(:development), - test: database_environment_uri(:test) - } - end - - def database_base_uri - case @database - when 'mysql' - "mysql://localhost/#{app_name}" - when 'mysql2' - "mysql2://localhost/#{app_name}" - when 'postgresql', 'postgres' - "postgres://localhost/#{app_name}" - when 'sqlite', 'sqlite3' - "sqlite://db/#{Shellwords.escape(app_name)}" - when 'memory' - "memory://localhost/#{app_name}" - when 'filesystem' - "file:///db/#{app_name}" - else - raise "\"#{@database}\" is not a valid database type" - end - end - - def database_environment_uri(environment) - case @database - when 'sqlite', 'sqlite3' - "#{database_base_uri}_#{environment}.sqlite" - else - "#{database_base_uri}_#{environment}" - end end end end end end