module BMT

Constants

DATA_DIR

Public Instance Methods

current_version() click to toggle source
# File lib/bmt.rb, line 36
def current_version
  versions.first
end
find(key, version: current_version) click to toggle source

returns a Methodology object given a key and a version

# File lib/bmt.rb, line 21
def find(key, version: current_version)
  raise VersionNotFoundError unless versions.include?(version)
  raise MethodologyNotFoundError unless methodology_keys(version: version).include?(key)

  @methodologies[version].nil? && @methodologies[version] = {}

  @methodologies[version][key] ||= Methodology.new(
    key: key,
    version: version,
    attributes: methodology_json(key, version: version)
  )

  @methodologies[version][key]
end
json_dir_names() click to toggle source

Get names of directories matching lib/data/<major>-<minor>/

# File lib/bmt.rb, line 66
def json_dir_names
  DATA_DIR.entries
          .map(&:basename)
          .map(&:to_s)
          .select { |dirname| dirname =~ /^[0-9]+\.[0-9]/ }.sort
end
methodology_json(key, version: current_version) click to toggle source
# File lib/bmt.rb, line 57
def methodology_json(key, version: current_version)
  JSON.parse(methodology_pathname(key, version: version).read)
end
methodology_keys(version: current_version) click to toggle source

returns available methodology keys for a given version

# File lib/bmt.rb, line 41
def methodology_keys(version: current_version)
  @methodology_keys[version] ||=
    DATA_DIR.join(version, 'methodologies').entries
            .map(&:basename)
            .map(&:to_s)
            .select { |dirname| dirname =~ /json/ }
            .map { |filepath| File.basename(filepath, File.extname(filepath)) }
end
methodology_pathname(key, version: current_version) click to toggle source
# File lib/bmt.rb, line 61
def methodology_pathname(key, version: current_version)
  DATA_DIR.join(version, 'methodologies', "#{key}.json")
end
versions() click to toggle source

Infer the available versions of the BMT from the names of the files in the repo. The returned list is in order with the current version first.

# File lib/bmt.rb, line 53
def versions
  @versions ||= json_dir_names.sort.reverse!
end