puppet_forge 2.1.4 → 2.1.5
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 +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/puppet_forge/connection.rb +24 -1
- data/lib/puppet_forge/version.rb +1 -1
- data/spec/unit/forge/v3/base_spec.rb +39 -0
- data/spec/unit/forge/v3/release_spec.rb +99 -58
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c540e2e0483e80b517b23ef6a5160d30173e302
|
4
|
+
data.tar.gz: 0d5de65b3c5654e78459d03efdf33368834848dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8662c9f01abfd72337a3b0bea60157b7d33487b8de862be41e705de6f343d05eb8477432a827fcf99688b9a32ce5a6cf850a9362601c7211d6cf808652f9f1f5
|
7
|
+
data.tar.gz: f91538968a8fa53c87236b54d029f6dd549d68887c6fdc3e1bd1468ee7f9ac66789e4ffc6a64bea29a72d842abe39953d00b80c459f32cb20af024d57c3efcfc
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,16 @@
|
|
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
|
+
## v2.1.5 - 2016-04-13
|
7
|
+
|
8
|
+
### Added
|
9
|
+
|
10
|
+
* PuppetForge::Connection now has .proxy and .proxy= class methods providing a more reliable way of configuring an HTTP proxy.
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
* Cached connection objects will now be automatically discarded when proxy or authorization config has changed.
|
15
|
+
|
6
16
|
## v2.1.4 - 2016-04-01
|
7
17
|
|
8
18
|
### Changed
|
@@ -28,18 +28,37 @@ module PuppetForge
|
|
28
28
|
|
29
29
|
def self.authorization=(token)
|
30
30
|
@authorization = token
|
31
|
+
|
32
|
+
# RK-229 Specific Workaround
|
33
|
+
# Capture instance specific proxy setting if defined.
|
34
|
+
if defined?(PuppetForge::V3::Base)
|
35
|
+
if old_conn = PuppetForge::V3::Base.instance_variable_get(:@conn)
|
36
|
+
self.proxy = old_conn.proxy.uri.to_s if old_conn.proxy
|
37
|
+
end
|
38
|
+
end
|
31
39
|
end
|
32
40
|
|
33
41
|
def self.authorization
|
34
42
|
@authorization
|
35
43
|
end
|
36
44
|
|
45
|
+
def self.proxy=(url)
|
46
|
+
@proxy = url
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.proxy
|
50
|
+
@proxy
|
51
|
+
end
|
52
|
+
|
37
53
|
# @param reset_connection [Boolean] flag to create a new connection every time this is called
|
38
54
|
# @param opts [Hash] Hash of connection options for Faraday
|
39
55
|
# @return [Faraday::Connection] An existing Faraday connection if one was
|
40
56
|
# already set, otherwise a new Faraday connection.
|
41
57
|
def conn(reset_connection = nil, opts = {})
|
42
|
-
|
58
|
+
new_auth = @conn && @conn.headers['Authorization'] != PuppetForge::Connection.authorization
|
59
|
+
new_proxy = @conn && ((@conn.proxy.nil? && PuppetForge::Connection.proxy) || (@conn.proxy && @conn.proxy.uri.to_s != PuppetForge::Connection.proxy))
|
60
|
+
|
61
|
+
if new_auth || new_proxy || reset_connection
|
43
62
|
default_connection(opts)
|
44
63
|
else
|
45
64
|
@conn ||= default_connection(opts)
|
@@ -75,6 +94,10 @@ module PuppetForge
|
|
75
94
|
options[:headers][:authorization] = token
|
76
95
|
end
|
77
96
|
|
97
|
+
if proxy = PuppetForge::Connection.proxy
|
98
|
+
options[:proxy] = proxy
|
99
|
+
end
|
100
|
+
|
78
101
|
Faraday.new(url, options) do |builder|
|
79
102
|
builder.use PuppetForge::Middleware::SymbolifyJson
|
80
103
|
builder.response(:json, :content_type => /\bjson$/)
|
data/lib/puppet_forge/version.rb
CHANGED
@@ -1,6 +1,45 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe PuppetForge::V3::Base do
|
4
|
+
context 'connection management' do
|
5
|
+
before(:each) do
|
6
|
+
PuppetForge::Connection.authorization = nil
|
7
|
+
PuppetForge::Connection.proxy = nil
|
8
|
+
described_class.conn = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:each) do
|
12
|
+
PuppetForge::Connection.authorization = nil
|
13
|
+
PuppetForge::Connection.proxy = nil
|
14
|
+
described_class.conn = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'setting authorization value after a connection is created' do
|
18
|
+
it 'should reset connection' do
|
19
|
+
old_conn = described_class.conn
|
20
|
+
|
21
|
+
PuppetForge::Connection.authorization = 'post-init auth value'
|
22
|
+
new_conn = described_class.conn
|
23
|
+
|
24
|
+
expect(new_conn).to_not eq(old_conn)
|
25
|
+
expect(new_conn.headers).to include(:authorization => 'post-init auth value')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'setting proxy value after a connection is created' do
|
30
|
+
it 'should reset connection' do
|
31
|
+
old_conn = described_class.conn
|
32
|
+
|
33
|
+
PuppetForge::Connection.proxy = 'http://proxy.example.com:8888'
|
34
|
+
new_conn = described_class.conn
|
35
|
+
|
36
|
+
expect(new_conn).to_not eq(old_conn)
|
37
|
+
expect(new_conn.proxy).to_not be_nil
|
38
|
+
expect(new_conn.proxy.uri.to_s).to eq('http://proxy.example.com:8888')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
4
43
|
describe '::new_collection' do
|
5
44
|
it 'should handle responses with no results' do
|
6
45
|
response_data = { data: {}, errors: "Something bad happened!" }
|
@@ -2,91 +2,132 @@ require 'spec_helper'
|
|
2
2
|
require 'fileutils'
|
3
3
|
|
4
4
|
describe PuppetForge::V3::Release do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
stub_fixture(stubs, :get, '/v3/modules/puppetlabs-apache')
|
11
|
-
stub_fixture(stubs, :get, '/v3/releases?module=puppetlabs-apache')
|
5
|
+
context 'connection management' do
|
6
|
+
before(:each) do
|
7
|
+
PuppetForge::Connection.authorization = nil
|
8
|
+
PuppetForge::Connection.proxy = nil
|
9
|
+
described_class.conn = PuppetForge::V3::Base.conn(true)
|
12
10
|
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '::find' do
|
16
|
-
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
17
|
-
let(:missing_release) { PuppetForge::V3::Release.find('absent-apache-0.0.1') }
|
18
11
|
|
19
|
-
|
20
|
-
|
12
|
+
after(:each) do
|
13
|
+
PuppetForge::Connection.authorization = nil
|
14
|
+
PuppetForge::Connection.proxy = nil
|
15
|
+
described_class.conn = nil
|
21
16
|
end
|
22
17
|
|
23
|
-
|
24
|
-
|
18
|
+
describe 'setting authorization value after a connection is created' do
|
19
|
+
it 'should reset connection' do
|
20
|
+
old_conn = described_class.conn
|
21
|
+
|
22
|
+
PuppetForge::Connection.authorization = 'post-init auth value'
|
23
|
+
new_conn = described_class.conn
|
24
|
+
|
25
|
+
expect(new_conn).to_not eq(old_conn)
|
26
|
+
expect(new_conn.headers).to include(:authorization => 'post-init auth value')
|
27
|
+
end
|
25
28
|
end
|
26
|
-
end
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
+
describe 'setting proxy value after a connection is created' do
|
31
|
+
it 'should reset connection' do
|
32
|
+
old_conn = described_class.conn
|
30
33
|
|
31
|
-
|
32
|
-
|
34
|
+
PuppetForge::Connection.proxy = 'http://proxy.example.com:8888'
|
35
|
+
new_conn = described_class.conn
|
36
|
+
|
37
|
+
expect(new_conn).to_not eq(old_conn)
|
38
|
+
expect(new_conn.proxy).to_not be_nil
|
39
|
+
expect(new_conn.proxy.uri.to_s).to eq('http://proxy.example.com:8888')
|
40
|
+
end
|
33
41
|
end
|
42
|
+
end
|
34
43
|
|
35
|
-
|
36
|
-
|
37
|
-
|
44
|
+
context 'with stubbed connection' do
|
45
|
+
before do
|
46
|
+
stub_api_for(PuppetForge::V3::Base) do |stubs|
|
47
|
+
stub_fixture(stubs, :get, '/v3/releases/puppetlabs-apache-0.0.1')
|
48
|
+
stub_fixture(stubs, :get, '/v3/releases/absent-apache-0.0.1')
|
49
|
+
stub_fixture(stubs, :get, '/v3/files/puppetlabs-apache-0.0.1.tar.gz')
|
50
|
+
stub_fixture(stubs, :get, '/v3/modules/puppetlabs-apache')
|
51
|
+
stub_fixture(stubs, :get, '/v3/releases?module=puppetlabs-apache')
|
52
|
+
end
|
38
53
|
end
|
39
54
|
|
40
|
-
|
41
|
-
|
42
|
-
|
55
|
+
describe '::find' do
|
56
|
+
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
57
|
+
let(:missing_release) { PuppetForge::V3::Release.find('absent-apache-0.0.1') }
|
58
|
+
|
59
|
+
it 'can find releases that exist' do
|
60
|
+
expect(release.version).to eql('0.0.1')
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'raises Faraday::ResourceNotFound for non-existent releases' do
|
64
|
+
expect { missing_release }.to raise_error(Faraday::ResourceNotFound)
|
65
|
+
end
|
43
66
|
end
|
44
|
-
end
|
45
67
|
|
46
|
-
|
47
|
-
|
68
|
+
describe '#module' do
|
69
|
+
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
48
70
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
71
|
+
it 'exposes the related module as a property' do
|
72
|
+
expect(release.module).to_not be nil
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'grants access to module attributes without an API call' do
|
76
|
+
expect(PuppetForge::V3::Module).not_to receive(:request)
|
77
|
+
expect(release.module.name).to eql('apache')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'transparently makes API calls for other attributes' do
|
81
|
+
expect(PuppetForge::V3::Module).to receive(:request).once.and_call_original
|
82
|
+
expect(release.module.created_at).to_not be nil
|
83
|
+
end
|
53
84
|
end
|
54
85
|
|
55
|
-
|
56
|
-
release
|
57
|
-
|
86
|
+
describe '#download_url' do
|
87
|
+
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
88
|
+
|
89
|
+
it 'handles an API response that does not include a scheme and host' do
|
90
|
+
release.file_uri = '/v3/files/puppetlabs-apache-0.0.1.tar.gz'
|
91
|
+
uri_with_host = URI.join(PuppetForge.host, '/v3/files/puppetlabs-apache-0.0.1.tar.gz').to_s
|
92
|
+
expect(release.download_url).to eql(uri_with_host)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'handles an API response that includes a scheme and host' do
|
96
|
+
release.file_uri = 'https://example.com/v3/files/puppetlabs-apache-0.0.1.tar.gz'
|
97
|
+
expect(release.download_url).to eql('https://example.com/v3/files/puppetlabs-apache-0.0.1.tar.gz')
|
98
|
+
end
|
58
99
|
end
|
59
|
-
end
|
60
100
|
|
61
|
-
|
62
|
-
|
63
|
-
|
101
|
+
describe '#download' do
|
102
|
+
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
103
|
+
let(:tarball) { "#{PROJECT_ROOT}/spec/tmp/module.tgz" }
|
64
104
|
|
65
|
-
|
66
|
-
|
105
|
+
before { FileUtils.rm tarball rescue nil }
|
106
|
+
after { FileUtils.rm tarball rescue nil }
|
67
107
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
108
|
+
it 'downloads the file to the specified location' do
|
109
|
+
expect(File.exist?(tarball)).to be false
|
110
|
+
release.download(Pathname.new(tarball))
|
111
|
+
expect(File.exist?(tarball)).to be true
|
112
|
+
end
|
72
113
|
end
|
73
|
-
end
|
74
114
|
|
75
|
-
|
76
|
-
|
115
|
+
describe '#metadata' do
|
116
|
+
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
77
117
|
|
78
|
-
|
79
|
-
|
80
|
-
|
118
|
+
it 'is lazy and repeatable' do
|
119
|
+
3.times do
|
120
|
+
expect(release.module.releases.last.metadata).to_not be_nil
|
121
|
+
end
|
81
122
|
end
|
82
123
|
end
|
83
|
-
end
|
84
124
|
|
85
|
-
|
86
|
-
|
125
|
+
describe 'instance properies' do
|
126
|
+
let(:release) { PuppetForge::V3::Release.find('puppetlabs-apache-0.0.1') }
|
87
127
|
|
88
|
-
|
89
|
-
|
128
|
+
example 'are easily accessible' do
|
129
|
+
expect(release.created_at).to_not be nil
|
130
|
+
end
|
90
131
|
end
|
91
132
|
end
|
92
133
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet_forge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -269,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
269
269
|
version: '0'
|
270
270
|
requirements: []
|
271
271
|
rubyforge_project:
|
272
|
-
rubygems_version: 2.
|
272
|
+
rubygems_version: 2.4.5.1
|
273
273
|
signing_key:
|
274
274
|
specification_version: 4
|
275
275
|
summary: Access the Puppet Forge API from Ruby for resource information and to download
|
@@ -320,3 +320,4 @@ test_files:
|
|
320
320
|
- spec/unit/forge/v3/module_spec.rb
|
321
321
|
- spec/unit/forge/v3/release_spec.rb
|
322
322
|
- spec/unit/forge/v3/user_spec.rb
|
323
|
+
has_rdoc:
|