puppet_forge 2.3.3 → 3.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 268967975051fcaec41d34ca23f059007d4a7d26
4
- data.tar.gz: cca3b818c18742151db331ac8a39d2824f135a12
2
+ SHA256:
3
+ metadata.gz: 14fb262a13e9382bc404ebf162e70c8fa48ccd73f33f53113e75524da106bed9
4
+ data.tar.gz: 0316cbac8bd7c7d3dc18d792a0dfc25a4cca095fce0974a5f54a50e546ef1c92
5
5
  SHA512:
6
- metadata.gz: b038d3eb99356236483d4326e396ed84f5fba6c1651dd528128ec77ad183c3c0b2a4327d36a387903d76e855e8001ecb155a10f0a52f2f8f7acf5d4abe43281a
7
- data.tar.gz: 283e3617c405d572416f27e7d8687481af4afa276d3720f378e492dc10d549edc12aaeee2386c433e783795ef82edcfc70ee764f51acb804a529ca4f5a04d1eb
6
+ metadata.gz: f909a3a4b8bf942f104f1a9f5a798edeb8a29e03adaaa24dbd4170efd97f2e09c23ef44b3b88ad406d32d5d10aba98d382d21ce10e1db115ee5c87d8cd01e30f
7
+ data.tar.gz: 2da931edf4e563a6e0962d834c9e3db3dec6ff33fd9a172f5d50a12066863b336fae173c8ad860d6c85f6df1ef02da4e1e0fc61e0a3182e92552ac988db3ce7b
@@ -3,10 +3,10 @@ name: ruby-rspec
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - master
6
+ - main
7
7
  pull_request:
8
8
  branches:
9
- - master
9
+ - main
10
10
 
11
11
  jobs:
12
12
  test:
@@ -14,14 +14,14 @@ jobs:
14
14
  runs-on: ubuntu-latest
15
15
  strategy:
16
16
  matrix:
17
- ruby_version: ['2.7.x', '2.6.x', '2.5.x', '2.4.x']
17
+ ruby: [2.7, 2.6, 2.5]
18
18
 
19
19
  steps:
20
20
  - uses: actions/checkout@v1
21
- - name: Set up Ruby ${{ matrix.ruby_version }}
22
- uses: actions/setup-ruby@v1
21
+ - name: Set up Ruby ${{ matrix.ruby }}
22
+ uses: ruby/setup-ruby@v1
23
23
  with:
24
- ruby-version: ${{ matrix.ruby_version }}
24
+ ruby-version: ${{ matrix.ruby }}
25
25
 
26
26
  - name: Build and test with Rspec
27
27
  run: |
data/.gitignore CHANGED
@@ -20,4 +20,3 @@ _yardoc
20
20
  *.o
21
21
  *.a
22
22
  mkmf.log
23
- locales/forge-ruby.pot
data/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
3
3
  Starting with v2.0.0, all notable changes to this project will be documented in this file.
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## v3.2.0 - 2021-11-09
7
+
8
+ * Allow requests to follow redirects
9
+ * Remove the `gettext-setup` gem dependency, which was unused
10
+
11
+ ## v3.1.0 - 2021-08-20
12
+
13
+ ### Changed
14
+
15
+ * Update `PuppetForge::Connection.authorization` so that it prepends the
16
+ required `Bearer ` string automatically to values that look like Forge API
17
+ keys. This won't affect values that already include `Bearer `.
18
+
19
+ ## v3.0.0 - 2021-01-28
20
+
21
+ * Breaking: The `puppet_forge` gem now requires at least Ruby 2.4.0.
22
+ * Update `faraday` and `faraday_middleware` gem dependencies to 1.x series.
23
+ * Update optional `typhoeus` dependency to `>= 1.4` to maintain compatibility with `faraday`.
24
+
25
+ ## v2.3.4 - 2020-03-31
26
+
27
+ * Update the forge API url to `forgeapi.puppet.com` (instead of using the older puppetlabs.com domain).
28
+ * Allow versions of the `faraday_middleware` dependency up to 0.15.
29
+
6
30
  ## v2.3.3 - 2020-02-20
7
31
 
8
32
  ### Changed
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Puppet Forge
2
2
 
3
- Access and manipulate the [Puppet Forge API](https://forgeapi.puppetlabs.com)
3
+ Access and manipulate the [Puppet Forge API](https://forgeapi.puppet.com)
4
4
  from Ruby.
5
5
 
6
6
  ## Installation
@@ -81,13 +81,14 @@ resource model are documented on the [Resource Reference][resource_ref] page.
81
81
  Each of the models uses ActiveRecord-like REST functionality to map over the Forge API endpoints.
82
82
  Most simple ActiveRecord-style interactions function as intended.
83
83
 
84
- Currently, only unauthenticated read-only actions are supported.
84
+ Currently, only read-only actions are supported.
85
85
 
86
86
  The methods find, where, and all immediately make one API request.
87
87
 
88
88
  ```ruby
89
89
  # Find a Resource by Slug
90
- PuppetForge::User.find('puppetlabs') # => #<Forge::V3::User(/v3/users/puppetlabs)>
90
+ PuppetForge::User.find('puppetlabs') # => #<PuppetForge::V3::User(/v3/users/puppetlabs)>
91
+ PuppetForge::Module.find('puppetlabs-stdlib') # => #<PuppetForge::V3::Module(/v3/modules/puppetlabs-stdlib)>
91
92
 
92
93
  # Find All Resources
93
94
  PuppetForge::Module.all # See "Paginated Collections" below for important info about enumerating resource sets.
@@ -109,7 +110,7 @@ PuppetForge::Module.where(query: 'apache').all # This method is deprecated and n
109
110
  All API Requests (whether via find, where, or all) will raise a Faraday::ResourceNotFound error if the request fails.
110
111
 
111
112
 
112
- ### Installing a Release
113
+ ### Downloading and installing a module release
113
114
 
114
115
  A release tarball can be downloaded and installed by following the steps below.
115
116
 
@@ -186,26 +187,24 @@ user.username # => "puppetlabs"
186
187
  user.created_at # => "2010-05-19 05:46:26 -0700"
187
188
  ```
188
189
 
189
- ### i18n
190
+ ### Configuration
190
191
 
191
- When adding new error or log messages please follow the instructions for
192
- [writing translatable code](https://github.com/puppetlabs/gettext-setup-gem#writing-translatable-code).
193
-
194
- The PuppetForge gem will default to outputing all error messages in English, but you may set the locale
195
- using the `FastGettext.set_locale` method. If translations do not exist for the language you request then the gem will
196
- default to English. The `set_locale` method will return the locale, as a string, that FastGettext will now
197
- use to report PuppetForge errors.
192
+ To overwrite the default of `https://forgeapi.puppet.com` and set a custom url for the Forge API:
198
193
 
199
194
  ```ruby
200
- # Assuming the German translations exist, this will set the reporting language
201
- # to German
195
+ PuppetForge.host = "https://your-own-api.url/"
196
+ ```
197
+
198
+ ### Authorization
202
199
 
203
- locale = FastGettext.set_locale "de_DE"
200
+ To authorize your requests with an API key from a Forge user account:
204
201
 
205
- # If it successfully finds Germany's locale, locale will be "de_DE"
206
- # If it fails to find any German locale, locale will be "en"
202
+ ```ruby
203
+ PuppetForge::Connection.authorization = "<your-api-key-here>"
207
204
  ```
208
205
 
206
+ You can generate API keys on your user profile page once you've [logged into the Forge website](https://forge.puppet.com/login).
207
+
209
208
  ## Caveats
210
209
 
211
210
  This library currently does no response caching of its own, instead opting to
data/Rakefile CHANGED
@@ -1,7 +1 @@
1
1
  require "bundler/gem_tasks"
2
-
3
- # i18n/gettext Rake tasks
4
- spec = Gem::Specification.find_by_name 'gettext-setup'
5
- load "#{spec.gem_dir}/lib/tasks/gettext.rake"
6
- GettextSetup.initialize(File.absolute_path('locales', File.dirname(__FILE__)))
7
-
@@ -9,21 +9,11 @@ module PuppetForge
9
9
  @app.call(env)
10
10
  rescue Faraday::ConnectionFailed, Faraday::TimeoutError => e
11
11
  baseurl = env[:url].dup
12
+ errmsg = "Unable to connect to %{scheme}://%{host}" % { scheme: baseurl.scheme, host: baseurl.host }
12
13
  if proxy = env[:request][:proxy]
13
- errmsg = _("Unable to connect to %{scheme}://%{host} (using proxy %{proxy}) (for request %{path_query})") % {
14
- scheme: baseurl.scheme,
15
- host: baseurl.host,
16
- proxy: proxy.uri.to_s,
17
- path_query: baseurl.request_uri,
18
- }
19
- else
20
- errmsg = _("Unable to connect to %{scheme}://%{host} (for request %{path_query})") % {
21
- scheme: baseurl.scheme,
22
- host: baseurl.host,
23
- path_query: baseurl.request_uri,
24
- }
14
+ errmsg << " (using proxy %{proxy})" % { proxy: proxy.uri.to_s }
25
15
  end
26
- errmsg << ": #{e.message}"
16
+ errmsg << " (for request %{path_query}): %{message}" % { message: e.message, path_query: baseurl.request_uri }
27
17
  m = Faraday::ConnectionFailed.new(errmsg)
28
18
  m.set_backtrace(e.backtrace)
29
19
  raise m
@@ -2,7 +2,6 @@ require 'puppet_forge/connection/connection_failure'
2
2
 
3
3
  require 'faraday'
4
4
  require 'faraday_middleware'
5
- require 'puppet_forge/middleware/symbolify_json'
6
5
 
7
6
  module PuppetForge
8
7
  # Provide a common mixin for adding a HTTP connection to classes.
@@ -24,6 +23,8 @@ module PuppetForge
24
23
 
25
24
  attr_writer :conn
26
25
 
26
+ AUTHORIZATION_TOKEN_REGEX = /^[a-f0-9]{64}$/
27
+
27
28
  USER_AGENT = "#{PuppetForge.user_agent} PuppetForge.gem/#{PuppetForge::VERSION} Faraday/#{Faraday::VERSION} Ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} (#{RUBY_PLATFORM})".strip
28
29
 
29
30
  def self.authorization=(token)
@@ -81,7 +82,7 @@ module PuppetForge
81
82
 
82
83
  begin
83
84
  # Use Typhoeus if available.
84
- Gem::Specification.find_by_name('typhoeus', '~> 1.0.1')
85
+ Gem::Specification.find_by_name('typhoeus', '~> 1.4')
85
86
  require 'typhoeus/adapters/faraday'
86
87
  adapter = :typhoeus
87
88
  rescue Gem::LoadError
@@ -102,7 +103,7 @@ module PuppetForge
102
103
  options = { :headers => { :user_agent => USER_AGENT } }.merge(opts)
103
104
 
104
105
  if token = PuppetForge::Connection.authorization
105
- options[:headers][:authorization] = token
106
+ options[:headers][:authorization] = token =~ AUTHORIZATION_TOKEN_REGEX ? "Bearer #{token}" : token
106
107
  end
107
108
 
108
109
  if lang = PuppetForge::Connection.accept_language
@@ -114,8 +115,8 @@ module PuppetForge
114
115
  end
115
116
 
116
117
  Faraday.new(url, options) do |builder|
117
- builder.use PuppetForge::Middleware::SymbolifyJson
118
- builder.response(:json, :content_type => /\bjson$/)
118
+ builder.use FaradayMiddleware::FollowRedirects
119
+ builder.response(:json, :content_type => /\bjson$/, :parser_options => { :symbolize_names => true })
119
120
  builder.response(:raise_error)
120
121
  builder.use(:connection_failure)
121
122
 
@@ -16,11 +16,15 @@ module PuppetForge
16
16
  def initialize(options)
17
17
  @entry_path = options[:entry_path]
18
18
  @directory = options[:directory]
19
- super _("Attempt to install file into %{path} under %{directory}") % {path: @entry_path.inspect, directory: @directory.inspect}
19
+ super "Attempt to install file into #{@entry_path.inspect} under #{@directory.inspect}"
20
20
  end
21
21
 
22
22
  def multiline
23
- _("Could not install package\n Package attempted to install file into\n %{path} under %{directory}.") % {path: @entry_path.inspect, directory: @directory.inspect}
23
+ <<-MSG.strip
24
+ Could not install package
25
+ Package attempted to install file into
26
+ #{@entry_path.inspect} under #{@directory.inspect}.
27
+ MSG
24
28
  end
25
29
  end
26
30
 
@@ -24,7 +24,7 @@ module PuppetForge
24
24
  version = class_name.split("::")[-2]
25
25
 
26
26
  if version.nil?
27
- raise RuntimeError, _("Unable to determine the parent PuppetForge version module")
27
+ raise RuntimeError, "Unable to determine the parent PuppetForge version module"
28
28
  end
29
29
 
30
30
  PuppetForge.const_get(version)
@@ -39,7 +39,7 @@ module PuppetForge
39
39
  begin
40
40
  PuppetForge::Tar.instance.unpack(@filename, @tmpdir)
41
41
  rescue PuppetForge::ExecutionFailure => e
42
- raise RuntimeError, _("Could not extract contents of module archive: %{error_msg}") % {error_msg: e.message}
42
+ raise RuntimeError, "Could not extract contents of module archive: #{e.message}"
43
43
  end
44
44
  end
45
45
 
@@ -61,7 +61,7 @@ module PuppetForge
61
61
  if metadata_file
62
62
  @root_dir = Pathname.new(metadata_file).dirname
63
63
  else
64
- raise _("No valid metadata.json found!")
64
+ raise "No valid metadata.json found!"
65
65
  end
66
66
  end
67
67
  end
@@ -56,7 +56,7 @@ module PuppetForge
56
56
  # @private
57
57
  def request(resource, item = nil, params = {}, reset_connection = false, conn_opts = {})
58
58
  conn(reset_connection, conn_opts) if reset_connection
59
- unless conn.url_prefix =~ /^#{PuppetForge.host}/
59
+ unless conn.url_prefix.to_s =~ /^#{PuppetForge.host}/
60
60
  conn.url_prefix = "#{PuppetForge.host}"
61
61
  end
62
62
 
@@ -63,7 +63,7 @@ module PuppetForge
63
63
  validate_version_range(version_requirement) if version_requirement
64
64
 
65
65
  if dup = @data['dependencies'].find { |d| d.full_module_name == name && d.version_requirement != version_requirement }
66
- raise ArgumentError, _("Dependency conflict for %{module_name}: Dependency %{conflict_name} was given conflicting version requirements %{version} and %{conflict_version}. Verify that there are no duplicates in the metadata.json or the Modulefile.") % {module_name: full_module_name, conflict_name: name, version: version_requirement, conflict_version: dup.version_requirement}
66
+ raise ArgumentError, "Dependency conflict for #{full_module_name}: Dependency #{name} was given conflicting version requirements #{version_requirement} and #{dup.version_requirement}. Verify that there are no duplicates in the metadata.json or the Modulefile."
67
67
  end
68
68
 
69
69
  dep = Dependency.new(name, version_requirement, repository)
@@ -165,30 +165,31 @@ module PuppetForge
165
165
 
166
166
  err = case modname
167
167
  when nil, '', :namespace_missing
168
- _("the field must be a namespaced module name")
168
+ "the field must be a namespaced module name"
169
169
  when /[^a-z0-9_]/i
170
- _("the module name contains non-alphanumeric (or underscore) characters")
170
+ "the module name contains non-alphanumeric (or underscore) characters"
171
171
  when /^[^a-z]/i
172
- _("the module name must begin with a letter")
172
+ "the module name must begin with a letter"
173
173
  else
174
- _("the namespace contains non-alphanumeric characters")
174
+ "the namespace contains non-alphanumeric characters"
175
175
  end
176
176
 
177
- raise ArgumentError, _("Invalid 'name' field in metadata.json: %{error}") % {error: err}
177
+ raise ArgumentError, "Invalid 'name' field in metadata.json: #{err}"
178
178
  end
179
179
 
180
180
  # Validates that the version string can be parsed by SemanticPuppet.
181
181
  def validate_version(version)
182
182
  return if SemanticPuppet::Version.valid?(version)
183
183
 
184
- raise ArgumentError, _("Invalid 'version' field in metadata.json: version string cannot be parsed as a valid Semantic Version")
184
+ err = "version string cannot be parsed as a valid Semantic Version"
185
+ raise ArgumentError, "Invalid 'version' field in metadata.json: #{err}"
185
186
  end
186
187
 
187
188
  # Validates that the version range can be parsed by SemanticPuppet.
188
189
  def validate_version_range(version_range)
189
190
  SemanticPuppet::VersionRange.parse(version_range)
190
191
  rescue ArgumentError => e
191
- raise ArgumentError, _("Invalid 'version_range' field in metadata.json: %{error}") % {error: e}
192
+ raise ArgumentError, "Invalid 'version_range' field in metadata.json: #{e}"
192
193
  end
193
194
  end
194
195
  end
@@ -29,7 +29,7 @@ module PuppetForge
29
29
  resp = self.class.conn.get(download_url)
30
30
  path.open('wb') { |fh| fh.write(resp.body) }
31
31
  rescue Faraday::ResourceNotFound => e
32
- raise PuppetForge::ReleaseNotFound, (_("The module release %{release_slug} does not exist on %{url}.") % {release_slug: slug, url: self.class.conn.url_prefix}), e.backtrace
32
+ raise PuppetForge::ReleaseNotFound, "The module release #{slug} does not exist on #{self.class.conn.url_prefix}.", e.backtrace
33
33
  rescue Faraday::ClientError => e
34
34
  if e.response && e.response[:status] == 403
35
35
  raise PuppetForge::ReleaseForbidden.from_response(e.response)
@@ -1,3 +1,3 @@
1
1
  module PuppetForge
2
- VERSION = '2.3.3' # Library version
2
+ VERSION = '3.2.0' # Library version
3
3
  end
data/lib/puppet_forge.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'puppet_forge/version'
2
- require 'gettext-setup'
3
2
 
4
3
  module PuppetForge
5
4
  class << self
@@ -15,9 +14,7 @@ module PuppetForge
15
14
  end
16
15
  end
17
16
 
18
- GettextSetup.initialize(File.absolute_path('../locales', File.dirname(__FILE__)))
19
-
20
- DEFAULT_FORGE_HOST = 'https://forgeapi.puppetlabs.com/'
17
+ DEFAULT_FORGE_HOST = 'https://forgeapi.puppet.com/'
21
18
 
22
19
  self.host = DEFAULT_FORGE_HOST
23
20
 
data/puppet_forge.gemspec CHANGED
@@ -18,13 +18,12 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = '>= 1.9.3'
21
+ spec.required_ruby_version = '>= 2.4.0'
22
22
 
23
- spec.add_runtime_dependency "faraday", [">= 0.9.0", "< 0.18.0", "!= 0.13.1"]
24
- spec.add_runtime_dependency "faraday_middleware", [">= 0.9.0", "< 0.14.0"]
25
- spec.add_dependency 'semantic_puppet', '~> 1.0'
26
- spec.add_dependency 'minitar'
27
- spec.add_dependency 'gettext-setup', '~> 0.11'
23
+ spec.add_runtime_dependency "faraday", "~> 1.3"
24
+ spec.add_runtime_dependency "faraday_middleware", "~> 1.0"
25
+ spec.add_dependency "semantic_puppet", "~> 1.0"
26
+ spec.add_dependency "minitar"
28
27
 
29
28
  spec.add_development_dependency "rake"
30
29
  spec.add_development_dependency "rspec", "~> 3.0"