Class: Envandle::ReferenceCache
- Inherits:
-
Object
- Object
- Envandle::ReferenceCache
- Defined in:
- lib/envandle/reference_cache.rb
Instance Method Summary collapse
- #all ⇒ Object
- #extract_bundler_argsets(base, group, name, argsets, found = {}) ⇒ Object
- #git_branches ⇒ Object
- #git_refs ⇒ Object
-
#initialize(context) ⇒ ReferenceCache
constructor
A new instance of ReferenceCache.
- #left ⇒ Object
- #parse(key, klass, env) ⇒ Object
- #parse_git(klass, env, v) ⇒ Object
- #parse_name(env, v) ⇒ Object
- #parse_path(klass, env, v) ⇒ Object
- #paths ⇒ Object
- #use(name) ⇒ Object
Constructor Details
#initialize(context) ⇒ ReferenceCache
Returns a new instance of ReferenceCache.
3 4 5 |
# File 'lib/envandle/reference_cache.rb', line 3 def initialize(context) @context = context end |
Instance Method Details
#all ⇒ Object
26 27 28 |
# File 'lib/envandle/reference_cache.rb', line 26 def all @all ||= git_branches.merge(git_refs.merge(paths)) end |
#extract_bundler_argsets(base, group, name, argsets, found = {}) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/envandle/reference_cache.rb', line 74 def extract_bundler_argsets(base, group, name, argsets, found = {}) key = Envandle.reference_key(group, name) return true if found.key?(key) found[key] = true if ref = use(name) ref.spec.runtime_dependencies.each do |i| if ref2 = use(i.name) extract_bundler_argsets base, nil, i.name, argsets, found end end args = base.dup args.args[0] = name argsets << ref.to_executable_argset(args) true else false end end |
#git_branches ⇒ Object
18 19 20 |
# File 'lib/envandle/reference_cache.rb', line 18 def git_branches @git_branches ||= parse(:git, GitBranchReference, "ENVANDLE_GEM_GIT_BRANCH") end |
#git_refs ⇒ Object
22 23 24 |
# File 'lib/envandle/reference_cache.rb', line 22 def git_refs @git_refs ||= parse(:git, GitRefReference, "ENVANDLE_GEM_GIT_REF") end |
#left ⇒ Object
30 31 32 |
# File 'lib/envandle/reference_cache.rb', line 30 def left @left ||= all.dup end |
#parse(key, klass, env) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/envandle/reference_cache.rb', line 34 def parse(key, klass, env) {}.tap do |h| (ENV[env].to_s).split(";").each do |i| if v = __send__("parse_#{key}", klass, env, i) h[v.name] = v if v end end end end |
#parse_git(klass, env, v) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/envandle/reference_cache.rb', line 60 def parse_git(klass, env, v) v = v.to_s.strip return if v.empty? a = v.split(":") name = a[0] path = a[1..-1].join(":").to_s.strip url_and_ref = path.split('#') url = url_and_ref[0].to_s.strip ref = url_and_ref[1].to_s.strip raise "No gem git url (#{env}): #{ENV[env]}" if url.empty? raise "No gem git ref/branch/tag (#{env}): #{ENV[env]}" if ref.empty? klass.new(@context, parse_name(env, name), url, ref) end |
#parse_name(env, v) ⇒ Object
44 45 46 47 48 |
# File 'lib/envandle/reference_cache.rb', line 44 def parse_name(env, v) v = v.to_s.strip raise "No gem name (#{env}): #{ENV[env]}" if v.empty? v end |
#parse_path(klass, env, v) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/envandle/reference_cache.rb', line 50 def parse_path(klass, env, v) v = v.to_s.strip return if v.empty? a = v.split(":") name = a[0].to_s.strip path = a[1..-1].join(":").to_s.strip raise "No gem path (#{env}): #{ENV[env]}" if path.empty? klass.new(@context, parse_name(env, name), path) end |
#paths ⇒ Object
14 15 16 |
# File 'lib/envandle/reference_cache.rb', line 14 def paths @paths ||= parse(:path, PathReference, "ENVANDLE_GEM_PATH") end |
#use(name) ⇒ Object
7 8 9 10 11 12 |
# File 'lib/envandle/reference_cache.rb', line 7 def use(name) if ref = all[name] left.delete name ref end end |