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
# File lib/simple_feature_flags/cli/command/generate.rb, line 76 def print_dir_tree(dir, embed_level = 0) padding = ' ' * (embed_level * 2) children = ::Dir.new(dir).entries.reject { |el| /^\.{1,2}$/ =~ el } children.each do |child| child_dir = ::File.join(dir, child) ::Dir.new(::File.join(dir, child)) puts "#{padding}- #{child}" print_dir_tree(child_dir, embed_level + 1) rescue Errno::ENOTDIR puts "#{padding}* #{child}" end end
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