cfoundry 1.0.0 → 1.1.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/cfoundry.rb CHANGED
@@ -1,2 +1,5 @@
1
1
  require "cfoundry/version"
2
+ require "active_model"
2
3
  require "cfoundry/client"
4
+
5
+ I18n.load_path += Dir["config/locales/*.yml"]
@@ -15,6 +15,7 @@ require "cfoundry/v2/domain"
15
15
  require "cfoundry/v2/route"
16
16
  require "cfoundry/v2/stack"
17
17
  require "cfoundry/v2/quota_definition"
18
+ require "cfoundry/v2/app_event"
18
19
 
19
20
  require "cfoundry/v2/base"
20
21
  require "cfoundry/v2/client"
@@ -31,6 +31,7 @@ module CFoundry::V2
31
31
  attribute :debug, :string, :default => nil
32
32
  to_many :service_bindings
33
33
  to_many :routes
34
+ to_many :app_events
34
35
 
35
36
  scoped_to_space
36
37
 
@@ -46,6 +47,9 @@ module CFoundry::V2
46
47
 
47
48
  private :environment_json
48
49
 
50
+ alias :events :app_events
51
+ alias :events= :app_events=
52
+
49
53
  def instances
50
54
  @client.base.instances(@guid).collect do |i, m|
51
55
  Instance.new(self, i.to_s, @client, m)
@@ -99,36 +103,6 @@ module CFoundry::V2
99
103
  end
100
104
  alias :urls= :uris=
101
105
 
102
- def create_routes(*uris)
103
- uris.each do |uri|
104
- host, domain_name = uri.split(".", 2)
105
-
106
- domain =
107
- @client.current_space.domains.find { |d|
108
- d.name == domain_name
109
- }
110
-
111
- unless domain
112
- raise CFoundry::Error, "Invalid domain '#{domain_name}'"
113
- end
114
-
115
- route = @client.routes.find { |r|
116
- r.host == host && r.domain == domain
117
- }
118
-
119
- unless route
120
- route = @client.route
121
- route.host = host
122
- route.domain = domain
123
- route.space = space
124
- route.create!
125
- end
126
-
127
- add_route(route)
128
- end
129
- end
130
- alias :create_route :create_routes
131
-
132
106
  def uri
133
107
  if uris = @cache[:uris]
134
108
  return uris.first
@@ -0,0 +1,12 @@
1
+ require "cfoundry/v2/model"
2
+
3
+ module CFoundry::V2
4
+ class AppEvent < Model
5
+ to_one :app
6
+
7
+ attribute :instance_guid, :string
8
+ attribute :instance_index, :integer
9
+ attribute :exit_status, :integer
10
+ attribute :exit_description, :string, :default => ""
11
+ end
12
+ end
@@ -1,10 +1,10 @@
1
1
  require "multi_json"
2
-
3
2
  require "cfoundry/v2/model_magic"
4
3
 
5
-
6
4
  module CFoundry::V2
7
5
  class Model
6
+ include ActiveModel::Validations
7
+
8
8
  @@objects = {}
9
9
 
10
10
  extend ModelMagic
@@ -64,6 +64,22 @@ module CFoundry::V2
64
64
  @changes = {}
65
65
  end
66
66
 
67
+ def create
68
+ create!
69
+ true
70
+ rescue CFoundry::APIError => e
71
+ if e.instance_of? CFoundry::APIError
72
+ errors.add(:base, :cc_client)
73
+ else
74
+ errors.add(attribute_for_error(e), e.message)
75
+ end
76
+ false
77
+ end
78
+
79
+ def attribute_for_error(error)
80
+ :base
81
+ end
82
+
67
83
  # this does a bit of extra processing to allow for
68
84
  # `delete!' followed by `create!'
69
85
  def create!
@@ -76,8 +92,8 @@ module CFoundry::V2
76
92
  if v.is_a?(Hash) && v.key?(:metadata)
77
93
  # skip; there's a _guid attribute already
78
94
  elsif v.is_a?(Array) && !v.empty? && v.all? { |x|
79
- x.is_a?(Hash) && x.key?(:metadata)
80
- }
95
+ x.is_a?(Hash) && x.key?(:metadata)
96
+ }
81
97
  singular = k.to_s.sub(/s$/, "")
82
98
 
83
99
  payload[:"#{singular}_guids"] = v.collect do |x|
@@ -118,10 +134,21 @@ module CFoundry::V2
118
134
  true
119
135
  end
120
136
 
137
+ def delete
138
+ delete!
139
+ rescue CFoundry::APIError => e
140
+ if e.instance_of? CFoundry::APIError
141
+ errors.add(:base, :cc_client)
142
+ else
143
+ errors.add(attribute_for_error(e), e.message)
144
+ end
145
+ false
146
+ end
147
+
121
148
  def delete!(options = {})
122
149
  @client.base.delete("v2", plural_object_name, guid, :params => options)
123
150
 
124
- @guid = nil
151
+ @deleted = true
125
152
 
126
153
  @diff.clear
127
154
 
@@ -132,6 +159,14 @@ module CFoundry::V2
132
159
  true
133
160
  end
134
161
 
162
+ def to_key
163
+ persisted? ? [@guid] : nil
164
+ end
165
+
166
+ def persisted?
167
+ @guid && !@deleted
168
+ end
169
+
135
170
  def exists?
136
171
  invalidate!
137
172
  manifest
@@ -147,6 +182,7 @@ module CFoundry::V2
147
182
  def eql?(other)
148
183
  other.is_a?(self.class) && @guid == other.guid
149
184
  end
185
+
150
186
  alias :== :eql?
151
187
 
152
188
  def hash
@@ -3,6 +3,9 @@ require "cfoundry/v2/model"
3
3
  module CFoundry::V2
4
4
  class Route < Model
5
5
  attribute :host, :string
6
+ validates_format_of :host, :with => /\A[a-z]+([a-z0-9\-]*[a-z0-9]+)?\Z/i
7
+ validates_length_of :host, :maximum => 63
8
+ validates_presence_of :domain
6
9
  to_one :domain
7
10
  to_one :space
8
11
 
@@ -11,5 +14,11 @@ module CFoundry::V2
11
14
  def name
12
15
  "#{host}.#{domain.name}"
13
16
  end
17
+
18
+ private
19
+
20
+ def attribute_for_error(error)
21
+ error.is_a?(CFoundry::RouteHostTaken) ? :host : :base
22
+ end
14
23
  end
15
24
  end
@@ -2,11 +2,13 @@ module CFoundry
2
2
  module Validator
3
3
  class << self
4
4
  def value_matches?(val, type)
5
+ return true if val.nil?
6
+
5
7
  case type
6
8
  when Class
7
9
  val.is_a?(type)
8
10
  when Regexp
9
- val.is_a?(String) && val =~ type
11
+ val.is_a?(String) && !!(val =~ type)
10
12
  when :url
11
13
  value_matches?(val, URI::regexp(%w(http https)))
12
14
  when :https_url
@@ -1,4 +1,4 @@
1
1
  module CFoundry # :nodoc:
2
2
  # CFoundry library version number.
3
- VERSION = "1.0.0".freeze
3
+ VERSION = "1.1.0.rc1".freeze
4
4
  end
@@ -0,0 +1,78 @@
1
+ require "spec_helper"
2
+
3
+ describe CFoundry::V2::AppEvent do
4
+ let(:client) { fake_client }
5
+
6
+ let(:app) { fake :app }
7
+
8
+ subject { described_class.new("app-event-1", client) }
9
+
10
+ it "has an app" do
11
+ subject.app = app
12
+ expect(subject.app).to eq(app)
13
+ end
14
+
15
+ describe "#instance_guid" do
16
+ it "has an instance guid" do
17
+ subject.instance_guid = "foo"
18
+ expect(subject.instance_guid).to eq("foo")
19
+ end
20
+
21
+ context "when an invalid value is assigned" do
22
+ it "raises a Mismatch exception" do
23
+ expect {
24
+ subject.instance_guid = 123
25
+ }.to raise_error(CFoundry::Mismatch)
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "#instance_index" do
31
+ it "has an instance index" do
32
+ subject.instance_index = 123
33
+ expect(subject.instance_index).to eq(123)
34
+ end
35
+
36
+ context "when an invalid value is assigned" do
37
+ it "raises a Mismatch exception" do
38
+ expect {
39
+ subject.instance_index = "wrong"
40
+ }.to raise_error(CFoundry::Mismatch)
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "#exit_status" do
46
+ it "has an instance index" do
47
+ subject.exit_status = 123
48
+ expect(subject.exit_status).to eq(123)
49
+ end
50
+
51
+ context "when an invalid value is assigned" do
52
+ it "raises a Mismatch exception" do
53
+ expect {
54
+ subject.exit_status = "wrong"
55
+ }.to raise_error(CFoundry::Mismatch)
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "#exit_description" do
61
+ it "defaults to an empty string" do
62
+ expect(subject.fake.exit_description).to eq("")
63
+ end
64
+
65
+ it "has an instance guid" do
66
+ subject.exit_description = "foo"
67
+ expect(subject.exit_description).to eq("foo")
68
+ end
69
+
70
+ context "when an invalid value is assigned" do
71
+ it "raises a Mismatch exception" do
72
+ expect {
73
+ subject.exit_description = 123
74
+ }.to raise_error(CFoundry::Mismatch)
75
+ end
76
+ end
77
+ end
78
+ end
@@ -3,6 +3,25 @@ require "spec_helper"
3
3
  describe CFoundry::V2::App do
4
4
  let(:client) { fake_client }
5
5
 
6
+ subject { described_class.new("app-1", client) }
7
+
8
+ describe "#events" do
9
+ let(:events) { [fake(:app_event)] }
10
+
11
+ it "has events" do
12
+ subject.events = events
13
+ expect(subject.events).to eq(events)
14
+ end
15
+
16
+ context "when an invalid value is assigned" do
17
+ it "raises a Mismatch exception" do
18
+ expect {
19
+ subject.events = [fake(:organization)]
20
+ }.to raise_error(CFoundry::Mismatch)
21
+ end
22
+ end
23
+ end
24
+
6
25
  describe "environment" do
7
26
  let(:app) { fake :app, :env => { "FOO" => "1" } }
8
27
 
@@ -7,11 +7,58 @@ describe CFoundry::V2::Model do
7
7
  let(:klass) {
8
8
  fake_model do
9
9
  attribute :foo, :string, :read => :x, :write => [:y, :z]
10
+
11
+ def attribute_for_error(e)
12
+ e.error_code == 1 ? :foo : :base
13
+ end
10
14
  end
11
15
  }
12
16
 
13
17
  subject { klass.new(guid, client, manifest) }
14
18
 
19
+ describe "create" do
20
+ it "uses #create!" do
21
+ mock(subject).create!
22
+ subject.create
23
+ end
24
+
25
+ context "without errors" do
26
+ it "returns true" do
27
+ mock(subject).create!
28
+ subject.create.should == true
29
+ end
30
+ end
31
+
32
+ context "with errors" do
33
+ before do
34
+ stub(subject.class).model_name { ActiveModel::Name.new(subject, nil, "abstract_model") }
35
+ stub(subject).create! { raise CFoundry::APIError.new("HELP") }
36
+ end
37
+
38
+ it "does not raise an exception" do
39
+ expect { subject.create }.to_not raise_error
40
+ end
41
+
42
+ it "returns false" do
43
+ subject.create.should == false
44
+ end
45
+
46
+ context "without model-specific errors" do
47
+ it "adds generic base error " do
48
+ subject.create
49
+ subject.errors.full_messages.first.should =~ /cloud controller reported an error/i
50
+ end
51
+ end
52
+
53
+ context "with model-specific errors" do
54
+ it "does not set the generic error on base" do
55
+ subject.create
56
+ subject.errors.size.should == 1
57
+ end
58
+ end
59
+ end
60
+ end
61
+
15
62
  describe "#create!" do
16
63
  before do
17
64
  stub(client.base).post {
@@ -68,6 +115,49 @@ describe CFoundry::V2::Model do
68
115
  end
69
116
  end
70
117
 
118
+ describe "delete" do
119
+ it "uses #delete!" do
120
+ mock(subject).delete! { true }
121
+ subject.delete
122
+ end
123
+
124
+ context "without errors" do
125
+ it "returns true" do
126
+ mock(subject).delete! { true }
127
+ subject.delete.should == true
128
+ end
129
+ end
130
+
131
+ context "with errors" do
132
+ before do
133
+ stub(subject.class).model_name { ActiveModel::Name.new(subject, nil, "abstract_model") }
134
+ stub(subject).delete! { raise CFoundry::APIError.new("HELP") }
135
+ end
136
+
137
+ it "does not raise an exception" do
138
+ expect { subject.delete }.to_not raise_error
139
+ end
140
+
141
+ it "returns false" do
142
+ subject.delete.should == false
143
+ end
144
+
145
+ context "without model-specific errors" do
146
+ it "adds generic base error " do
147
+ subject.delete
148
+ subject.errors.full_messages.first.should =~ /cloud controller reported an error/i
149
+ end
150
+ end
151
+
152
+ context "with model-specific errors" do
153
+ it "does not set the generic error on base" do
154
+ subject.delete
155
+ subject.errors.size.should == 1
156
+ end
157
+ end
158
+ end
159
+ end
160
+
71
161
  describe "#delete!" do
72
162
  before { stub(client.base).delete }
73
163
 
@@ -87,12 +177,6 @@ describe CFoundry::V2::Model do
87
177
  end
88
178
  end
89
179
 
90
- it "clears its guid" do
91
- subject.guid.should be_present
92
- subject.delete!
93
- subject.guid.should_not be_present
94
- end
95
-
96
180
  it "clears its manifest metadata" do
97
181
  subject.manifest.should have_key(:metadata)
98
182
  subject.delete!
@@ -113,6 +197,48 @@ describe CFoundry::V2::Model do
113
197
  ex.message.should_not =~ /\?/
114
198
  end
115
199
  end
200
+ end
201
+
202
+ describe "#to_key" do
203
+ context "when persisted" do
204
+ it "returns an enumerable containing the guid" do
205
+ subject.to_key.should respond_to(:each)
206
+ subject.to_key.first.should == guid
207
+ end
208
+ end
209
+
210
+ context "when not persisted" do
211
+ let(:guid) { nil }
116
212
 
213
+ it "returns nil" do
214
+ subject.to_key.should be_nil
215
+ end
216
+ end
217
+ end
218
+
219
+ describe "#persisted?" do
220
+ context "on a new object" do
221
+ let(:guid) { nil }
222
+ it "returns false" do
223
+ subject.should_not be_persisted
224
+ end
225
+ end
226
+
227
+ context "on an object with a guid" do
228
+ it "returns false" do
229
+ subject.should be_persisted
230
+ end
231
+ end
232
+
233
+ context "on an object that has been deleted" do
234
+ before do
235
+ stub(client.base).delete
236
+ subject.delete
237
+ end
238
+
239
+ it "returns false" do
240
+ subject.should_not be_persisted
241
+ end
242
+ end
117
243
  end
118
244
  end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module CFoundry::V2
4
+ describe Route do
5
+ subject { Route.new(nil, nil) }
6
+
7
+ describe "validations" do
8
+ it { should validate_presence_of(:domain) }
9
+
10
+ # http://tools.ietf.org/html/rfc1035
11
+ it "only allows host names according to RFC1035" do
12
+ message = "can only include a-z, 0-9 and -"
13
+
14
+ subject.should allow_value("a", "starts-with-letter", "includes-9-digits", "ends-with-letter",
15
+ "ends-with-digit-9", "can--have--consecutive---dashes", "allows-UPPERCASE-chars").for(:host)
16
+
17
+ ["-must-start-with-letter", "9must-start-with-letter", "must-not-end-with-dash-", "must-not-include-punctuation-chars-@\#$%^&*()",
18
+ "must-not-include-special-chars-ä", "must.not.include.dots"].each do |bad_value|
19
+ subject.should_not allow_value(bad_value).for(:host).with_message(message)
20
+ end
21
+
22
+ subject.should ensure_length_of(:host).is_at_most(63)
23
+ end
24
+ end
25
+
26
+ describe "errors" do
27
+ before do
28
+ stub(subject).create! { raise CFoundry::RouteHostTaken.new("the host is taken", 210003) }
29
+ end
30
+
31
+ it "populates errors on host" do
32
+ subject.create
33
+ subject.errors[:host].first.should =~ /the host is taken/i
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ describe CFoundry::Validator do
4
+ subject { described_class }
5
+
6
+ describe 'value_matches?' do
7
+ it 'returns true on nil values' do
8
+ subject.value_matches?(nil, :something).should be_true
9
+ end
10
+
11
+ context 'with a type of Class' do
12
+ it 'returns true when value is of type class' do
13
+ subject.value_matches?(1, Integer).should be_true
14
+ end
15
+ end
16
+
17
+ context 'with a Regex' do
18
+ it 'returns true when the regex matches' do
19
+ subject.value_matches?('value', /lue/).should == true
20
+ end
21
+ end
22
+
23
+ context 'with type of url' do
24
+ it 'requires http or https urls' do
25
+ subject.value_matches?('http:whatever', :url).should be_true
26
+ subject.value_matches?('https:whatever', :url).should be_true
27
+ subject.value_matches?('htt_no:whatever', :url).should be_false
28
+ end
29
+ end
30
+
31
+ context 'with type of https_url' do
32
+ it 'requires http or https urls' do
33
+ subject.value_matches?('https:whatever', :https_url).should be_true
34
+ subject.value_matches?('http:whatever', :https_url).should be_false
35
+ end
36
+ end
37
+
38
+ context 'with type boolean' do
39
+ it 'returns true on presence of true or false' do
40
+ subject.value_matches?(true, :boolean).should be_true
41
+ subject.value_matches?(false, :boolean).should be_true
42
+ subject.value_matches?('no boolean', :boolean).should be_false
43
+ end
44
+ end
45
+
46
+ context 'with an Array' do
47
+ it 'returns true when all elements are of same type' do
48
+ subject.value_matches?(['https:whatever'], [String]).should be_true
49
+ subject.value_matches?(['https:whatever'], [Integer]).should be_false
50
+ end
51
+ end
52
+
53
+ context 'with a hash' do
54
+ it 'returns true when specified types match' do
55
+ subject.value_matches?({:name => "thing"}, {:name => String}).should be_true
56
+ subject.value_matches?({:name => "thing", :unspecified => 1}, {:name => String}).should be_true
57
+ subject.value_matches?({:name => 1}, {:name => String}).should be_false
58
+ end
59
+ end
60
+
61
+ it 'returns true when type is nil' do
62
+ subject.value_matches?('some value', nil).should be_true
63
+ end
64
+
65
+ context 'with a symbol' do
66
+ it 'returns true when the value is of specified type' do
67
+ subject.value_matches?('some value', :string).should be_true
68
+ subject.value_matches?('some value', :integer).should be_false
69
+ end
70
+ end
71
+ end
72
+
73
+ describe 'validate_type' do
74
+ it 'passes validation with a nil value' do
75
+ expect {
76
+ subject.validate_type(nil, :whatever)
77
+ }.to_not raise_error
78
+ end
79
+
80
+ it 'passes validation when the value matches' do
81
+ expect {
82
+ subject.validate_type('string', :string)
83
+ }.to_not raise_error
84
+ end
85
+
86
+ it 'raises a validation error when value does not match' do
87
+ expect {
88
+ subject.validate_type('string', :integer)
89
+ }.to raise_error(CFoundry::Mismatch)
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,16 @@
1
+ {
2
+ "metadata": {
3
+ "guid": "route-id-1",
4
+ "url": "/v2/routes/route-id-1",
5
+ "created_at": "2013-05-16 20:03:48 +0000",
6
+ "updated_at": null
7
+ },
8
+ "entity": {
9
+ "host": "route-1",
10
+ "domain_guid": "domain-id-1",
11
+ "space_guid": "space-id-1",
12
+ "apps_url": "/v2/routes/route-id-1/apps",
13
+ "domain_url": "/v2/domains/domain-id-1",
14
+ "space_url": "/v2/spaces/space-id-1"
15
+ }
16
+ }
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,7 @@ require "timecop"
8
8
  require "active_support"
9
9
  require "active_support/core_ext"
10
10
  require "cc_api_stub"
11
+ require "shoulda/matchers/integrations/rspec" # requiring all of shoulda matchers makes test unit run
11
12
 
12
13
  Dir[File.expand_path('../{support,fakes}/**/*.rb', __FILE__)].each do |file|
13
14
  require file
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cfoundry
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.1.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Cloud Foundry Team
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-06 00:00:00.000000000 Z
13
+ date: 2013-05-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: multipart-post
@@ -76,6 +76,22 @@ dependencies:
76
76
  - - ~>
77
77
  - !ruby/object:Gem::Version
78
78
  version: 1.3.10
79
+ - !ruby/object:Gem::Dependency
80
+ name: activemodel
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ version: 3.2.13
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ version: 3.2.13
79
95
  - !ruby/object:Gem::Dependency
80
96
  name: rake
81
97
  requirement: !ruby/object:Gem::Requirement
@@ -189,13 +205,13 @@ dependencies:
189
205
  - !ruby/object:Gem::Version
190
206
  version: 1.7.7
191
207
  - !ruby/object:Gem::Dependency
192
- name: activesupport
208
+ name: shoulda-matchers
193
209
  requirement: !ruby/object:Gem::Requirement
194
210
  none: false
195
211
  requirements:
196
212
  - - ~>
197
213
  - !ruby/object:Gem::Version
198
- version: 3.2.12
214
+ version: 1.5.6
199
215
  type: :development
200
216
  prerelease: false
201
217
  version_requirements: !ruby/object:Gem::Requirement
@@ -203,7 +219,7 @@ dependencies:
203
219
  requirements:
204
220
  - - ~>
205
221
  - !ruby/object:Gem::Version
206
- version: 3.2.12
222
+ version: 1.5.6
207
223
  description:
208
224
  email:
209
225
  - vcap-dev@googlegroups.com
@@ -240,6 +256,7 @@ files:
240
256
  - lib/cfoundry/uaaclient.rb
241
257
  - lib/cfoundry/upload_helpers.rb
242
258
  - lib/cfoundry/v2/app.rb
259
+ - lib/cfoundry/v2/app_event.rb
243
260
  - lib/cfoundry/v2/base.rb
244
261
  - lib/cfoundry/v2/client.rb
245
262
  - lib/cfoundry/v2/domain.rb
@@ -284,6 +301,7 @@ files:
284
301
  - spec/cfoundry/trace_helpers_spec.rb
285
302
  - spec/cfoundry/uaaclient_spec.rb
286
303
  - spec/cfoundry/upload_helpers_spec.rb
304
+ - spec/cfoundry/v2/app_event_spec.rb
287
305
  - spec/cfoundry/v2/app_spec.rb
288
306
  - spec/cfoundry/v2/base_spec.rb
289
307
  - spec/cfoundry/v2/client_spec.rb
@@ -292,7 +310,9 @@ files:
292
310
  - spec/cfoundry/v2/model_spec.rb
293
311
  - spec/cfoundry/v2/organization_spec.rb
294
312
  - spec/cfoundry/v2/quota_definition_spec.rb
313
+ - spec/cfoundry/v2/route_spec.rb
295
314
  - spec/cfoundry/v2/space_spec.rb
315
+ - spec/cfoundry/validator_spec.rb
296
316
  - spec/fakes/app_fake.rb
297
317
  - spec/fakes/domain_fake.rb
298
318
  - spec/fakes/framework_fake.rb
@@ -336,6 +356,7 @@ files:
336
356
  - spec/fixtures/fake_cc_organization_search.json
337
357
  - spec/fixtures/fake_cc_organization_summary.json
338
358
  - spec/fixtures/fake_cc_organization_users.json
359
+ - spec/fixtures/fake_cc_route.json
339
360
  - spec/fixtures/fake_cc_runtimes.json
340
361
  - spec/fixtures/fake_cc_service_binding.json
341
362
  - spec/fixtures/fake_cc_service_bindings.json
@@ -369,16 +390,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
369
390
  version: '0'
370
391
  segments:
371
392
  - 0
372
- hash: -4102208981056569022
393
+ hash: -1889885215026340519
373
394
  required_rubygems_version: !ruby/object:Gem::Requirement
374
395
  none: false
375
396
  requirements:
376
- - - ! '>='
397
+ - - ! '>'
377
398
  - !ruby/object:Gem::Version
378
- version: '0'
399
+ version: 1.3.1
379
400
  requirements: []
380
401
  rubyforge_project: cfoundry
381
- rubygems_version: 1.8.24
402
+ rubygems_version: 1.8.25
382
403
  signing_key:
383
404
  specification_version: 3
384
405
  summary: High-level library for working with the Cloud Foundry API.
@@ -404,6 +425,7 @@ test_files:
404
425
  - spec/cfoundry/trace_helpers_spec.rb
405
426
  - spec/cfoundry/uaaclient_spec.rb
406
427
  - spec/cfoundry/upload_helpers_spec.rb
428
+ - spec/cfoundry/v2/app_event_spec.rb
407
429
  - spec/cfoundry/v2/app_spec.rb
408
430
  - spec/cfoundry/v2/base_spec.rb
409
431
  - spec/cfoundry/v2/client_spec.rb
@@ -412,7 +434,9 @@ test_files:
412
434
  - spec/cfoundry/v2/model_spec.rb
413
435
  - spec/cfoundry/v2/organization_spec.rb
414
436
  - spec/cfoundry/v2/quota_definition_spec.rb
437
+ - spec/cfoundry/v2/route_spec.rb
415
438
  - spec/cfoundry/v2/space_spec.rb
439
+ - spec/cfoundry/validator_spec.rb
416
440
  - spec/fakes/app_fake.rb
417
441
  - spec/fakes/domain_fake.rb
418
442
  - spec/fakes/framework_fake.rb
@@ -456,6 +480,7 @@ test_files:
456
480
  - spec/fixtures/fake_cc_organization_search.json
457
481
  - spec/fixtures/fake_cc_organization_summary.json
458
482
  - spec/fixtures/fake_cc_organization_users.json
483
+ - spec/fixtures/fake_cc_route.json
459
484
  - spec/fixtures/fake_cc_runtimes.json
460
485
  - spec/fixtures/fake_cc_service_binding.json
461
486
  - spec/fixtures/fake_cc_service_bindings.json