cfoundry 0.3.54 → 0.3.55
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.
- data/lib/cfoundry/v2/app.rb +46 -1
- data/lib/cfoundry/v2/client.rb +2 -2
- data/lib/cfoundry/v2/model.rb +112 -20
- data/lib/cfoundry/v2/space.rb +2 -0
- data/lib/cfoundry/version.rb +1 -1
- metadata +32 -30
data/lib/cfoundry/v2/app.rb
CHANGED
@@ -27,7 +27,7 @@ module CFoundry::V2
|
|
27
27
|
attribute :instances, :integer, :default => 1
|
28
28
|
attribute :file_descriptors, :integer, :default => 256
|
29
29
|
attribute :disk_quota, :integer, :default => 256
|
30
|
-
attribute :state, :
|
30
|
+
attribute :state, :string, :default => "STOPPED"
|
31
31
|
attribute :command, :string, :default => nil
|
32
32
|
attribute :console, :boolean, :default => false
|
33
33
|
to_many :service_bindings
|
@@ -35,6 +35,43 @@ module CFoundry::V2
|
|
35
35
|
|
36
36
|
scoped_to_space
|
37
37
|
|
38
|
+
has_summary :urls => proc { |x| self.cache[:uris] = x },
|
39
|
+
:running_instances => proc { |x|
|
40
|
+
self.cache[:running_instances] = x
|
41
|
+
},
|
42
|
+
|
43
|
+
# TODO: remove these when cc consistently returns nested hashes
|
44
|
+
:framework_guid => proc { |x|
|
45
|
+
if f = self.cache[:framework]
|
46
|
+
f.guid = x
|
47
|
+
else
|
48
|
+
self.framework = @client.framework(x, true)
|
49
|
+
end
|
50
|
+
},
|
51
|
+
:framework_name => proc { |x|
|
52
|
+
if f = self.cache[:framework]
|
53
|
+
f.name = x
|
54
|
+
else
|
55
|
+
self.framework = @client.framework(nil, true)
|
56
|
+
self.framework.name = x
|
57
|
+
end
|
58
|
+
},
|
59
|
+
:runtime_guid => proc { |x|
|
60
|
+
if f = self.cache[:runtime]
|
61
|
+
f.guid = x
|
62
|
+
else
|
63
|
+
self.runtime = @client.runtime(x, true)
|
64
|
+
end
|
65
|
+
},
|
66
|
+
:runtime_name => proc { |x|
|
67
|
+
if f = self.cache[:runtime]
|
68
|
+
f.name = x
|
69
|
+
else
|
70
|
+
self.runtime = @client.runtime(nil, true)
|
71
|
+
self.runtime.name = x
|
72
|
+
end
|
73
|
+
}
|
74
|
+
|
38
75
|
alias :total_instances :instances
|
39
76
|
alias :total_instances= :instances=
|
40
77
|
|
@@ -81,6 +118,8 @@ module CFoundry::V2
|
|
81
118
|
end
|
82
119
|
|
83
120
|
def uris
|
121
|
+
return @cache[:uris] if @cache[:uris]
|
122
|
+
|
84
123
|
routes.collect do |r|
|
85
124
|
"#{r.host}.#{r.domain.name}"
|
86
125
|
end
|
@@ -121,6 +160,10 @@ module CFoundry::V2
|
|
121
160
|
alias :create_route :create_routes
|
122
161
|
|
123
162
|
def uri
|
163
|
+
if uris = @cache[:uris]
|
164
|
+
return uris.first
|
165
|
+
end
|
166
|
+
|
124
167
|
if route = routes.first
|
125
168
|
"#{route.host}.#{route.domain.name}"
|
126
169
|
end
|
@@ -175,6 +218,8 @@ module CFoundry::V2
|
|
175
218
|
end
|
176
219
|
|
177
220
|
def running_instances
|
221
|
+
return @cache[:running_instances] if @cache[:running_instances]
|
222
|
+
|
178
223
|
running = 0
|
179
224
|
|
180
225
|
instances.each do |i|
|
data/lib/cfoundry/v2/client.rb
CHANGED
@@ -166,9 +166,9 @@ module CFoundry::V2
|
|
166
166
|
has_name = klass.method_defined? :name
|
167
167
|
|
168
168
|
define_method(singular) do |*args|
|
169
|
-
guid, _ = args
|
169
|
+
guid, partial, _ = args
|
170
170
|
|
171
|
-
x = klass.new(guid, self)
|
171
|
+
x = klass.new(guid, self, nil, partial)
|
172
172
|
|
173
173
|
# when creating an object, automatically set the org/space
|
174
174
|
unless guid
|
data/lib/cfoundry/v2/model.rb
CHANGED
@@ -41,7 +41,21 @@ module CFoundry::V2
|
|
41
41
|
@defaults ||= {}
|
42
42
|
end
|
43
43
|
|
44
|
+
def attributes
|
45
|
+
@attributes ||= {}
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_one_relations
|
49
|
+
@to_one_relations ||= {}
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_many_relations
|
53
|
+
@to_many_relations ||= {}
|
54
|
+
end
|
55
|
+
|
44
56
|
def attribute(name, type, opts = {})
|
57
|
+
attributes[name] = opts
|
58
|
+
|
45
59
|
default = opts[:default]
|
46
60
|
|
47
61
|
if has_default = opts.key?(:default)
|
@@ -49,7 +63,9 @@ module CFoundry::V2
|
|
49
63
|
end
|
50
64
|
|
51
65
|
define_method(name) {
|
52
|
-
|
66
|
+
return @cache[name] if @cache.key?(name)
|
67
|
+
|
68
|
+
@cache[name] = manifest[:entity][name] || default
|
53
69
|
}
|
54
70
|
|
55
71
|
define_method(:"#{name}=") { |val|
|
@@ -57,6 +73,8 @@ module CFoundry::V2
|
|
57
73
|
Model.validate_type(val, type)
|
58
74
|
end
|
59
75
|
|
76
|
+
@cache[name] = val
|
77
|
+
|
60
78
|
@manifest ||= {}
|
61
79
|
@manifest[:entity] ||= {}
|
62
80
|
@manifest[:entity][name] = val
|
@@ -73,6 +91,8 @@ module CFoundry::V2
|
|
73
91
|
end
|
74
92
|
|
75
93
|
def to_one(name, opts = {})
|
94
|
+
to_one_relations[name] = opts
|
95
|
+
|
76
96
|
obj = opts[:as] || name
|
77
97
|
kls = obj.to_s.capitalize.gsub(/(.)_(.)/) do
|
78
98
|
$1 + $2.upcase
|
@@ -85,13 +105,16 @@ module CFoundry::V2
|
|
85
105
|
end
|
86
106
|
|
87
107
|
define_method(name) {
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
@
|
92
|
-
|
93
|
-
|
94
|
-
|
108
|
+
return @cache[name] if @cache.key?(name)
|
109
|
+
|
110
|
+
@cache[name] =
|
111
|
+
if @manifest && @manifest[:entity].key?(name)
|
112
|
+
@client.send(:"make_#{obj}", @manifest[:entity][name])
|
113
|
+
elsif url = send("#{name}_url")
|
114
|
+
@client.send(:"#{obj}_from", url, opts[:depth] || 1)
|
115
|
+
else
|
116
|
+
default
|
117
|
+
end
|
95
118
|
}
|
96
119
|
|
97
120
|
define_method(:"#{name}_url") {
|
@@ -103,6 +126,8 @@ module CFoundry::V2
|
|
103
126
|
Model.validate_type(x, CFoundry::V2.const_get(kls))
|
104
127
|
end
|
105
128
|
|
129
|
+
@cache[name] = x
|
130
|
+
|
106
131
|
@manifest ||= {}
|
107
132
|
@manifest[:entity] ||= {}
|
108
133
|
@manifest[:entity][:"#{name}_guid"] =
|
@@ -111,6 +136,8 @@ module CFoundry::V2
|
|
111
136
|
end
|
112
137
|
|
113
138
|
def to_many(plural, opts = {})
|
139
|
+
to_many_relations[plural] = opts
|
140
|
+
|
114
141
|
singular = plural.to_s.sub(/s$/, "").to_sym
|
115
142
|
|
116
143
|
object = opts[:as] || singular
|
@@ -121,6 +148,10 @@ module CFoundry::V2
|
|
121
148
|
end
|
122
149
|
|
123
150
|
define_method(plural) { |*args|
|
151
|
+
if cache = @cache[plural]
|
152
|
+
return cache
|
153
|
+
end
|
154
|
+
|
124
155
|
depth, query = args
|
125
156
|
|
126
157
|
if @manifest && @manifest[:entity].key?(plural) && !depth
|
@@ -132,15 +163,17 @@ module CFoundry::V2
|
|
132
163
|
objs = objs.select { |o| o[:entity][find_by] == find_val }
|
133
164
|
end
|
134
165
|
|
135
|
-
|
136
|
-
|
137
|
-
|
166
|
+
@cache[plural] =
|
167
|
+
objs.collect do |json|
|
168
|
+
@client.send(:"make_#{object}", json)
|
169
|
+
end
|
138
170
|
else
|
139
|
-
@
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
171
|
+
@cache[plural] =
|
172
|
+
@client.send(
|
173
|
+
:"#{plural_object}_from",
|
174
|
+
"/v2/#{object_name}s/#@guid/#{plural}",
|
175
|
+
depth || opts[:depth],
|
176
|
+
query)
|
144
177
|
end
|
145
178
|
}
|
146
179
|
|
@@ -149,9 +182,12 @@ module CFoundry::V2
|
|
149
182
|
}
|
150
183
|
|
151
184
|
define_method(:"add_#{singular}") { |x|
|
152
|
-
# TODO: reflect this change in the app manifest?
|
153
185
|
Model.validate_type(x, CFoundry::V2.const_get(kls))
|
154
186
|
|
187
|
+
if cache = @cache[plural]
|
188
|
+
cache << x unless cache.include?(x)
|
189
|
+
end
|
190
|
+
|
155
191
|
@client.base.request_path(
|
156
192
|
Net::HTTP::Put,
|
157
193
|
["v2", "#{object_name}s", @guid, plural, x.guid],
|
@@ -159,9 +195,12 @@ module CFoundry::V2
|
|
159
195
|
}
|
160
196
|
|
161
197
|
define_method(:"remove_#{singular}") { |x|
|
162
|
-
# TODO: reflect this change in the app manifest?
|
163
198
|
Model.validate_type(x, CFoundry::V2.const_get(kls))
|
164
199
|
|
200
|
+
if cache = @cache[plural]
|
201
|
+
cache.delete(x)
|
202
|
+
end
|
203
|
+
|
165
204
|
@client.base.request_path(
|
166
205
|
Net::HTTP::Delete,
|
167
206
|
["v2", "#{object_name}s", @guid, plural, x.guid],
|
@@ -171,20 +210,67 @@ module CFoundry::V2
|
|
171
210
|
define_method(:"#{plural}=") { |xs|
|
172
211
|
Model.validate_type(xs, [CFoundry::V2.const_get(kls)])
|
173
212
|
|
213
|
+
@cache[plural] = xs
|
214
|
+
|
174
215
|
@manifest ||= {}
|
175
216
|
@manifest[:entity] ||= {}
|
176
217
|
@manifest[:entity][:"#{singular}_guids"] =
|
177
218
|
@diff[:"#{singular}_guids"] = xs.collect(&:guid)
|
178
219
|
}
|
179
220
|
end
|
221
|
+
|
222
|
+
def has_summary(actions = {})
|
223
|
+
define_method(:summary) do
|
224
|
+
@client.base.request_path(
|
225
|
+
Net::HTTP::Get,
|
226
|
+
["v2", "#{object_name}s", @guid, "summary"],
|
227
|
+
:accept => :json)
|
228
|
+
end
|
229
|
+
|
230
|
+
define_method(:summarize!) do |*args|
|
231
|
+
body, _ = args
|
232
|
+
|
233
|
+
body ||= summary
|
234
|
+
|
235
|
+
body.each do |key, val|
|
236
|
+
if act = actions[key]
|
237
|
+
instance_exec(val, &act)
|
238
|
+
|
239
|
+
elsif self.class.attributes[key]
|
240
|
+
self.send(:"#{key}=", val)
|
241
|
+
|
242
|
+
elsif self.class.to_many_relations[key]
|
243
|
+
singular = key.to_s.sub(/s$/, "").to_sym
|
244
|
+
|
245
|
+
vals = val.collect { |sub|
|
246
|
+
obj = @client.send(singular, sub[:guid], true)
|
247
|
+
obj.summarize! sub
|
248
|
+
obj
|
249
|
+
}
|
250
|
+
|
251
|
+
self.send(:"#{key}=", vals)
|
252
|
+
|
253
|
+
elsif self.class.to_one_relations[key]
|
254
|
+
obj = @client.send(key, val[:guid], true)
|
255
|
+
obj.summarize! val
|
256
|
+
|
257
|
+
self.send(:"#{key}=", obj)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
nil
|
262
|
+
end
|
263
|
+
end
|
180
264
|
end
|
181
265
|
|
182
|
-
|
266
|
+
attr_accessor :guid, :cache
|
183
267
|
|
184
|
-
def initialize(guid, client, manifest = nil)
|
268
|
+
def initialize(guid, client, manifest = nil, partial = false)
|
185
269
|
@guid = guid
|
186
270
|
@client = client
|
187
271
|
@manifest = manifest
|
272
|
+
@partial = partial
|
273
|
+
@cache = {}
|
188
274
|
@diff = {}
|
189
275
|
end
|
190
276
|
|
@@ -192,6 +278,10 @@ module CFoundry::V2
|
|
192
278
|
@manifest ||= @client.base.send(object_name, @guid)
|
193
279
|
end
|
194
280
|
|
281
|
+
def partial?
|
282
|
+
@partial
|
283
|
+
end
|
284
|
+
|
195
285
|
def inspect
|
196
286
|
"\#<#{self.class.name} '#@guid'>"
|
197
287
|
end
|
@@ -205,6 +295,8 @@ module CFoundry::V2
|
|
205
295
|
|
206
296
|
def invalidate!
|
207
297
|
@manifest = nil
|
298
|
+
@partial = false
|
299
|
+
@cache = {}
|
208
300
|
@diff = {}
|
209
301
|
end
|
210
302
|
|
data/lib/cfoundry/v2/space.rb
CHANGED
data/lib/cfoundry/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfoundry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 125
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 55
|
10
|
+
version: 0.3.55
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alex Suraci
|
@@ -15,7 +15,8 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-11-
|
18
|
+
date: 2012-11-10 00:00:00 -08:00
|
19
|
+
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: multipart-post
|
@@ -110,42 +111,43 @@ extra_rdoc_files: []
|
|
110
111
|
files:
|
111
112
|
- LICENSE
|
112
113
|
- Rakefile
|
113
|
-
- lib/cfoundry
|
114
|
-
- lib/cfoundry/chatty_hash.rb
|
114
|
+
- lib/cfoundry.rb
|
115
115
|
- lib/cfoundry/client.rb
|
116
|
+
- lib/cfoundry/version.rb
|
116
117
|
- lib/cfoundry/errors.rb
|
117
118
|
- lib/cfoundry/uaaclient.rb
|
118
|
-
- lib/cfoundry/
|
119
|
-
- lib/cfoundry/
|
120
|
-
- lib/cfoundry/v1/base.rb
|
121
|
-
- lib/cfoundry/v1/client.rb
|
122
|
-
- lib/cfoundry/v1/framework.rb
|
123
|
-
- lib/cfoundry/v1/runtime.rb
|
124
|
-
- lib/cfoundry/v1/service.rb
|
125
|
-
- lib/cfoundry/v1/service_instance.rb
|
126
|
-
- lib/cfoundry/v1/user.rb
|
127
|
-
- lib/cfoundry/v2/app.rb
|
128
|
-
- lib/cfoundry/v2/base.rb
|
119
|
+
- lib/cfoundry/v2/service_binding.rb
|
120
|
+
- lib/cfoundry/v2/service.rb
|
129
121
|
- lib/cfoundry/v2/client.rb
|
130
|
-
- lib/cfoundry/v2/domain.rb
|
131
|
-
- lib/cfoundry/v2/framework.rb
|
132
122
|
- lib/cfoundry/v2/model.rb
|
123
|
+
- lib/cfoundry/v2/user.rb
|
124
|
+
- lib/cfoundry/v2/framework.rb
|
125
|
+
- lib/cfoundry/v2/service_auth_token.rb
|
126
|
+
- lib/cfoundry/v2/space.rb
|
127
|
+
- lib/cfoundry/v2/app.rb
|
128
|
+
- lib/cfoundry/v2/service_plan.rb
|
129
|
+
- lib/cfoundry/v2/base.rb
|
133
130
|
- lib/cfoundry/v2/organization.rb
|
134
131
|
- lib/cfoundry/v2/route.rb
|
132
|
+
- lib/cfoundry/v2/domain.rb
|
135
133
|
- lib/cfoundry/v2/runtime.rb
|
136
|
-
- lib/cfoundry/v2/service.rb
|
137
|
-
- lib/cfoundry/v2/service_auth_token.rb
|
138
|
-
- lib/cfoundry/v2/service_binding.rb
|
139
134
|
- lib/cfoundry/v2/service_instance.rb
|
140
|
-
- lib/cfoundry/
|
141
|
-
- lib/cfoundry/
|
142
|
-
- lib/cfoundry/
|
143
|
-
- lib/cfoundry/
|
135
|
+
- lib/cfoundry/baseclient.rb
|
136
|
+
- lib/cfoundry/upload_helpers.rb
|
137
|
+
- lib/cfoundry/v1/service.rb
|
138
|
+
- lib/cfoundry/v1/client.rb
|
139
|
+
- lib/cfoundry/v1/user.rb
|
140
|
+
- lib/cfoundry/v1/framework.rb
|
141
|
+
- lib/cfoundry/v1/app.rb
|
142
|
+
- lib/cfoundry/v1/base.rb
|
143
|
+
- lib/cfoundry/v1/runtime.rb
|
144
|
+
- lib/cfoundry/v1/service_instance.rb
|
144
145
|
- lib/cfoundry/zip.rb
|
145
|
-
- lib/cfoundry.rb
|
146
|
-
- spec/client_spec.rb
|
146
|
+
- lib/cfoundry/chatty_hash.rb
|
147
147
|
- spec/helpers.rb
|
148
148
|
- spec/Rakefile
|
149
|
+
- spec/client_spec.rb
|
150
|
+
has_rdoc: true
|
149
151
|
homepage: http://cloudfoundry.com/
|
150
152
|
licenses: []
|
151
153
|
|
@@ -175,11 +177,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
177
|
requirements: []
|
176
178
|
|
177
179
|
rubyforge_project: cfoundry
|
178
|
-
rubygems_version: 1.
|
180
|
+
rubygems_version: 1.6.2
|
179
181
|
signing_key:
|
180
182
|
specification_version: 3
|
181
183
|
summary: High-level library for working with the Cloud Foundry API.
|
182
184
|
test_files:
|
183
|
-
- spec/client_spec.rb
|
184
185
|
- spec/helpers.rb
|
185
186
|
- spec/Rakefile
|
187
|
+
- spec/client_spec.rb
|