50 lines
887 B
Crystal
50 lines
887 B
Crystal
require "specparser"
|
|
|
|
require "./exception.cr"
|
|
|
|
class Package::Package
|
|
getter name : String
|
|
getter version : String
|
|
getter release : Int32
|
|
getter slot : String
|
|
|
|
getter dependencies = Array(String).new
|
|
|
|
getter file_path : String
|
|
|
|
def initialize(@file_path)
|
|
specs = SpecParser.parse File.read file_path
|
|
|
|
name : String? = nil
|
|
version : String? = nil
|
|
release : Int32? = nil
|
|
slot : String? = nil
|
|
|
|
specs.assignments.each do |key, value|
|
|
case key
|
|
when "name"
|
|
name = value.as_s
|
|
when "version"
|
|
version = value.as_s
|
|
when "release"
|
|
release = value.as_s.to_i
|
|
when "slot"
|
|
slot = value.as_s
|
|
when "dependencies"
|
|
@dependencies = value.as_a_or_s
|
|
end
|
|
end
|
|
|
|
@name = name.not_nil!
|
|
@version = version.not_nil!
|
|
@release = release.not_nil!
|
|
@slot = slot.not_nil!
|
|
end
|
|
|
|
def to_atom
|
|
Atom.new @name, slot: @slot
|
|
end
|
|
end
|
|
|
|
|