class SimpleFeatureFlags::Cli::Command::Generate

Constants

CONFIG_FILE

Attributes

options[R]

Public Class Methods

new(options) click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 13
def initialize(options)
  @options = options
end

Public Instance Methods

run() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 17
def run
  if options.rails
    generate_for_rails
    return
  end

  ::FileUtils.cp example_config_file, destination_file

  puts 'Generated:'
  puts '----------'
  puts "* #{destination_file}"
end

Private Instance Methods

destination_dir() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 111
def destination_dir
  raise IncorrectWorkingDirectoryError, "You should enter the main directory of your Rails project!" if options.rails && !::Dir.new(::Dir.pwd).entries.include?('config')

  ::Dir.pwd
end
destination_file() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 117
def destination_file
  @destination_file ||= ::File.join(destination_dir, CONFIG_FILE)
end
example_config_dir() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 103
def example_config_dir
  ::File.join(::File.expand_path(__dir__), '..', '..', '..', 'example_files', 'config')
end
example_config_file() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 107
def example_config_file
  ::File.join(example_config_dir, CONFIG_FILE)
end
file_append(file_path, line) click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 70
def file_append(file_path, line)
  new_content = File.read(file_path)
  new_content = "#{new_content}\n#{line}\n"
  File.open(file_path, 'wb') { |file| file.write(new_content) }
end
file_gsub(file_path, regexp, &block) click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 65
def file_gsub(file_path, regexp, &block)
  new_content = File.read(file_path).gsub(regexp, &block)
  File.open(file_path, 'wb') { |file| file.write(new_content) }
end
gemfile() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 95
def gemfile
  ::File.join(destination_dir, 'Gemfile')
end
generate_for_rails() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 32
        def generate_for_rails
          ::FileUtils.cp_r example_config_dir, destination_dir

          puts "Generated:"
          puts '----------'
          puts "- #{::File.join(destination_dir, 'config')}"
          print_dir_tree(example_config_dir, 1)

          return unless options.ui

          file_gsub(routes_rb, /.routes.draw do/) do |match|
            "#{match}\n  mount #{WEB_UI_CLASS_NAME}.new => '/admin/simple_feature_flags'\n"
          end

          ui_config_line = <<~CONF
            #{UI_CLASS_NAME}.configure do |config|
              config.instance = FEATURE_FLAGS
              config.featurable_class_names = %w[User]
            end
          CONF

          file_append(initializer_file, ui_config_line)
          file_append(gemfile, %(gem '#{UI_GEM}'))

          puts "\nModified:"
          puts '----------'
          puts "* #{routes_rb}"
          puts "* #{gemfile}"

          puts "\nBundling..."
          system 'bundle'
        end
initializer_file() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 91
def initializer_file
  ::File.join(destination_dir, 'config', 'initializers', 'simple_feature_flags.rb')
end
print_dir_tree(dir, embed_level = 0) click to toggle source
routes_rb() click to toggle source
# File lib/simple_feature_flags/cli/command/generate.rb, line 99
def routes_rb
  ::File.join(destination_dir, 'config', 'routes.rb')
end