conduit 1.1.3 → 1.4.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 +5 -5
- data/lib/conduit/api_response.rb +4 -1
- data/lib/conduit/cli.rb +2 -5
- data/lib/conduit/core/action.rb +30 -14
- data/lib/conduit/core/request_mocker.rb +2 -2
- data/lib/conduit/error.rb +2 -2
- data/lib/conduit/storage/aws.rb +27 -25
- data/lib/conduit/version.rb +1 -1
- data/spec/classes/core/action_spec.rb +7 -2
- data/spec/classes/core/driver_spec.rb +2 -2
- data/spec/classes/core/parser_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/storage/aws_spec.rb +44 -0
- data/spec/support/my_driver/actions/foo.rb +1 -1
- data/spec/support/my_driver/parsers/foo.rb +1 -0
- metadata +22 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '076538899ab77d0cedd2ce54f2ed7ebc32f2e8115c4fe4ab989d514eb95d898e'
|
4
|
+
data.tar.gz: 61f027e5162aa9795173276bf6fe8b09c8dac1227618f5926a1805920628ce1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03bd45482b484b23efb0e36b0c146ade9cf14bbf7664a85e641c2e3a6b7621b5f5cf11ec885f5bf94f176e2ac01002108859db277e1ca2232d95df1db5e7da12
|
7
|
+
data.tar.gz: 6d9fb2f3d7a637484ed4e3e915d688ec95cb46172788a957982825cd60714ad0e3be7397d01cfca7d01c902165b4d31e9f0b07f9b6fcf940aecaab5d98beb85c
|
data/lib/conduit/api_response.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
module Conduit
|
2
2
|
class ApiResponse
|
3
|
-
attr_reader :body, :parser, :raw_response
|
3
|
+
attr_reader :body, :parser, :raw_response, :http_status
|
4
4
|
|
5
5
|
def initialize(options = {})
|
6
6
|
@raw_response = options[:raw_response]
|
7
7
|
@body = options[:body] ||= @raw_response.body
|
8
8
|
@parser = options[:parser]
|
9
|
+
@http_status = options[:http_status] ||= begin
|
10
|
+
@raw_response.try(:http_status) || @raw_response.try(:status)
|
11
|
+
end
|
9
12
|
end
|
10
13
|
end
|
11
14
|
end
|
data/lib/conduit/cli.rb
CHANGED
@@ -113,14 +113,11 @@ module Conduit
|
|
113
113
|
# add gemspec dependencies
|
114
114
|
str = " # Dependencies\n"\
|
115
115
|
" #\n"\
|
116
|
-
" spec.add_dependency \"conduit\", \"~> 1.0.
|
116
|
+
" spec.add_dependency \"conduit\", \"~> 1.0.6\"\n"\
|
117
117
|
" # xml parser\n"\
|
118
|
-
" spec.add_dependency \"nokogiri\"\n"\
|
119
|
-
" # to get string inflectors\n"\
|
120
|
-
" spec.add_dependency \"activesupport\"\n\n"\
|
118
|
+
" spec.add_dependency \"nokogiri\"\n\n"\
|
121
119
|
" # Development Dependencies\n"\
|
122
120
|
" #\n"\
|
123
|
-
" spec.add_development_dependency \"shoulda-matchers\"\n"\
|
124
121
|
" # to compare xml files in tests\n"\
|
125
122
|
" spec.add_development_dependency \"equivalent-xml\"\n"\
|
126
123
|
" spec.add_development_dependency \"rspec-its\"\n"\
|
data/lib/conduit/core/action.rb
CHANGED
@@ -77,7 +77,7 @@ module Conduit
|
|
77
77
|
module InstanceMethods
|
78
78
|
extend Forwardable
|
79
79
|
|
80
|
-
def initialize(
|
80
|
+
def initialize(options)
|
81
81
|
@options = options
|
82
82
|
validate!(options)
|
83
83
|
end
|
@@ -129,15 +129,28 @@ module Conduit
|
|
129
129
|
|
130
130
|
# Method called to make the actual request.
|
131
131
|
#
|
132
|
-
# Override to customize.
|
133
|
-
#
|
134
132
|
def perform_request
|
135
|
-
response = request(
|
133
|
+
response = request(request_options)
|
136
134
|
parser_instance = parser_class.new(response.body)
|
137
|
-
|
138
135
|
Conduit::ApiResponse.new(raw_response: response, parser: parser_instance)
|
139
136
|
end
|
140
137
|
|
138
|
+
def request_options
|
139
|
+
{ body: http_body, method: http_method, headers: http_headers }
|
140
|
+
end
|
141
|
+
|
142
|
+
def http_body
|
143
|
+
view
|
144
|
+
end
|
145
|
+
|
146
|
+
def http_method
|
147
|
+
:post
|
148
|
+
end
|
149
|
+
|
150
|
+
def http_headers
|
151
|
+
{}
|
152
|
+
end
|
153
|
+
|
141
154
|
# Entry method. Calls either the mocker or the `perform_request`
|
142
155
|
# method.
|
143
156
|
#
|
@@ -164,12 +177,16 @@ module Conduit
|
|
164
177
|
# an ArgumentError listing missing attributes.
|
165
178
|
#
|
166
179
|
def validate!(options)
|
167
|
-
missing_keys =
|
168
|
-
|
169
|
-
|
180
|
+
missing_keys = requirements.reject do |required_attribute|
|
181
|
+
if required_attribute.is_a?(Array)
|
182
|
+
(required_attribute & options.keys).present?
|
183
|
+
else
|
184
|
+
options.keys.include?(required_attribute)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
170
188
|
if missing_keys.any?
|
171
|
-
raise ArgumentError,
|
172
|
-
"Missing keys: #{missing_keys.join(', ')}"
|
189
|
+
raise ArgumentError, "Missing keys: #{missing_keys}"
|
173
190
|
end
|
174
191
|
end
|
175
192
|
|
@@ -205,9 +222,8 @@ module Conduit
|
|
205
222
|
# In ruby 2.0.0 we can't do `const_defined? MyDriver::Decorators::FooDecorator`
|
206
223
|
# so we have to check each module one by one.
|
207
224
|
if Conduit.const_defined?(driver_name.classify) &&
|
208
|
-
|
209
|
-
|
210
|
-
|
225
|
+
Conduit.const_get(driver_name.classify).const_defined?("Decorators") &&
|
226
|
+
Conduit.const_get("#{driver_name.classify}::Decorators").const_defined?("#{action_name}Decorator")
|
211
227
|
Conduit.const_get("#{driver_name.classify}::Decorators::#{action_name}Decorator")
|
212
228
|
else
|
213
229
|
Conduit::Core::Decorator
|
@@ -217,7 +233,7 @@ module Conduit
|
|
217
233
|
# Indicates whether the request should be mocked or not.
|
218
234
|
#
|
219
235
|
def mock_mode?
|
220
|
-
@options.key?(:mock_status) &&
|
236
|
+
@options.key?(:mock_status) && @options[:mock_status].present?
|
221
237
|
end
|
222
238
|
end
|
223
239
|
end
|
@@ -40,7 +40,7 @@ module Conduit
|
|
40
40
|
Excon.stubs.clear
|
41
41
|
end
|
42
42
|
|
43
|
-
#
|
43
|
+
# Wraps the block inside a mocking state.
|
44
44
|
#
|
45
45
|
def with_mocking
|
46
46
|
mock and yield.tap { unmock }
|
@@ -77,7 +77,7 @@ module Conduit
|
|
77
77
|
|
78
78
|
# Allowed statuses.
|
79
79
|
def response_statuses
|
80
|
-
%i
|
80
|
+
%i[success failure error]
|
81
81
|
end
|
82
82
|
|
83
83
|
# Mocked error response.
|
data/lib/conduit/error.rb
CHANGED
data/lib/conduit/storage/aws.rb
CHANGED
@@ -2,10 +2,7 @@
|
|
2
2
|
# The job of this class is to provide storage
|
3
3
|
# functionality for conduit.
|
4
4
|
#
|
5
|
-
|
6
|
-
#
|
7
|
-
|
8
|
-
require "aws-sdk"
|
5
|
+
require "aws-sdk-s3"
|
9
6
|
|
10
7
|
module Conduit
|
11
8
|
module Storage
|
@@ -18,29 +15,28 @@ module Conduit
|
|
18
15
|
end
|
19
16
|
|
20
17
|
module ClassMethods
|
21
|
-
# Configure
|
18
|
+
# Configure Aws::S3 with credentials if provided, else, assume
|
22
19
|
# IAM will provide them.
|
23
20
|
#
|
24
21
|
def configure
|
25
|
-
if [
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
)
|
22
|
+
if %i[aws_access_key_id aws_access_secret].all? { |key| config.key?(key) }
|
23
|
+
credentials = ::Aws::Credentials.new(config[:aws_access_key_id],
|
24
|
+
config[:aws_access_secret])
|
25
|
+
::Aws.config.update(credentials: credentials)
|
30
26
|
else
|
31
|
-
|
27
|
+
::Aws.config
|
32
28
|
end
|
33
29
|
end
|
34
30
|
|
35
|
-
# Primary connection object to
|
31
|
+
# Primary connection object to Aws::S3
|
36
32
|
#
|
37
33
|
# Configurable in:
|
38
34
|
# config/initializers/conduit.rb
|
39
35
|
# TODO: Update how conduit gets
|
40
36
|
# the credentials for s3
|
41
37
|
#
|
42
|
-
def
|
43
|
-
@
|
38
|
+
def s3
|
39
|
+
@s3 ||= ::Aws::S3::Resource.new
|
44
40
|
end
|
45
41
|
|
46
42
|
# Bucket we want to work with
|
@@ -50,40 +46,46 @@ module Conduit
|
|
50
46
|
#
|
51
47
|
def bucket
|
52
48
|
@bucket ||= begin
|
53
|
-
|
54
|
-
|
55
|
-
|
49
|
+
bucket_name = config[:bucket]
|
50
|
+
bucket = s3.bucket(bucket_name)
|
51
|
+
|
52
|
+
if bucket.exists?
|
53
|
+
bucket
|
54
|
+
else
|
55
|
+
s3.buckets.create(bucket)
|
56
|
+
s3.bucket(bucket)
|
57
|
+
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
59
|
-
# Write a file to
|
61
|
+
# Write a file to Aws::S3
|
60
62
|
#
|
61
63
|
# e.g.
|
62
64
|
# => Conduit::Storage.write('/path/to/file', 'foo')
|
63
65
|
#
|
64
66
|
def write(key, content)
|
65
|
-
bucket.
|
67
|
+
bucket.object(key).put(body: content)
|
66
68
|
end
|
67
69
|
|
68
|
-
# Read a file from
|
70
|
+
# Read a file from Aws::S3
|
69
71
|
#
|
70
72
|
# e.g.
|
71
73
|
# => Conduit::Storage.read('/path/to/file')
|
72
74
|
#
|
73
75
|
def read(key)
|
74
|
-
bucket.
|
75
|
-
rescue
|
76
|
+
bucket.object(key).get.body.read
|
77
|
+
rescue ::Aws::S3::Errors::NoSuchKey
|
76
78
|
nil
|
77
79
|
end
|
78
80
|
|
79
|
-
# Delete a file from
|
81
|
+
# Delete a file from Aws::S3
|
80
82
|
#
|
81
83
|
# e.g.
|
82
84
|
# => Conduit::Storage.delete('/path/to/file')
|
83
85
|
#
|
84
86
|
def delete(key)
|
85
|
-
bucket.
|
86
|
-
rescue
|
87
|
+
bucket.object(key).delete
|
88
|
+
rescue ::Aws::S3::Errors::NoSuchKey
|
87
89
|
nil
|
88
90
|
end
|
89
91
|
end
|
data/lib/conduit/version.rb
CHANGED
@@ -16,19 +16,20 @@ shared_examples_for Conduit::Core::Action do
|
|
16
16
|
|
17
17
|
describe ".requirements" do
|
18
18
|
it "returns an array of required attributes" do
|
19
|
-
subject.class.requirements.should == [:foo, :bar, :baz, [
|
19
|
+
subject.class.requirements.should == [:foo, :bar, :baz, %i[either or]].to_set
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
describe ".attributes" do
|
24
24
|
it "returns an array of known attributes" do
|
25
|
-
subject.class.requirements.should == [:foo, :bar, :baz, [
|
25
|
+
subject.class.requirements.should == [:foo, :bar, :baz, %i[either or]].to_set
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
context "action has an array in its required_attibutes field" do
|
31
31
|
let(:attrs) { request_attributes }
|
32
|
+
|
32
33
|
it "raises an error if missing both of the keys" do
|
33
34
|
attrs.delete(:either)
|
34
35
|
attrs.delete(:or)
|
@@ -135,6 +136,10 @@ shared_examples_for Conduit::Core::Action do
|
|
135
136
|
it "should return the raw_content" do
|
136
137
|
subject.perform.body.should_not be_nil
|
137
138
|
end
|
139
|
+
|
140
|
+
it "returns http_status" do
|
141
|
+
subject.perform.http_status.should eql 200
|
142
|
+
end
|
138
143
|
end
|
139
144
|
end
|
140
145
|
end
|
@@ -4,7 +4,7 @@ shared_examples_for Conduit::Core::Driver do
|
|
4
4
|
context "without an instance" do
|
5
5
|
describe ".credentials" do
|
6
6
|
it "returns an array of required credentials" do
|
7
|
-
subject.credentials.should == [
|
7
|
+
subject.credentials.should == %i[username password].to_set
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -16,7 +16,7 @@ shared_examples_for Conduit::Core::Driver do
|
|
16
16
|
|
17
17
|
describe ".permitted_attributes" do
|
18
18
|
it "returns the union of required and optional attributes" do
|
19
|
-
subject.permitted_attributes.should == [
|
19
|
+
subject.permitted_attributes.should == %i[subdomain mock].to_set
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -15,7 +15,7 @@ shared_examples_for Conduit::Core::Parser do
|
|
15
15
|
context "with an instance" do
|
16
16
|
describe "#attributes" do
|
17
17
|
it "returns an array of known attributes" do
|
18
|
-
subject.attributes.should == [
|
18
|
+
subject.attributes.should == %i[foo bar baz].to_set
|
19
19
|
end
|
20
20
|
|
21
21
|
it "defines a method for foo" do
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "aws-sdk-s3"
|
3
|
+
|
4
|
+
describe "Conduit::Storage::Aws" do
|
5
|
+
before do
|
6
|
+
stub_aws_responses
|
7
|
+
|
8
|
+
Conduit.configure do |config|
|
9
|
+
config.storage_config = { provider: :aws, bucket: "my-bucket" }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def stub_aws_responses
|
14
|
+
Aws.config = {
|
15
|
+
stub_responses: true,
|
16
|
+
s3: {
|
17
|
+
stub_responses: {
|
18
|
+
list_buckets: { buckets: [{ name: "my-bucket" }] },
|
19
|
+
get_object: { body: "data" }
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#write" do
|
26
|
+
it "writes an s3 object to the bucket" do
|
27
|
+
Conduit::Storage.write("foo.txt", "data").
|
28
|
+
should be_a(Aws::S3::Types::PutObjectOutput)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#read" do
|
33
|
+
it "reads from an s3 object" do
|
34
|
+
Conduit::Storage.read("foo.txt").should eql("data")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#delete" do
|
39
|
+
it "deletes an s3 object" do
|
40
|
+
Conduit::Storage.delete("foo.txt").
|
41
|
+
should be_a(Aws::S3::Types::DeleteObjectOutput)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conduit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Kelley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: aws-sdk-s3
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -80,76 +80,6 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: bundler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: shoulda-matchers
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec-its
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: nokogiri
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rspec
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
153
83
|
description:
|
154
84
|
email:
|
155
85
|
- mike@codezombie.org
|
@@ -204,6 +134,7 @@ files:
|
|
204
134
|
- spec/classes/core/request_mocker_spec.rb
|
205
135
|
- spec/classes/util_spec.rb
|
206
136
|
- spec/spec_helper.rb
|
137
|
+
- spec/storage/aws_spec.rb
|
207
138
|
- spec/support/helper.rb
|
208
139
|
- spec/support/my_driver/actions/foo.rb
|
209
140
|
- spec/support/my_driver/driver.rb
|
@@ -236,29 +167,29 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
236
167
|
- !ruby/object:Gem::Version
|
237
168
|
version: '0'
|
238
169
|
requirements: []
|
239
|
-
|
240
|
-
rubygems_version: 2.5.1
|
170
|
+
rubygems_version: 3.1.2
|
241
171
|
signing_key:
|
242
172
|
specification_version: 4
|
243
173
|
summary: Conduit is an interface for debit platforms.
|
244
174
|
test_files:
|
245
|
-
- spec/
|
175
|
+
- spec/spec_helper.rb
|
176
|
+
- spec/classes/core/request_mocker_spec.rb
|
246
177
|
- spec/classes/core/driver_spec.rb
|
247
178
|
- spec/classes/core/parser_spec.rb
|
248
|
-
- spec/classes/core/
|
179
|
+
- spec/classes/core/action_spec.rb
|
249
180
|
- spec/classes/util_spec.rb
|
250
|
-
- spec/
|
181
|
+
- spec/storage/aws_spec.rb
|
251
182
|
- spec/support/helper.rb
|
252
|
-
- spec/support/my_driver/actions/foo.rb
|
253
|
-
- spec/support/my_driver/driver.rb
|
254
183
|
- spec/support/my_driver/parsers/foo.rb
|
255
|
-
- spec/support/my_driver/
|
256
|
-
- spec/support/my_driver/
|
184
|
+
- spec/support/my_driver/driver.rb
|
185
|
+
- spec/support/my_driver/actions/foo.rb
|
257
186
|
- spec/support/my_driver/request_mockers/foo.rb
|
258
|
-
- spec/support/my_driver/
|
187
|
+
- spec/support/my_driver/request_mockers/fixtures/foo/success.xml.erb
|
188
|
+
- spec/support/my_driver/request_mockers/fixtures/foo/failure.xml.erb
|
259
189
|
- spec/support/my_driver/views/layout.erb
|
260
|
-
- spec/support/
|
261
|
-
- spec/support/xml/success_mock.xml
|
262
|
-
- spec/support/xml/xml_modified_request.xml
|
190
|
+
- spec/support/my_driver/views/foo.erb
|
263
191
|
- spec/support/xml/xml_request.xml
|
192
|
+
- spec/support/xml/xml_modified_request.xml
|
264
193
|
- spec/support/xml/xml_response.xml
|
194
|
+
- spec/support/xml/success_mock.xml
|
195
|
+
- spec/support/xml/failure_mock.xml
|