lib/vars/options.rb in vars-0.0.4 vs lib/vars/options.rb in vars-0.0.5
- old
+ new
@@ -3,67 +3,78 @@
attr_reader :opts
module Defaults
BRANCH = "master".freeze
ENV_NAME = "development".freeze
+ REMOTE_NAME = "origin".freeze
SOURCE_PATH = "config/vars.yml".freeze
SOURCE_TYPE = :path
end
module EnvKeys
- BRANCH = "TARGET_BRANCH".freeze
- ENV_NAME = "APP_ENV".freeze
+ BRANCH = "TARGET_BRANCH".freeze
+ ENV_NAME = "APP_ENV".freeze
+ REMOTE_NAME = "REMOTE_NAME".freeze
end
def initialize(opts = {})
@opts = opts.transform_keys(&:to_sym)
+ # Use only when source_type is git.
+ @need_fetch = true
end
def hash(reload = false)
@hash = nil if reload
@hash ||= load_source
end
def load_source
src = YAML.safe_load(ERB.new(raw_source, nil, "-").result(Class.new.__binding__), [], [], true)
+ return {} if src.nil?
+
src.fetch("default", {}).merge(src.fetch(name.to_s))
end
def name
opts.fetch(:name, ENV.fetch(EnvKeys::ENV_NAME, Defaults::ENV_NAME))
end
def repo_path
- case
- when opts.key?(:repo_path)
- opts.fetch(:repo_path)
- when in_repository?
- opts[:repo_path] = capture("git rev-parse --show-toplevel")
- else
- nil
- end
+ return opts.fetch(:repo_path) if opts.key?(:repo_path)
+ return nil unless in_repository?
+
+ opts[:repo_path] = capture("git rev-parse --show-toplevel")
end
def branch
- case
- when opts.key?(:branch)
- opts.fetch(:branch)
- when ENV.key?(EnvKeys::BRANCH)
+ return opts.fetch(:branch) if opts.key?(:branch)
+
+ if ENV.key?(EnvKeys::BRANCH)
opts[:branch] = ENV.fetch(EnvKeys::BRANCH)
- when in_repository?
+ elsif in_repository?
opts[:branch] = capture("git symbolic-ref --short HEAD")
else
Defaults::BRANCH
end
end
+ def remote_name
+ ENV.fetch(EnvKeys::REMOTE_NAME, Defaults::REMOTE_NAME)
+ end
+
def source_type
opts.fetch(:source_type, Defaults::SOURCE_TYPE)
end
def in_repository?
opts[:in_repository] = success?("git rev-parse --git-dir") unless opts.key?(:in_repository)
+ # Update remote repositories.
+ if opts[:in_repository] && @need_fetch
+ execute("git fetch #{remote_name}")
+ @need_fetch = false
+ end
+
opts.fetch(:in_repository)
end
private
@@ -73,10 +84,10 @@
case source_type
when :path
File.read(path)
when :git
- Dir.chdir(repo_path) { capture("git show #{branch}:#{path}") }
+ Dir.chdir(repo_path) { capture("git show #{remote_name}/#{branch}:#{path}") }
else
raise "unknown source_type: #{source_type}"
end
end