cfoundry 0.6.1.rc4 → 0.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,90 +0,0 @@
1
- require "multi_json"
2
- require "tmpdir"
3
-
4
- require "cfoundry/baseclient"
5
- require "cfoundry/uaaclient"
6
-
7
- require "cfoundry/errors"
8
-
9
- module CFoundry::V1
10
- class Base < CFoundry::BaseClient
11
- include BaseClientMethods
12
-
13
- def system_services
14
- get("services", "v1", "offerings", :content => :json, :accept => :json)
15
- end
16
-
17
- def system_runtimes
18
- get("info", "runtimes", :accept => :json)
19
- end
20
-
21
- # Users
22
- def create_user(payload)
23
- # no JSON response
24
- post("users", :content => :json, :payload => payload)
25
- end
26
-
27
- def create_token(payload, email)
28
- post("users", email, "tokens", :content => :json, :accept => :json, :payload => payload)
29
- end
30
-
31
- # Applications
32
- def instances(name)
33
- get("apps", name, "instances", :accept => :json)[:instances]
34
- end
35
-
36
- def crashes(name)
37
- get("apps", name, "crashes", :accept => :json)[:crashes]
38
- end
39
-
40
- def files(name, instance, *path)
41
- get("apps", name, "instances", instance, "files", *path)
42
- end
43
- alias :file :files
44
-
45
- def stats(name)
46
- get("apps", name, "stats", :accept => :json)
47
- end
48
-
49
- def resource_match(fingerprints)
50
- post("resources", :content => :json, :accept => :json, :payload => fingerprints)
51
- end
52
-
53
- def upload_app(name, zipfile = nil, resources = [])
54
- use_or_create_empty_zipfile(zipfile) do |zipfile|
55
- payload = {
56
- :_method => "put",
57
- :resources => MultiJson.dump(resources),
58
- :application =>
59
- UploadIO.new(
60
- if zipfile.is_a? File
61
- zipfile
62
- elsif zipfile.is_a? String
63
- File.new(zipfile, "rb")
64
- end,
65
- "application/zip")
66
- }
67
-
68
- post("apps", name, "application", :payload => payload)
69
- end
70
- rescue EOFError
71
- retry
72
- end
73
-
74
- private
75
-
76
- def use_or_create_empty_zipfile(zipfile)
77
- Dir.mktmpdir do |working_dir|
78
- zip_path = "#{working_dir}/empty_zip.zip"
79
-
80
- zipfile ||= Dir.mktmpdir do |zip_dir|
81
- File.new("#{zip_dir}/.__empty_file", "wb").close
82
- CFoundry::Zip.pack(zip_dir, zip_path)
83
- zip_path
84
- end
85
-
86
- yield zipfile
87
- end
88
- end
89
- end
90
- end
@@ -1,193 +0,0 @@
1
- require File.expand_path("../../concerns/login_helpers", __FILE__)
2
-
3
- module CFoundry::V1
4
- # The primary API entrypoint. Wraps a BaseClient to provide nicer return
5
- # values. Initialize with the target and, optionally, an auth token. These
6
- # are the only two internal states.
7
- class Client
8
- include ClientMethods, CFoundry::LoginHelpers
9
-
10
- attr_reader :base
11
-
12
- # Create a new Client for interfacing with the given target.
13
- #
14
- # A token may also be provided to skip the login step.
15
- def initialize(target = "http://api.cloudfoundry.com", token = nil)
16
- @base = Base.new(target, token)
17
- end
18
-
19
- def version
20
- 1
21
- end
22
-
23
- # The current target URL of the client.
24
- def target
25
- @base.target
26
- end
27
-
28
- # Current authentication token.
29
- def token
30
- @base.token
31
- end
32
-
33
- # Set the authentication token.
34
- def token=(token)
35
- @base.token = token
36
- end
37
-
38
- # Current proxy user. Usually nil.
39
- def proxy
40
- @base.proxy
41
- end
42
-
43
- # Set the proxy user for the client. Must be authorized as an
44
- # administrator for this to have any effect.
45
- def proxy=(email)
46
- @base.proxy = email
47
- end
48
-
49
- # Is the client tracing API requests?
50
- def trace
51
- @base.trace
52
- end
53
-
54
- # Set the tracing flag; if true, API requests and responses will be
55
- # printed out.
56
- def trace=(bool)
57
- @base.trace = bool
58
- end
59
-
60
- # The current log. See +log=+.
61
- def log
62
- @base.log
63
- end
64
-
65
- # Set the logging mode. Mode can be one of:
66
- #
67
- # [+String+] Name of a file to log the last 10 requests to.
68
- # [+Array+] Array to append with log data (a Hash).
69
- # [+IO+] An IO object to write to.
70
- # [+false+] No logging.
71
- def log=(mode)
72
- @base.log = mode
73
- end
74
-
75
- # The currently authenticated user.
76
- def current_user
77
- if user = info[:user]
78
- user(user)
79
- end
80
- end
81
-
82
- def current_space
83
- nil
84
- end
85
-
86
- def current_organization
87
- nil
88
- end
89
-
90
-
91
- # Retrieve target metadata.
92
- def info
93
- @base.info
94
- end
95
-
96
- # Retrieve available services.
97
- def services(options = {})
98
- services = []
99
-
100
- @base.system_services.each do |type, vendors|
101
- vendors.each do |vendor, providers|
102
- providers.each do |provider, properties|
103
- properties.each do |_, meta|
104
- meta[:supported_versions].each do |ver|
105
- state = meta[:version_aliases].find { |k, v| v == ver }
106
-
107
- services <<
108
- Service.new(vendor.to_s, ver.to_s, meta[:description],
109
- type.to_s, provider.to_s, state && state.first,
110
- generate_plans(meta))
111
- end
112
- end
113
- end
114
- end
115
- end
116
-
117
- services
118
- end
119
-
120
- def generate_plans(meta)
121
- names = meta[:plans]
122
- descriptions = meta[:plan_descriptions]
123
- default_name = meta[:default_plan]
124
- names.map { |name|
125
- description = descriptions[name.to_sym] if descriptions
126
- is_default = name == default_name || names.length == 1
127
- ServicePlan.new(name, description, is_default)
128
- }
129
- end
130
-
131
- # Retrieve available runtimes.
132
- def runtimes(options = {})
133
- runtimes = []
134
-
135
- @base.system_runtimes.each do |name, meta|
136
- runtimes <<
137
- Runtime.new(name.to_s, meta[:version], meta[:debug_modes])
138
- end
139
-
140
- runtimes
141
- end
142
-
143
- def runtime(name)
144
- Runtime.new(name)
145
- end
146
-
147
- def runtime_by_name(name)
148
- runtimes.find { |r| r.name == name }
149
- end
150
-
151
- # Retrieve available frameworks.
152
- def frameworks(options = {})
153
- fs = info[:frameworks]
154
- return unless fs
155
-
156
- frameworks = []
157
- fs.each do |name, meta|
158
- runtimes = meta[:runtimes].collect do |r|
159
- Runtime.new(r[:name], r[:description])
160
- end
161
-
162
- frameworks <<
163
- Framework.new(name.to_s, nil, runtimes, meta[:detection])
164
- end
165
-
166
- frameworks
167
- end
168
-
169
- def framework(name)
170
- Framework.new(name)
171
- end
172
-
173
- def framework_by_name(name)
174
- frameworks.find { |f| f.name == name }
175
- end
176
-
177
- # Create a user on the target and return a User object representing them.
178
- def register(email, password)
179
- @base.create_user(:email => email, :password => password)
180
- user(email)
181
- end
182
-
183
- # Clear client token. No requests are made for this.
184
- def logout
185
- @base.token = nil
186
- end
187
-
188
- # Is an authentication token set on the client?
189
- def logged_in?
190
- !!@base.token
191
- end
192
- end
193
- end
@@ -1,21 +0,0 @@
1
- module CFoundry::V1
2
- class Framework
3
- attr_accessor :name, :description, :runtimes, :detection
4
-
5
- def initialize(name, description = nil, runtimes = [], detection = nil)
6
- @name = name
7
- @description = description
8
- @runtimes = runtimes
9
- @detection = detection
10
- end
11
-
12
- def eql?(other)
13
- other.is_a?(self.class) && other.name == @name
14
- end
15
- alias :== :eql?
16
-
17
- def apps
18
- [] # not supported by v1
19
- end
20
- end
21
- end
@@ -1,178 +0,0 @@
1
- require "multi_json"
2
-
3
- require "cfoundry/v1/model_magic"
4
-
5
-
6
- module CFoundry::V1
7
- class Model
8
- @@objects = {}
9
-
10
- extend ModelMagic
11
-
12
- class << self
13
- attr_writer :object_name, :base_object_name
14
-
15
- def object_name
16
- @object_name ||=
17
- name.split("::").last.gsub(
18
- /([a-z])([A-Z])/,
19
- '\1_\2').downcase.to_sym
20
- end
21
-
22
- def base_object_name
23
- @base_object_name ||= object_name
24
- end
25
-
26
- def plural_object_name
27
- "#{object_name}s"
28
- end
29
-
30
- def plural_base_object_name
31
- "#{base_object_name}s"
32
- end
33
-
34
- def objects
35
- @@objects
36
- end
37
-
38
- def inherited(klass)
39
- @@objects[klass.object_name] = klass
40
- super
41
- end
42
- end
43
-
44
- attr_accessor :guid, :changes
45
-
46
- def initialize(guid, client, manifest = nil)
47
- @guid = guid
48
- @client = client
49
- @manifest = manifest
50
- @changes = {}
51
- end
52
-
53
- def manifest
54
- @manifest ||= @client.base.send(base_object_name, @guid)
55
- end
56
-
57
- def changed?
58
- !@changes.empty?
59
- end
60
-
61
- def inspect
62
- "\#<#{self.class.name} '#@guid'>"
63
- end
64
-
65
- def object_name
66
- @object_name ||= self.class.object_name
67
- end
68
-
69
- def base_object_name
70
- @base_object_name ||= self.class.base_object_name
71
- end
72
-
73
- def guid_name
74
- self.class.guid_name
75
- end
76
-
77
- def invalidate!
78
- @manifest = nil
79
- @changes = {}
80
- end
81
-
82
- def create!
83
- @manifest = @client.base.send(:"create_#{base_object_name}", write_manifest)
84
-
85
- @guid = read_manifest[guid_name]
86
-
87
- true
88
- end
89
-
90
- def update!
91
- @client.base.send(:"update_#{base_object_name}", @guid, write_manifest)
92
-
93
- true
94
- end
95
-
96
- def delete!
97
- @client.base.send(:"delete_#{base_object_name}", @guid)
98
-
99
- @guid = nil
100
-
101
- true
102
- end
103
-
104
- def exists?
105
- invalidate!
106
- manifest
107
- true
108
- rescue CFoundry::NotFound
109
- false
110
- end
111
-
112
- def read_manifest
113
- read = {}
114
-
115
- self.class.read_locations.each do |name, where|
116
- found, val = find_path(manifest, where)
117
- read[name] = val if found
118
- end
119
-
120
- self.class.write_locations.each do |name, where|
121
- next if self.class.read_only_attributes.include? name
122
-
123
- found, val = find_path(manifest, where)
124
- read[name] = val if found
125
- end
126
-
127
- read[guid_name] = @guid
128
-
129
- read
130
- end
131
-
132
- def find_path(hash, path)
133
- return [false, nil] unless hash
134
-
135
- first, *rest = path
136
- return [false, nil] unless hash.key?(first)
137
-
138
- here = hash[first]
139
-
140
- if rest.empty?
141
- [true, here]
142
- else
143
- find_path(here, rest)
144
- end
145
- end
146
-
147
- def write_manifest(body = read_manifest, onto = {})
148
- onto[guid_name] = @guid if guid_name
149
-
150
- self.class.write_locations.each do |name, where|
151
- next if self.class.read_only_attributes.include? name
152
- put(body[name], onto, where) if body.key?(name)
153
- end
154
-
155
- onto
156
- end
157
-
158
- def put(what, where, path)
159
- if path.size == 1
160
- where[path.last] = what
161
- elsif name = path.first
162
- where[name] ||= {}
163
- put(what, where[name], path[1..-1])
164
- end
165
-
166
- nil
167
- end
168
-
169
- def eql?(other)
170
- other.is_a?(self.class) && @guid == other.guid
171
- end
172
- alias :== :eql?
173
-
174
- def hash
175
- @guid.hash
176
- end
177
- end
178
- end