dkastner-hoverfly 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d99f28981261879e31d4d8bd018ed498aa09695d
4
+ data.tar.gz: 858b991506be34b6c6d2af0750b78f6b7df05b85
5
+ SHA512:
6
+ metadata.gz: b845c5ac96febadf8dc043f7e38b2bae1973cf139d8b7b0a356f06962cc06e09da6c745bb8d07537217655ece2a0a9f2763e01119a64604f2f174cf3a7c5eeee
7
+ data.tar.gz: 200301bef97894e9b7a81bea70326eaf6c1a7baf4ed8de2e8517111c88c219ef322d5756d68389757b52ce8b91a10b5f2da7948e2e880fda687c27fe3ac2cb6b
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT LICENSE
2
+
3
+ Copyright (c) Justin Commu <Justin.Commu@loblaw.ca>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,97 @@
1
+ # Hoverfly Gem
2
+ [![Build Status](https://travis-ci.org/azohra/hoverfly.svg?branch=master)](https://travis-ci.org/azohra/hoverfly)
3
+
4
+ Welcome to the Hoverfly Gem, a ruby written wrapper for Hoverfly!
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'hoverfly'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install hoverfly
21
+
22
+ ## Usage
23
+
24
+ This gem gives you full access to the Hoverfly API as well as the ability to dynamically build simulations to import into Hoverfly. See below for examples, as well as a reference of the actions that can be done.
25
+
26
+ This gem assumes that you have already started a running instance of Hoverfly. This can be done in multiple ways. For example, you can install Hoverfly on your host system and start it by executing:
27
+
28
+ $ hoverctl start
29
+
30
+ Alternatively, you can start Hoverfly in a docker container and expose the Hoverfly admin and proxy ports to the host system as. If you have a docker image named `hoverfly` with Hoverfly already installed, then you can do this as follows:
31
+
32
+ $ docker run -d -p 8888:8888 -p 8500:8500 --name hoverfly hoverfly
33
+
34
+ The following examples assume that you have already started a Hoverfly instance (docker or otherwise) with the default admin and proxy ports (8888 and 8500 respectively)
35
+
36
+ ### Recording an API response
37
+ ```ruby
38
+ require 'hoverfly'
39
+
40
+ # Specify the ports to be used to communicate with Hoverfly
41
+ Hoverfly.set_ports(admin: 8888, proxy: 8500)
42
+
43
+ # Set Hoverfly to capture mode
44
+ Hoverfly.update_mode('capture')
45
+
46
+ # Send the API request to be recorded
47
+ `curl --proxy http://localhost:8500 http://time.jsontest.com `
48
+
49
+ # Export the simulation that Hoverfly has recorded
50
+ file = File.open( "simulation.json", "w" )
51
+ file << Hoverfly.get_current_simulations
52
+ file.close
53
+ ```
54
+ ### Replaying an existing API response
55
+ ```ruby
56
+ require 'hoverfly'
57
+
58
+ # Specify the ports to be used to communicate with Hoverfly
59
+ Hoverfly.set_ports(admin: 8888, proxy: 8500)
60
+
61
+ # Set Hoverfly to simulate mode
62
+ Hoverfly.update_mode('simulate')
63
+
64
+ # Import an existing simulation into Hoverfly
65
+ Hoverfly.import(['simulation.json'])
66
+
67
+ # Now when we make the API call, we will get the response that we imported into Hoverfly
68
+ `curl --proxy http://localhost:8500 http://time.jsontest.com`
69
+ ```
70
+
71
+ ### Available Methods
72
+ | Method | Description | Example |
73
+ |--------|-------------|---------|
74
+ |get_current_simulations|Returns the current simulation being used by Hoverfly|Hoverfly.get_current_simulations|
75
+ |get_current_simulation_schema|Returns the schema of the simulations currently being used by Hoverfly|Hoverfly.get_current_simulation_schema|
76
+ |import(file_list)|Compiles the given files into a simulation JSON file, and then sets that file as the simulation to be used by Hoverfly|Hoverfly.import(['./login.json', './logout.json'])|
77
+ |get_config_info|Returns Hoverfly configuration info|Hoverfly.get_config_info|
78
+ |get_current_destination|Returns the current destination that has been set for Hoverfly. Once a destination has been set, Hoverfly only intercepts traffic for that URL|Hoverfly.get_current_destination|
79
+ |update_destinitation|Sets / updates the destination URL that Hoverfly looks at|Hoverfly.update_destination('http://time.jsontest.com')|
80
+ |get_current_middleware|Returns info about the middleware that Hoverfly is currently set to use|Hoverfly.get_current_middleware|
81
+ |middleware|This allows you to set the middleware to be used by Hoverfly. This method accepts a hash where the key specifies the type of middleware, and the value specifies the location. For example if wanted to use a remote server for your middleware, you would pass {remote: <server_url>} to this method|Hoverfly.middleware({remote: 'http://mymiddleware.com'})|
82
+ |get_current_mode|Returns the mode that Hoverfly is currently set to|Hoverfly.get_current_mode|
83
+ |update_mode|Changes the mode that Hoverfly in running in. By default, Hoverfly starts in simulate mdoe|Hoverfly.update_mode('capture')|
84
+ |get_usage|Returns usage info for Hoverfly|Hoverfly.get_usage|
85
+ |get_version|Returns the current Hoverfly version|Hoverfly.get_version|
86
+ |get_upstream_proxy|Returns the proxy port that Hoverfly is currently using|Hoverfly.get_upstream_proxy|
87
+ |get_cached_data|Returns data that Hoverfly has cached|Hoverfly.get_cached_data|
88
+ |clear_cached_data|Clears the Hoverfly cache|Hoverfly.clear_cached_data|
89
+ |get_logs|Returns the Hoverfly logs|Hoverfly.get_logs|
90
+
91
+ ## Contributing
92
+
93
+ Bug reports and pull requests are welcome. Note that if you are reporting a bug then make sure to include a failing spec that highlights an example of the bug. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
94
+
95
+ ## License
96
+
97
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/lib/client.rb ADDED
@@ -0,0 +1,35 @@
1
+ class Hoverfly
2
+ extend HoverflyAPI
3
+
4
+ class << self
5
+ attr_reader :admin_port, :proxy_port
6
+
7
+ def set_ports(admin:, proxy:, ip: 'localhost')
8
+ @admin_port = admin
9
+ @proxy_port = proxy
10
+ HoverflyAPI.default_options.update(verify: false)
11
+ HoverflyAPI.format :json
12
+ HoverflyAPI.base_uri "http://#{ip}:#{@admin_port}"
13
+ end
14
+
15
+ def middleware(middleware_location)
16
+ update_middleware({ binary: '', script: '', remote: '' }.merge(middleware_location))
17
+ end
18
+
19
+ def import(file_list, meta = {})
20
+ update_simulations(to_simulation(file_list, meta))
21
+ end
22
+
23
+ private
24
+
25
+ def to_simulation(file_list, meta)
26
+ schema_path = meta[:schema] || File.expand_path('schema_metadata/schema.json.erb', __dir__)
27
+ all_simulations = file_list.map { |filename| File.read(filename) }
28
+ erb(File.read(schema_path)) { all_simulations.join(',') }
29
+ end
30
+
31
+ def erb(template)
32
+ ERB.new(template).result(binding)
33
+ end
34
+ end
35
+ end
data/lib/endpoints.rb ADDED
@@ -0,0 +1,67 @@
1
+ module HoverflyAPI
2
+ include HTTParty
3
+
4
+ def get_current_simulations
5
+ HoverflyAPI.get('/api/v2/simulation').response.body
6
+ end
7
+
8
+ def update_simulations(simulation)
9
+ HoverflyAPI.put('/api/v2/simulation', headers: { 'Content-Type' => 'application/json' }, body: simulation).response.body
10
+ end
11
+
12
+ def get_current_simulation_schema
13
+ HoverflyAPI.get('/api/v2/simulation/schema').response.body
14
+ end
15
+
16
+ def get_config_info
17
+ HoverflyAPI.get('/api/v2/hoverfly').response.body
18
+ end
19
+
20
+ def get_current_destination
21
+ HoverflyAPI.get('/api/v2/hoverfly/destination').response.body
22
+ end
23
+
24
+ def update_destination(destination)
25
+ HoverflyAPI.put('/api/v2/hoverfly/destination', headers: { 'Content-Type' => 'application/json' }, body: { destination: destination }.to_json).response.body
26
+ end
27
+
28
+ def get_current_middleware
29
+ HoverflyAPI.get('/api/v2/hoverfly/middleware').response.body
30
+ end
31
+
32
+ def update_middleware(middleware_request)
33
+ HoverflyAPI.put('/api/v2/hoverfly/middleware', headers: { 'Content-Type' => 'application/json' }, body: middleware_request.to_json).response.body
34
+ end
35
+
36
+ def get_current_mode
37
+ HoverflyAPI.get('/api/v2/hoverfly/mode').response.body
38
+ end
39
+
40
+ def update_mode(mode)
41
+ HoverflyAPI.put('/api/v2/hoverfly/mode', headers: { 'Content-Type' => 'application/json' }, body: { mode: mode }.to_json).response.body
42
+ end
43
+
44
+ def get_usage
45
+ HoverflyAPI.get('/api/v2/hoverfly/usage').response.body
46
+ end
47
+
48
+ def get_version
49
+ HoverflyAPI.get('/api/v2/hoverfly/version').response.body
50
+ end
51
+
52
+ def get_upstream_proxy
53
+ HoverflyAPI.get('/api/v2/hoverfly/upstream-proxy').response.body
54
+ end
55
+
56
+ def get_cached_data
57
+ HoverflyAPI.get('/api/v2/cache').response.body
58
+ end
59
+
60
+ def clear_cached_data
61
+ HoverflyAPI.delete('/api/v2/cache').response.body
62
+ end
63
+
64
+ def get_logs
65
+ HoverflyAPI.get('/api/v2/logs').response.body
66
+ end
67
+ end
data/lib/hoverfly.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ require_relative 'endpoints'
5
+ require_relative 'client'
@@ -0,0 +1,15 @@
1
+ {
2
+ "data": {
3
+ "pairs": [
4
+ <%= yield %>
5
+ ],
6
+ "globalActions": {
7
+ "delays": []
8
+ }
9
+ },
10
+ "meta": {
11
+ "schemaVersion": "v2",
12
+ "hoverflyVersion": "v0.10.2",
13
+ "timeExported": "2017-05-05T15:10:36-04:00"
14
+ }
15
+ }
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dkastner-hoverfly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - Automation Wizards
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-10-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.13.7
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.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.11.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.11.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 3.4.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 3.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.4
69
+ description: Use this library to interact with Hoverfly in ruby
70
+ email:
71
+ - bjorn.ramroop@loblaw.ca
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - LICENSE
77
+ - README.md
78
+ - lib/client.rb
79
+ - lib/endpoints.rb
80
+ - lib/hoverfly.rb
81
+ - lib/schema_metadata/schema.json.erb
82
+ homepage: https://github.com/automation-wizards/hoverfly
83
+ licenses:
84
+ - MIT
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.5.1
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: Ruby wrapper for Hoverfly
106
+ test_files: []