stack_master-http_parameter_resolver 0.1.0 → 0.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
2
  SHA256:
3
- metadata.gz: fcd1cd7bb9fb0f78115a09bb0a2a990ca2cf263e29d1dc0a3589e40e710d1e59
4
- data.tar.gz: '09170f5e9461cca6b61d238bba746583aad21aefaeaf390f261bb8461d8ddc88'
3
+ metadata.gz: b89594059633e161706bc026846c819415c097796c91c31d1a89afc313728f5a
4
+ data.tar.gz: bdc13b782a995e1ba77e03d0a366ae2f535d01753217c054641c682a36d47c20
5
5
  SHA512:
6
- metadata.gz: fb5b9976388731a4c57981156eede244eaa72b4ea143138e94e61276702d414dce3afe22fcf30cf4ab32642252f07480178909cbbabb9249bca6b23d8b4eaa9b
7
- data.tar.gz: 8be7bc1d168741ba84c296f00fa4a54c379e1ee05f9e120a9981923a0b96422c188b0d8daa47feea48db350335b200bd3f12341e71ca504f1629b598a23eba18
6
+ metadata.gz: 82078bb8899bee49e39899f74d840e1b9f83b9fcb37f6defd366616f3d2bdb7057cf84c4147f5298d6fe8be6837d3fc8207dd7a40f3c8440b7c4da83be92ebf2
7
+ data.tar.gz: 7751f2b2d6b0b19c0918873e1d443589b619d66a9c0dff25aeac87202f83a7334475e2d07d8b7ead3a7cae5aa00b26c72efd7e9cbde6a720334ef3cd6015460b
@@ -7,13 +7,32 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- [Unreleased]: https://github.com/envato/stack_master-http_parameter_resolver/compare/v0.1.0...HEAD
10
+ [Unreleased]: https://github.com/envato/stack_master-http_parameter_resolver/compare/v0.2.0...HEAD
11
+
12
+ ## [0.2.0] - 2020-05-25
13
+
14
+ ### Changed
15
+
16
+ - Introduce strategies for parsing the HTTP response ([#2]). This changes how
17
+ to configure the parameter resolver. eg.
18
+
19
+ ```diff
20
+ cloudflare_cidr_ips:
21
+ - http: https://www.cloudflare.com/ips-v4
22
+ + http:
23
+ + url: https://www.cloudflare.com/ips-v4
24
+ + strategy: one_per_line
25
+ ```
26
+
27
+ [0.2.0]: https://github.com/envato/stack_master-http_parameter_resolver/compare/v0.1.0...v0.2.0
28
+ [#2]: https://github.com/envato/stack_master-http_parameter_resolver/pull/2
11
29
 
12
30
  ## [0.1.0] - 2020-01-14
13
31
 
14
32
  ### Added
15
33
 
16
34
  - Initial functionality: Obtaining parameters from HTTP calls returning plain
17
- text.
35
+ text, ([#1]).
18
36
 
19
- [v0.1.0]: https://github.com/envato/stack_master-http_parameter_resolver/tree/v0.1.0
37
+ [0.1.0]: https://github.com/envato/stack_master-http_parameter_resolver/tree/v0.1.0
38
+ [#1]: https://github.com/envato/stack_master-http_parameter_resolver/pull/1
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # StackMaster::HttpParameterResolver
2
2
 
3
+ [![License MIT](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/envato/stack_master-http_parameter_resolver/blob/master/LICENSE.txt)
4
+ [![Gem Version](https://badge.fury.io/rb/stack_master-http_parameter_resolver.svg)](https://rubygems.org/gems/stack_master-http_parameter_resolver)
3
5
  [![Build Status](https://travis-ci.org/envato/stack_master-http_parameter_resolver.svg?branch=master)](https://travis-ci.org/envato/stack_master-http_parameter_resolver)
4
6
 
5
7
  A [StackMaster] parameter resolver that obtains values via HTTP calls.
@@ -16,11 +18,15 @@ gem 'stack_master-http_parameter_resolver'
16
18
 
17
19
  And then execute:
18
20
 
19
- $ bundle
21
+ ```sh
22
+ bundle install
23
+ ```
20
24
 
21
25
  Or install it yourself as:
22
26
 
23
- $ gem install stack_master-http_parameter_resolver
27
+ ```sh
28
+ gem install stack_master-http_parameter_resolver
29
+ ```
24
30
 
25
31
  ## Usage
26
32
 
@@ -28,15 +34,21 @@ For example, to resolve the Cloudflare IPv4 ranges:
28
34
 
29
35
  ```yaml
30
36
  cloudflare_ips:
31
- http: https://www.cloudflare.com/ips-v4
37
+ http:
38
+ url: https://www.cloudflare.com/ips-v4
39
+ strategy: one_per_line
32
40
  ```
33
41
 
34
42
  To obtain both the Cloudlare IPv4 and IPv6 ranges:
35
43
 
36
44
  ```yaml
37
45
  cloudflare_ips:
38
- - http: https://www.cloudflare.com/ips-v4
39
- - http: https://www.cloudflare.com/ips-v6
46
+ - http:
47
+ url: https://www.cloudflare.com/ips-v4
48
+ strategy: one_per_line
49
+ - http:
50
+ url: https://www.cloudflare.com/ips-v6
51
+ strategy: one_per_line
40
52
  ```
41
53
 
42
54
  ## Development
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StackMaster
4
+ module HttpParameterResolver
5
+ module Strategy
6
+ class OnePerLine
7
+ def accept
8
+ 'text/plain'
9
+ end
10
+
11
+ def parse(response)
12
+ response.body.split(/[\r\n]+/)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module StackMaster
4
4
  module HttpParameterResolver
5
- VERSION = '0.1.0'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  end
@@ -1,30 +1,66 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_support/core_ext/string/inflections'
3
4
  require 'faraday'
4
5
 
6
+ Dir[File.join(__dir__, '..', 'http_parameter_resolver', 'strategy', '**', '*.rb')]
7
+ .sort.each { |file| require file }
8
+
5
9
  module StackMaster
6
10
  module ParameterResolvers
7
11
  class Http < Resolver
8
12
  NotResolved = Class.new(StandardError)
13
+ Misconfigured = Class.new(StandardError)
9
14
 
10
15
  array_resolver
11
16
 
12
17
  def initialize(_config, _stack_definition); end
13
18
 
14
- def resolve(url)
15
- response = connection(url).get
16
- response.body.split(/\s+/)
19
+ def resolve(args)
20
+ usage unless args.is_a? Hash
21
+ url = args.fetch('url') { usage("'url' not provided") }
22
+ strategy = build_strategy(args.fetch('strategy') { usage("'strategy' not provided") })
23
+ http(url, strategy)
17
24
  rescue Faraday::Error
18
25
  raise NotResolved, "Unable to resolve HTTP parameters from #{url}"
19
26
  end
20
27
 
21
28
  private
22
29
 
23
- def connection(url)
30
+ def usage(message = 'Misconfigured HTTP parameter resolver')
31
+ raise Misconfigured, <<~MESSAGE
32
+ #{message}
33
+
34
+ Please configure according to the following pattern:
35
+
36
+ <my-parameter-name>:
37
+ http:
38
+ url: <my-http-url>
39
+ strategy: <response-parsing-strategy>
40
+
41
+ Where <response-parsing-strategy> is one of the supported strategies:
42
+ - one_per_line
43
+ MESSAGE
44
+ end
45
+
46
+ def build_strategy(strategy)
47
+ class_name = "StackMaster::HttpParameterResolver::Strategy::"\
48
+ "#{strategy.classify}"
49
+ class_name.constantize.new
50
+ rescue NameError
51
+ usage("The strategy #{strategy.inspect} is not supported")
52
+ end
53
+
54
+ def http(url, strategy)
55
+ response = connection(url, strategy).get
56
+ strategy.parse(response)
57
+ end
58
+
59
+ def connection(url, strategy)
24
60
  Faraday.new(
25
61
  url: url,
26
62
  params: {},
27
- headers: { 'Accept' => 'text/plain' }
63
+ headers: { 'Accept' => strategy.accept }
28
64
  ) do |connection|
29
65
  connection.response :raise_error
30
66
  connection.adapter :net_http
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack_master-http_parameter_resolver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Envato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2020-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: faraday
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +105,7 @@ files:
91
105
  - LICENSE.txt
92
106
  - README.md
93
107
  - lib/stack_master/http_parameter_resolver.rb
108
+ - lib/stack_master/http_parameter_resolver/strategy/one_per_line.rb
94
109
  - lib/stack_master/http_parameter_resolver/version.rb
95
110
  - lib/stack_master/parameter_resolvers/http.rb
96
111
  homepage: https://github.com/envato/stack_master-http_parameter_resolver
@@ -100,8 +115,8 @@ metadata:
100
115
  homepage_uri: https://github.com/envato/stack_master-http_parameter_resolver
101
116
  bug_tracker_uri: https://github.com/envato/stack_master-http_parameter_resolver/issues
102
117
  changelog_uri: https://github.com/envato/stack_master-http_parameter_resolver/blob/master/CHANGELOG.md
103
- documentation_uri: https://www.rubydoc.info/gems/stack_master-http_parameter_resolver/0.1.0
104
- source_code_uri: https://github.com/envato/stack_master-http_parameter_resolver/tree/v0.1.0
118
+ documentation_uri: https://www.rubydoc.info/gems/stack_master-http_parameter_resolver/0.2.0
119
+ source_code_uri: https://github.com/envato/stack_master-http_parameter_resolver/tree/v0.2.0
105
120
  post_install_message:
106
121
  rdoc_options: []
107
122
  require_paths:
@@ -117,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
132
  - !ruby/object:Gem::Version
118
133
  version: '0'
119
134
  requirements: []
120
- rubygems_version: 3.1.2
135
+ rubygems_version: 3.1.3
121
136
  signing_key:
122
137
  specification_version: 4
123
138
  summary: Obtain stack parameters from HTTP calls.