Class: Licensed::AppConfiguration

Inherits:
Hash
  • Object
show all
Defined in:
lib/licensed/configuration.rb

Direct Known Subclasses

Configuration

Constant Summary collapse

DEFAULT_CACHE_PATH =
".licenses".freeze
DEFAULT_CONFIG_FILES =
[
  ".licensed.yml".freeze,
  ".licensed.yaml".freeze,
  ".licensed.json".freeze
].freeze
SOURCE_TYPES =
Source.constants.map { |c| Source.const_get(c) }.freeze

Instance Method Summary collapse

Constructor Details

#initialize(options = {}, inherited_options = {}) ⇒ AppConfiguration

Returns a new instance of AppConfiguration.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/licensed/configuration.rb', line 14

def initialize(options = {}, inherited_options = {})
  super()

  # update order:
  # 1. anything inherited from root config
  # 2. app defaults
  # 3. explicitly configured app settings
  update(inherited_options)
  update(defaults_for(options, inherited_options))
  update(options)

  self["sources"] ||= {}
  self["reviewed"] ||= {}
  self["ignored"] ||= {}
  self["allowed"] ||= []

  verify_arg "source_path"
  verify_arg "cache_path"
end

Instance Method Details

#allow(license) ⇒ Object

Set a license as explicitly allowed



88
89
90
# File 'lib/licensed/configuration.rb', line 88

def allow(license)
  self["allowed"] << license
end

#allowed?(dependency) ⇒ Boolean

Is the license of the dependency allowed?

Returns:

  • (Boolean)


73
74
75
# File 'lib/licensed/configuration.rb', line 73

def allowed?(dependency)
  Array(self["allowed"]).include?(dependency["license"])
end

#cache_pathObject

Returns the path to the app cache directory as a Pathname



35
36
37
# File 'lib/licensed/configuration.rb', line 35

def cache_path
  Licensed::Git.repository_root.join(self["cache_path"])
end

#defaults_for(options, inherited_options) ⇒ Object



92
93
94
95
96
97
98
99
# File 'lib/licensed/configuration.rb', line 92

def defaults_for(options, inherited_options)
  name = options["name"] || File.basename(options["source_path"])
  cache_path = inherited_options["cache_path"] || DEFAULT_CACHE_PATH
  {
    "name" => name,
    "cache_path" => File.join(cache_path, name)
  }
end

#enabled?(source_type) ⇒ Boolean

Returns whether a source type is enabled

Returns:

  • (Boolean)


56
57
58
59
60
# File 'lib/licensed/configuration.rb', line 56

def enabled?(source_type)
  # the default is false if any sources are set to true, true otherwise
  default = !self["sources"].any? { |_, enabled| enabled }
  self["sources"].fetch(source_type, default)
end

#ignore(dependency) ⇒ Object

Ignore a dependency



78
79
80
# File 'lib/licensed/configuration.rb', line 78

def ignore(dependency)
  (self["ignored"][dependency["type"]] ||= []) << dependency["name"]
end

#ignored?(dependency) ⇒ Boolean

Is the given dependency ignored?

Returns:

  • (Boolean)


68
69
70
# File 'lib/licensed/configuration.rb', line 68

def ignored?(dependency)
  Array(self["ignored"][dependency["type"]]).include?(dependency["name"])
end

#pwdObject



44
45
46
# File 'lib/licensed/configuration.rb', line 44

def pwd
  Pathname.pwd
end

#review(dependency) ⇒ Object

Set a dependency as reviewed



83
84
85
# File 'lib/licensed/configuration.rb', line 83

def review(dependency)
  (self["reviewed"][dependency["type"]] ||= []) << dependency["name"]
end

#reviewed?(dependency) ⇒ Boolean

Is the given dependency reviewed?

Returns:

  • (Boolean)


63
64
65
# File 'lib/licensed/configuration.rb', line 63

def reviewed?(dependency)
  Array(self["reviewed"][dependency["type"]]).include?(dependency["name"])
end

#source_pathObject

Returns the path to the app source directory as a Pathname



40
41
42
# File 'lib/licensed/configuration.rb', line 40

def source_path
  Licensed::Git.repository_root.join(self["source_path"])
end

#sourcesObject

Returns an array of enabled app sources



49
50
51
52
53
# File 'lib/licensed/configuration.rb', line 49

def sources
  @sources ||= SOURCE_TYPES.select { |source_class| enabled?(source_class.type) }
                           .map { |source_class| source_class.new(self) }
                           .select(&:enabled?)
end

#verify_arg(property) ⇒ Object



101
102
103
104
105
# File 'lib/licensed/configuration.rb', line 101

def verify_arg(property)
  return if self[property]
  raise Licensed::Configuration::LoadError,
    "App #{self["name"]} is missing required property #{property}"
end