cloudwalk 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29ad7565050dda6c992efca2b3bda6ee86aa76f8
4
- data.tar.gz: f71cd609728f1f572207f94a08c8a15484b4304e
3
+ metadata.gz: 6a7426aa8b410bc7e519a77d25818fa6c688fa57
4
+ data.tar.gz: ad600f23ebb2665d339a0438b0ca7ba4e6afdd12
5
5
  SHA512:
6
- metadata.gz: e6d104b2386793c2c0085a086c70b21d40dabb83977ea10c6a21bfd20363bebdfc87700137e0735572ff8108c92d33d229702e8f5158d68c2dd55170a95ba824
7
- data.tar.gz: 446986bee2e1493b9994afc1b5e66fbd975410e6c7620dc8cf6af625f7299c3c6202560fd8739cd8baf25364bfdd436c72fe94453f2011c599e9980c4bbc8478
6
+ metadata.gz: 5395cee97c912694bd1105d164bfa36577d5fda4c4c369beb0b0c69f991c5e3865201e32d297400e62aa0d905b856bcd282d3efa36d3d272b0ac0cfdb789153d
7
+ data.tar.gz: 92fa1ea8a4f71b598fbb4fc481df5446507431f1fd373075faf0dba7c6c062a3a0e75c04fbab89c52e3255242dfeed40a298e92ad585b80003f7677c07989210
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -3,8 +3,13 @@ require "net/http"
3
3
  require "json"
4
4
  require "fileutils"
5
5
 
6
+ require_relative "cloudwalk/manager_exception"
7
+ require_relative "cloudwalk/manager_helper"
6
8
  require_relative "cloudwalk/config"
7
9
  require_relative "cloudwalk/cw_file_json"
8
- require_relative "cloudwalk/posxml_application"
9
- require_relative "cloudwalk/posxml_version"
10
- require_relative "cloudwalk/rake_task"
10
+ require_relative "cloudwalk/deploy"
11
+ require_relative "cloudwalk/posxml/posxml_application"
12
+ require_relative "cloudwalk/posxml/posxml_version"
13
+ require_relative "cloudwalk/posxml/rake_task"
14
+ require_relative "cloudwalk/ruby/ruby_application"
15
+ require_relative "cloudwalk/ruby/rake_task"
@@ -8,7 +8,7 @@ module Cloudwalk
8
8
 
9
9
  def self.host
10
10
  @host ||= `cloudwalk config host`.chomp
11
- raise ManagerException.new("Token not found, try 'cloudwalk login'") if @host.empty?
11
+ raise ManagerException.new("Host not found, try 'cloudwalk login'") if @host.empty?
12
12
  @host
13
13
  end
14
14
  end
@@ -21,6 +21,8 @@
21
21
 
22
22
  module Cloudwalk
23
23
  class CwFileJson
24
+ include Cloudwalk::ManagerHelper
25
+
24
26
  CW_FILE_LOCK_PATH = "./Cwfile.json.lock"
25
27
  CW_FILE_PATH = "./Cwfile.json"
26
28
 
@@ -105,83 +107,57 @@ module Cloudwalk
105
107
  end
106
108
 
107
109
  def self.lock_build
108
- all = Cloudwalk::PosxmlApplication.all
109
110
  config = []
110
- self.cwfile["apps"].each do |app_local|
111
- app_remote = all.find { |app_json| app_json["posxml_app"]["name"] == xml2posxml(app_local["name"]) }
112
- app_posxml = app_remote["posxml_app"]
113
- versions = Cloudwalk::PosxmlVersion.all(app_posxml["id"])
114
- version = versions.find { |json| json["app_version"]["number"] == app_local["version"] }
115
-
116
- if version && version = version["app_version"]
117
- version_detail = Cloudwalk::PosxmlVersion.get(app_posxml["id"], version["id"])
118
- config << build_application(app_posxml, version, version_detail["app_version"]["module_ids"])
111
+ if self.ruby?
112
+ if app = Cloudwalk::Ruby::RubyApplication.find(self.cwfile["name"])
113
+ config << build_application(:ruby, app)
119
114
  else
120
- # TODO Version not found, what to do?
115
+ # TODO App not found, what to do?
116
+ end
117
+ else
118
+ self.cwfile["apps"].each do |app_local|
119
+ app, version = Cloudwalk::Posxml::PosxmlVersion.find(app_local["name"], app_local["version"])
120
+ if app && version
121
+ detail = Cloudwalk::Posxml::PosxmlVersion.get(app["id"], version["id"])
122
+ config << build_application(:posxml, app, version, detail["module_ids"])
123
+ else
124
+ raise Cloudwalk::CwFileJsonException.new("App (#{app_local["name"]}) Version (#{app_local["version"]}) not found")
125
+ end
121
126
  end
122
127
  end
128
+
123
129
  self.lock = config
124
130
  end
125
131
 
126
132
  def self.build_module(mod)
127
- response = Cloudwalk::PosxmlVersion.get(mod["app_id"], mod["version_id"])
128
- module_version = response["app_version"]
129
- {
130
- "name" => Cloudwalk::PosxmlApplication.get_name(module_version["app_id"]),
131
- "version" => module_version["number"],
132
- "id" => module_version["app_id"],
133
- "version_id" => module_version["id"]
134
- }
135
- end
136
-
137
- def self.build_application(posxml_app, version_remote, modules_remote)
138
- {
139
- "name" => posxml_app["name"],
140
- "id" => posxml_app["id"],
141
- "modules" => modules_remote.collect {|mod| build_module(mod)},
142
- "version" => version_remote["number"],
143
- "version_id" => version_remote["id"]
144
- }
145
-
146
- #old = config.find {|app| app["id"] == posxml_app["id"]}
147
-
148
- #if old
149
- #config.delete(old)
150
- #config << new
151
- #else
152
- #config << new
153
- #end
133
+ if module_version = Cloudwalk::Posxml::PosxmlVersion.get(mod["app_id"], mod["version_id"])
134
+ {
135
+ "name" => Cloudwalk::Posxml::PosxmlApplication.get_name(module_version["app_id"]),
136
+ "version" => module_version["number"],
137
+ "id" => module_version["app_id"],
138
+ "version_id" => module_version["id"]
139
+ }
140
+ else
141
+ raise Cloudwalk::CwFileJsonException.new("App (#{mod['app_id']}) Module Version (#{mod['version_id']}) not found")
142
+ end
154
143
  end
155
144
 
156
- # TODO Check CRC
157
- def self.deploy(outs)
158
- outs.each do |path|
159
- posxml = path.split("/").last
160
- print "=> Deploying #{posxml}"
161
- app_lock = self.lock.find {|config| config["name"] == posxml }
162
-
163
- unless app_lock
164
- self.lock.each do |application|
165
- app_lock = application["modules"].find {|config| config["name"] == posxml }
166
- break if app_lock
167
- end
168
- end
169
-
170
- unless app_lock
171
- # TODO Improve!
172
- raise Exception.new("application or module #{path} not found in Manager, please create it")
173
- end
174
-
175
- app_cwfile = self.cwfile["apps"].find {|config| config["name"] == posxml2xml(posxml) }
176
-
177
- ret, response = Cloudwalk::PosxmlVersion.update(
178
- app_lock["id"], app_lock["version_id"], File.read(path), app_cwfile
179
- )
180
- if ret
181
- STDOUT.write("\r=> Success Deployed \n")
182
- else
183
- STDOUT.write("\r=> Error #{response.code}:#{response.body}\n")
184
- end
145
+ def self.build_application(type, app, version = nil, modules_remote = nil)
146
+ if type == :ruby
147
+ {
148
+ "name" => app["name"],
149
+ "id" => app["id"],
150
+ "modules" => [],
151
+ "version" => "1.0.0"
152
+ }
153
+ else
154
+ {
155
+ "name" => app["name"],
156
+ "id" => app["id"],
157
+ "modules" => modules_remote.collect {|mod| build_module(mod)},
158
+ "version" => version["number"],
159
+ "version_id" => version["id"]
160
+ }
185
161
  end
186
162
  end
187
163
 
@@ -193,32 +169,45 @@ module Cloudwalk
193
169
  File.exists? CW_FILE_LOCK_PATH
194
170
  end
195
171
 
196
- def self.posxml2xml(str)
197
- str.sub(".posxml", ".xml")
198
- end
199
-
200
- def self.xml2posxml(str)
201
- str.sub(".xml", ".posxml")
172
+ def self.ruby?
173
+ if self.cwfile
174
+ self.cwfile["runtime"] == "ruby"
175
+ end
202
176
  end
203
177
 
204
- # TODO future!
205
-
206
- def self.compare
207
- cwfile_list = []
208
- self.cwfile["apps"].each do |app|
209
- cwfile_list << [app["name"], app["version"]]
210
- app["modules"].each do |app_module|
211
- cwfile_list << [app_module[0], app_module[1]]
178
+ def self.cwfile_apps_and_versions
179
+ if self.ruby?
180
+ [self.cwfile["name"], self.cwfile["version"]]
181
+ else
182
+ self.cwfile["apps"].inject([]) do |array, app|
183
+ array << [app["name"], app["version"]]
184
+ app["modules"].each do |app_module|
185
+ array << [app_module[0], app_module[1]]
186
+ end
187
+ array
212
188
  end
213
189
  end
190
+ end
214
191
 
215
- lock_list = []
216
- self.lock.each do |app|
217
- lock_list << [posxml2xml(app["name"]), app["version"]]
218
- app["modules"].each do |app_module|
219
- lock_list << [posxml2xml(app_module["name"]), posxml2xml(app_module["version"])]
192
+ def self.lock_apps_and_versions
193
+ self.lock.inject([]) do |array, app|
194
+ if self.ruby?
195
+ array.concat([app["name"], app["version"]])
196
+ else
197
+ array << [posxml2xml(app["name"]), app["version"]]
198
+ app["modules"].each do |app_module|
199
+ array << [posxml2xml(app_module["name"]), posxml2xml(app_module["version"])]
200
+ end
201
+ array
220
202
  end
221
203
  end
204
+ end
205
+
206
+ # TODO future!
207
+
208
+ def self.compare
209
+ cwfile_list = self.cwfile_apps_and_versions
210
+ lock_list = self.lock_apps_and_versions
222
211
 
223
212
  cwdiff = cwfile_list - lock_list
224
213
  lockdiff = lock_list - cwfile_list
@@ -233,57 +222,6 @@ module Cloudwalk
233
222
  true
234
223
  end
235
224
  end
236
-
237
- def compare_modules(local_app, module_ids)
238
- local_module_app_ids = local_app["modules"].inject([]) do |mods, app|
239
- mods << app["id"]
240
- end
241
-
242
- module_app_ids = module_ids.inject([]) do |mods, app|
243
- mods << app["app_id"]
244
- end
245
-
246
- local_creation = local_module_app_ids - module_app_ids
247
- remote_creation = module_app_ids - local_module_app_ids
248
-
249
- if local_creation.nil?
250
- raise ApplicationConfigError.new("Application #{local_app["name"]}: Local modules are missing #{local_creation}")
251
- end
252
-
253
- if remote_creation.nil?
254
- raise ApplicationConfigError.new("Application #{local_app["name"]}: Remote modules are missing #{local_creation}")
255
- end
256
- end
257
-
258
- # curl -X GET "https://api-staging.cloudwalk.io/v1/apps/posxml?access_token=d79db7b1dc59c9c5a1f369478444625a0d1adef8"
259
- # curl -X GET "https://manager.cloudwalk.io/v1/apps/posxml/3082/versions?access_token=d79db7b1dc59c9c5a1f369478444625a0d1adef8"
260
- def update_apps(list, apps, config)
261
- all = Cloudwalk::PosxmlApplication.all
262
- list.each do |app, version|
263
- local_app = apps.find { |json| json["name"] == app }
264
-
265
- if app[-4..-1] == ".xml" # Check if is posxml application
266
- remote_app = all.find { |app_json| app_json["posxml_app"]["name"] == xml2posxml(app) }
267
-
268
- if remote_app
269
- remote_posxml_app = remote_app["posxml_app"]
270
- remote_versions = Cloudwalk::PosxmlVersion.all(remote_posxml_app["id"])
271
- remote_version_json = remote_versions.find { |json| json["app_version"]["number"] == version }
272
-
273
- if remote_version_json && (remote_version = remote_version_json["app_version"])
274
- remote_version_detail = Cloudwalk::PosxmlVersion.get(remote_posxml_app["id"], remote_version["id"])
275
- # TODO: Check if application exists locally
276
- build_application(local_app, config, remote_posxml_app, remote_version, remote_version_detail["app_version"]["module_ids"])
277
- else
278
- # TODO versions not found, what to do?
279
- end
280
- else
281
- # TODO app not found, what to do?
282
- end
283
- else
284
- # Ruby flow
285
- end
286
- end
287
- end
288
225
  end
289
226
  end
227
+
@@ -0,0 +1,4 @@
1
+ module Cloudwalk
2
+ class CwFileJsonException < StandardError
3
+ end
4
+ end
@@ -0,0 +1,73 @@
1
+ module Cloudwalk
2
+ class Deploy
3
+ include Cloudwalk::ManagerHelper
4
+
5
+ attr_accessor :cwfile, :lock
6
+
7
+ def initialize(cwfile, lock)
8
+ @cwfile = cwfile
9
+ @lock = lock
10
+ end
11
+
12
+ # TODO Check CRC
13
+ def posxml(outs)
14
+ outs.each do |path|
15
+ posxml = path.split("/").last
16
+ print "=> Deploying #{posxml}"
17
+ app_lock = self.lock.find {|config| config["name"] == posxml }
18
+
19
+ unless app_lock
20
+ self.lock.each do |application|
21
+ app_lock = application["modules"].find {|config| config["name"] == posxml }
22
+ break if app_lock
23
+ end
24
+ end
25
+
26
+ unless app_lock
27
+ # TODO Improve!
28
+ raise DeployException.new("application or module #{path} not found in Manager, please create it")
29
+ end
30
+
31
+ app_cwfile = self.cwfile["apps"].find {|config| config["name"] == posxml2xml(posxml) }
32
+
33
+ ret, response = Cloudwalk::Posxml::PosxmlVersion.update(
34
+ app_lock["id"], app_lock["version_id"], File.read(path), app_cwfile
35
+ )
36
+ if ret
37
+ STDOUT.write("\r=> Success Deployed \n")
38
+ else
39
+ STDOUT.write("\r=> Error #{response.code}:#{response.body}\n")
40
+ end
41
+ end
42
+ end
43
+
44
+ def name
45
+ self.cwfile["name"]
46
+ end
47
+
48
+ def ruby
49
+ zip = "out/#{self.name}.zip"
50
+ if File.exists? zip
51
+ print "=> Deploying #{self.name}"
52
+
53
+ app_lock = self.lock.find {|config| config["name"] == self.name }
54
+
55
+ unless app_lock
56
+ # TODO Improve!
57
+ raise DeployException.new("application #{self.name} not found at Manager, please create it")
58
+ end
59
+
60
+ ret, response = Cloudwalk::Ruby::RubyApplication.update(
61
+ app_lock["id"], File.read(zip), self.cwfile
62
+ )
63
+ if ret
64
+ STDOUT.write("\r=> Success Deployed \n")
65
+ else
66
+ STDOUT.write("\r=> Error #{response.code}:#{response.body}\n")
67
+ end
68
+ else
69
+ raise DeployException.new("application package #{zip} not found")
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,4 @@
1
+ module Cloudwalk
2
+ class DeployException < StandardError
3
+ end
4
+ end
@@ -0,0 +1,24 @@
1
+ module Cloudwalk
2
+ module ManagerHelper
3
+ def self.included(base)
4
+ base.extend(self)
5
+ end
6
+
7
+ def token
8
+ Cloudwalk::Config.token
9
+ end
10
+
11
+ def host
12
+ Cloudwalk::Config.host
13
+ end
14
+
15
+ def posxml2xml(str)
16
+ str.sub(".posxml", ".xml")
17
+ end
18
+
19
+ def xml2posxml(str)
20
+ str.sub(".xml", ".posxml")
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,40 @@
1
+ module Cloudwalk
2
+ module Posxml
3
+ class PosxmlApplication
4
+ include Cloudwalk::ManagerHelper
5
+
6
+ def self.all
7
+ if @apps
8
+ @apps
9
+ else
10
+ response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/posxml?access_token=#{self.token}&per_page=100")))
11
+ raise ManagerException.new(response["message"]) if response["message"]
12
+
13
+ total_pages = response["pagination"]["total_pages"].to_i
14
+ apps = response["posxmlapps"]
15
+ (total_pages - 1).times do |page|
16
+ url = "#{self.host}/v1/apps/posxml?access_token=#{self.token}&per_page=100&page=#{page+2}"
17
+ response = JSON.parse(Net::HTTP.get(URI(url)))
18
+ raise ManagerException.new(response["message"]) if response["message"]
19
+
20
+ apps.concat(response["posxmlapps"])
21
+ end
22
+ @apps = apps
23
+ end
24
+ end
25
+
26
+ def self.get(id)
27
+ url = "#{self.host}/v1/apps/posxml/#{id}?access_token=#{self.token}"
28
+ response = JSON.parse(Net::HTTP.get(URI(url)))
29
+ raise ManagerException.new(response["message"]) if response["message"]
30
+
31
+ response["posxml_app"]
32
+ end
33
+
34
+ def self.get_name(id)
35
+ get(id)["name"]
36
+ end
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,77 @@
1
+ module Cloudwalk
2
+ module Posxml
3
+ class PosxmlVersion
4
+ include Cloudwalk::ManagerHelper
5
+
6
+ def self.get_or_create(app, version)
7
+ response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/posxml/#{app_id}/versions?access_token=#{self.token}&per_page=100")))
8
+ raise ManagerException.new(response["message"]) if response["message"]
9
+
10
+ #TODO
11
+ #`curl -X GET "https://api-staging.cloudwalk.io/v1/apps/posxml/3082/versions?access_token=#{self.token}`
12
+ end
13
+
14
+ def self.all(app_id)
15
+ response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/posxml/#{app_id}/versions?access_token=#{self.token}&per_page=100")))
16
+ raise ManagerException.new(response["message"]) if response["message"]
17
+
18
+ total_pages = response["pagination"]["total_pages"].to_i
19
+ versions = response["appversions"]
20
+
21
+ (total_pages - 1).times do |page|
22
+ url = "#{self.host}/v1/apps/posxml/#{app_id}/versions?access_token=#{self.token}&per_page=100&page=#{page+2}"
23
+ response = JSON.parse(Net::HTTP.get(URI(url)))
24
+ raise ManagerException.new(response["message"]) if response["message"]
25
+
26
+ versions.concat(response["posxmlapps"])
27
+ end
28
+ versions
29
+ end
30
+
31
+ def self.get(app_id, id)
32
+ url = "#{self.host}/v1/apps/posxml/#{app_id}/versions/#{id}?access_token=#{token}"
33
+ response = JSON.parse(Net::HTTP.get(URI(url)))
34
+ if response["message"]
35
+ raise ManagerException.new(response["message"])
36
+ else
37
+ response["app_version"]
38
+ end
39
+ end
40
+
41
+
42
+ # NEW
43
+ def self.find(app_name, version_name)
44
+ applications = Cloudwalk::Posxml::PosxmlApplication.all
45
+ app_remote = applications.find { |app_json| app_json["posxml_app"]["name"] == xml2posxml(app_name) }
46
+ app_posxml = app_remote["posxml_app"]
47
+ versions = Cloudwalk::Posxml::PosxmlVersion.all(app_posxml["id"])
48
+ version = versions.find { |json| json["app_version"]["number"] == version_name }
49
+
50
+ [app_posxml, (version && version["app_version"])]
51
+ end
52
+
53
+ # NEW B4
54
+ def self.update(app_id, version_id, bytecode, app_parameters = nil)
55
+ url = "#{self.host}/v1/apps/posxml/#{app_id}/versions/#{version_id}?access_token=#{self.token}"
56
+ uri = URI(url)
57
+ form = {"bytecode" => Base64.strict_encode64(bytecode)}
58
+ response = nil
59
+
60
+ if app_parameters
61
+ form["authorizer_url"] = app_parameters["authorizer_url"]
62
+ form["description"] = app_parameters["description"]
63
+ form["pos_display_label"] = app_parameters["pos_display_label"]
64
+ form["displayable"] = app_parameters["pos_display_label"] != "X"
65
+ end
66
+
67
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
68
+ request = Net::HTTP::Put.new(uri)
69
+ request.set_form_data(form)
70
+ response = http.request(request)
71
+ end
72
+ [response.code.to_i == 200, response]
73
+ end
74
+ end
75
+ end
76
+ end
77
+
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'rake'
4
+ require 'rake/tasklib'
5
+ require 'fileutils'
6
+ require 'bundler/setup'
7
+
8
+ # Tasks:
9
+ # cloudwalk:build (Will build mruby or posxml application)
10
+ # cloddwalk:deploy (Send Posxml or Ruby application)
11
+ # cloddwalk:update (Update Cwfile.lock)
12
+ # cloudwalk:package - maybe not
13
+
14
+ module Cloudwalk
15
+ module Posxml
16
+ class RakeTask < ::Rake::TaskLib
17
+ include Cloudwalk::ManagerHelper
18
+ include ::Rake::DSL if defined?(::Rake::DSL)
19
+
20
+ attr_accessor :libs, :root_path, :main_out, :out_path, :outs
21
+
22
+ def initialize
23
+ yield self if block_given?
24
+
25
+ @libs ||= FileList['lib/*.xml']
26
+ @root_path ||= "./"
27
+ @out_path ||= File.join(root_path, "out", "shared")
28
+ @outs ||= @libs.pathmap("%{lib,#{@out_path}}p")
29
+
30
+ define
31
+ end
32
+
33
+ def platform_call(command)
34
+ if (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM)
35
+ sh("bash -c \"#{command}\"")
36
+ else
37
+ sh command
38
+ end
39
+ end
40
+
41
+ def define
42
+ namespace :cloudwalk do
43
+ desc "Compile posxml"
44
+ task :build do |t, args|
45
+ arguments = ARGV[1..-1]
46
+ if arguments && path = arguments.first
47
+ FileUtils.mkdir_p self.out_path
48
+ xml, out = self.libs.zip(self.outs).find { |file, out| file == path }
49
+
50
+ posxml = xml2posxml(out)
51
+ platform_call "cloudwalk compile -xml -o #{posxml} #{xml}"
52
+ puts "=> #{File.size(posxml)} "
53
+ else
54
+ FileUtils.rm_rf self.out_path
55
+ FileUtils.mkdir_p self.out_path
56
+
57
+ self.libs.zip(self.outs).each do |file, out|
58
+ posxml = xml2posxml(out)
59
+ platform_call "cloudwalk compile -xml -o #{posxml} #{file}"
60
+ puts "=> #{File.size(posxml)} "
61
+ end
62
+ end
63
+ end
64
+
65
+ desc "Deploy all compiled applications based in Cwfile.json"
66
+ task :deploy => :build do
67
+ if Cloudwalk::CwFileJson.setup
68
+ if path = ARGV[1..-1].first
69
+ xml, out = self.libs.zip(self.outs).find { |file, out| file == path }
70
+ posxmls = [xml2posxml(out)]
71
+ else
72
+ posxmls = self.outs.collect { |xml| xml2posxml(xml) }
73
+ end
74
+ Cloudwalk::Deploy.new(Cloudwalk::CwFileJson.cwfile,
75
+ Cloudwalk::CwFileJson.lock).posxml(posxmls)
76
+ end
77
+ end
78
+
79
+ desc "Update CwFile.json.lock"
80
+ task :update do
81
+ Cloudwalk::CwFileJson.delete_lock!
82
+ Cloudwalk::CwFileJson.setup(true)
83
+ Cloudwalk::CwFileJson.persist_lock!
84
+ end
85
+ end
86
+ task :default => "cloudwalk:build"
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'rake'
4
+ require 'rake/tasklib'
5
+ require 'fileutils'
6
+ require 'bundler/setup'
7
+
8
+ # Tasks:
9
+ # cloudwalk:build (Will build mruby or posxml application)
10
+ # cloddwalk:deploy (Send Posxml or Ruby application)
11
+ # cloddwalk:update (Update Cwfile.lock)
12
+ # cloudwalk:package - maybe not
13
+
14
+ module Cloudwalk
15
+ module Ruby
16
+ class RakeTask < ::Rake::TaskLib
17
+ include Cloudwalk::ManagerHelper
18
+ include ::Rake::DSL if defined?(::Rake::DSL)
19
+
20
+ def initialize
21
+ define
22
+ end
23
+
24
+ def define
25
+ namespace :cloudwalk do
26
+ desc "Compile ruby application"
27
+ task :build do
28
+ Rake::Task[:build].invoke
29
+ end
30
+
31
+ desc "Package Build"
32
+ task :package do
33
+ Rake::Task[:package].invoke
34
+ end
35
+
36
+ desc "Deploy all compiled applications based in Cwfile.json"
37
+ task :deploy => "cloudwalk:package" do
38
+ if Cloudwalk::CwFileJson.setup
39
+ Cloudwalk::Deploy.new(Cloudwalk::CwFileJson.cwfile,
40
+ Cloudwalk::CwFileJson.lock).ruby
41
+ end
42
+ end
43
+
44
+ desc "Update CwFile.json.lock"
45
+ task :update do
46
+ Cloudwalk::CwFileJson.delete_lock!
47
+ Cloudwalk::CwFileJson.setup(true)
48
+ Cloudwalk::CwFileJson.persist_lock!
49
+ end
50
+ end
51
+
52
+ task :default => "cloudwalk:build"
53
+ end
54
+ end
55
+ end
56
+ end
57
+
@@ -0,0 +1,71 @@
1
+ module Cloudwalk
2
+ module Ruby
3
+ class RubyApplication
4
+ include Cloudwalk::ManagerHelper
5
+
6
+ # NEW
7
+ def self.find(name)
8
+ self.all.find do |app|
9
+ app["name"] == name
10
+ end
11
+ end
12
+
13
+ def self.all
14
+ if @apps
15
+ @apps
16
+ else
17
+ response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/ruby?access_token=#{self.token}&per_page=100")))
18
+ raise ManagerException.new(response["message"]) if response["message"]
19
+
20
+ total_pages = response["pagination"]["total_pages"].to_i
21
+ @apps = response["rubyapps"].collect {|r| r["ruby_app"] }
22
+ (total_pages - 1).times do |page|
23
+ url = "#{self.host}/v1/apps/ruby?access_token=#{self.token}&per_page=100&page=#{page+2}"
24
+ response = JSON.parse(Net::HTTP.get(URI(url)))
25
+ raise ManagerException.new(response["message"]) if response["message"]
26
+
27
+ @apps.concat(response["ruby_app"])
28
+ end
29
+ @apps
30
+ end
31
+ end
32
+
33
+ # BASE
34
+
35
+ def self.get(id)
36
+ url = "#{self.host}/v1/apps/ruby/#{id}?access_token=#{self.token}"
37
+ response = JSON.parse(Net::HTTP.get(URI(url)))
38
+ raise ManagerException.new(response["message"]) if response["message"]
39
+
40
+ response["ruby_app"]
41
+ end
42
+
43
+ def self.get_name(id)
44
+ get(id)["name"]
45
+ end
46
+
47
+
48
+ def self.update(app_id, bytecode, app_parameters = nil)
49
+ url = "#{self.host}/v1/apps/ruby/#{app_id}?access_token=#{self.token}"
50
+ uri = URI(url)
51
+ form = {"bytecode" => Base64.strict_encode64(bytecode)}
52
+ response = nil
53
+
54
+ if app_parameters
55
+ form["authorizer_url"] = app_parameters["authorizer_url"]
56
+ form["description"] = app_parameters["description"]
57
+ form["pos_display_label"] = app_parameters["pos_display_label"]
58
+ form["displayable"] = app_parameters["pos_display_label"] != "X"
59
+ end
60
+
61
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
62
+ request = Net::HTTP::Put.new(uri)
63
+ request.set_form_data(form)
64
+ response = http.request(request)
65
+ end
66
+ [response.code.to_i == 200, response]
67
+ end
68
+ end
69
+ end
70
+ end
71
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudwalk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thiago Scalone
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-14 00:00:00.000000000 Z
11
+ date: 2017-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -56,10 +56,16 @@ files:
56
56
  - lib/cloudwalk.rb
57
57
  - lib/cloudwalk/config.rb
58
58
  - lib/cloudwalk/cw_file_json.rb
59
+ - lib/cloudwalk/cw_file_json_exception.rb
60
+ - lib/cloudwalk/deploy.rb
61
+ - lib/cloudwalk/deploy_exception.rb
59
62
  - lib/cloudwalk/manager_exception.rb
60
- - lib/cloudwalk/posxml_application.rb
61
- - lib/cloudwalk/posxml_version.rb
62
- - lib/cloudwalk/rake_task.rb
63
+ - lib/cloudwalk/manager_helper.rb
64
+ - lib/cloudwalk/posxml/posxml_application.rb
65
+ - lib/cloudwalk/posxml/posxml_version.rb
66
+ - lib/cloudwalk/posxml/rake_task.rb
67
+ - lib/cloudwalk/ruby/rake_task.rb
68
+ - lib/cloudwalk/ruby/ruby_application.rb
63
69
  homepage: https://cloudwalk.io/cli
64
70
  licenses:
65
71
  - MIT
@@ -1,44 +0,0 @@
1
- module Cloudwalk
2
- class PosxmlApplication
3
- def self.token
4
- Cloudwalk::Config.token
5
- end
6
-
7
- def self.host
8
- Cloudwalk::Config.host
9
- end
10
-
11
- def self.all
12
- if @apps
13
- @apps
14
- else
15
- response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/posxml?access_token=#{self.token}&per_page=100")))
16
- raise ManagerException.new(response["message"]) if response["message"]
17
-
18
- total_pages = response["pagination"]["total_pages"].to_i
19
- apps = response["posxmlapps"]
20
- (total_pages - 1).times do |page|
21
- url = "#{self.host}/v1/apps/posxml?access_token=#{self.token}&per_page=100&page=#{page+2}"
22
- response = JSON.parse(Net::HTTP.get(URI(url)))
23
- raise ManagerException.new(response["message"]) if response["message"]
24
-
25
- apps.concat(response["posxmlapps"])
26
- end
27
- @apps = apps
28
- end
29
- end
30
-
31
- def self.get(id)
32
- url = "#{self.host}/v1/apps/posxml/#{id}?access_token=#{self.token}"
33
- response = JSON.parse(Net::HTTP.get(URI(url)))
34
- raise ManagerException.new(response["message"]) if response["message"]
35
-
36
- response["posxml_app"]
37
- end
38
-
39
- def self.get_name(id)
40
- get(id)["name"]
41
- end
42
- end
43
- end
44
-
@@ -1,66 +0,0 @@
1
- module Cloudwalk
2
- class PosxmlVersion
3
- def self.token
4
- Cloudwalk::Config.token
5
- end
6
-
7
- def self.host
8
- Cloudwalk::Config.host
9
- end
10
-
11
- def self.get_or_create(app, version)
12
- response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/posxml/#{app_id}/versions?access_token=#{self.token}&per_page=100")))
13
- raise ManagerException.new(response["message"]) if response["message"]
14
-
15
- #TODO
16
- #`curl -X GET "https://api-staging.cloudwalk.io/v1/apps/posxml/3082/versions?access_token=#{self.token}`
17
- end
18
-
19
- def self.all(app_id)
20
- response = JSON.parse(Net::HTTP.get(URI("#{self.host}/v1/apps/posxml/#{app_id}/versions?access_token=#{self.token}&per_page=100")))
21
- raise ManagerException.new(response["message"]) if response["message"]
22
-
23
- total_pages = response["pagination"]["total_pages"].to_i
24
- versions = response["appversions"]
25
-
26
- (total_pages - 1).times do |page|
27
- url = "#{self.host}/v1/apps/posxml/#{app_id}/versions?access_token=#{self.token}&per_page=100&page=#{page+2}"
28
- response = JSON.parse(Net::HTTP.get(URI(url)))
29
- raise ManagerException.new(response["message"]) if response["message"]
30
-
31
- versions.concat(response["posxmlapps"])
32
- end
33
- versions
34
- end
35
-
36
- def self.get(app_id, id)
37
- url = "#{self.host}/v1/apps/posxml/#{app_id}/versions/#{id}?access_token=#{token}"
38
- response = JSON.parse(Net::HTTP.get(URI(url)))
39
- raise ManagerException.new(response["message"]) if response["message"]
40
-
41
- response
42
- end
43
-
44
- def self.update(app_id, version_id, bytecode, app_parameters = nil)
45
- url = "#{self.host}/v1/apps/posxml/#{app_id}/versions/#{version_id}?access_token=#{self.token}"
46
- uri = URI(url)
47
- form = {"bytecode" => Base64.strict_encode64(bytecode)}
48
- response = nil
49
-
50
- if app_parameters
51
- form["authorizer_url"] = app_parameters["authorizer_url"]
52
- form["description"] = app_parameters["description"]
53
- form["pos_display_label"] = app_parameters["pos_display_label"]
54
- form["displayable"] = app_parameters["pos_display_label"] != "X"
55
- end
56
-
57
- Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
58
- request = Net::HTTP::Put.new(uri)
59
- request.set_form_data(form)
60
- response = http.request(request)
61
- end
62
- [response.code.to_i == 200, response]
63
- end
64
- end
65
- end
66
-
@@ -1,89 +0,0 @@
1
- #!/usr/bin/env rake
2
-
3
- require 'rake'
4
- require 'rake/tasklib'
5
- require 'fileutils'
6
- require 'bundler/setup'
7
-
8
- # Tasks:
9
- # cloudwalk:build (Will build mruby or posxml application)
10
- # cloddwalk:deploy (Send Posxml or Ruby application)
11
- # cloddwalk:update (Update Cwfile.lock)
12
- # cloudwalk:package - maybe not
13
-
14
- module Cloudwalk
15
- class RakeTask < ::Rake::TaskLib
16
- include ::Rake::DSL if defined?(::Rake::DSL)
17
-
18
- attr_accessor :libs, :root_path, :main_out, :out_path, :outs
19
-
20
- def initialize
21
- yield self if block_given?
22
-
23
- @libs ||= FileList['lib/*.xml']
24
- @root_path ||= "./"
25
- @out_path ||= File.join(root_path, "out", "shared")
26
- @outs ||= @libs.pathmap("%{lib,#{@out_path}}p")
27
-
28
- define
29
- end
30
-
31
- def platform_call(command)
32
- if (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM)
33
- sh("bash -c \"#{command}\"")
34
- else
35
- sh command
36
- end
37
- end
38
-
39
- def define
40
- namespace :cloudwalk do
41
- desc "Compile posxml"
42
- task :build do |t, args|
43
- if path = ARGV[1..-1].first
44
- FileUtils.mkdir_p self.out_path
45
- xml, out = self.libs.zip(self.outs).find { |file, out| file == path }
46
-
47
- posxml = Cloudwalk::CwFileJson.xml2posxml(out)
48
- platform_call "cloudwalk compile -xml -o #{posxml} #{xml}"
49
- puts "=> #{File.size(posxml)} "
50
- else
51
- FileUtils.rm_rf self.out_path
52
- FileUtils.mkdir_p self.out_path
53
-
54
- self.libs.zip(self.outs).each do |file, out|
55
- posxml = Cloudwalk::CwFileJson.xml2posxml(out)
56
- platform_call "cloudwalk compile -xml -o #{posxml} #{file}"
57
- puts "=> #{File.size(posxml)} "
58
- end
59
- end
60
- end
61
-
62
- desc "Deploy all compiled applications based in Cwfile.json"
63
- task :deploy => :build do
64
- if Cloudwalk::CwFileJson.setup
65
- if path = ARGV[1..-1].first
66
- xml, out = self.libs.zip(self.outs).find { |file, out| file == path }
67
- Cloudwalk::CwFileJson.deploy([Cloudwalk::CwFileJson.xml2posxml(out)])
68
- else
69
- posxmls = self.outs.collect do |xml|
70
- Cloudwalk::CwFileJson.xml2posxml(xml)
71
- end
72
- Cloudwalk::CwFileJson.deploy(posxmls)
73
- end
74
- end
75
- end
76
-
77
- desc "Update CwFile.json.lock"
78
- task :update do
79
- Cloudwalk::CwFileJson.delete_lock!
80
- Cloudwalk::CwFileJson.setup(true)
81
- Cloudwalk::CwFileJson.persist_lock!
82
- end
83
-
84
- task :default => :build
85
- end
86
- end
87
- end
88
- end
89
-