class Workarea::StarterStoreGenerator

Public Instance Methods

theme_import() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 7
def theme_import
  @theme = Workarea::Theme.installed
  self.class.source_root(@theme.root)

  import_app_files
  update_gemfile
  import_initializers
  import_tests
  remove_theme_from_gemfile
  load_helpers
  bundle_install

  puts "#{@theme.homebase_name} imported successfully."
  puts 'You may need to run the assets:clobber rake task for changes to take effect.'
end

Private Instance Methods

bundle_install() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 119
def bundle_install
  puts 'Installing new gems...'
  run('bundle install', verbose: false)
end
dependencies_from_gemfile() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 111
def dependencies_from_gemfile
  File.readlines('Gemfile').map do |line|
    next unless line.include?('gem')
    next if line.include?('#') || line.include?('gems.weblinc') || line.include?('rubygems')
    line.chomp.strip.split(',').first.split("'").last
  end.compact
end
dependencies_from_gemspec() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 99
def dependencies_from_gemspec
  gemspec_path = "#{@theme.root}/workarea-#{@theme.slug}.gemspec"
  dependencies = Gem::Specification.load(gemspec_path).dependencies

  dependencies.map do |dependency|
    {
      name: dependency.name,
      requirement: dependency.requirements_list.join('')
    }
  end.compact
end
dependency_array() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 93
def dependency_array
  dependencies_from_gemspec.delete_if do |d|
    d[:name].in?(dependencies_from_gemfile) || d[:name] == 'workarea-theme'
  end.sort_by { |d| d[:name] }
end
import_app_files() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 25
def import_app_files
  puts 'Importing app files...'

  relative_path = 'app'
  directory(relative_to_original_destination_root(relative_path), relative_path)
end
import_initializers() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 32
def import_initializers
  puts 'Importing initializers...'

  relative_path = 'config'
  directory(relative_to_original_destination_root(relative_path), relative_path)
end
import_tests() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 55
def import_tests
  puts 'Importing tests...'

  relative_path = 'test'
  directory(relative_to_original_destination_root(relative_path), relative_path, exclude_pattern: 'dummy/*|teaspoon_env.rb|test_helper.rb')
end
load_helpers() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 39
def load_helpers
  puts 'Loading helpers...'

  helpers = Dir["#{@theme.root}/app/helpers/**/*.rb"].map do |helper|
    file_name = helper.split('/').last.gsub('.rb', '')
    "Workarea::Storefront::ApplicationController.helper(Workarea::Storefront::#{file_name.camelize})\n".indent(2)
  end.join('')

  application do
    f = "config.to_prepare do\n"
    f << helpers.indent(4)
    f << "end\n".indent(4)
    f
  end
end
remove_theme_from_gemfile() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 62
def remove_theme_from_gemfile
  puts 'Commenting out theme from gemfile...'
  comment_lines 'Gemfile', /#{@theme.slug}/
end
update_gemfile() click to toggle source
# File lib/generators/workarea/starter_store/starter_store_generator.rb, line 67
def update_gemfile
  puts 'Updating gemfile...'

  workarea_dependencies, other_dependencies = dependency_array.partition { |d| d[:name].include?("workarea") }

  inject_into_file 'Gemfile', after: "source 'https://gems.weblinc.com' do\n" do
    workarea_dependencies.map do |dependency|
      if dependency[:requirement] == '>= 0'
        "gem '#{dependency[:name]}'\n"
      else
        "gem '#{dependency[:name]}', '#{dependency[:requirement]}'\n"
      end
    end.join('').indent(2)
  end

  inject_into_file 'Gemfile', before: "source 'https://gems.weblinc.com' do\n" do
    other_dependencies.map do |dependency|
      if dependency[:requirement] == '>= 0'
        "gem '#{dependency[:name]}'\n"
      else
        "gem '#{dependency[:name]}', '#{dependency[:requirement]}'\n"
      end
    end.join('')
  end
end