Skip to content

Commit

Permalink
Merge branch 'master' into dotenv-templates
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasfedb committed Jun 20, 2019
2 parents dc91d94 + 5c812db commit a59ae37
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 48 deletions.
6 changes: 3 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
language: ruby

rvm:
- 2.6.1
- 2.5.3
- 2.4.5
- 2.6.3
- 2.5.5
- 2.4.6
- 2.3.8
- 2.2.10
- 2.1.10
Expand Down
6 changes: 5 additions & 1 deletion Changelog.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# Changelog

[Unreleased changes](https://github.com/bkeepers/dotenv/compare/v2.7.1...master)
[Unreleased changes](https://github.com/bkeepers/dotenv/compare/v2.7.2...master)

## 2.7.2 - March 25th, 2019

* Cleaned up CLI while resolving regressions in 2.7.1 [#382](https://github.com/bkeepers/dotenv/pull/382)

## 2.7.1 - February 24, 2019

Expand Down
52 changes: 13 additions & 39 deletions lib/dotenv/cli.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@ module Dotenv
# The CLI is a class responsible of handling all the command line interface
# logic.
class CLI
attr_reader :argv, :exec_args, :parser_args, :filenames
attr_reader :argv, :filenames

def initialize(argv = [])
@argv = argv.dup
@filenames = []
@flag_matchers = []
end

def run
Expand All @@ -23,79 +22,54 @@ def run
rescue Errno::ENOENT => e
abort e.message
else
exec(*@exec_args) unless @exec_args.empty?
exec(*@argv) if @argv.present?
end
end

private

def parse_argv!(argv)
parser = create_option_parser
add_options(parser, @flag_matchers)
@parser_args, @exec_args = split_argv(argv.join(" "), @flag_matchers)
parser.parse! @parser_args
add_options(parser)
parser.order!(argv)

@filenames
end

def add_options(parser, flag_matchers)
add_files_option(parser, flag_matchers)
add_help_option(parser, flag_matchers)
add_version_option(parser, flag_matchers)
add_template_option(parser, flag_matchers)
def add_options(parser)
add_files_option(parser)
add_help_option(parser)
add_version_option(parser)
add_template_option(parser)
end

def add_files_option(parser, flag_matchers)
flag_matchers.push("-f \\S+")
def add_files_option(parser)
parser.on("-f FILES", Array, "List of env files to parse") do |list|
@filenames = list
end
end

def add_help_option(parser, flag_matchers)
flag_matchers.push("-h", "--help")
def add_help_option(parser)
parser.on("-h", "--help", "Display help") do
puts parser
exit
end
end

def add_version_option(parser, flag_matchers)
flag_matchers.push("-v", "--version")
def add_version_option(parser)
parser.on("-v", "--version", "Show version") do
puts "dotenv #{Dotenv::VERSION}"
exit
end
end

# Take a env file and create a template from it. This will keep the Key
# names but will replace the values. Useful for fat fingers who don't want
# to push env files.
def add_template_option(parser, flag_matchers)
flag_matchers.push("-t \\S+", "--template \\S+")
description = "Create a template of an existing env file"
parser.on("-t", "--template=FILE", description) do |file|
parser.on("-t", "--template=FILE", "Create a template env file") do |file|
template = Dotenv::EnvTemplate.new(file)
template.create_template
end
end

# Detect dotenv flags vs executable args so we can parse properly and still
# take advantage of OptionParser for dotenv flags
def split_argv(arg_string, matchers)
matcher = /^((?:#{matchers.join("|")})\s?)?(.+)?$/
data = matcher.match(arg_string)
dotenv_args = []
exec_args = []

unless data.nil?
dotenv_args = (!data[1].nil? ? data[1].split(" ") : [])
exec_args = (!data[2].nil? ? data[2].split(" ") : [])
end

[dotenv_args, exec_args]
end

def create_option_parser
OptionParser.new do |parser|
parser.banner = "Usage: dotenv [options]"
Expand Down
4 changes: 2 additions & 2 deletions lib/dotenv/rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ def self.load
instance.load
end

config.before_configuration { load }

private

def dotenv_files
Expand All @@ -63,5 +61,7 @@ def dotenv_files
root.join(".env")
].compact
end

config.before_configuration { load }
end
end
2 changes: 1 addition & 1 deletion lib/dotenv/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module Dotenv
VERSION = "2.7.1".freeze
VERSION = "2.7.2".freeze
end
12 changes: 10 additions & 2 deletions spec/dotenv/cli_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,23 @@ def run(*args)
cli.send(:parse_argv!, cli.argv)

expect(cli.filenames).to eql(["plain.env"])
expect(cli.exec_args).to eql(["foo", "--switch"])
expect(cli.argv).to eql(["foo", "--switch"])
end

it "does not consume dotenv flags from subcommand" do
cli = Dotenv::CLI.new(["foo", "-f", "something"])
cli.send(:parse_argv!, cli.argv)

expect(cli.filenames).to eql([])
expect(cli.exec_args).to eql(["foo", "-f", "something"])
expect(cli.argv).to eql(["foo", "-f", "something"])
end

it "does not mess with quoted args" do
cli = Dotenv::CLI.new(["foo something"])
cli.send(:parse_argv!, cli.argv)

expect(cli.filenames).to eql([])
expect(cli.argv).to eql(["foo something"])
end

it "templates a file specified by -t" do
Expand Down

0 comments on commit a59ae37

Please sign in to comment.