Class: Metanorma::Release::AggregateCommand

Inherits:
Object
  • Object
show all
Defined in:
lib/metanorma/release/commands/aggregate.rb

Defined Under Namespace

Classes: Config

Constant Summary collapse

DEFAULT_CONFIG_FILE =
"metanorma.aggregate.yml"
DEFAULT_CACHE_DIR =
".cache/aggregate"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ AggregateCommand

Returns a new instance of AggregateCommand.



18
19
20
# File 'lib/metanorma/release/commands/aggregate.rb', line 18

def initialize(config)
  @config = config
end

Class Method Details

.build_config(cli_options) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/metanorma/release/commands/aggregate.rb', line 36

def self.build_config(cli_options)
  file_data = load_config_file(cli_options[:config])
  merged = merge_config(file_data, cli_options)
  Config.new(
    source: merged[:source],
    organizations: merged[:organizations],
    topic: merged[:topic],
    repos: merged[:repos],
    channels: merged[:channels],
    stages: merged[:stages],
    output_dir: merged[:output_dir],
    file_routing: merged[:file_routing],
    cache_dir: merged[:cache_dir] || DEFAULT_CACHE_DIR,
    include_drafts: merged[:include_drafts],
    concurrency: merged[:concurrency],
    min_documents: merged[:min_documents],
    token: merged[:token],
    create_zip: merged[:create_zip],
  )
end

.load_config_file(path) ⇒ Object



57
58
59
60
61
62
# File 'lib/metanorma/release/commands/aggregate.rb', line 57

def self.load_config_file(path)
  path ||= DEFAULT_CONFIG_FILE
  return {} unless File.exist?(path)

  YAML.safe_load_file(path, permitted_classes: [Symbol]) || {}
end

.merge_config(file_data, cli_options) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/metanorma/release/commands/aggregate.rb', line 64

def self.merge_config(file_data, cli_options)
  gh = file_data["github"] || {}
  {
    source: cli_options[:source] || file_data["source"],
    organizations: cli_options[:organizations].any? ? cli_options[:organizations] : Array(gh["organizations"]),
    topic: cli_options[:topic] || gh["topic"],
    repos: cli_options[:repos] || file_data["repos"],
    channels: cli_options[:channels].any? ? cli_options[:channels] : Array(file_data["channels"]),
    stages: cli_options[:stages].any? ? cli_options[:stages] : Array(file_data["stages"]),
    output_dir: cli_options[:output_dir] || file_data["output_dir"],
    file_routing: cli_options[:file_routing] || file_data["file_routing"],
    cache_dir: cli_options[:cache_dir] || file_data["cache_dir"],
    include_drafts: cli_options[:include_drafts] || file_data["include_drafts"],
    concurrency: cli_options[:concurrency] || file_data["concurrency"],
    min_documents: cli_options[:min_documents] || file_data["min_documents"],
    token: cli_options[:token],
    create_zip: cli_options[:create_zip],
  }
end

Instance Method Details

#callObject



22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/metanorma/release/commands/aggregate.rb', line 22

def call
  result = run_aggregation
  return result unless result.publications.any?

  index = build_index(result)
  site = Site.new(index: index, output_dir: @config.output_dir)
  site.write!
  site.enrich!
  site.package! if @config.create_zip

  stamp_primary_identifiers(index)
  result
end