Class: ProspectusTerraform::Lookup
- Inherits:
-
Object
- Object
- ProspectusTerraform::Lookup
- Defined in:
- lib/prospectus_terraform/providers.rb
Overview
Lookup object to find providers
Constant Summary collapse
- PROVIDER_REGEX =
/provider\.(?<key>[\w-]+) (?<value>[\d.]+)$/.freeze
- REPO_REGEX =
rubocop:disable Metrics/LineLength
%r{^ // provider\.(?<key>[\w-]+) (?<value>[\w-]+\/[\w-]+)}.freeze
Instance Method Summary collapse
- #cmd_name ⇒ Object
- #config_json ⇒ Object
- #default_repo(name) ⇒ Object
- #match_to_hash(lines, regex) ⇒ Object
- #providers ⇒ Object
- #repo_lines ⇒ Object
- #repos ⇒ Object
- #results ⇒ Object
Instance Method Details
#cmd_name ⇒ Object
23 24 25 |
# File 'lib/prospectus_terraform/providers.rb', line 23 def cmd_name 'terraform-config-inspect --json' end |
#config_json ⇒ Object
16 17 18 19 20 21 |
# File 'lib/prospectus_terraform/providers.rb', line 16 def config_json return @config_json if @config_json stdout, stderr, status = Open3.capture3(cmd_name) raise("#{cmd_name} failed") unless status.success? && stderr.empty? @config_json = stdout end |
#default_repo(name) ⇒ Object
45 46 47 |
# File 'lib/prospectus_terraform/providers.rb', line 45 def default_repo(name) "terraform-providers/terraform-provider-#{name}" end |
#match_to_hash(lines, regex) ⇒ Object
41 42 43 |
# File 'lib/prospectus_terraform/providers.rb', line 41 def match_to_hash(lines, regex) lines.map { |x| x.match(regex) }.compact.map { |x| [x[1], x[2]] }.to_h end |
#providers ⇒ Object
27 28 29 30 31 |
# File 'lib/prospectus_terraform/providers.rb', line 27 def providers @providers ||= JSON.parse(config_json)['required_providers'].map do |k, v| [k, v.first] end end |
#repo_lines ⇒ Object
37 38 39 |
# File 'lib/prospectus_terraform/providers.rb', line 37 def repo_lines @repo_lines ||= File.read('main.tf').lines end |
#repos ⇒ Object
33 34 35 |
# File 'lib/prospectus_terraform/providers.rb', line 33 def repos @repos ||= match_to_hash(repo_lines, REPO_REGEX) end |
#results ⇒ Object
10 11 12 13 14 |
# File 'lib/prospectus_terraform/providers.rb', line 10 def results @results ||= providers.map do |name, version| [name, version, repos[name] || default_repo(name)] end end |