bunto-github-metadata 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 62520af3886612f840412e0ad6ce893282226806
4
+ data.tar.gz: d20dd9356d26e0825872b9082737d13d5f9254ea
5
+ SHA512:
6
+ metadata.gz: 4db0a9b06d79251105c12b8ab927c218d404cfa69ba4c66defbe187998b8cf73e06dd416c55354097413e477db3bb1a9c9aa5c121a2515ccdfc3ede73b5b3b36
7
+ data.tar.gz: f3193317665edfe629b1687a60383df48dc4c98715d3d9e0d55f8d383c2334ffcc578dc8543eea4ae40034666157c2f06ff466fb5e53173effbf33cd353ee1d8
@@ -0,0 +1,113 @@
1
+ require 'octokit'
2
+
3
+ module Bunto
4
+ unless const_defined? :Errors
5
+ module Errors
6
+ FatalException = Class.new(::RuntimeError) unless const_defined? :FatalException
7
+ end
8
+ end
9
+
10
+ module GitHubMetadata
11
+ NoRepositoryError = Class.new(Bunto::Errors::FatalException)
12
+
13
+ autoload :Client, 'bunto-github-metadata/client'
14
+ autoload :Pages, 'bunto-github-metadata/pages'
15
+ autoload :Repository, 'bunto-github-metadata/repository'
16
+ autoload :Sanitizer, 'bunto-github-metadata/sanitizer'
17
+ autoload :Value, 'bunto-github-metadata/value'
18
+ autoload :VERSION, 'bunto-github-metadata/version'
19
+
20
+ class << self
21
+ attr_accessor :repository
22
+ attr_writer :client
23
+
24
+ def environment
25
+ Bunto.respond_to?(:env) ? Bunto.env : (Pages.env || 'development')
26
+ end
27
+
28
+ def client
29
+ @client ||= Client.new
30
+ end
31
+
32
+ def values
33
+ @values ||= Hash.new
34
+ end
35
+ alias_method :to_h, :values
36
+ alias_method :to_liquid, :to_h
37
+
38
+ def clear_values!
39
+ @values = Hash.new
40
+ end
41
+
42
+ def reset!
43
+ clear_values!
44
+ @client = nil
45
+ @repository = nil
46
+ end
47
+
48
+ def [](key)
49
+ values[key.to_s]
50
+ end
51
+
52
+ def register_value(key, value)
53
+ values[key.to_s] = Value.new(key.to_s, value)
54
+ end
55
+
56
+ # Reset our values hash.
57
+ def init!
58
+ clear_values!
59
+
60
+ # Environment-Specific
61
+ register_value('environment', proc { Pages.env })
62
+ register_value('hostname', proc { Pages.github_hostname })
63
+ register_value('pages_env', proc { Pages.env })
64
+ register_value('pages_hostname', proc { Pages.pages_hostname })
65
+ register_value('api_url', proc { Pages.api_url })
66
+ register_value('help_url', proc { Pages.help_url })
67
+
68
+ register_value('versions', proc {
69
+ begin
70
+ require 'github-pages'
71
+ GitHubPages.versions
72
+ rescue LoadError; Hash.new end
73
+ })
74
+
75
+ # The Juicy Stuff
76
+ register_value('public_repositories', proc { |_,r| r.owner_public_repositories })
77
+ register_value('organization_members', proc { |_,r| r.organization_public_members })
78
+ register_value('build_revision', proc {
79
+ ENV['BUNTO_BUILD_REVISION'] || `git rev-parse HEAD`.strip
80
+ })
81
+ register_value('project_title', proc { |_,r| r.name })
82
+ register_value('project_tagline', proc { |_,r| r.tagline })
83
+ register_value('owner_name', proc { |_,r| r.owner })
84
+ register_value('owner_url', proc { |_,r| r.owner_url })
85
+ register_value('owner_gravatar_url', proc { |_,r| r.owner_gravatar_url })
86
+ register_value('repository_url', proc { |_,r| r.repository_url })
87
+ register_value('repository_nwo', proc { |_,r| r.nwo })
88
+ register_value('repository_name', proc { |_,r| r.name})
89
+ register_value('zip_url', proc { |_,r| r.zip_url })
90
+ register_value('tar_url', proc { |_,r| r.tar_url })
91
+ register_value('clone_url', proc { |_,r| r.repo_clone_url })
92
+ register_value('releases_url', proc { |_,r| r.releases_url })
93
+ register_value('issues_url', proc { |_,r| r.issues_url })
94
+ register_value('wiki_url', proc { |_,r| r.wiki_url })
95
+ register_value('language', proc { |_,r| r.language })
96
+ register_value('is_user_page', proc { |_,r| r.user_page? })
97
+ register_value('is_project_page', proc { |_,r| r.project_page? })
98
+ register_value('show_downloads', proc { |_,r| r.show_downloads? })
99
+ register_value('url', proc { |_,r| r.pages_url })
100
+ register_value('contributors', proc { |_,r| r.contributors })
101
+ register_value('releases', proc { |_,r| r.releases })
102
+
103
+ values
104
+ end
105
+
106
+ if Bunto.const_defined? :Site
107
+ require_relative 'bunto-github-metadata/ghp_metadata_generator'
108
+ end
109
+ end
110
+
111
+ init!
112
+ end
113
+ end
@@ -0,0 +1,108 @@
1
+ require 'digest'
2
+
3
+ module Bunto
4
+ module GitHubMetadata
5
+ class Client
6
+ InvalidMethodError = Class.new(NoMethodError)
7
+
8
+ # Whitelisted API calls.
9
+ API_CALLS = Set.new(%w{
10
+ repository
11
+ organization
12
+ repository?
13
+ pages
14
+ contributors
15
+ releases
16
+ list_repos
17
+ organization_public_members
18
+ })
19
+
20
+ def initialize(options = nil)
21
+ @client = build_octokit_client(options)
22
+ end
23
+
24
+ def safe_require(gem_name)
25
+ require gem_name
26
+ true
27
+ rescue LoadError
28
+ false
29
+ end
30
+
31
+ def build_octokit_client(options = nil)
32
+ options = options || Hash.new
33
+ unless options.key? :access_token
34
+ options.merge! pluck_auth_method
35
+ end
36
+ Octokit::Client.new({:auto_paginate => true}.merge(options))
37
+ end
38
+
39
+ def accepts_client_method?(method_name)
40
+ API_CALLS.include?(method_name.to_s) && @client.respond_to?(method_name)
41
+ end
42
+
43
+ def respond_to?(method_name, include_private = false)
44
+ accepts_client_method?(method_name) || super
45
+ end
46
+
47
+ def method_missing(method_name, *args, &block)
48
+ method = method_name.to_s
49
+ if accepts_client_method?(method_name)
50
+ key = cache_key(method_name, args)
51
+ Bunto.logger.debug "GitHub Metadata:", "Calling @client.#{method}(#{args.map(&:inspect).join(", ")})"
52
+ cache[key] ||= save_from_errors { @client.public_send(method_name, *args, &block) }
53
+ elsif @client.respond_to?(method_name)
54
+ raise InvalidMethodError, "#{method_name} is not whitelisted on #{inspect}"
55
+ else
56
+ super
57
+ end
58
+ end
59
+
60
+ def save_from_errors(default = false, &block)
61
+ if block.arity == 1
62
+ block.call(@client)
63
+ else
64
+ block.call
65
+ end
66
+ rescue Faraday::Error::ConnectionFailed,
67
+ Octokit::NotFound,
68
+ Octokit::Unauthorized,
69
+ Octokit::TooManyRequests
70
+ default
71
+ end
72
+
73
+ def inspect
74
+ "#<#{self.class.name} @client=#{client_inspect}>"
75
+ end
76
+
77
+ private
78
+
79
+ def client_inspect
80
+ if @client.nil?
81
+ "nil"
82
+ else
83
+ "#<#{@client.class.name} (#{"un" unless @client.access_token}authenticated)>"
84
+ end
85
+ end
86
+
87
+ def pluck_auth_method
88
+ if ENV['BUNTO_GITHUB_TOKEN'] || Octokit.access_token
89
+ { :access_token => ENV['BUNTO_GITHUB_TOKEN'] || Octokit.access_token }
90
+ elsif !ENV['NO_NETRC'] && File.exist?(File.join(ENV['HOME'], '.netrc')) && safe_require('netrc')
91
+ { :netrc => true }
92
+ else
93
+ Bunto.logger.warn "GitHub Metadata:", "No GitHub API authentication could be found." +
94
+ " Some fields may be missing or have incorrect data."
95
+ {}.freeze
96
+ end
97
+ end
98
+
99
+ def cache_key(method, *args)
100
+ Digest::SHA1.hexdigest(method.to_s + args.join(", "))
101
+ end
102
+
103
+ def cache
104
+ @cache ||= {}
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,75 @@
1
+ module Bunto
2
+ module GitHubMetadata
3
+ class GHPMetadataGenerator < Bunto::Generator
4
+ safe true
5
+
6
+ def generate(site)
7
+ Bunto.logger.debug "Generator:", "Calling GHPMetadataGenerator"
8
+ initialize_repo! nwo(site)
9
+ Bunto.logger.debug "GitHub Metadata:", "Generating for #{GitHubMetadata.repository.nwo}"
10
+
11
+ site.config['github'] =
12
+ case site.config['github']
13
+ when nil
14
+ GitHubMetadata.to_liquid
15
+ when Hash
16
+ Bunto::Utils.deep_merge_hashes(GitHubMetadata.to_liquid, site.config['github'])
17
+ else
18
+ site.config['github']
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def initialize_repo!(repo_nwo)
25
+ if GitHubMetadata.repository.nil? || GitHubMetadata.repository.nwo != repo_nwo
26
+ GitHubMetadata.init!
27
+ GitHubMetadata.repository = GitHubMetadata::Repository.new(repo_nwo)
28
+ end
29
+ end
30
+
31
+ def git_remote_url
32
+ `git remote --verbose`.split("\n").grep(%r{\Aorigin\t}).map do |remote|
33
+ remote.sub(/\Aorigin\t(.*) \([a-z]+\)/, "\\1")
34
+ end.uniq.first || ""
35
+ end
36
+
37
+ def nwo_from_git_origin_remote
38
+ return unless Bunto.env == "development"
39
+ matches = git_remote_url.match %r{github.com(:|/)([\w-]+)/([\w-]+)}
40
+ matches[2..3].join("/") if matches
41
+ end
42
+
43
+ def nwo_from_env
44
+ ENV['PAGES_REPO_NWO']
45
+ end
46
+
47
+ def nwo_from_config(site)
48
+ repo = site.config['repository']
49
+ repo if repo && repo.is_a?(String) && repo.include?('/')
50
+ end
51
+
52
+ # Public: fetches the repository name with owner to fetch metadata for.
53
+ # In order of precedence, this method uses:
54
+ # 1. the environment variable $PAGES_REPO_NWO
55
+ # 2. 'repository' variable in the site config
56
+ # 3. the 'origin' git remote's URL
57
+ #
58
+ # site - the Bunto::Site being processed
59
+ #
60
+ # Return the name with owner (e.g. 'parkr/my-repo') or raises an
61
+ # error if one cannot be found.
62
+ def nwo(site)
63
+ nwo_from_env || \
64
+ nwo_from_config(site) || \
65
+ nwo_from_git_origin_remote || \
66
+ proc {
67
+ raise GitHubMetadata::NoRepositoryError, "No repo name found. " \
68
+ "Specify using PAGES_REPO_NWO environment variables, " \
69
+ "'repository' in your configuration, or set up an 'origin' " \
70
+ "git remote pointing to your github.com repository."
71
+ }.call
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,82 @@
1
+ module Bunto
2
+ module GitHubMetadata
3
+ class Pages
4
+ class << self
5
+ DEFAULTS = {
6
+ 'PAGES_ENV' => 'dotcom'.freeze,
7
+ 'PAGES_API_URL' => 'https://api.github.com'.freeze,
8
+ 'PAGES_HELP_URL' => 'https://help.github.com'.freeze,
9
+ 'PAGES_GITHUB_HOSTNAME' => 'github.com'.freeze,
10
+ 'PAGES_PAGES_HOSTNAME' => 'github.io'.freeze,
11
+ 'SSL' => 'false'.freeze,
12
+ 'SUBDOMAIN_ISOLATION' => 'false'.freeze
13
+ }.freeze
14
+
15
+ # Whether the GitHub instance supports HTTPS
16
+ # Note: this will be the same as how sites are served in Enterprise,
17
+ # but may be different from how sites are served on GitHub.com.
18
+ # See Repository#url_scheme
19
+ def ssl?
20
+ env_var('SSL') == 'true' || test?
21
+ end
22
+
23
+ def scheme
24
+ ssl? ? "https" : "http"
25
+ end
26
+
27
+ def subdomain_isolation?
28
+ env_var('SUBDOMAIN_ISOLATION').eql? 'true'
29
+ end
30
+
31
+ def test?; env == 'test' end
32
+ def dotcom?; env == 'dotcom' end
33
+ def enterprise?; env == 'enterprise' end
34
+
35
+ def custom_domains_enabled?
36
+ dotcom? || test?
37
+ end
38
+
39
+ def env
40
+ env_var 'PAGES_ENV'
41
+ end
42
+
43
+ def github_url
44
+ if dotcom?
45
+ "https://github.com".freeze
46
+ else
47
+ "#{scheme}://#{github_hostname}"
48
+ end
49
+ end
50
+
51
+ def api_url
52
+ trim_last_slash env_var('PAGES_API_URL', ENV['API_URL'])
53
+ end
54
+
55
+ def help_url
56
+ trim_last_slash env_var('PAGES_HELP_URL', ENV['HELP_URL'])
57
+ end
58
+
59
+ def github_hostname
60
+ trim_last_slash env_var('PAGES_GITHUB_HOSTNAME', ENV['GITHUB_HOSTNAME'])
61
+ end
62
+
63
+ def pages_hostname
64
+ trim_last_slash env_var('PAGES_PAGES_HOSTNAME', ENV['PAGES_HOSTNAME'])
65
+ end
66
+
67
+ private
68
+ def env_var(key, intermediate_default = nil)
69
+ !ENV[key].to_s.empty? ? ENV[key] : (intermediate_default || DEFAULTS[key])
70
+ end
71
+
72
+ def trim_last_slash(url)
73
+ if url[-1] == "/"
74
+ url[0..-2]
75
+ else
76
+ url
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,193 @@
1
+ module Bunto
2
+ module GitHubMetadata
3
+ class Repository
4
+ attr_reader :nwo, :owner, :name
5
+ def initialize(name_with_owner)
6
+ @nwo = name_with_owner
7
+ @owner = nwo.split("/").first
8
+ @name = nwo.split("/").last
9
+ end
10
+
11
+ def git_ref
12
+ user_page? ? 'master' : 'gh-pages'
13
+ end
14
+
15
+ def repo_info
16
+ @repo_info ||= (Value.new(proc { |c| c.repository(nwo) }).render || Hash.new)
17
+ end
18
+
19
+ def language
20
+ repo_info["language"]
21
+ end
22
+
23
+ def tagline
24
+ repo_info["description"]
25
+ end
26
+
27
+ def owner_url
28
+ "#{Pages.github_url}/#{owner}"
29
+ end
30
+
31
+ def owner_gravatar_url
32
+ "#{owner_url}.png"
33
+ end
34
+
35
+ def repo_clone_url
36
+ "#{repository_url}.git"
37
+ end
38
+
39
+ def repository_url
40
+ "#{owner_url}/#{name}"
41
+ end
42
+
43
+ def zip_url
44
+ "#{repository_url}/zipball/#{git_ref}"
45
+ end
46
+
47
+ def tar_url
48
+ "#{repository_url}/tarball/#{git_ref}"
49
+ end
50
+
51
+ def releases_url
52
+ "#{repository_url}/releases"
53
+ end
54
+
55
+ def issues_url
56
+ "#{repository_url}/issues" if repo_info["has_issues"]
57
+ end
58
+
59
+ def wiki_url
60
+ "#{repository_url}/wiki" if repo_info["has_wiki"]
61
+ end
62
+
63
+ def show_downloads?
64
+ !!repo_info["has_downloads"]
65
+ end
66
+
67
+ def organization_repository?
68
+ memoize_value :@is_organization_repository, Value.new(proc { |c| !!c.organization(owner) })
69
+ end
70
+
71
+ def owner_public_repositories
72
+ memoize_value :@owner_public_repositories, Value.new(proc { |c| c.list_repos(owner, "type" => "public") })
73
+ end
74
+
75
+ def organization_public_members
76
+ memoize_value :@organization_public_members, Value.new(proc { |c|
77
+ c.organization_public_members(owner) if organization_repository?
78
+ })
79
+ end
80
+
81
+ def contributors
82
+ memoize_value :@contributors, Value.new(proc { |c| c.contributors(nwo) })
83
+ end
84
+
85
+ def releases
86
+ memoize_value :@releases, Value.new(proc { |c| c.releases(nwo) })
87
+ end
88
+
89
+ def user_page?
90
+ primary?
91
+ end
92
+
93
+ def project_page?
94
+ !user_page?
95
+ end
96
+
97
+ def github_repo?
98
+ !Pages.enterprise? && owner.eql?('github')
99
+ end
100
+
101
+ def primary?
102
+ if Pages.enterprise?
103
+ name.downcase == "#{owner.to_s.downcase}.#{Pages.github_hostname}"
104
+ else
105
+ user_page_domains.include? name.downcase
106
+ end
107
+ end
108
+
109
+ # In enterprise, the site's scheme will be the same as the instance's
110
+ # In dotcom, this will be `https` for GitHub-owned sites that end with
111
+ # `.github.com` and will be `http` for all other sites.
112
+ # Note: This is not the same as *instance*'s scheme, which may differ
113
+ def url_scheme
114
+ if Pages.enterprise?
115
+ Pages.scheme
116
+ elsif owner == 'github' && domain.end_with?('.github.com')
117
+ 'https'
118
+ else
119
+ 'http'
120
+ end
121
+ end
122
+
123
+ def default_user_domain
124
+ if github_repo?
125
+ "#{owner}.#{Pages.github_hostname}".downcase
126
+ elsif Pages.enterprise?
127
+ Pages.pages_hostname.downcase
128
+ else
129
+ "#{owner}.#{Pages.pages_hostname}".downcase
130
+ end
131
+ end
132
+
133
+ def user_page_domains
134
+ domains = [default_user_domain]
135
+ domains.push "#{owner}.github.com".downcase unless Pages.enterprise?
136
+ domains
137
+ end
138
+
139
+ def user_domain
140
+ domain = default_user_domain
141
+ user_page_domains.each do |user_repo|
142
+ candidate_nwo = "#{owner}/#{user_repo}"
143
+ next unless Value.new(proc { |client| client.repository? candidate_nwo }).render
144
+ domain = self.class.new(candidate_nwo).domain
145
+ end
146
+ domain
147
+ end
148
+
149
+ def pages_url
150
+ if !Pages.custom_domains_enabled?
151
+ path = user_page? ? owner : nwo
152
+ if Pages.subdomain_isolation?
153
+ URI.join("#{Pages.scheme}://#{Pages.pages_hostname}/", path).to_s
154
+ else
155
+ URI.join("#{Pages.github_url}/pages/", path).to_s
156
+ end
157
+ elsif cname || primary?
158
+ "#{url_scheme}://#{domain}"
159
+ else
160
+ URI.join("#{url_scheme}://#{domain}", name).to_s
161
+ end
162
+ end
163
+
164
+ def cname
165
+ memoize_value :@cname, Value.new(proc { |c|
166
+ if Pages.custom_domains_enabled?
167
+ (c.pages(nwo) || {'cname' => nil})['cname']
168
+ end
169
+ })
170
+ end
171
+
172
+ def domain
173
+ @domain ||=
174
+ if !Pages.custom_domains_enabled?
175
+ Pages.github_hostname
176
+ elsif cname # explicit CNAME
177
+ cname
178
+ elsif primary? # user/org repo
179
+ default_user_domain
180
+ else # project repo
181
+ user_domain
182
+ end
183
+ end
184
+
185
+ private
186
+
187
+ def memoize_value(var_name, value)
188
+ return instance_variable_get(var_name) if instance_variable_defined?(var_name)
189
+ instance_variable_set(var_name, value.render)
190
+ end
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,53 @@
1
+ module Bunto
2
+ module GitHubMetadata
3
+ module Sanitizer
4
+ extend self
5
+ # Sanitize an object.
6
+ # When the resource is either `false`, `true`, `nil` or a number,
7
+ # it returns the resource as-is. When the resource is an array,
8
+ # it maps over the entire array, sanitizing each of its values.
9
+ # When the resource responds to the #to_hash method, it returns
10
+ # the value of #sanitize_resource (see below). If none of the
11
+ # aforementioned conditions are met, the return value of #to_s
12
+ # is used.
13
+ #
14
+ # resource - an Object
15
+ #
16
+ # Returns the sanitized resource.
17
+ def sanitize(resource)
18
+ case resource
19
+ when Array
20
+ resource.map { |item| sanitize(item) }
21
+ when Numeric
22
+ resource
23
+ when FalseClass
24
+ false
25
+ when TrueClass
26
+ true
27
+ when NilClass
28
+ nil
29
+ else
30
+ if resource.respond_to?(:to_hash)
31
+ sanitize_resource(resource)
32
+ else
33
+ resource.to_s
34
+ end
35
+ end
36
+ end
37
+
38
+ # Sanitize the Sawyer Resource or Hash
39
+ # Note: the object must respond to :to_hash for this to work.
40
+ # Consider using #sanitize instead of this method directly.
41
+ #
42
+ # resource - an Object which responds to :to_hash
43
+ #
44
+ # Returns the sanitized sawyer resource or hash as a hash.
45
+ def sanitize_resource(resource)
46
+ resource.to_hash.inject({}) do |result, (k, v)|
47
+ result[k.to_s] = sanitize(v)
48
+ result
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,66 @@
1
+ require 'json'
2
+
3
+ module Bunto
4
+ module GitHubMetadata
5
+ class Value
6
+ attr_reader :key, :value
7
+
8
+ def initialize(*args)
9
+ case args.size
10
+ when 1
11
+ @key = '{anonymous}'
12
+ @value = args.first
13
+ when 2
14
+ @key = args.first.to_s
15
+ @value = args.last
16
+ else
17
+ raise ArgumentError.new("#{args.size} args given but expected 1 or 2")
18
+ end
19
+ end
20
+
21
+ def render
22
+ @value = if @value.respond_to?(:call)
23
+ case @value.arity
24
+ when 0
25
+ @value.call
26
+ when 1
27
+ @value.call(GitHubMetadata.client)
28
+ when 2
29
+ @value.call(GitHubMetadata.client, GitHubMetadata.repository)
30
+ else
31
+ raise ArgumentError.new("Whoa, arity of 0, 1, or 2 please in your procs.")
32
+ end
33
+ else
34
+ @value
35
+ end
36
+ @value = Sanitizer.sanitize(@value)
37
+ rescue RuntimeError, NameError => e
38
+ Bunto.logger.error "GitHubMetadata:", "Error processing value '#{key}':"
39
+ raise e
40
+ end
41
+
42
+ def to_s
43
+ render.to_s
44
+ end
45
+
46
+ def to_json(*)
47
+ render.to_json
48
+ end
49
+
50
+ def to_liquid
51
+ case render
52
+ when nil
53
+ nil
54
+ when true, false
55
+ value
56
+ when Hash
57
+ value
58
+ when String, Numeric, Array
59
+ value
60
+ else
61
+ to_json
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,5 @@
1
+ module Bunto
2
+ module GitHubMetadata
3
+ VERSION = '1.0.0'
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bunto-github-metadata
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Parker Moore
8
+ - Suriyaa Kudo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-05-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: octokit
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '4.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '4.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.5'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.5'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: netrc
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: bunto
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.0'
98
+ description:
99
+ email:
100
+ - parkrmoore@gmail.com
101
+ - SuriyaaKudoIsc@users.noreply.github.com
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - lib/bunto-github-metadata.rb
107
+ - lib/bunto-github-metadata/client.rb
108
+ - lib/bunto-github-metadata/ghp_metadata_generator.rb
109
+ - lib/bunto-github-metadata/pages.rb
110
+ - lib/bunto-github-metadata/repository.rb
111
+ - lib/bunto-github-metadata/sanitizer.rb
112
+ - lib/bunto-github-metadata/value.rb
113
+ - lib/bunto-github-metadata/version.rb
114
+ homepage: https://github.com/bunto/github-metadata
115
+ licenses:
116
+ - MIT
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.5.1
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: The site.github namespace
138
+ test_files: []