Class: RubyGemsOrg

Inherits:
Website show all
Defined in:
lib/license_auto/website/ruby_gems_org.rb

Constant Summary collapse

URI =
'https://rubygems.org/'
HOST =
'rubygems.org'
LANGUAGE =
'Ruby'
GEM_NOT_FOUND =
"This rubygem could not be found."

Instance Method Summary collapse

Methods inherited from Website

#to_s

Constructor Details

#initialize(package) ⇒ RubyGemsOrg

Returns a new instance of RubyGemsOrg.



16
17
18
# File 'lib/license_auto/website/ruby_gems_org.rb', line 16

def initialize(package)
  super(package)
end

Instance Method Details

#download_gemObject



201
202
# File 'lib/license_auto/website/ruby_gems_org.rb', line 201

def download_gem()
end

#get_gem_infoObject

Returns eg. Hashie::Mash (19 elements)

"name":"diff-lcs",
"downloads":42036753,
"version":"1.2.5",
"version_downloads":25578122,
"platform":"ruby",
"authors":"Austin Ziegler",
"info":"Diff::LCS computes the difference between two Enumerable sequences using the\nMcIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities\nto create a simple HTML diff output format and a standard diff-like tool.\n\nThis is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did\nnot properly prune common sequences at the beginning of a comparison set.\nThanks to Paul Kunysch for fixing this issue.\n\nCoincident with the release of diff-lcs 1.2.3, we reported an issue with\nRubinius in 1.9 mode\n({rubinius/rubinius#2268[https://github.com/rubinius/rubinius/issues/2268]).\nWe are happy to report that this issue has been resolved.",
"licenses":[
    "MIT",
    "Perl Artistic v2",
    "GNU GPL v2"
],
"metadata":{

},
"sha":"a1d3dde665292317a883d319066792e3f0e6a24cade4bc4cc47605d27664c9ed",
"project_uri":"https://rubygems.org/gems/diff-lcs",
"gem_uri":"https://rubygems.org/gems/diff-lcs-1.2.5.gem",
"homepage_uri":"http://diff-lcs.rubyforge.org/",
"wiki_uri":null,
"documentation_uri":"http://www.rubydoc.info/gems/diff-lcs/1.2.5",
"mailing_list_uri":null,
"source_code_uri":null,
"bug_tracker_uri":null,
"dependencies":{
    "development":[
        {
            "name":"hoe",
            "requirements":"~> 3.7"
        },
        {
            "name":"hoe-bundler",
            "requirements":"~> 1.2"
        },
        {
            "name":"hoe-doofus",
            "requirements":"~> 1.0"
        },
        {
            "name":"hoe-gemspec2",
            "requirements":"~> 1.1"
        },
        {
            "name":"hoe-git",
            "requirements":"~> 1.5"
        },
        {
            "name":"hoe-rubygems",
            "requirements":"~> 1.0"
        },
        {
            "name":"hoe-travis",
            "requirements":"~> 1.2"
        },
        {
            "name":"rake",
            "requirements":"~> 10.0"
        },
        {
            "name":"rdoc",
            "requirements":"~> 4.0"
        },
        {
            "name":"rspec",
            "requirements":"~> 2.0"
        },
        {
            "name":"rubyforge",
            "requirements":">= 2.0.4"
        }
    ],
    "runtime":[

    ]
}

}.

Returns:

  • eg. Hashie::Mash (19 elements)

    "name":"diff-lcs",
    "downloads":42036753,
    "version":"1.2.5",
    "version_downloads":25578122,
    "platform":"ruby",
    "authors":"Austin Ziegler",
    "info":"Diff::LCS computes the difference between two Enumerable sequences using the\nMcIlroy-Hunt longest common subsequence (LCS) algorithm. It includes utilities\nto create a simple HTML diff output format and a standard diff-like tool.\n\nThis is release 1.2.4, fixing a bug introduced after diff-lcs 1.1.3 that did\nnot properly prune common sequences at the beginning of a comparison set.\nThanks to Paul Kunysch for fixing this issue.\n\nCoincident with the release of diff-lcs 1.2.3, we reported an issue with\nRubinius in 1.9 mode\n({rubinius/rubinius#2268[https://github.com/rubinius/rubinius/issues/2268]).\nWe are happy to report that this issue has been resolved.",
    "licenses":[
        "MIT",
        "Perl Artistic v2",
        "GNU GPL v2"
    ],
    "metadata":{
    
    },
    "sha":"a1d3dde665292317a883d319066792e3f0e6a24cade4bc4cc47605d27664c9ed",
    "project_uri":"https://rubygems.org/gems/diff-lcs",
    "gem_uri":"https://rubygems.org/gems/diff-lcs-1.2.5.gem",
    "homepage_uri":"http://diff-lcs.rubyforge.org/",
    "wiki_uri":null,
    "documentation_uri":"http://www.rubydoc.info/gems/diff-lcs/1.2.5",
    "mailing_list_uri":null,
    "source_code_uri":null,
    "bug_tracker_uri":null,
    "dependencies":{
        "development":[
            {
                "name":"hoe",
                "requirements":"~> 3.7"
            },
            {
                "name":"hoe-bundler",
                "requirements":"~> 1.2"
            },
            {
                "name":"hoe-doofus",
                "requirements":"~> 1.0"
            },
            {
                "name":"hoe-gemspec2",
                "requirements":"~> 1.1"
            },
            {
                "name":"hoe-git",
                "requirements":"~> 1.5"
            },
            {
                "name":"hoe-rubygems",
                "requirements":"~> 1.0"
            },
            {
                "name":"hoe-travis",
                "requirements":"~> 1.2"
            },
            {
                "name":"rake",
                "requirements":"~> 10.0"
            },
            {
                "name":"rdoc",
                "requirements":"~> 4.0"
            },
            {
                "name":"rspec",
                "requirements":"~> 2.0"
            },
            {
                "name":"rubyforge",
                "requirements":">= 2.0.4"
            }
        ],
        "runtime":[
    
        ]
    }
    

    }



162
163
164
165
166
167
168
169
170
171
# File 'lib/license_auto/website/ruby_gems_org.rb', line 162

def get_gem_info()
  # TODO: Gems.info(@package.name, @package.version)
  gem_info = Gems.info(@package.name)
  gem_info =
      if gem_info == GEM_NOT_FOUND
        nil
      else
        Hashie::Mash.new(gem_info)
      end
end

#get_latest_version"authors" => "David Heinemeier Hansson", ...

Returns:

  • ("authors" => "David Heinemeier Hansson", "built_at" => "2016-03-07T00:00:00.000Z", "created_at" => "2016-03-07T22:33:22.563Z", "description" => "Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.", "downloads_count" => 28113, "metadata" => {}, "number" => "4.2.6", "summary" => "Full-stack web application framework.", "platform" => "ruby", "ruby_version" => ">= 1.9.3", "prerelease" => false, "licenses" => [ [0] "MIT" ], "requirements" => [], "sha" => "a199258c0d2bae09993a6932c49df254fd66428899d1823b8c5285de02e5bc33")

    “authors” => “David Heinemeier Hansson”, “built_at” => “2016-03-07T00:00:00.000Z”, “created_at” => “2016-03-07T22:33:22.563Z”, “description” => “Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.”, “downloads_count” => 28113, “metadata” => {}, “number” => “4.2.6”, “summary” => “Full-stack web application framework.”, “platform” => “ruby”, “ruby_version” => “>= 1.9.3”, “prerelease” => false, “licenses” => [

    [0] "MIT"
    

    ], “requirements” => [], “sha” => “a199258c0d2bae09993a6932c49df254fd66428899d1823b8c5285de02e5bc33”



192
193
194
195
196
197
198
199
# File 'lib/license_auto/website/ruby_gems_org.rb', line 192

def get_latest_version()
  versions = Gems.versions(@package.name).reject { |v| v['prerelease'] }.first
  if versions == GEM_NOT_FOUND
    raise(GEM_NOT_FOUND)
  end

  versions.reject { |v| v['prerelease'] }.first
end

#get_license_infoObject

(Defaults to the latest version if no version is specified.)



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/license_auto/website/ruby_gems_org.rb', line 22

def get_license_info()
  if @package.version.nil?
    begin
      @package.version = get_latest_version['number']
    rescue Exception => e
      LicenseAuto.logger.error(e)
      return nil
    end
  end

  gem_info = get_gem_info

  raise LicenseAuto::PackageNotFound if gem_info.nil?

  license_info = LicenseAuto::LicenseInfoWrapper.new

  source_code_matcher = LicenseAuto::Matcher::SourceURL.new(gem_info.source_code_uri || gem_info.homepage_uri)
  github_matched = source_code_matcher.match_github_resource
  bitbucket_matched = source_code_matcher.match_bitbucket_resource

  if github_matched
    license_info = GithubCom.new(@package, github_matched[:owner], github_matched[:repo]).get_license_info
  elsif bitbucket_matched
    # TODO bitbucket_matched
  elsif gem_info.homepage_uri
    # TODO: HomepageSpider
    # LicenseAuto.logger.warn("TODO: HomepageSpider")
    # homepage_spider = HomepageSpider.new(gem_info.homepage_uri, @package.name)
    # source_code_uri = homepage_spider.get_source_code_uri
    # if source_code_uri
    #   LicenseAuto.logger.warn("TODO: call myself recursively")
    # else
    #   license_wrapper = homepage_spider.get_license_page
    #   LicenseAuto.logger.warn("TODO: HomepageSpider")
    # end

  elsif not gem_info.licenses.empty?
    license_files = gem_info.licenses.map {|license_name|
      LicenseAuto::LicenseWrapper.new(
          name: license_name,
          sim_ratio: 1.0,
          html_url: gem_info.project_uri,
          download_url: gem_info.project_uri,
          text: nil
      )
    }

    license_info[:licenses] = license_files
    LicenseAuto.logger.debug(license_info)
  end

  # TODO:
  pack_wrapper = LicenseAuto::PackWrapper.new(
      project_url: gem_info.project_uri,
      homepage: gem_info.homepage_uri,
      source_url: gem_info.source_code_uri || source_code_matcher.url
  )

  license_info[:pack] = pack_wrapper
  license_info
end