lib/isomorfeus/installer.rb in isomorfeus-1.0.0.zeta25 vs lib/isomorfeus/installer.rb in isomorfeus-2.0.0.rc1
- old
+ new
@@ -1,261 +1,57 @@
-module Isomorfeus
- module Installer
- # driver support
-
- def self.add_database(name, props)
- databases[name] = props
- end
-
- def self.add_rack_server(name, props)
- rack_servers[name] = props
- end
-
- class << self
- # application options
- attr_reader :app_class
- attr_reader :app_require
- attr_accessor :database
- attr_accessor :framework
- attr_accessor :isomorfeus_module
- attr_reader :project_dir
- attr_reader :project_name
- attr_accessor :rack_server
- attr_accessor :rack_server_name
- attr_accessor :source_dir
-
- # installer options
- attr_reader :options
- end
-
- def self.set_project_names(pro_dir)
- @project_dir = pro_dir
- @project_name = pro_dir.underscore
- @app_class = @project_name.camelize + 'App'
- @app_require = @project_name + '_app'
- end
-
- def self.options=(options)
- Isomorfeus::Installer::OptionsMangler.mangle_options(options)
- @options = options
- end
-
- def self.sorted_databases
- databases.keys.sort
- end
-
- def self.sorted_policies
- policies.keys.sort
- end
-
- def self.sorted_rack_servers
- rack_servers.keys.sort
- end
-
- def self.databases
- @databases ||= {}
- end
-
- def self.policies
- @policies ||= {}
- end
-
- def self.rack_servers
- @rack_servers ||= {}
- end
-
- # installer options and config
-
- def self.module_directories
- %w[databases]
- end
-
- # installer paths
-
- def self.base_path
- @base_path ||= File.realpath(File.join(File.dirname(File.realpath(__FILE__)), 'installer'))
- end
-
- def self.templates_path
- @templates_path ||= File.realpath(File.join(File.dirname(File.realpath(__FILE__)), 'installer', 'templates'))
- end
-
- # app paths
-
- def self.asset_output_path
- File.join('public', 'assets')
- end
-
- def self.entrypoint_path(entrypoint)
- File.join(isomorfeus_path, 'imports', entrypoint)
- end
-
- def self.isomorfeus_path
- 'app'
- end
-
- def self.webpack_config_path(config_file)
- File.join( 'webpack', config_file)
- end
-
- def self.stylesheet_path(stylesheet)
- File.join(isomorfeus_path, 'styles', stylesheet)
- end
-
- def self.middlewares_includes
- 'extend Isomorfeus::Transport::Middlewares'
- end
-
- # install helpers
-
- def self.generate_gem_line(gem_hash)
- line = "gem '#{gem_hash[:name]}', '#{gem_hash[:version]}'"
- line << ", require: false" if gem_hash.has_key?(:require) && !gem_hash[:require]
- line << "\n"
- end
-
- def self.create_directories
- # no created: handlers
- %w[channels components data imports locales mail_components operations policies server styles].each do |isomorfeus_dir|
- create_directory(File.join(isomorfeus_path, isomorfeus_dir))
- end
- create_directory('spec')
- end
-
- def self.create_directory(directory)
- unless Dir.exist?(directory)
- puts "Creating directory #{directory}."
- FileUtils.mkdir_p(directory)
- FileUtils.touch(File.join(directory, '.keep'))
- end
- end
-
- def self.create_file_from_template(template_path, target_file_path, data_hash)
- template = ERB.new(File.read(File.join(templates_path, template_path), mode: 'r'))
- result = template.result_with_hash(data_hash)
- ext = File.exist?(target_file_path) ? '_new' : ''
- File.write(target_file_path + ext, result, mode: 'w')
- end
-
- def self.install_framework
- data_hash = { app_class: app_class,
- middlewares: create_middlewares,
- middlewares_includes: middlewares_includes,
- rack_server_init: rack_server[:rack_server_init] }
- create_file_from_template('app.rb.erb', "#{@project_name}_app.rb", data_hash)
- create_file_from_template( rack_server[:init_template], rack_server[:init_template][0..-5], {})
- data_hash = { app_require: app_require, app_class: app_class }
- create_file_from_template('config.ru.erb', 'config.ru', data_hash)
- create_file_from_template(File.join('app_loader.rb.erb'), 'app_loader.rb', {})
- create_file_from_template(File.join('arango_config.rb.erb'), 'arango_config.rb', data_hash )
- create_file_from_template(File.join('.gitignore.erb'), '.gitignore', {})
- end
-
- def self.install_isomorfeus_entries
- data_hash = { app_class: app_class }
- create_file_from_template('isomorfeus_loader.rb.erb', File.join(isomorfeus_path, 'isomorfeus_loader.rb'), data_hash)
- create_file_from_template('isomorfeus_web_worker_loader.rb.erb', File.join(isomorfeus_path, 'isomorfeus_web_worker_loader.rb'), data_hash)
- create_file_from_template('mail_components_loader.rb.erb', File.join(isomorfeus_path, 'mail_components_loader.rb'), data_hash)
- end
-
- def self.install_js_entries
- data_hash = {}
- create_file_from_template('application.js.erb', entrypoint_path('application.js'), data_hash)
- create_file_from_template('application_common.js.erb', entrypoint_path('application_common.js'), data_hash)
- create_file_from_template('application_ssr.js.erb', entrypoint_path('application_ssr.js'), data_hash)
- create_file_from_template('application_web_worker.js.erb', entrypoint_path('application_web_worker.js'), data_hash)
- create_file_from_template('mail_components.js.erb', entrypoint_path('mail_components.js'), data_hash)
- end
-
- def self.install_styles
- create_file_from_template('application.css.erb', stylesheet_path('application.css'), {})
- end
-
- def self.install_webpack_config
- File.unlink(webpack_config_path('production.js'), webpack_config_path('development.js'),
- webpack_config_path('debug.js'))
- create_file_from_template('production.js.erb', webpack_config_path('production.js'), {})
- create_file_from_template('development.js.erb', webpack_config_path('development.js'), {})
- create_file_from_template('development_ssr.js.erb', webpack_config_path('development_ssr.js'), {})
- create_file_from_template('debug.js.erb', webpack_config_path('debug.js'), {})
- end
-
- def self.create_gemfile
- rack_server_gems = ''
- Isomorfeus::Installer.rack_servers[options[:rack_server]]&.fetch(:gems)&.each do |gem|
- rack_server_gems << generate_gem_line(gem)
- end
- database_gems = ''
- Isomorfeus::Installer.databases[options[:database]]&.fetch(:gems)&.each do |gem|
- database_gems << generate_gem_line(gem)
- end
- data_hash = { database_gems: database_gems.chop,
- rack_server_gems: rack_server_gems.chop }
- if source_dir
- %i[isomorfeus isomorfeus_data isomorfeus_i18n isomorfeus_mailer isomorfeus_operation isomorfeus_policy isomorfeus_transport].each do |i_module|
- data_hash[i_module] = i_module == isomorfeus_module ? "path: '..'" : "path: '../../#{i_module.to_s.tr('_', '-')}'"
- end
- data_hash[:isomorfeus_version] = nil
- else
- data_hash[:isomorfeus_version] = "'~> #{Isomorfeus::VERSION}'"
- end
- create_file_from_template('Gemfile.erb', 'Gemfile', data_hash)
- end
-
- def self.create_components
- data_hash = { app_class: app_class }
- create_file_from_template('my_app.rb.erb',
- File.join(isomorfeus_path, 'components', app_class.underscore + '.rb'), data_hash)
- create_file_from_template('hello_component.rb.erb',
- File.join(isomorfeus_path, 'components', 'hello_component.rb'), {})
- create_file_from_template('navigation_links.rb.erb',
- File.join(isomorfeus_path, 'components', 'navigation_links.rb'), {})
- create_file_from_template('not_found_404_component.rb.erb',
- File.join(isomorfeus_path, 'components', 'not_found_404_component.rb'), {})
- create_file_from_template('welcome_component.rb.erb',
- File.join(isomorfeus_path, 'components', 'welcome_component.rb'), {})
- end
-
- def self.create_middlewares
- "use_isomorfeus_middlewares"
- end
-
- def self.create_package_json
- data_hash = { application_name: app_class }
- create_file_from_template('package.json.erb', 'package.json', data_hash)
- end
-
- def self.create_policy
- create_file_from_template('anonymous_policy.rb.erb',
- File.join(isomorfeus_path, 'policies', 'anonymous_policy.rb'), {})
- end
-
- def self.create_procfile
- data_hash = { rack_server_start_command: rack_server[:start_command] }
- create_file_from_template('Procfile.erb', 'Procfile', data_hash)
- create_file_from_template('ProcfileDev.erb', 'ProcfileDev', data_hash)
- create_file_from_template('ProcfileDebug.erb', 'ProcfileDebug', data_hash)
- end
-
- def self.create_spec
- data_hash = { app_class: app_class, app_require: app_require, rack_server: rack_server_name }
- create_file_from_template('spec_helper.rb.erb', File.join('spec', 'spec_helper.rb'), data_hash)
- create_file_from_template('test_spec.rb.erb', File.join('spec', 'test_spec.rb'), {})
- end
-
- def self.use_asset_bundler?
- options.has_key?('asset_bundler')
- end
-
- def self.copy_source_dir_files
- Dir.glob("#{source_dir}/**/*").each do |file|
- if File.file?(file)
- target_file = file[(source_dir.size+1)..-1]
- target_dir = File.dirname(target_file)
- Dir.mkdir(target_dir) unless Dir.exist?(target_dir)
- puts "Copying #{file} to #{target_file}."
- FileUtils.copy(file, target_file)
- end
- end
- end
- end
-end
+module Isomorfeus
+ module Installer
+
+ class << self
+ # application options
+ attr_reader :app_class
+ attr_accessor :database
+ attr_accessor :framework
+ attr_accessor :isomorfeus_module
+ attr_reader :project_dir
+ attr_reader :project_name
+ attr_accessor :rack_server
+ attr_accessor :rack_server_name
+ attr_reader :roda_app_class
+ attr_reader :roda_app_path
+ attr_accessor :source_dir
+
+ # installer options
+ attr_reader :options
+
+ def set_project_names(pro_dir)
+ @project_dir = pro_dir
+ @project_name = pro_dir.underscore
+ @app_class = @project_name.camelize + 'App'
+ @roda_app_class = @project_name.camelize + 'RodaApp'
+ @roda_app_path = @project_name + '_roda_app'
+ end
+
+ def options=(options)
+ Isomorfeus::Installer::OptionsMangler.mangle_options(options)
+ @options = options
+ end
+
+ def add_rack_server(name, props)
+ rack_servers[name] = props
+ end
+
+ def rack_servers
+ @rack_servers ||= {}
+ end
+
+ def sorted_rack_servers
+ rack_servers.keys.sort
+ end
+
+ # installer paths
+
+ def base_path
+ @base_path ||= File.realpath(File.join(File.dirname(File.realpath(__FILE__)), 'installer'))
+ end
+
+ def templates_path
+ @templates_path ||= File.realpath(File.join(File.dirname(File.realpath(__FILE__)), 'installer', 'templates'))
+ end
+ end
+ end
+end