gemsmith 7.3.0 → 7.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28d4c64a7cb8cc5819196a8c3ee614e2da031350
4
- data.tar.gz: 1dfec05ae110a647cc69134ed9f2e522d7a0a830
3
+ metadata.gz: b15a788991bc084549c98a462eed3c3f5c38cdca
4
+ data.tar.gz: 9738979e1f90e3f9e32a1e43da1a5ab1122bcab2
5
5
  SHA512:
6
- metadata.gz: 410efca04dbfdd99d472a4d986a4a15192afbf86766397be24d4af210dde4532294a286dc2206132156aa8f3dc6f3fe822b71d7171d30dd9aa06884d12172e99
7
- data.tar.gz: ebf4fa5d837dbd5eda29f22080fceddd1545cc5034e2f0834a38346f2db5327fb0290fc9196a6243acf0fb69637cdd6c9bfa1df6c987a03160bb95e6111bb506
6
+ metadata.gz: e44ec634d3ed7706e7b2b3a807d57bbf36631b9e8d818e4e3f2fc02b8166bf13b401dad37de89dd7bfb933da86d929c02c9813890549d31ace84987ba3b9c9c1
7
+ data.tar.gz: c983d010a5878a9a28082c66e61eb51a3ee0d235a224b612b5a5d7d629f0a6e0c1aa42c774c0e98eb8e6e0c3b3c6cabdae50f5ef3d14c04af2ce99c8f95a47b2
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/README.md CHANGED
@@ -26,8 +26,7 @@ A command line interface for smithing new Ruby gems.
26
26
  - [Gem Certificates](#gem-certificates)
27
27
  - [Private Gem Servers](#private-gem-servers)
28
28
  - [Gem Specification Metadata](#gem-specification-metadata)
29
- - [RubyGems Credentials](#rubygems-credentials)
30
- - [Generating Credentials](#generating-credentials)
29
+ - [Gem Credentials](#gem-credentials)
31
30
  - [Promotion](#promotion)
32
31
  - [Versioning](#versioning)
33
32
  - [Code of Conduct](#code-of-conduct)
@@ -43,7 +42,6 @@ A command line interface for smithing new Ruby gems.
43
42
  - Builds a gem skeleton with enhanced Bundler functionality.
44
43
  - Uses [Milestoner](https://github.com/bkuhlmann/milestoner) for consistent project/gem versioning.
45
44
  - Uses [Tocer](https://github.com/bkuhlmann/tocer) for README table of contents generation.
46
- - Uses common settings and a structured layout for building new gems.
47
45
  - Supports [Thor](https://github.com/erikhuda/thor).
48
46
  - Supports [Ruby on Rails](http://rubyonrails.org).
49
47
  - Supports [Pry](http://pryrepl.org).
@@ -55,10 +53,12 @@ A command line interface for smithing new Ruby gems.
55
53
  - Supports [Gemnasium](https://gemnasium.com).
56
54
  - Supports [Travis CI](https://travis-ci.org).
57
55
  - Supports [Patreon](https://www.patreon.com).
58
- - Adds commonly needed [README](README.md), [CHANGELOG](CHANGELOG.md), [CONTRIBUTING](CONTRIBUTING.md),
56
+ - Supports common settings and a structured layout for building new gems.
57
+ - Supports publishing to public or private gem servers.
58
+ - Provides commonly needed [README](README.md), [CHANGELOG](CHANGELOG.md), [CONTRIBUTING](CONTRIBUTING.md),
59
59
  [CODE OF CONDUCT](CODE_OF_CONDUCT.md), [LICENSE](LICENSE.md), etc. documentation.
60
- - Provides the ability to open the source code of any gem within your favorite editor.
61
- - Provides the ability to read the documentation of any gem within your default browser.
60
+ - Provides the ability to view source code of any gem within your favorite editor.
61
+ - Provides the ability to view the documentation of any gem within your default browser.
62
62
 
63
63
  # Screencasts
64
64
 
@@ -295,46 +295,21 @@ following:
295
295
  credentials are not used within your gemspec.
296
296
  - `allowed_push_host`: Provides the URL of the private gem server to push your gem to.
297
297
 
298
- ## RubyGems Credentials
298
+ ## Gem Credentials
299
299
 
300
- The "example_key" defined within the gem specification, mentioned above, *must* be defined withing your
301
- `~/.gem/credentials` file and should look like this:
302
-
303
- ---
304
- :example_key: "Basic dXNlcjpwYXNzd29yZA=="
305
-
306
- The "example_key" *must* be a symbol (hence the double colons) due to RubyGems requirements.
307
-
308
- ## Generating Credentials
309
-
310
- RubyGems uses an `Authorization` HTTP header when pushing a gem to a remote server. This can be an API key, HTTP Basic
311
- Auth, etc. When pushing a gem to RubyGems, you'll want to use the API key associated with your account. If that is the
312
- case, you're credentials would contain the following:
300
+ With your gem specification metadata established, you are ready to publish your gem to a public or private server. If
301
+ this is your first time publishing a gem and no gem credentials have been configured, you'll be prompted for them. This
302
+ gem will ask you for your login and password during gem publish. Gem credentials will are stored in the
303
+ `~/.gem/credentials` file as defined by RubyGems. *This will only happen once.* Afterwards, future gem publishing will
304
+ your stored credentials instead. Multiple credentials can be stored in the `~/.gem/credentials` file. Example:
313
305
 
314
306
  ---
315
307
  :rubygems_api_key: 2a0b460650e67d9b85a60e183defa376
316
-
317
- For a server that might use HTTP Basic auth, you can generate the key value by launching IRB and running the following:
318
-
319
- require "net/http"
320
- Net::HTTP::Get.new("http://gems.example.com").basic_auth "user", "password"
321
-
322
- The URL is arbitrary but the user and password should be your account credentials. The output, from running the code
323
- above, should look like the following:
324
-
325
- ["Basic dXNlcjpwYXNzd29yZA=="]
326
-
327
- You can then add this value to your credentials file like so:
328
-
329
- ---
330
308
  :example_key: "Basic dXNlcjpwYXNzd29yZA=="
331
309
 
332
- You can add multiple accounts to your RubyGems credentials (there is no limit to the number of accounts you might need
333
- to have access to). Example:
334
-
335
- ---
336
- :rubygems_api_key: 2a0b460650e67d9b85a60e183defa376
337
- :example_key: "Basic dXNlcjpwYXNzd29yZA=="
310
+ Should you need delete a credential (due to a bad login/password for example), you can open the `~/.gem/credentials` in
311
+ your default editor and remove the line(s) you don't need. Upon next publish of your gem, this gem will prompt you for
312
+ new credentials.
338
313
 
339
314
  # Promotion
340
315
 
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+
5
+ module Gemsmith
6
+ module Aids
7
+ # A Gem::Specification with additional enhancements.
8
+ class GemSpec
9
+ def self.specification
10
+ ::Gem::Specification
11
+ end
12
+
13
+ def self.default_gem_host
14
+ ::Gem::DEFAULT_HOST
15
+ end
16
+
17
+ def self.editor
18
+ ENV.fetch "EDITOR"
19
+ end
20
+
21
+ def self.find name, version
22
+ specification.find_by_name name, version
23
+ end
24
+
25
+ def self.find_all name
26
+ specification.find_all_by_name name
27
+ end
28
+
29
+ def initialize file_path, shell: Open3
30
+ @file_path = file_path
31
+ @shell = shell
32
+ @spec = self.class.specification.load file_path
33
+ validate
34
+ end
35
+
36
+ def homepage_url
37
+ String spec.homepage
38
+ end
39
+
40
+ def allowed_push_key
41
+ spec.metadata.fetch("allowed_push_key") { "rubygems_api_key" }
42
+ end
43
+
44
+ def allowed_push_host
45
+ spec.metadata.fetch("allowed_push_host") { self.class.default_gem_host }
46
+ end
47
+
48
+ def open_gem
49
+ shell.capture2 self.class.editor, spec.full_gem_path
50
+ String spec.full_gem_path
51
+ end
52
+
53
+ def open_homepage
54
+ shell.capture2 "open", homepage_url
55
+ homepage_url
56
+ end
57
+
58
+ def version_number
59
+ spec.version.version
60
+ end
61
+
62
+ def version_label
63
+ "v#{version_number}"
64
+ end
65
+
66
+ def package_file_name
67
+ "#{spec.name}-#{version_number}.gem"
68
+ end
69
+
70
+ private
71
+
72
+ attr_reader :file_path, :spec, :shell
73
+
74
+ def validate
75
+ unless spec.is_a?(self.class.specification)
76
+ fail(Errors::Specification, %(Unknown gem specification: "#{file_path}".))
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+
5
+ module Gemsmith
6
+ module Authenticators
7
+ # An authenticator for retrieving HTTP Basic authorization.
8
+ class Basic
9
+ def self.url
10
+ ""
11
+ end
12
+
13
+ def initialize login, password, encrypter: Net::HTTP::Get.new("https://ignore.example.com")
14
+ @login = login
15
+ @password = password
16
+ @encrypter = encrypter
17
+ end
18
+
19
+ def authorization
20
+ encrypter.basic_auth(login, password).first
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :login, :password, :encrypter
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+ require "uri"
5
+
6
+ module Gemsmith
7
+ module Authenticators
8
+ # An authenticator for retrieving RubyGems authorization.
9
+ class RubyGems
10
+ def self.url
11
+ "https://rubygems.org/api/v1/api_key"
12
+ end
13
+
14
+ def initialize login, password
15
+ @login = login
16
+ @password = password
17
+ @uri = URI.parse self.class.url
18
+ configure_client
19
+ end
20
+
21
+ def authorization
22
+ request = Net::HTTP::Get.new uri.request_uri
23
+ request.basic_auth login, password
24
+ response = client.request request
25
+ String response.body
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :login, :password, :uri, :client
31
+
32
+ def configure_client
33
+ @client = Net::HTTP.new uri.host, uri.port
34
+ @client.use_ssl = true
35
+ @client.verify_mode = OpenSSL::SSL::VERIFY_PEER
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/gemsmith/cli.rb CHANGED
@@ -5,8 +5,11 @@ require "thor"
5
5
  require "thor/actions"
6
6
  require "thor_plus/actions"
7
7
  require "gemsmith/aids/gem"
8
+ require "gemsmith/aids/gem_spec"
8
9
  require "gemsmith/aids/git"
9
10
  require "gemsmith/aids/spec"
11
+ require "gemsmith/errors/base"
12
+ require "gemsmith/errors/specification"
10
13
  require "gemsmith/skeletons/base_skeleton"
11
14
  require "gemsmith/skeletons/bundler_skeleton"
12
15
  require "gemsmith/skeletons/cli_skeleton"
@@ -62,7 +65,7 @@ module Gemsmith
62
65
  def initialize args = [], options = {}, config = {}
63
66
  super args, options, config
64
67
  @configuration = Configuration.new
65
- @spec_aid = Aids::Spec.new
68
+ @gem_spec = Aids::GemSpec
66
69
  end
67
70
 
68
71
  desc "-c, [--create=CREATE]", "Create new gem."
@@ -93,14 +96,14 @@ module Gemsmith
93
96
  desc "-o, [--open=OPEN]", "Open a gem in default editor."
94
97
  map %w(-o --open) => :open
95
98
  def open name
96
- result = process_gem name, "open"
99
+ result = process_gem name, "open_gem"
97
100
  info("Opening: #{result}") unless result.nil? || result.empty?
98
101
  end
99
102
 
100
103
  desc "-r, [--read=READ]", "Open a gem in default browser."
101
104
  map %w(-r --read) => :read
102
105
  def read name
103
- result = process_gem name, "read"
106
+ result = process_gem name, "open_homepage"
104
107
 
105
108
  if result.nil? || result.empty?
106
109
  error "Gem home page is not defined."
@@ -113,7 +116,7 @@ module Gemsmith
113
116
  map %w(-e --edit) => :edit
114
117
  def edit
115
118
  info "Editing: #{configuration.file_path}..."
116
- `#{spec_aid.editor} #{configuration.file_path}`
119
+ `#{gem_spec.editor} #{configuration.file_path}`
117
120
  end
118
121
 
119
122
  desc "-v, [--version]", "Show #{Gemsmith::Identity.label} version."
@@ -130,7 +133,7 @@ module Gemsmith
130
133
 
131
134
  private
132
135
 
133
- attr_reader :configuration, :spec_aid
136
+ attr_reader :configuration, :gem_spec
134
137
 
135
138
  def setup_configuration name, options
136
139
  gem = Aids::Gem.new name
@@ -28,21 +28,26 @@ module Gemsmith
28
28
  return if answer == "q"
29
29
 
30
30
  if (1..gems.size).cover?(answer.to_i)
31
- spec_aid.find name, gems[answer.to_i - 1].version.version
31
+ gem_spec.find name, gems[answer.to_i - 1].version.version
32
32
  else
33
33
  error "Invalid option: #{answer}"
34
34
  end
35
35
  end
36
36
 
37
+ def open_gem specification, method
38
+ spec = gem_spec.new specification.spec_file
39
+ spec.public_send method
40
+ end
41
+
37
42
  def process_gem name, method
38
- specs = spec_aid.find_all name
43
+ specs = gem_spec.find_all name
39
44
 
40
45
  case
41
46
  when specs.size == 1
42
- spec_aid.public_send method, specs.first
47
+ open_gem specs.first, method
43
48
  when specs.size > 1
44
49
  print_gems specs
45
- spec_aid.public_send method, pick_gem(specs, name)
50
+ open_gem pick_gem(specs, name), method
46
51
  else
47
52
  error("Unable to find gem: #{name}.") && ""
48
53
  end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+ require "gemsmith/authenticators/ruby_gems"
6
+ require "gemsmith/authenticators/basic"
7
+
8
+ module Gemsmith
9
+ # Configures gem credentials for RubyGems and/or alternative servers.
10
+ class Credentials
11
+ attr_reader :key, :url
12
+
13
+ def self.default_key
14
+ :rubygems_api_key
15
+ end
16
+
17
+ def self.default_url
18
+ "https://rubygems.org"
19
+ end
20
+
21
+ def self.file_path
22
+ File.join ENV.fetch("HOME"), ".gem", "credentials"
23
+ end
24
+
25
+ def self.authenticators
26
+ [Authenticators::RubyGems, Authenticators::Basic]
27
+ end
28
+
29
+ def initialize key: self.class.default_key, url: self.class.default_url, shell: Bundler::UI::Shell.new
30
+ @key = key
31
+ @url = url
32
+ @shell = shell
33
+ @credentials = load_credentials
34
+ end
35
+
36
+ def authenticator
37
+ selected = self.class.authenticators.detect { |auth| auth.url.include? url }
38
+ selected ? selected : Authenticators::Basic
39
+ end
40
+
41
+ def value
42
+ String credentials[key]
43
+ end
44
+
45
+ def valid?
46
+ credentials? && !String(credentials[key]).empty?
47
+ end
48
+
49
+ def create
50
+ return if valid?
51
+
52
+ login = shell.ask %(What is your "#{url}" login?)
53
+ password = shell.ask %(What is your "#{url}" password?)
54
+ new_credentials = credentials.merge key => authenticator.new(login, password).authorization
55
+
56
+ FileUtils.mkdir_p File.dirname self.class.file_path
57
+ File.open(self.class.file_path, "w") { |file| file << YAML.dump(new_credentials) }
58
+ FileUtils.chmod(0600, self.class.file_path)
59
+ end
60
+
61
+ private
62
+
63
+ attr_reader :credentials, :shell
64
+
65
+ def credentials?
66
+ File.exist? self.class.file_path
67
+ end
68
+
69
+ def load_credentials
70
+ Hash YAML.load_file(self.class.file_path)
71
+ rescue
72
+ {}
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Errors
5
+ # The base error class for all gem related errors.
6
+ class Base < StandardError
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gemsmith
4
+ module Errors
5
+ # The error class for gem specification errors.
6
+ class Specification < Base
7
+ end
8
+ end
9
+ end
@@ -12,7 +12,7 @@ module Gemsmith
12
12
  end
13
13
 
14
14
  def self.version
15
- "7.3.0"
15
+ "7.4.0"
16
16
  end
17
17
 
18
18
  def self.version_label
@@ -1,64 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "milestoner"
4
+ require "gemsmith/credentials"
4
5
 
5
6
  module Gemsmith
6
7
  module Rake
7
8
  # Provides gem release functionality. Meant to be wrapped in Rake tasks.
8
- # rubocop:disable Metrics/MethodLength
9
- # rubocop:disable Metrics/ParameterLists
10
9
  class Release
11
- def self.default_gem_host
12
- Gem::DEFAULT_HOST
10
+ def self.gem_spec_path
11
+ String Dir["#{Dir.pwd}/*.gemspec"].first
13
12
  end
14
13
 
15
- def initialize gem_spec_path = Dir.glob("#{Dir.pwd}/*.gemspec").first,
16
- gem_config: Gem::ConfigFile.new([]),
17
- bundler: Bundler,
14
+ def initialize gem_spec: Gemsmith::Aids::GemSpec.new(self.class.gem_spec_path),
15
+ credentials: Gemsmith::Credentials,
18
16
  publisher: Milestoner::Publisher.new,
19
17
  shell: Bundler::UI::Shell.new,
20
18
  kernel: Kernel
21
19
 
22
- @gem_spec_path = gem_spec_path
23
- @gem_config = gem_config
20
+ @gem_spec = gem_spec
21
+ @credentials = credentials
24
22
  @publisher = publisher
25
23
  @shell = shell
26
24
  @kernel = kernel
27
- @gem_spec = bundler.load_gemspec gem_spec_path.to_s
28
- rescue Errno::ENOENT
29
- @shell.error "Invalid gemspec file path: #{@gem_spec_path}."
30
- end
31
-
32
- def version_number
33
- gem_spec.version.version
34
- end
35
-
36
- def version_label
37
- "v#{version_number}"
38
- end
39
-
40
- def gem_file_name
41
- "#{gem_spec.name}-#{version_number}.gem"
42
- end
43
-
44
- def allowed_push_key
45
- gem_spec.metadata.fetch("allowed_push_key") { "rubygems_api_key" }
46
- end
47
-
48
- def allowed_push_host
49
- gem_spec.metadata.fetch("allowed_push_host") { self.class.default_gem_host }
50
25
  end
51
26
 
52
27
  def push
53
- return false unless gem_credentials? && gem_credential_value?
28
+ creds = credentials.new key: gem_spec.allowed_push_key.to_sym, url: gem_spec.allowed_push_host
29
+ creds.create
54
30
 
55
- kernel.system %(gem push "pkg/#{gem_file_name}" --key "#{translated_api_key}" --host "#{allowed_push_host}")
56
- shell.confirm "Pushed #{gem_file_name} to #{allowed_push_host}."
57
- true
31
+ options = %(--key "#{translate_key creds.key}" --host "#{gem_spec.allowed_push_host}")
32
+ status = kernel.system %(gem push "pkg/#{gem_spec.package_file_name}" #{options})
33
+ process_push status
58
34
  end
59
35
 
60
36
  def publish sign: true
61
- publisher.publish version_number, sign: sign
37
+ publisher.publish gem_spec.version_number, sign: sign
62
38
  push
63
39
  rescue Milestoner::Errors::Base => error
64
40
  shell.error error.message
@@ -66,25 +42,21 @@ module Gemsmith
66
42
 
67
43
  private
68
44
 
69
- attr_reader :gem_spec_path, :gem_config, :gem_spec, :publisher, :shell, :kernel
70
-
71
- def gem_credentials?
72
- return true if File.exist?(gem_config.credentials_path)
73
- shell.error "Unable to load gem credentials: #{gem_config.credentials_path}."
74
- false
75
- end
45
+ attr_reader :gem_spec, :credentials, :publisher, :shell, :kernel
76
46
 
77
- def translated_api_key
78
- return :rubygems if allowed_push_key == "rubygems_api_key"
79
- allowed_push_key.to_sym
47
+ def translate_key key
48
+ key == credentials.default_key ? :rubygems : key
80
49
  end
81
50
 
82
- def gem_credential_value?
83
- value = gem_config.api_keys[translated_api_key]
84
- return true unless value.nil? || value.empty?
51
+ def process_push status
52
+ if status
53
+ shell.confirm "Pushed #{gem_spec.package_file_name} to #{gem_spec.allowed_push_host}."
54
+ else
55
+ shell.error "Failed pushing #{gem_spec.package_file_name} to #{gem_spec.allowed_push_host}. " \
56
+ "Check gemspec and gem credential settings."
57
+ end
85
58
 
86
- shell.error %(Invalid credential (#{gem_config.credentials_path}): :#{allowed_push_key}: "#{value}".)
87
- false
59
+ status
88
60
  end
89
61
  end
90
62
  end
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
+ require "gemsmith/aids/gem_spec"
5
+ require "gemsmith/errors/base"
6
+ require "gemsmith/errors/specification"
4
7
  require "gemsmith/rake/build"
5
8
  require "gemsmith/rake/release"
6
9
 
@@ -15,6 +18,7 @@ module Gemsmith
15
18
  end
16
19
 
17
20
  def initialize
21
+ @gem_spec = Gemsmith::Aids::GemSpec.new Dir.glob("#{Dir.pwd}/*.gemspec").first
18
22
  @build = Gemsmith::Rake::Build.new
19
23
  @release = Gemsmith::Rake::Release.new
20
24
  end
@@ -37,12 +41,12 @@ module Gemsmith
37
41
  build.validate
38
42
  end
39
43
 
40
- desc "Build, tag #{release.version_label} (unsigned), and push #{release.gem_file_name} to RubyGems"
44
+ desc "Build, tag #{gem_spec.version_label} (unsigned), and push #{gem_spec.package_file_name} to RubyGems"
41
45
  task release: :build do
42
46
  release.publish sign: false
43
47
  end
44
48
 
45
- desc "Build, tag #{release.version_label} (signed), and push #{release.gem_file_name} to RubyGems"
49
+ desc "Build, tag #{gem_spec.version_label} (signed), and push #{gem_spec.package_file_name} to RubyGems"
46
50
  task publish: :build do
47
51
  release.publish
48
52
  end
@@ -50,7 +54,7 @@ module Gemsmith
50
54
 
51
55
  private
52
56
 
53
- attr_reader :build, :release
57
+ attr_reader :gem_spec, :build, :release
54
58
  end
55
59
  end
56
60
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gemsmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.3.0
4
+ version: 7.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brooke Kuhlmann
@@ -30,7 +30,7 @@ cert_chain:
30
30
  aSif+qBc6oHD7EQWPF5cZkzkIURuwNwPBngZGxIKaMAgRhjGFXzUMAaq++r59cS9
31
31
  xTfQ4k6fglKEgpnLAXiKdo2c8Ym+X4rIKFfedQ==
32
32
  -----END CERTIFICATE-----
33
- date: 2016-02-29 00:00:00.000000000 Z
33
+ date: 2016-03-14 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: thor
@@ -327,11 +327,17 @@ files:
327
327
  - bin/gemsmith
328
328
  - lib/gemsmith.rb
329
329
  - lib/gemsmith/aids/gem.rb
330
+ - lib/gemsmith/aids/gem_spec.rb
330
331
  - lib/gemsmith/aids/git.rb
331
332
  - lib/gemsmith/aids/spec.rb
333
+ - lib/gemsmith/authenticators/basic.rb
334
+ - lib/gemsmith/authenticators/ruby_gems.rb
332
335
  - lib/gemsmith/cli.rb
333
336
  - lib/gemsmith/cli_helpers.rb
334
337
  - lib/gemsmith/configuration.rb
338
+ - lib/gemsmith/credentials.rb
339
+ - lib/gemsmith/errors/base.rb
340
+ - lib/gemsmith/errors/specification.rb
335
341
  - lib/gemsmith/identity.rb
336
342
  - lib/gemsmith/rake/build.rb
337
343
  - lib/gemsmith/rake/release.rb
metadata.gz.sig CHANGED
Binary file