soaspec 0.1.5 → 0.1.6

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.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +15 -15
  3. data/.gitlab-ci.yml +48 -48
  4. data/.rspec +3 -3
  5. data/.rubocop.yml +2 -2
  6. data/CODE_OF_CONDUCT.md +74 -74
  7. data/ChangeLog +404 -400
  8. data/Gemfile +6 -6
  9. data/LICENSE.txt +21 -21
  10. data/README.md +113 -113
  11. data/Rakefile +24 -24
  12. data/Todo.md +6 -6
  13. data/exe/soaspec +109 -109
  14. data/exe/soaspec-virtual-server +156 -155
  15. data/exe/xml_to_yaml_file +60 -60
  16. data/lib/soaspec.rb +103 -103
  17. data/lib/soaspec/core_ext/hash.rb +83 -83
  18. data/lib/soaspec/exchange.rb +235 -235
  19. data/lib/soaspec/exchange_handlers/exchange_handler.rb +103 -103
  20. data/lib/soaspec/exchange_handlers/handler_accessors.rb +106 -106
  21. data/lib/soaspec/exchange_handlers/rest_accessors.rb +92 -92
  22. data/lib/soaspec/exchange_handlers/rest_handler.rb +314 -314
  23. data/lib/soaspec/exchange_handlers/rest_methods.rb +44 -44
  24. data/lib/soaspec/exchange_handlers/soap_handler.rb +236 -236
  25. data/lib/soaspec/exe_helpers.rb +60 -60
  26. data/lib/soaspec/generator/.rspec.erb +5 -5
  27. data/lib/soaspec/generator/.travis.yml.erb +5 -5
  28. data/lib/soaspec/generator/Gemfile.erb +8 -8
  29. data/lib/soaspec/generator/README.md.erb +29 -29
  30. data/lib/soaspec/generator/Rakefile.erb +19 -19
  31. data/lib/soaspec/generator/config/data/default.yml.erb +1 -1
  32. data/lib/soaspec/generator/lib/blz_service.rb.erb +26 -26
  33. data/lib/soaspec/generator/lib/dynamic_class_content.rb.erb +12 -12
  34. data/lib/soaspec/generator/lib/shared_example.rb.erb +8 -8
  35. data/lib/soaspec/generator/spec/dynamic_soap_spec.rb.erb +12 -12
  36. data/lib/soaspec/generator/spec/soap_spec.rb.erb +51 -51
  37. data/lib/soaspec/generator/spec/spec_helper.rb.erb +20 -20
  38. data/lib/soaspec/generator/template/soap_template.xml +6 -6
  39. data/lib/soaspec/interpreter.rb +40 -40
  40. data/lib/soaspec/matchers.rb +65 -65
  41. data/lib/soaspec/not_found_errors.rb +13 -13
  42. data/lib/soaspec/soaspec_shared_examples.rb +24 -24
  43. data/lib/soaspec/spec_logger.rb +27 -27
  44. data/lib/soaspec/test_server/bank.wsdl +90 -90
  45. data/lib/soaspec/test_server/get_bank.rb +160 -160
  46. data/lib/soaspec/test_server/id_manager.rb +31 -31
  47. data/lib/soaspec/test_server/invoices.rb +27 -27
  48. data/lib/soaspec/test_server/namespace.xml +14 -14
  49. data/lib/soaspec/test_server/note.xml +5 -5
  50. data/lib/soaspec/test_server/puppy_service.rb +20 -20
  51. data/lib/soaspec/test_server/test_attribute.rb +13 -13
  52. data/lib/soaspec/test_server/test_namespace.rb +12 -12
  53. data/lib/soaspec/version.rb +2 -2
  54. data/lib/soaspec/wsdl_generator.rb +144 -144
  55. data/soaspec.gemspec +46 -47
  56. data/test.wsdl +116 -116
  57. data/test.xml +10 -10
  58. data/test_wsdl.rb +43 -43
  59. metadata +6 -6
@@ -1,155 +1,156 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
- require 'soaspec'
5
- require 'sinatra'
6
- require 'sinatra/basic_auth'
7
- require 'docdsl'
8
- require 'nokogiri'
9
- require 'erb'
10
- require 'json'
11
- require 'faker'
12
-
13
- # Used to run virtual web service on localhost. This makes tests more reliable and faster
14
- class SoaspecVirtualServer < Sinatra::Application
15
- set :port, 4999
16
-
17
- register Sinatra::DocDsl
18
-
19
- page do
20
- title 'Soaspec Virtual Services'
21
- header 'Perform efficient API testing with Ruby'
22
- introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
23
- end
24
-
25
- documentation 'Nothing under /. Go look at /docs' do
26
- response 'redirects to the documentation page'
27
- status 303
28
- end
29
- get '/' do
30
- redirect '/docs'
31
- end
32
-
33
- doc_endpoint '/docs'
34
-
35
- documentation 'Used to test attributes' do
36
- response 'A simple Note XML with a date attribute'
37
- end
38
- get '/test_attribute' do
39
- Soaspec::TestServer::TestAttribute.note
40
- end
41
-
42
- documentation 'Used to test namespaces' do
43
- response 'XML with 2 namespaces and same elements inside it'
44
- end
45
- get '/namespace' do
46
- Soaspec::TestServer::TestNamespace.food
47
- end
48
-
49
- documentation 'Used for showing a simple difference in value depending on the id used' do
50
- param :num, 'Number of tester'
51
- param :id, 'Test parameter'
52
- response 'JSON with success or true or false and the id sent
53
- Idea is for tester to find the id that causes a failure (the fake "defect")
54
- '
55
- end
56
- get '/packages/:num/:id' do |num, id|
57
- JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
58
- end
59
-
60
- post '/packages/developed' do
61
- Soaspec::TestServer::IdManager.developed = request.body.include?('true')
62
- Soaspec::TestServer::IdManager.developed.to_s
63
- end
64
-
65
- # Used for simple testing of posing
66
- documentation 'Simply sends the response body back'
67
- post '/echoer' do
68
- request.body
69
- end
70
-
71
- documentation "Simulate retrieving an ouath token Passed to '/invoices'"
72
- post '/as/token.oauth2' do
73
- Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
74
- [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
75
- end
76
-
77
- documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
78
- get '/invoice/:id' do |id|
79
- JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
80
- end
81
-
82
- documentation 'This is returned when a query for the WSDL is made' do
83
- response 'WSDL containing SCHEMA information'
84
- end
85
- get '/BLZService' do
86
- [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
87
- end
88
-
89
- authorize do |username, password|
90
- username == 'admin' && password == 'secret'
91
- end
92
-
93
- protect do
94
- documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
95
- response 'Secret text'
96
- end
97
- get '/basic_secrets' do
98
- 'Secret data'
99
- end
100
-
101
- documentation 'This is the basic service being hit by SOAP actions'
102
- post '/BLZService' do
103
- Soaspec::TestServer::GetBank.response_for request
104
- end
105
- end
106
-
107
- documentation 'Used for testing storage of data' do
108
- payload 'Puppy JSON',
109
- Name: 'Test', Failure_Type__c: 'Fail'
110
- end
111
- post '/test/puppy' do
112
- request_hash = JSON.parse(request.body.string)
113
- id = Soaspec::TestServer::PuppyService.new_id
114
- Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
115
- Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
116
- response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
117
- JSON.generate response_hash
118
- end
119
-
120
- documentation 'Used for testing retrieving storage of data'
121
- get '/test/puppy/:id' do |id|
122
- result = Soaspec::TestServer::PuppyService.data[id.to_i]
123
- JSON.generate result
124
- end
125
-
126
- documentation 'Used for testing updating data'
127
- patch '/test/puppy/:id' do |id|
128
- request_hash = JSON.parse(request.body.string)
129
- Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
130
- response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
131
- JSON.generate response_hash
132
- end
133
-
134
- documentation 'Used for testing the handling of JSON path' do
135
- response 'JSON with multiple elements of the same name at different nested levels'
136
- end
137
- get '/test/multiple_json' do
138
- <<-BOOKS
139
- {"store":
140
- {"bicycle":
141
- {"price":19.95, "color":"red"},
142
- "book":[
143
- {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
144
- {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
145
- {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
146
- {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
147
- ]
148
- }
149
- }
150
- BOOKS
151
- end
152
-
153
- end
154
-
155
- SoaspecVirtualServer.run!
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+ require 'soaspec'
5
+ require 'sinatra'
6
+ require 'sinatra/basic_auth'
7
+ require 'docdsl'
8
+ require 'nokogiri'
9
+ require 'erb'
10
+ require 'json'
11
+ require 'faker'
12
+
13
+ # Used to run virtual web service on localhost. This makes tests more reliable and faster
14
+ # First argument overrides the default port
15
+ class SoaspecVirtualServer < Sinatra::Application
16
+ set :bind, '0.0.0.0'
17
+ set :port, (ARGV[0] || 4999).to_i
18
+
19
+ register Sinatra::DocDsl
20
+
21
+ page do
22
+ title 'Soaspec Virtual Services'
23
+ header 'Perform efficient API testing with Ruby'
24
+ introduction 'This has some simple virtual services aimed at helping you with testing your Ruby API code.'
25
+ end
26
+
27
+ documentation 'Nothing under /. Go look at /docs' do
28
+ response 'redirects to the documentation page'
29
+ status 303
30
+ end
31
+ get '/' do
32
+ redirect '/docs'
33
+ end
34
+
35
+ doc_endpoint '/docs'
36
+
37
+ documentation 'Used to test attributes' do
38
+ response 'A simple Note XML with a date attribute'
39
+ end
40
+ get '/test_attribute' do
41
+ Soaspec::TestServer::TestAttribute.note
42
+ end
43
+
44
+ documentation 'Used to test namespaces' do
45
+ response 'XML with 2 namespaces and same elements inside it'
46
+ end
47
+ get '/namespace' do
48
+ Soaspec::TestServer::TestNamespace.food
49
+ end
50
+
51
+ documentation 'Used for showing a simple difference in value depending on the id used' do
52
+ param :num, 'Number of tester'
53
+ param :id, 'Test parameter'
54
+ response 'JSON with success or true or false and the id sent
55
+ Idea is for tester to find the id that causes a failure (the fake "defect")
56
+ '
57
+ end
58
+ get '/packages/:num/:id' do |num, id|
59
+ JSON.generate(success: Soaspec::TestServer::IdManager.result_for(num, id), id: id)
60
+ end
61
+
62
+ post '/packages/developed' do
63
+ Soaspec::TestServer::IdManager.developed = request.body.include?('true')
64
+ Soaspec::TestServer::IdManager.developed.to_s
65
+ end
66
+
67
+ # Used for simple testing of posing
68
+ documentation 'Simply sends the response body back'
69
+ post '/echoer' do
70
+ request.body
71
+ end
72
+
73
+ documentation "Simulate retrieving an ouath token Passed to '/invoices'"
74
+ post '/as/token.oauth2' do
75
+ Soaspec::TestServer::Invoices.user_used = request.env['rack.request.form_hash']['username']
76
+ [200, Soaspec::TestServer::Invoices.oauth_headers, JSON.generate(Soaspec::TestServer::Invoices.oauth_body)]
77
+ end
78
+
79
+ documentation 'Replies with HTTP authorization and user set in /as/token.oauth2'
80
+ get '/invoice/:id' do |id|
81
+ JSON.generate(customer_id: id, oauth: request.env['HTTP_AUTHORIZATION'], user: Soaspec::TestServer::Invoices.user_used)
82
+ end
83
+
84
+ documentation 'This is returned when a query for the WSDL is made' do
85
+ response 'WSDL containing SCHEMA information'
86
+ end
87
+ get '/BLZService' do
88
+ [200, { 'Content-Type' => 'text/xml' }, Soaspec::TestServer::GetBank.test_wsdl]
89
+ end
90
+
91
+ authorize do |username, password|
92
+ username == 'admin' && password == 'secret'
93
+ end
94
+
95
+ protect do
96
+ documentation "Get path used to test basic auth. User is 'admin' & password is 'secret'" do
97
+ response 'Secret text'
98
+ end
99
+ get '/basic_secrets' do
100
+ 'Secret data'
101
+ end
102
+
103
+ documentation 'This is the basic service being hit by SOAP actions'
104
+ post '/BLZService' do
105
+ Soaspec::TestServer::GetBank.response_for request
106
+ end
107
+ end
108
+
109
+ documentation 'Used for testing storage of data' do
110
+ payload 'Puppy JSON',
111
+ Name: 'Test', Failure_Type__c: 'Fail'
112
+ end
113
+ post '/test/puppy' do
114
+ request_hash = JSON.parse(request.body.string)
115
+ id = Soaspec::TestServer::PuppyService.new_id
116
+ Soaspec::TestServer::PuppyService.data[id][:Name] = request_hash['Name']
117
+ Soaspec::TestServer::PuppyService.data[id][:Failure_Type__c] = request_hash['Failure_Type__c'] if request_hash['Failure_Type__c']
118
+ response_hash = { result: { Status: 'success', Data: Soaspec::TestServer::PuppyService.data[id] } }
119
+ JSON.generate response_hash
120
+ end
121
+
122
+ documentation 'Used for testing retrieving storage of data'
123
+ get '/test/puppy/:id' do |id|
124
+ result = Soaspec::TestServer::PuppyService.data[id.to_i]
125
+ JSON.generate result
126
+ end
127
+
128
+ documentation 'Used for testing updating data'
129
+ patch '/test/puppy/:id' do |id|
130
+ request_hash = JSON.parse(request.body.string)
131
+ Soaspec::TestServer::PuppyService.data[id.to_i][:Name] = request_hash['Name']
132
+ response_hash = { result: { Status: 'updated', With: request_hash['Name'] } }
133
+ JSON.generate response_hash
134
+ end
135
+
136
+ documentation 'Used for testing the handling of JSON path' do
137
+ response 'JSON with multiple elements of the same name at different nested levels'
138
+ end
139
+ get '/test/multiple_json' do
140
+ <<-BOOKS
141
+ {"store":
142
+ {"bicycle":
143
+ {"price":19.95, "color":"red"},
144
+ "book":[
145
+ {"price":8.95, "category":"reference", "title":"Sayings of the Century", "author":"Nigel Rees"},
146
+ {"price":12.99, "category":"fiction", "title":"Sword of Honour", "author":"Evelyn Waugh"},
147
+ {"price":8.99, "category":"fiction", "isbn":"0-553-21311-3", "title":"Moby Dick", "author":"Herman Melville","color":"blue"},
148
+ {"price":22.99, "category":"fiction", "isbn":"0-395-19395-8", "title":"The Lord of the Rings", "author":"Tolkien"}
149
+ ]
150
+ }
151
+ }
152
+ BOOKS
153
+ end
154
+ end
155
+
156
+ SoaspecVirtualServer.run!
@@ -1,61 +1,61 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'xmlsimple'
4
- require 'yaml'
5
- require 'fileutils'
6
-
7
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
8
-
9
- require 'soaspec'
10
-
11
- include Soaspec::ExeHelpers
12
-
13
- default_output_file = 'output.yml'
14
-
15
- # Create file if not present. If present but different give warning
16
- def create_file(options)
17
- filename = options[:filename]
18
- raise 'Need to pass filename' unless filename
19
- content = options[:content]
20
- raise 'Need to pass contents to insert into file' unless content
21
- if File.exist? filename
22
- old_content = File.read(filename)
23
- if old_content != content
24
- warn "!! #{filename} already exists and differs from template"
25
- end
26
- else
27
- File.open(filename, 'w') do |f|
28
- f.puts content
29
- end
30
- puts 'Created: ' + filename
31
- end
32
- end
33
-
34
- # For all keys in a Hash, convert Camelcase to underscore separated
35
- def convert_hash_keys(value)
36
- case value
37
- when Array
38
- value.map { |v| convert_hash_keys(v) }
39
- when Hash
40
- Hash[value.map { |k, v| [k.snakecase, convert_hash_keys(v)] }]
41
- else
42
- value
43
- end
44
- end
45
-
46
- # Remove arrays created as another string
47
- def clean_up_yaml(yaml_string)
48
- yaml_string = yaml_string.gsub(/\R+(\s*)-/, '').gsub(/{}/, "''") # Remove arrays, {} -> ''
49
- # Insert new line where there are 2 ':' on 1 line. Issue from first gsub
50
- yaml_string.gsub(/:(\s)(\w*):/){|s| s.insert(1, "\n")}
51
- end
52
-
53
- if ARGV[0]
54
- warn "Using '#{default_output_file}' as default output file since no 2nd argument passed" unless ARGV[1]
55
- hash = XmlSimple.xml_in(ARGV[0])
56
- converted = convert_hash_keys hash
57
- yaml_file = clean_up_yaml(converted.to_yaml)
58
- create_file(filename: ARGV[1] || default_output_file, content: yaml_file)
59
- else
60
- puts 'usage: xml_to_yaml_file [input.xml] [output.yml] '
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'xmlsimple'
4
+ require 'yaml'
5
+ require 'fileutils'
6
+
7
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
8
+
9
+ require 'soaspec'
10
+
11
+ include Soaspec::ExeHelpers
12
+
13
+ default_output_file = 'output.yml'
14
+
15
+ # Create file if not present. If present but different give warning
16
+ def create_file(options)
17
+ filename = options[:filename]
18
+ raise 'Need to pass filename' unless filename
19
+ content = options[:content]
20
+ raise 'Need to pass contents to insert into file' unless content
21
+ if File.exist? filename
22
+ old_content = File.read(filename)
23
+ if old_content != content
24
+ warn "!! #{filename} already exists and differs from template"
25
+ end
26
+ else
27
+ File.open(filename, 'w') do |f|
28
+ f.puts content
29
+ end
30
+ puts 'Created: ' + filename
31
+ end
32
+ end
33
+
34
+ # For all keys in a Hash, convert Camelcase to underscore separated
35
+ def convert_hash_keys(value)
36
+ case value
37
+ when Array
38
+ value.map { |v| convert_hash_keys(v) }
39
+ when Hash
40
+ Hash[value.map { |k, v| [k.snakecase, convert_hash_keys(v)] }]
41
+ else
42
+ value
43
+ end
44
+ end
45
+
46
+ # Remove arrays created as another string
47
+ def clean_up_yaml(yaml_string)
48
+ yaml_string = yaml_string.gsub(/\R+(\s*)-/, '').gsub(/{}/, "''") # Remove arrays, {} -> ''
49
+ # Insert new line where there are 2 ':' on 1 line. Issue from first gsub
50
+ yaml_string.gsub(/:(\s)(\w*):/){|s| s.insert(1, "\n")}
51
+ end
52
+
53
+ if ARGV[0]
54
+ warn "Using '#{default_output_file}' as default output file since no 2nd argument passed" unless ARGV[1]
55
+ hash = XmlSimple.xml_in(ARGV[0])
56
+ converted = convert_hash_keys hash
57
+ yaml_file = clean_up_yaml(converted.to_yaml)
58
+ create_file(filename: ARGV[1] || default_output_file, content: yaml_file)
59
+ else
60
+ puts 'usage: xml_to_yaml_file [input.xml] [output.yml] '
61
61
  end
@@ -1,103 +1,103 @@
1
- require 'rest-client' # REST
2
- require 'erb' # Embedded ruby
3
- require 'yaml' # Reading yaml
4
- require 'rspec' # Testing framework
5
- require 'rspec/its'
6
- require 'savon' # SOAP
7
- require 'nokogiri' # XPath
8
- require 'date'
9
- require 'jsonpath'
10
-
11
- require 'soaspec/version'
12
- require 'soaspec/exchange_handlers/soap_handler'
13
- require 'soaspec/exchange_handlers/exchange_handler'
14
- require 'soaspec/exchange_handlers/rest_methods'
15
- require 'soaspec/exchange'
16
- require 'soaspec/matchers'
17
- require 'soaspec/soaspec_shared_examples'
18
- require 'soaspec/core_ext/hash'
19
- require 'soaspec/spec_logger'
20
- require 'soaspec/exe_helpers'
21
- require 'soaspec/exchange_handlers/rest_handler'
22
- require 'soaspec/exchange_handlers/handler_accessors'
23
- require 'soaspec/interpreter'
24
- require 'soaspec/not_found_errors'
25
- require 'soaspec/test_server/get_bank'
26
- require 'soaspec/test_server/test_attribute'
27
- require 'soaspec/test_server/puppy_service'
28
- require 'soaspec/test_server/invoices'
29
- require 'soaspec/test_server/test_namespace'
30
- require 'soaspec/test_server/id_manager'
31
- require 'soaspec/wsdl_generator'
32
-
33
- # Gem for handling SOAP and REST api tests
34
- module Soaspec
35
-
36
- @template_folder = 'template'
37
-
38
- class << self
39
- # Specify whether to see params sent to and retrieved from oauth. This will put password in log file, only recommended for debugging
40
- attr_writer :debug_oauth
41
- # Folder used to store templates for API calls
42
- attr_accessor :template_folder
43
- # Stores last exchange
44
- attr_accessor :last_exchange
45
-
46
- # Folder used to store credentials
47
- # Used in auth2_file command
48
- # @param [String] folder
49
- def credentials_folder=(folder)
50
- @credentials_folder = folder
51
- end
52
-
53
- # Credentials folder used to store secret data (not in source control) E.g passwords
54
- def credentials_folder
55
- @credentials_folder
56
- end
57
-
58
- # Used so that exchange class knows what context it's in
59
- # @param [ExchangeHandler] handler A class inheriting from Soaspec::ExchangeHandler. Exchange class uses this
60
- def api_handler=(handler)
61
- @api_handler = handler
62
- end
63
-
64
- # Exchange Handler class currently being used
65
- def api_handler
66
- @api_handler
67
- end
68
-
69
- # Set whether to transform strings to keys in request automatically
70
- # @param [Boolean] use_keys
71
- def always_use_keys=(use_keys)
72
- @always_use_keys = use_keys
73
- end
74
-
75
- # @return [Boolean] Whether to transform strings to keys in request automatically
76
- def always_use_keys?
77
- @always_use_keys || true
78
- end
79
-
80
- # @return [Boolean] Whether to see params sent to & received from oauth URL
81
- def debug_oauth?
82
- @debug_oauth || false
83
- end
84
-
85
- # @return [String] Folder used to store templates for API calls
86
- # def template_folder
87
- # @template_folder || 'template'
88
- # end
89
-
90
- # Whether to log all API traffic
91
- def log_api_traffic=(set)
92
- @log_api_traffic = set
93
- RestClient.log = nil unless set
94
- end
95
-
96
- # @return [Boolean] Whether to log all API traffic
97
- def log_api_traffic?
98
- @log_api_traffic.nil? ? true : @log_api_traffic
99
- end
100
- end
101
- end
102
-
103
- RestClient.log = Soaspec::SpecLogger.create
1
+ require 'rest-client' # REST
2
+ require 'erb' # Embedded ruby
3
+ require 'yaml' # Reading yaml
4
+ require 'rspec' # Testing framework
5
+ require 'rspec/its'
6
+ require 'savon' # SOAP
7
+ require 'nokogiri' # XPath
8
+ require 'date'
9
+ require 'jsonpath'
10
+
11
+ require 'soaspec/version'
12
+ require 'soaspec/exchange_handlers/soap_handler'
13
+ require 'soaspec/exchange_handlers/exchange_handler'
14
+ require 'soaspec/exchange_handlers/rest_methods'
15
+ require 'soaspec/exchange'
16
+ require 'soaspec/matchers'
17
+ require 'soaspec/soaspec_shared_examples'
18
+ require 'soaspec/core_ext/hash'
19
+ require 'soaspec/spec_logger'
20
+ require 'soaspec/exe_helpers'
21
+ require 'soaspec/exchange_handlers/rest_handler'
22
+ require 'soaspec/exchange_handlers/handler_accessors'
23
+ require 'soaspec/interpreter'
24
+ require 'soaspec/not_found_errors'
25
+ require 'soaspec/test_server/get_bank'
26
+ require 'soaspec/test_server/test_attribute'
27
+ require 'soaspec/test_server/puppy_service'
28
+ require 'soaspec/test_server/invoices'
29
+ require 'soaspec/test_server/test_namespace'
30
+ require 'soaspec/test_server/id_manager'
31
+ require 'soaspec/wsdl_generator'
32
+
33
+ # Gem for handling SOAP and REST api tests
34
+ module Soaspec
35
+
36
+ @template_folder = 'template'
37
+
38
+ class << self
39
+ # Specify whether to see params sent to and retrieved from oauth. This will put password in log file, only recommended for debugging
40
+ attr_writer :debug_oauth
41
+ # Folder used to store templates for API calls
42
+ attr_accessor :template_folder
43
+ # Stores last exchange
44
+ attr_accessor :last_exchange
45
+
46
+ # Folder used to store credentials
47
+ # Used in auth2_file command
48
+ # @param [String] folder
49
+ def credentials_folder=(folder)
50
+ @credentials_folder = folder
51
+ end
52
+
53
+ # Credentials folder used to store secret data (not in source control) E.g passwords
54
+ def credentials_folder
55
+ @credentials_folder
56
+ end
57
+
58
+ # Used so that exchange class knows what context it's in
59
+ # @param [ExchangeHandler] handler A class inheriting from Soaspec::ExchangeHandler. Exchange class uses this
60
+ def api_handler=(handler)
61
+ @api_handler = handler
62
+ end
63
+
64
+ # Exchange Handler class currently being used
65
+ def api_handler
66
+ @api_handler
67
+ end
68
+
69
+ # Set whether to transform strings to keys in request automatically
70
+ # @param [Boolean] use_keys
71
+ def always_use_keys=(use_keys)
72
+ @always_use_keys = use_keys
73
+ end
74
+
75
+ # @return [Boolean] Whether to transform strings to keys in request automatically
76
+ def always_use_keys?
77
+ @always_use_keys || true
78
+ end
79
+
80
+ # @return [Boolean] Whether to see params sent to & received from oauth URL
81
+ def debug_oauth?
82
+ @debug_oauth || false
83
+ end
84
+
85
+ # @return [String] Folder used to store templates for API calls
86
+ # def template_folder
87
+ # @template_folder || 'template'
88
+ # end
89
+
90
+ # Whether to log all API traffic
91
+ def log_api_traffic=(set)
92
+ @log_api_traffic = set
93
+ RestClient.log = nil unless set
94
+ end
95
+
96
+ # @return [Boolean] Whether to log all API traffic
97
+ def log_api_traffic?
98
+ @log_api_traffic.nil? ? true : @log_api_traffic
99
+ end
100
+ end
101
+ end
102
+
103
+ RestClient.log = Soaspec::SpecLogger.create