fog-core 2.4.0 → 2.5.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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +2 -0
  3. data/.github/dependabot.yml +2 -4
  4. data/.github/workflows/ci.yml +32 -0
  5. data/.rubocop.yml +1 -1
  6. data/README.md +2 -1
  7. data/SECURITY.md +6 -0
  8. data/changelog.md +12 -0
  9. data/fog-core.gemspec +1 -1
  10. data/lib/fog/compute.rb +1 -1
  11. data/lib/fog/core/mock.rb +1 -1
  12. data/lib/fog/core/provider.rb +1 -1
  13. data/lib/fog/core/service.rb +1 -1
  14. data/lib/fog/core/version.rb +1 -1
  15. data/lib/fog/core.rb +0 -1
  16. data/lib/fog/formatador.rb +3 -3
  17. data/lib/fog/storage.rb +0 -1
  18. data/lib/tasks/test_task.rb +2 -3
  19. metadata +5 -31
  20. data/.github/workflows/ruby.yml +0 -18
  21. data/.github/workflows/stale.yml +0 -9
  22. data/spec/compute/models/server_spec.rb +0 -229
  23. data/spec/compute_spec.rb +0 -95
  24. data/spec/connection_spec.rb +0 -107
  25. data/spec/core/cache_spec.rb +0 -227
  26. data/spec/core/collection_spec.rb +0 -24
  27. data/spec/core/model_spec.rb +0 -69
  28. data/spec/core/stringify_keys_spec.rb +0 -38
  29. data/spec/core/whitelist_keys_spec.rb +0 -36
  30. data/spec/credentials_spec.rb +0 -88
  31. data/spec/current_machine_spec.rb +0 -36
  32. data/spec/fake_app/fake_service.rb +0 -18
  33. data/spec/fake_app/models/collection.rb +0 -5
  34. data/spec/fake_app/models/model.rb +0 -2
  35. data/spec/fake_app/requests/request.rb +0 -11
  36. data/spec/fog_attribute_spec.rb +0 -569
  37. data/spec/formatador_spec.rb +0 -154
  38. data/spec/identity_spec.rb +0 -95
  39. data/spec/mocking_spec.rb +0 -84
  40. data/spec/service_spec.rb +0 -201
  41. data/spec/spec_helper.rb +0 -14
  42. data/spec/storage_spec.rb +0 -112
  43. data/spec/test_helpers/formats_helper_spec.rb +0 -121
  44. data/spec/test_helpers/schema_validator_spec.rb +0 -101
  45. data/spec/timeout_spec.rb +0 -20
  46. data/spec/utils_spec.rb +0 -29
  47. data/spec/uuid_spec.rb +0 -11
  48. data/spec/wait_for_spec.rb +0 -30
@@ -1,107 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Fog::Core::Connection do
4
- it "raises ArgumentError when no arguments given" do
5
- assert_raises(ArgumentError) do
6
- Fog::Core::Connection.new
7
- end
8
- end
9
-
10
- [:request, :reset].each do |method|
11
- it "responds to #{method}" do
12
- connection = Fog::Core::Connection.new("http://example.com")
13
- assert connection.respond_to?(method)
14
- end
15
- end
16
-
17
- it "adds custom user-agents to Fog requests" do
18
- Fog::VERSION = "Version".freeze
19
- Fog::Core::Connection.add_user_agent("my-app/1.2")
20
-
21
- connection = Fog::Core::Connection.new("http://example.com")
22
- assert_equal "my-app/1.2 fog/Version fog-core/#{Fog::Core::VERSION}",
23
- connection.instance_variable_get(:@excon).data[:headers]["User-Agent"]
24
-
25
- Fog.send(:remove_const, :VERSION)
26
- end
27
-
28
- it "doesn't error when persistence is enabled" do
29
- Fog::Core::Connection.new("http://example.com", true)
30
- end
31
-
32
- it "doesn't error when persistence is enabled and debug_response is disabled" do
33
- options = {
34
- debug_response: false
35
- }
36
- Fog::Core::Connection.new("http://example.com", true, options)
37
- end
38
-
39
- describe ":path_prefix" do
40
- it "does not emit a warning when provided this argument in the initializer" do
41
- $stderr = StringIO.new
42
-
43
- Fog::Core::Connection.new("http://example.com", false, path_prefix: "foo")
44
-
45
- assert_empty($stderr.string)
46
- end
47
-
48
- it "raises when the 'path' arg is present and this arg is supplied" do
49
- assert_raises(ArgumentError) do
50
- Fog::Core::Connection.new("http://example.com", false, path_prefix: "foo", path: "bar")
51
- end
52
- end
53
- end
54
-
55
- describe "#request" do
56
- describe "default behavior" do
57
- it "supplies the 'path' arg directly to Excon" do
58
- spy = Object.new
59
- spy.instance_eval do
60
- def params
61
- @params
62
- end
63
-
64
- def new(_, params)
65
- @params = params
66
- end
67
- end
68
-
69
- Object.stub_const("Excon", spy) do
70
- Fog::Core::Connection.new("http://example.com", false, path: "bar")
71
- assert_equal("bar", spy.params[:path])
72
- end
73
- end
74
- end
75
-
76
- describe "with path_prefix supplied to the initializer" do
77
- let(:spy) do
78
- Object.new.tap do |spy|
79
- spy.instance_eval do
80
- def new(*_args); self; end
81
- def params; @params; end
82
-
83
- def request(params)
84
- @params = params
85
- end
86
- end
87
- end
88
- end
89
-
90
- it "uses the initializer-supplied :path_prefix arg with #request :arg to formulate a path to send to Excon.request" do
91
- Object.stub_const("Excon", spy) do
92
- c = Fog::Core::Connection.new("http://example.com", false, path_prefix: "foo")
93
- c.request(path: "bar")
94
- assert_equal("foo/bar", spy.params[:path])
95
- end
96
- end
97
-
98
- it "does not introduce consecutive '/'s into the path if 'path' starts with a '/'" do
99
- Object.stub_const("Excon", spy) do
100
- c = Fog::Core::Connection.new("http://example.com", false, path_prefix: "foo")
101
- c.request(path: "/bar")
102
- assert_equal("foo/bar", spy.params[:path])
103
- end
104
- end
105
- end
106
- end
107
- end
@@ -1,227 +0,0 @@
1
- require "spec_helper"
2
- require "securerandom"
3
-
4
- module Fog
5
- class SubFogTestModel < Fog::Model
6
- identity :id
7
-
8
- attribute :config
9
- attribute :subconfig
10
-
11
- def initialize(new_attributes = {})
12
- super
13
-
14
- # This way we make YAML to use aliases
15
- self.config = {
16
- "users" => [
17
- { "user1" => "user1@email" },
18
- { "user2" => "user2@email" }
19
- ]
20
- }
21
- self.subconfig = config["users"][0]
22
- end
23
- end
24
- end
25
-
26
- module Fog
27
- class SubFogTestCollection < Fog::Collection
28
- model Fog::SubFogTestModel
29
-
30
- attribute :spec_attribute
31
- end
32
- end
33
-
34
- module Fog
35
- class SubFogTestService < Fog::Service
36
-
37
- class Mock
38
- attr_reader :options
39
-
40
- def initialize(opts = {})
41
- @options = opts
42
- end
43
- end
44
- end
45
- end
46
-
47
- describe Fog::Cache do
48
- before(:each) do
49
- Fog.mock!
50
- @service = Fog::SubFogTestService.new
51
- Fog::Cache.namespace_prefix = "test-dir"
52
- end
53
-
54
- it "has a namespace_prefix configurable" do
55
- Fog::Cache.namespace_prefix = "for-service-user-region-foo"
56
-
57
- # Expand path does not downcase. case insensitive platform tests.
58
- example_cache = File.expand_path(Fog::Cache.namespace(Fog::SubFogTestModel, @service)).downcase
59
- expected_namespace = File.expand_path("~/.fog-cache/for-service-user-region-foo").downcase
60
-
61
- assert_equal example_cache.include?(expected_namespace), true
62
- end
63
-
64
- it "has metadata associated to the namespace that you can save to" do
65
- Fog::Cache.clean!
66
- Fog::Cache.namespace_prefix = "for-service-user-region-foo"
67
- # nothing exists, nothing comes back
68
- assert_equal Fog::Cache.metadata, {}
69
- # write/read
70
- Fog::Cache.write_metadata({last_dumped: "Tuesday, November 8, 2016"})
71
- assert_equal Fog::Cache.metadata[:last_dumped], "Tuesday, November 8, 2016"
72
-
73
- # diff namespace, diff metadata
74
- Fog::Cache.namespace_prefix = "different-namespace"
75
- assert_nil Fog::Cache.metadata[:last_dumped]
76
- # still accessible per namespace
77
- Fog::Cache.namespace_prefix = "for-service-user-region-foo"
78
- assert_equal Fog::Cache.metadata[:last_dumped], "Tuesday, November 8, 2016"
79
- # can overwrite
80
- Fog::Cache.write_metadata({last_dumped: "Diff date"})
81
- assert_equal Fog::Cache.metadata[:last_dumped], "Diff date"
82
-
83
- # can't write a non-hash/data entry.
84
- assert_raises Fog::Cache::CacheDir do
85
- Fog::Cache.write_metadata("boo")
86
- end
87
-
88
- # namespace must be set as well.
89
- assert_raises Fog::Cache::CacheDir do
90
- Fog::Cache.namespace_prefix = nil
91
- Fog::Cache.write_metadata({a: "b"})
92
- end
93
- end
94
-
95
- it "can load cache data from disk" do
96
- path = File.expand_path("~/.fog-cache-test-#{Time.now.to_i}.yml")
97
- data = "--- ok\n...\n"
98
- File.open(path, "w") { |f|
99
- f.write(data)
100
- }
101
-
102
- assert_equal "ok", Fog::Cache.load_cache(path)
103
- end
104
-
105
- it "load bad cache data - empty file, from disk" do
106
- path = File.expand_path("~/.fog-cache-test-2-#{Time.now.to_i}.yml")
107
- data = ""
108
- File.open(path, "w") { |f|
109
- f.write(data)
110
- }
111
-
112
- assert !Fog::Cache.load_cache(path)
113
- end
114
-
115
- it "must have a namespace_prefix configurable" do
116
- Fog::Cache.namespace_prefix = nil
117
- assert_raises Fog::Cache::CacheDir do
118
- Fog::Cache.load(Fog::SubFogTestModel, @service)
119
- end
120
- end
121
-
122
- it "can create a namespace" do
123
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
124
- assert_equal File.exist?(Fog::Cache.namespace(Fog::SubFogTestModel, @service)), false
125
-
126
- Fog::Cache.create_namespace(Fog::SubFogTestModel, @service)
127
- assert_equal File.exist?(Fog::Cache.namespace(Fog::SubFogTestModel, @service)), true
128
- end
129
-
130
- it "will raise if no cache data found" do
131
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
132
-
133
- assert_raises Fog::Cache::CacheNotFound do
134
- Fog::Cache.load(Fog::SubFogTestModel, @service)
135
- end
136
- end
137
-
138
- it "Fog cache ignores bad cache data - empty file, from disk" do
139
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
140
- id = SecureRandom.hex
141
- a = Fog::SubFogTestModel.new(id: id, service: @service)
142
- a.cache.dump
143
-
144
- # input bad data
145
- path_dir = File.expand_path(Fog::Cache.namespace(Fog::SubFogTestModel, @service))
146
- path = File.join(path_dir, "foo.yml")
147
- data = ""
148
- File.open(path, "w") { |f|
149
- f.write(data)
150
- }
151
-
152
- assert_equal 1, Fog::Cache.load(Fog::SubFogTestModel, @service).size
153
- end
154
-
155
- it "can be dumped and reloaded back in" do
156
-
157
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
158
-
159
- id = SecureRandom.hex
160
- a = Fog::SubFogTestModel.new(id: id, service: @service)
161
-
162
- assert_equal File.exist?(Fog::Cache.namespace(Fog::SubFogTestModel, @service)), false
163
- a.cache.dump
164
- assert_equal File.exist?(Fog::Cache.namespace(Fog::SubFogTestModel, @service)), true
165
-
166
- instances = Fog::Cache.load(Fog::SubFogTestModel, @service)
167
-
168
- assert_equal instances.first.id, a.id
169
- assert_equal instances.first.class, a.class
170
- end
171
-
172
- it "dumping two models that have a duplicate identity" do
173
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
174
-
175
- id = SecureRandom.hex
176
-
177
- # security groups on aws for eg can have the same identity group name 'default'.
178
- # there are no restrictions on `identity` fog attributes to be uniq.
179
- a = Fog::SubFogTestModel.new(id: id, service: @service, bar: "bar")
180
- b = Fog::SubFogTestModel.new(id: id, service: @service, foo: "foo")
181
-
182
- a.cache.dump
183
- b.cache.dump
184
-
185
- instances = Fog::Cache.load(Fog::SubFogTestModel, @service)
186
-
187
- assert_equal instances.size, 2
188
- end
189
-
190
- it "dumping two models that have a duplicate identity twice" do
191
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
192
-
193
- id = SecureRandom.hex
194
-
195
- # security groups on aws for eg can have the same identity group name 'default'.
196
- # there are no restrictions on `identity` fog attributes to be uniq.
197
- a = Fog::SubFogTestModel.new(id: id, service: @service, bar: "bar")
198
- b = Fog::SubFogTestModel.new(id: id, service: @service, foo: "foo")
199
-
200
- a.cache.dump
201
- b.cache.dump
202
-
203
- # and then again, w/out expiring cache
204
- a.cache.dump
205
- b.cache.dump
206
-
207
- instances = Fog::Cache.load(Fog::SubFogTestModel, @service)
208
-
209
- # unique-ify based on the attributes...
210
- assert_equal instances.size, 2
211
- end
212
-
213
- it "dumps model with collection attributes and reloads them" do
214
- Fog::Cache.expire_cache!(Fog::SubFogTestModel, @service)
215
-
216
- c = Fog::SubFogTestCollection.new(service: @service, spec_attribute: 42)
217
-
218
- id = SecureRandom.hex
219
- a = Fog::SubFogTestModel.new(id: id, service: @service, collection: c)
220
-
221
- a.cache.dump
222
-
223
- instances = Fog::Cache.load(Fog::SubFogTestModel, @service)
224
- assert_equal instances.first.id, id
225
- assert_equal instances.first.collection.spec_attribute, 42
226
- end
227
- end
@@ -1,24 +0,0 @@
1
- require "spec_helper"
2
- require "securerandom"
3
-
4
- class FogTestModelForCollection < Fog::Model
5
- identity :id
6
- end
7
-
8
- class FogTestCollection < Fog::Collection
9
- model FogTestModelForCollection
10
-
11
- def all
12
- self
13
- end
14
- end
15
-
16
- describe Fog::Collection do
17
- describe "array delegation" do
18
- it "delegates methods with keywords to Array" do
19
- c = FogTestCollection.new
20
- c << FogTestModelForCollection.new(id: SecureRandom.hex)
21
- assert_equal c.sample(1, random: Random)[0], c[0]
22
- end
23
- end
24
- end
@@ -1,69 +0,0 @@
1
- require "spec_helper"
2
- require "securerandom"
3
-
4
- class FogTestModel < Fog::Model
5
- identity :id
6
- attribute :value
7
-
8
- def create
9
- self.identity = SecureRandom.hex
10
- self
11
- end
12
-
13
- def update
14
- self.value = 42
15
- self
16
- end
17
- end
18
-
19
- describe Fog::Model do
20
- describe "#==" do
21
- it "is not equal if one is not a Fog::Model" do
22
- a = FogTestModel.new
23
- b = 2
24
- refute_equal a, b
25
- refute_equal b, a
26
- end
27
-
28
- it "is equal if it is the same object" do
29
- a = b = FogTestModel.new
30
- assert_equal a, b
31
- end
32
-
33
- it "is equal if it has the same non-nil identity and the same class" do
34
- id = SecureRandom.hex
35
- assert_equal FogTestModel.new(id: id), FogTestModel.new(id: id)
36
- end
37
-
38
- it "is not equal if both have nil identity, but are different objects" do
39
- refute_equal FogTestModel.new, FogTestModel.new
40
- end
41
-
42
- it "is not equal if it has a different identity" do
43
- refute_equal FogTestModel.new(id: SecureRandom.hex),
44
- FogTestModel.new(id: SecureRandom.hex)
45
- end
46
- end
47
-
48
- describe "#save" do
49
- describe "on a non persisted object" do
50
- it "creates a new resource" do
51
- a = FogTestModel.new
52
- a.stub(:persisted?, false) do
53
- a.save
54
- refute_nil(a.identity)
55
- end
56
- end
57
- end
58
-
59
- describe "on a persisted object" do
60
- it "updates resource" do
61
- a = FogTestModel.new
62
- a.stub(:persisted?, true) do
63
- a.save
64
- assert_equal(a.value, 42)
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,38 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Fog::StringifyKeys" do
4
- describe ".stringify" do
5
- describe "when key is a Symbol" do
6
- it "replaces key with String" do
7
- input = { key: "value" }
8
- output = Fog::StringifyKeys.stringify(input)
9
- assert(output.key?("key"))
10
- end
11
- end
12
-
13
- describe "when key is a String" do
14
- it "keeps key as String" do
15
- input = { "key" => "value" }
16
- output = Fog::StringifyKeys.stringify(input)
17
- assert(output.key?("key"))
18
- end
19
- end
20
-
21
- describe "when Hash is empty" do
22
- it "returns empty Hash" do
23
- assert_equal({}, Fog::StringifyKeys.stringify({}))
24
- end
25
- end
26
-
27
- describe "when keys are deeply nested" do
28
- it "updates only top level key" do
29
- input = { key1: { key2: { key3: nil }}}
30
-
31
- output = Fog::StringifyKeys.stringify(input)
32
-
33
- expected = { "key1" => { key2: { key3: nil }}}
34
- assert_equal(expected, output)
35
- end
36
- end
37
- end
38
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "Fog::WhitelistKeys" do
4
- describe ".whitelist" do
5
- describe "when other keys are present" do
6
- it "returns Hash with only allowed keys" do
7
- input = { name: "name", type: "type", size: 80 }
8
- valid_keys = %w(name size)
9
-
10
- output = Fog::WhitelistKeys.whitelist(input, valid_keys)
11
-
12
- expected = { "name" => "name", "size" => 80 }
13
- assert_equal(expected, output)
14
- end
15
- end
16
-
17
- describe "when key is a Symbol" do
18
- it "returns a String" do
19
- input = { name: "name" }
20
- valid_keys = %w(name)
21
-
22
- output = Fog::WhitelistKeys.whitelist(input, valid_keys)
23
-
24
- expected = { "name" => "name" }
25
- assert(expected, output)
26
- end
27
- end
28
-
29
- describe "when Hash is empty" do
30
- it "returns empty Hash" do
31
- output = Fog::WhitelistKeys.whitelist({}, [])
32
- assert_equal({}, output)
33
- end
34
- end
35
- end
36
- end
@@ -1,88 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe "credentials" do
4
- before do
5
- @old_home = ENV["HOME"]
6
- @old_rc = ENV["FOG_RC"]
7
- @old_credential = ENV["FOG_CREDENTIAL"]
8
- @old_credentials = Fog.credentials
9
- Fog.instance_variable_set("@credential_path", nil) # kill memoization
10
- Fog.instance_variable_set("@credential", nil) # kill memoization
11
- end
12
-
13
- after do
14
- ENV["HOME"] = @old_home
15
- ENV["FOG_RC"] = @old_rc
16
- ENV["FOG_CREDENTIAL"] = @old_credential
17
- Fog.credentials = @old_credentials
18
- end
19
-
20
- describe "credential" do
21
- it "returns :default for default credentials" do
22
- assert_equal :default, Fog.credential
23
- end
24
-
25
- it "returns the to_sym of the assigned value" do
26
- Fog.credential = "foo"
27
- assert_equal :foo, Fog.credential
28
- end
29
-
30
- it "can set credentials throught the FOG_CREDENTIAL env va" do
31
- ENV["FOG_CREDENTIAL"] = "bar"
32
- assert_equal :bar, Fog.credential
33
- end
34
- end
35
-
36
- describe "credentials_path" do
37
- it "has FOG_RC takes precedence over HOME" do
38
- ENV["HOME"] = "/home/path"
39
- ENV["FOG_RC"] = "/rc/path"
40
-
41
- assert_equal "/rc/path", Fog.credentials_path
42
- end
43
-
44
- it "properly expands paths" do
45
- ENV["FOG_RC"] = "/expanded/subdirectory/../path"
46
- assert_equal "/expanded/path", Fog.credentials_path
47
- end
48
-
49
- it "falls back to home path if FOG_RC not set" do
50
- ENV.delete("FOG_RC")
51
- assert_equal File.join(ENV["HOME"], ".fog"), Fog.credentials_path
52
- end
53
-
54
- it "ignores home path if it does not exist" do
55
- ENV.delete("FOG_RC")
56
- ENV["HOME"] = "/no/such/path"
57
- assert_nil Fog.credentials_path
58
- end
59
-
60
- it "File.expand_path raises because of non-absolute path" do
61
- ENV.delete("FOG_RC")
62
- ENV["HOME"] = "."
63
-
64
- if RUBY_PLATFORM == "java"
65
- Fog::Logger.warning("Stubbing out non-absolute path credentials test due to JRuby bug: https://github.com/jruby/jruby/issues/1163")
66
- else
67
- assert_nil Fog.credentials_path
68
- end
69
- end
70
-
71
- it "returns nil when neither FOG_RC or HOME are set" do
72
- ENV.delete("HOME")
73
- ENV.delete("FOG_RC")
74
- assert_nil Fog.credentials_path
75
- end
76
- end
77
-
78
- describe "symbolize_credential?" do
79
- it "returns false if the value is :headers" do
80
- refute Fog.symbolize_credential?(:headers)
81
- end
82
-
83
- it "returns true if the value is not :headers" do
84
- assert Fog.symbolize_credential?(:foo)
85
- assert Fog.symbolize_credential?(:liberate_me_ex_inheris)
86
- end
87
- end
88
- end
@@ -1,36 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Fog::CurrentMachine do
4
- before do
5
- @was_mocking = Fog.mock?
6
- Fog.mock!
7
-
8
- @old_excon_defaults_mock = Excon.defaults[:mock]
9
- Excon.defaults[:mock] = true
10
- end
11
-
12
- after do
13
- Fog.unmock! unless @was_mocking
14
-
15
- Fog::CurrentMachine.ip_address = nil
16
- Excon.stubs.clear
17
- Excon.defaults[:mock] = @old_excon_defaults_mock
18
- end
19
-
20
- describe "ip_address" do
21
- it "should be thread safe" do
22
-
23
- (1..10).map do
24
- Thread.new do
25
- Excon.stub({ method: :get, path: "/" }, { body: "" })
26
- Fog::CurrentMachine.ip_address
27
- end
28
- end.each(&:join)
29
- end
30
-
31
- it "should remove trailing endline characters" do
32
- Excon.stub({ method: :get, path: "/" }, { body: "192.168.0.1\n" })
33
- assert_equal "192.168.0.1", Fog::CurrentMachine.ip_address
34
- end
35
- end
36
- end
@@ -1,18 +0,0 @@
1
- class FakeService < Fog::Service
2
- class Real
3
- def initialize(_options)
4
- end
5
- end
6
-
7
- class Mock
8
- def initialize(_options)
9
- end
10
- end
11
-
12
- model_path File.join(File.dirname(__FILE__), "models")
13
- model :model
14
- collection :collection
15
-
16
- request_path File.join(File.dirname(__FILE__), "requests")
17
- request :request
18
- end
@@ -1,5 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "model")
2
-
3
- class Collection < Fog::Collection
4
- model Model
5
- end
@@ -1,2 +0,0 @@
1
- class Model < Fog::Model
2
- end
@@ -1,11 +0,0 @@
1
- class FakeService < Fog::Service
2
- class Real
3
- def request
4
- end
5
- end
6
-
7
- class Mock
8
- def request
9
- end
10
- end
11
- end