57 lines
1.0 KiB
Ruby
57 lines
1.0 KiB
Ruby
|
require "json"
|
||
|
|
||
|
class RepoMetadata
|
||
|
attr_accessor :data
|
||
|
|
||
|
def initialize data
|
||
|
@data = data
|
||
|
normalize_data!
|
||
|
end
|
||
|
|
||
|
def allowed_fields
|
||
|
[
|
||
|
"name", "version", "language", "distribution-name",
|
||
|
"product-page", "github-repository", "issue-tracker"
|
||
|
]
|
||
|
end
|
||
|
|
||
|
def build output_directory
|
||
|
fields = @data.to_a.map { |kv| "--#{kv[0]} #{kv[1]}" }
|
||
|
Dir.chdir output_directory do
|
||
|
cmd "python3 -m docuploader create-metadata #{fields.join ' '}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def normalize_data!
|
||
|
@data.delete_if { |k, _| !allowed_fields.include?(k) }
|
||
|
end
|
||
|
|
||
|
def [] key
|
||
|
data[key]
|
||
|
end
|
||
|
|
||
|
def []= key, value
|
||
|
@data[key] = value
|
||
|
end
|
||
|
|
||
|
def cmd line
|
||
|
puts line
|
||
|
output = `#{line}`
|
||
|
puts output
|
||
|
output
|
||
|
end
|
||
|
|
||
|
def self.from_source source
|
||
|
if source.is_a? RepoMetadata
|
||
|
data = source.data
|
||
|
elsif source.is_a? Hash
|
||
|
data = source
|
||
|
elsif File.file? source
|
||
|
data = JSON.parse File.read(source)
|
||
|
else
|
||
|
raise "Source must be a path, hash, or RepoMetadata instance"
|
||
|
end
|
||
|
RepoMetadata.new data
|
||
|
end
|
||
|
end
|