spec/config_spec.rb in anyway_config-1.3.1 vs spec/config_spec.rb in anyway_config-1.4.0

- old
+ new

@@ -107,14 +107,10 @@ config_name :cool_thing end klass.new end - it "warns user about deprecated behaviour" do - expect { conf }.to print_warning - end - context "when env_name is set" do let(:conf) do klass = CoolConfig.dup klass.class_eval do config_name :cool_thing @@ -175,12 +171,12 @@ before(:each) do ENV.delete_if { |var| var =~ /^myapp_/i } end it "load data by config name", :aggregate_failures do - ENV['MYAPP_TEST'] = '1' - ENV['MYAPP_NAME'] = 'my_app' + ENV['MY_APP_TEST'] = '1' + ENV['MY_APP_NAME'] = 'my_app' Anyway.env.clear data = Anyway::Config.for(:my_app) expect(data[:test]).to eq 1 expect(data[:name]).to eq 'my_app' expect(data[:secret]).to eq 'my_secret' if Rails.application.respond_to?(:secrets) @@ -232,8 +228,91 @@ new_config = config.new expect(new_config.debug).to eq false expect(new_config.test).to be_nil expect(new_config.new_param).to eq 'a' + end + end + + describe "#parse_options!" do + let(:config_instance) { config.new } + + context "when `ignore_options` is not provided" do + let(:config) do + Class.new(described_class) do + config_name 'optparse' + attr_config :host, :port, :log_level, :debug + end + end + + it "parses ARGC string" do + config_instance.parse_options!(%w[--host localhost --port 3333 --log-level debug --debug T]) + expect(config_instance.host).to eq("localhost") + expect(config_instance.port).to eq(3333) + expect(config_instance.log_level).to eq("debug") + expect(config_instance.debug).to eq(true) + end + end + + context 'when `ignore_options` is provided' do + let(:config) do + Class.new(described_class) do + config_name 'optparse' + attr_config :host, :log_level, :concurrency, server_args: {} + + ignore_options :server_args + end + end + + it "parses ARGC string" do + expect do + config_instance.parse_options!( + %w[--host localhost --concurrency 10 --log-level debug --server-args SOME_ARGS] + ) + end.to raise_error(OptionParser::InvalidOption, /--server-args/) + + expect(config_instance.host).to eq("localhost") + expect(config_instance.concurrency).to eq(10) + expect(config_instance.log_level).to eq("debug") + expect(config_instance.server_args).to eq({}) + end + end + + context 'when `describe_options` is provided' do + let(:config) do + Class.new(described_class) do + config_name 'optparse' + attr_config :host, :log_level, :concurrency, server_args: {} + + describe_options( + concurrency: "number of threads to use" + ) + end + end + + it "contains options description" do + expect(config_instance.option_parser.help).to include("number of threads to use") + end + end + + context "customization of option parser" do + let(:config) do + Class.new(described_class) do + config_name 'optparse' + attr_config :host, :log_level, :concurrency, server_args: {} + + extend_options do |parser| + parser.banner = "mycli [options]" + + parser.on_tail "-h", "--help" do + puts parser + end + end + end + end + + it "allows to customize the parser" do + expect(config_instance.option_parser.help).to include("mycli [options]") + end end end end