diff --git a/modules/packages/rubygems/metadata.go b/modules/packages/rubygems/metadata.go index 8a9794860..2ca635e04 100644 --- a/modules/packages/rubygems/metadata.go +++ b/modules/packages/rubygems/metadata.go @@ -6,6 +6,7 @@ package rubygems import ( "archive/tar" "compress/gzip" + "fmt" "io" "regexp" "strings" @@ -41,8 +42,8 @@ type Metadata struct { Summary string `json:"summary,omitempty"` Authors []string `json:"authors,omitempty"` Licenses []string `json:"licenses,omitempty"` - RequiredRubyVersion []VersionRequirement `json:"required_ruby_version,omitempty"` - RequiredRubygemsVersion []VersionRequirement `json:"required_rubygems_version,omitempty"` + RequiredRubyVersion VersionRequirementArray `json:"required_ruby_version,omitempty"` + RequiredRubygemsVersion VersionRequirementArray `json:"required_rubygems_version,omitempty"` ProjectURL string `json:"project_url,omitempty"` RuntimeDependencies []Dependency `json:"runtime_dependencies,omitempty"` DevelopmentDependencies []Dependency `json:"development_dependencies,omitempty"` @@ -54,10 +55,12 @@ type VersionRequirement struct { Version string `json:"version"` } +type VersionRequirementArray []VersionRequirement + // Dependency represents a dependency of a RubyGems package type Dependency struct { Name string `json:"name"` - Version []VersionRequirement `json:"version"` + Version VersionRequirementArray `json:"version"` } type gemspec struct { @@ -108,9 +111,45 @@ type requirement struct { Requirements [][]any `yaml:"requirements"` } -// AsVersionRequirement converts into []VersionRequirement -func (r requirement) AsVersionRequirement() []VersionRequirement { - requirements := make([]VersionRequirement, 0, len(r.Requirements)) +func (vr VersionRequirement) String() string { + return vr.Restriction + " " + vr.Version +} + +func (arr VersionRequirementArray) List() []string { + arr_len := len(arr) + str_arr := make([]string, arr_len) + for i := 0; i < arr_len; i++ { + str_arr[i] = arr[i].String() + } + return str_arr +} + +func (arr VersionRequirementArray) Dumps() RubyUserMarshal { + arr_len := len(arr) + val0 := make([][]any, 1) + val0[0] = make([]any, arr_len) + for i := 0; i < arr_len; i++ { + val0[0][i] = []any{ + arr[i].Restriction, + RubyUserMarshal{ + Name: "Gem::Version", + Value: []any{ + arr[i].Version, + }, + }, + } + + } + val := RubyUserMarshal{ + Name: "Gem::Requirement", + Value: val0, + } + return val +} + +// AsVersionRequirement converts into VersionRequirementArray +func (r requirement) AsVersionRequirement() VersionRequirementArray { + requirements := make(VersionRequirementArray, 0, len(r.Requirements)) for _, req := range r.Requirements { if len(req) != 2 { continue diff --git a/routers/api/packages/rubygems/rubygems.go b/routers/api/packages/rubygems/rubygems.go index 061fb0871..1ae5eb7c7 100644 --- a/routers/api/packages/rubygems/rubygems.go +++ b/routers/api/packages/rubygems/rubygems.go @@ -139,8 +139,8 @@ func ServePackageSpecification(ctx *context.Context) { }, nil, // date metadata.Summary, // @summary - nil, // @required_ruby_version - nil, // @required_rubygems_version + metadata.RequiredRubyVersion.Dumps(), // @required_ruby_version + metadata.RequiredRubygemsVersion.Dumps(), // @required_rubygems_version metadata.Platform, // @original_platform []any{}, // @dependencies nil, // rubyforge_project