megam_api 0.15 → 0.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -10
  3. data/lib/megam/api.rb +34 -20
  4. data/lib/megam/api/csars.rb +50 -0
  5. data/lib/megam/api/version.rb +1 -1
  6. data/lib/megam/builder/delete_node.rb +1 -1
  7. data/lib/megam/builder/make_node.rb +1 -1
  8. data/lib/megam/core/app_request.rb +1 -1
  9. data/lib/megam/core/app_request_collection.rb +1 -1
  10. data/lib/megam/core/appdefns.rb +1 -1
  11. data/lib/megam/core/appdefns_collection.rb +1 -1
  12. data/lib/megam/core/bolt_request.rb +1 -1
  13. data/lib/megam/core/bolt_request_collection.rb +1 -1
  14. data/lib/megam/core/boltdefns.rb +1 -1
  15. data/lib/megam/core/boltdefns_collection.rb +1 -1
  16. data/lib/megam/core/cloudinstruction.rb +1 -1
  17. data/lib/megam/core/cloudinstruction_collection.rb +1 -1
  18. data/lib/megam/core/cloudinstruction_group.rb +1 -1
  19. data/lib/megam/core/cloudtemplate.rb +1 -1
  20. data/lib/megam/core/cloudtemplate_collection.rb +1 -1
  21. data/lib/megam/core/cloudtool.rb +1 -1
  22. data/lib/megam/core/cloudtool_collection.rb +1 -1
  23. data/lib/megam/core/cloudtoolsetting.rb +1 -1
  24. data/lib/megam/core/cloudtoolsetting_collection.rb +1 -1
  25. data/lib/megam/core/config.rb +3 -3
  26. data/lib/megam/core/csar.rb +165 -0
  27. data/lib/megam/core/csar_collection.rb +148 -0
  28. data/lib/megam/core/json_compat.rb +12 -3
  29. data/lib/megam/core/konipai.rb +57 -0
  30. data/lib/megam/core/marketplace.rb +20 -20
  31. data/lib/megam/core/marketplace_addon.rb +8 -8
  32. data/lib/megam/core/marketplace_addon_collection.rb +1 -1
  33. data/lib/megam/core/marketplace_collection.rb +1 -1
  34. data/lib/megam/core/node.rb +1 -1
  35. data/lib/megam/core/node_collection.rb +1 -1
  36. data/lib/megam/core/predef.rb +1 -1
  37. data/lib/megam/core/predef_collection.rb +1 -1
  38. data/lib/megam/core/predefcloud.rb +1 -1
  39. data/lib/megam/core/predefcloud_collection.rb +1 -1
  40. data/lib/megam/core/request.rb +1 -1
  41. data/lib/megam/core/request_collection.rb +1 -1
  42. data/lib/megam/core/server_api.rb +4 -5
  43. data/lib/megam/core/sshkey.rb +1 -1
  44. data/lib/megam/core/sshkey_collection.rb +1 -1
  45. data/megam_api.gemspec +7 -7
  46. data/test/test_cloudtoolsettings.rb +3 -3
  47. data/test/test_csars.rb +21 -0
  48. data/test/test_helper.rb +1 -1
  49. data/test/test_marketplaces.rb +8 -8
  50. data/test/test_nodes.rb +4 -4
  51. data/test/test_predefclouds.rb +4 -4
  52. data/test/test_requests.rb +1 -1
  53. data/test/test_sshkeys.rb +1 -1
  54. metadata +19 -13
@@ -0,0 +1,148 @@
1
+ # Copyright:: Copyright (c) 2012, 2014 Megam Systems
2
+ # License:: Apache License, Version 2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by csarlicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ module Megam
17
+ class CSARCollection
18
+ include Enumerable
19
+
20
+
21
+ attr_reader :iterator
22
+ def initialize
23
+ @csars = Array.new
24
+ @csars_by_name = Hash.new
25
+ @insert_after_idx = nil
26
+ end
27
+
28
+ def all_csars
29
+ @csars
30
+ end
31
+
32
+ def [](index)
33
+ @csars[index]
34
+ end
35
+
36
+ def []=(index, arg)
37
+ is_megam_csar(arg)
38
+ @csars[index] = arg
39
+ @csars_by_name[arg.name] = index
40
+ end
41
+
42
+ def <<(*args)
43
+ args.flatten.each do |a|
44
+ is_megam_csar(a)
45
+ @csars << a
46
+ @csars_by_name[a.name] = @csars.length - 1
47
+ end
48
+ self
49
+ end
50
+
51
+ # 'push' is an alias method to <<
52
+ alias_method :push, :<<
53
+
54
+ def insert(csar)
55
+ is_megam_csar(csar)
56
+ if @insert_after_idx
57
+ # in the middle of executing a run, so any nodes inserted now should
58
+ # be placed after the most recent addition done by the currently executing
59
+ # node
60
+ @csars.insert(@insert_after_idx + 1, csar)
61
+ # update name -> location mcsarings and register new node
62
+ @csars_by_name.each_key do |key|
63
+ @csars_by_name[key] += 1 if @csars_by_name[key] > @insert_after_idx
64
+ end
65
+ @csars_by_name[csar.link] = @insert_after_idx + 1
66
+ @insert_after_idx += 1
67
+ else
68
+ @csars << csar
69
+ @csars_by_name[csar.link] = @csars.length - 1
70
+ end
71
+ end
72
+
73
+ def each
74
+ @csars.each do |csar|
75
+ yield csar
76
+ end
77
+ end
78
+
79
+ def each_index
80
+ @csars.each_index do |i|
81
+ yield i
82
+ end
83
+ end
84
+
85
+ def empty?
86
+ @csars.empty?
87
+ end
88
+
89
+ def lookup(csar)
90
+ lookup_by = nil
91
+ if csar.kind_of?(Megam::CSAR)
92
+ lookup_by = csar.link
93
+ elsif csar.kind_of?(String)
94
+ lookup_by = csar
95
+ else
96
+ raise ArgumentError, "Must pass a Megam::CSAR or String to lookup"
97
+ end
98
+ res = @csars_by_name[lookup_by]
99
+ unless res
100
+ raise ArgumentError, "Cannot find a csar matching #{lookup_by} (did you define it first?)"
101
+ end
102
+ @csars[res]
103
+ end
104
+
105
+ # Transform the ruby obj -> to a Hash
106
+ def to_hash
107
+ index_hash = Hash.new
108
+ self.each do |csar|
109
+ index_hash[csar.link] = csar.to_s
110
+ end
111
+ index_hash
112
+ end
113
+
114
+ # Serialize this object as a hash: called from JsonCompat.
115
+ # Verify if this called from JsonCompat during testing.
116
+ def to_json(*a)
117
+ for_json.to_json(*a)
118
+ end
119
+
120
+
121
+ def self.json_create(o)
122
+ collection = self.new()
123
+ o["results"].each do |csars_list|
124
+ csars_array = csars_list.kind_of?(Array) ? csars_list : [ csars_list ]
125
+ csars_array.each do |csar|
126
+ collection.insert(csar)
127
+ end
128
+ end
129
+ collection
130
+ end
131
+
132
+ private
133
+
134
+
135
+
136
+ def is_megam_csar(arg)
137
+ unless arg.kind_of?(Megam::CSAR)
138
+ raise ArgumentError, "Members must be Megam::CSAR's"
139
+ end
140
+ true
141
+ end
142
+
143
+ def to_s
144
+ Megam::Stuff.styled_hash(to_hash)
145
+ end
146
+
147
+ end
148
+ end
@@ -57,6 +57,11 @@ module Megam
57
57
  MEGAM_MARKETPLACECOLLECTION = "Megam::MarketPlaceCollection".freeze
58
58
  MEGAM_MARKETPLACEADDON = "Megam::MarketPlaceAddons".freeze
59
59
  MEGAM_MARKETPLACEADDONCOLLECTION = "Megam::MarketPlaceAddonsCollection".freeze
60
+ MEGAM_CSAR = "Megam::CSAR".freeze
61
+ MEGAM_CSARCOLLECTION = "Megam::CSARCollection".freeze
62
+
63
+
64
+
60
65
  class <<self
61
66
  # Increase the max nesting for JSON, which defaults
62
67
  # to 19, and isn't enough for some (for example, a Node within a Node)
@@ -65,12 +70,12 @@ module Megam
65
70
  if opts.nil? || !opts.has_key?(:max_nesting)
66
71
  opts = opts.nil? ? Hash.new : opts.clone
67
72
  opts[:max_nesting] = JSON_MAX_NESTING
68
- end
73
+ end
69
74
  opts
70
75
  end
71
76
 
72
77
  # Just call the JSON gem's parse method with a modified :max_nesting field
73
- def from_json(source, opts = {})
78
+ def from_json(source, opts = {})
74
79
  obj = ::Yajl::Parser.parse(source)
75
80
  # JSON gem requires top level object to be a Hash or Array (otherwise
76
81
  # you get the "must contain two octets" error). Yajl doesn't impose the
@@ -115,7 +120,7 @@ module Megam
115
120
  json_hash
116
121
  end
117
122
 
118
- def to_json(obj, opts = nil)
123
+ def to_json(obj, opts = nil)
119
124
  obj.to_json(opts_add_max_nesting(opts))
120
125
  end
121
126
 
@@ -197,6 +202,10 @@ module Megam
197
202
  Megam::MarketPlaceAddons
198
203
  when MEGAM_MARKETPLACEADDONCOLLECTION
199
204
  Megam::MarketPlaceAddonsCollection
205
+ when MEGAM_CSAR
206
+ Megam::CSAR
207
+ when MEGAM_CSARCOLLECTION
208
+ Megam::CSARCollection
200
209
  else
201
210
  raise JSON::ParserError, "Unsupported `json_class` type '#{json_class}'"
202
211
  end
@@ -0,0 +1,57 @@
1
+ # Copyright:: Copyright (c) 2012, 2014 Megam Systems
2
+ # License:: Apache License, Version 2.0
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+ module Megam
17
+ class KoniPai
18
+
19
+ def initialize()
20
+ @koni = nil
21
+ end
22
+
23
+ def konipai
24
+ self
25
+ end
26
+
27
+ def koni(arg=nil)
28
+ if arg != nil
29
+ @koni = arg
30
+ else
31
+ @koni
32
+ end
33
+ end
34
+
35
+
36
+ # Transform the ruby obj -> to a Hash
37
+ def to_hash
38
+ index_hash = Hash.new
39
+ index_hash["json_claz"] = self.class.name
40
+ index_hash["koni"] = koni
41
+ index_hash
42
+ end
43
+
44
+
45
+ def self.json_create(o)
46
+ kp = new
47
+ kp.koni(o) if o != null
48
+ kp
49
+ end
50
+
51
+
52
+ def to_s
53
+ Megam::Stuff.styled_hash(to_hash)
54
+ end
55
+
56
+ end
57
+ end
@@ -1,4 +1,4 @@
1
- # Copyright:: Copyright (c) 2012, 2013 Megam Systems
1
+ # Copyright:: Copyright (c) 2012, 2014 Megam Systems
2
2
  # License:: Apache License, Version 2.0
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,14 +20,14 @@ module Megam
20
20
  def initialize(email=nil, api_key=nil)
21
21
  @id = nil
22
22
  @name = nil
23
- @appdetails = {}
23
+ @appdetails = {}
24
24
  @features={}
25
25
  @plans=nil
26
26
  @applinks={}
27
27
  @attach =nil
28
28
  @predefnode=nil
29
- @some_msg = {}
30
- @approved = nil
29
+ @some_msg = {}
30
+ @approved = nil
31
31
  @created_at = nil
32
32
  super(email, api_key)
33
33
  end
@@ -36,7 +36,7 @@ module Megam
36
36
  self
37
37
  end
38
38
 
39
-
39
+
40
40
  def name(arg=nil)
41
41
  if arg != nil
42
42
  @name = arg
@@ -51,7 +51,7 @@ module Megam
51
51
  else
52
52
  @appdetails
53
53
  end
54
- end
54
+ end
55
55
 
56
56
  def id(arg=nil)
57
57
  if arg != nil
@@ -59,7 +59,7 @@ module Megam
59
59
  else
60
60
  @id
61
61
  end
62
- end
62
+ end
63
63
 
64
64
  def features(arg=nil)
65
65
  if arg != nil
@@ -76,7 +76,7 @@ module Megam
76
76
  @plans
77
77
  end
78
78
  end
79
-
79
+
80
80
  def applinks(arg=nil)
81
81
  if arg != nil
82
82
  @applinks = arg
@@ -108,7 +108,7 @@ module Megam
108
108
  @approved
109
109
  end
110
110
  end
111
-
111
+
112
112
  def created_at(arg=nil)
113
113
  if arg != nil
114
114
  @created_at = arg
@@ -141,8 +141,8 @@ module Megam
141
141
  index_hash["applinks"] = applinks
142
142
  index_hash["attach"] = attach
143
143
  index_hash["predefnode"] = predefnode
144
- index_hash["approved"] = approved
145
- index_hash["some_msg"] = some_msg
144
+ index_hash["approved"] = approved
145
+ index_hash["some_msg"] = some_msg
146
146
  index_hash["created_at"] = created_at
147
147
  index_hash
148
148
  end
@@ -163,12 +163,12 @@ module Megam
163
163
  "applinks" => applinks,
164
164
  "attach" => attach,
165
165
  "predefnode" => predefnode,
166
- "approved" => approved,
166
+ "approved" => approved,
167
167
  "created_at" => created_at
168
168
  }
169
169
  result
170
170
  end
171
-
171
+
172
172
  def self.json_create(o)
173
173
  app = new
174
174
  app.id(o["id"]) if o.has_key?("id")
@@ -186,17 +186,17 @@ module Megam
186
186
  app.features[:feature2] = oq["feature2"] if oq && oq.has_key?("feature2")
187
187
  app.features[:feature3] = oq["feature3"] if oq && oq.has_key?("feature3")
188
188
  app.features[:feature4] = oq["feature4"] if oq && oq.has_key?("feature4")
189
-
189
+
190
190
  oa = o["appdetails"]
191
191
  app.appdetails[:logo] = oa["logo"] if oa && oa.has_key?("logo")
192
192
  app.appdetails[:category] = oa["category"] if oa && oa.has_key?("category")
193
- app.appdetails[:description] = oa["description"] if oa && oa.has_key?("description")
194
-
193
+ app.appdetails[:description] = oa["description"] if oa && oa.has_key?("description")
194
+
195
195
  #op = o["plan"]
196
196
  #app.plan[:price] = op["price"] if op && op.has_key?("price")
197
197
  #app.plan[:description] = op["description"] if op && op.has_key?("description")
198
- #app.plan[:plantype]= op["plantype"] if op && op.has_key?("plantype")
199
-
198
+ #app.plan[:plantype]= op["plantype"] if op && op.has_key?("plantype")
199
+
200
200
  ol = o["applinks"]
201
201
  app.applinks[:free_support] = ol["free_support"] if ol && ol.has_key?("free_support")
202
202
  app.applinks[:paid_support] = ol["paid_support"] if ol && ol.has_key?("paid_support")
@@ -205,7 +205,7 @@ module Megam
205
205
  app.applinks[:content_link] = ol["content_link"] if ol && ol.has_key?("content_link")
206
206
  app.applinks[:wiki_link] = ol["wiki_link"] if ol && ol.has_key?("wiki_link")
207
207
  app.applinks[:source_link] = ol["source_link"] if ol && ol.has_key?("source_link")
208
-
208
+
209
209
  #success or error
210
210
  app.some_msg[:code] = o["code"] if o.has_key?("code")
211
211
  app.some_msg[:msg_type] = o["msg_type"] if o.has_key?("msg_type")
@@ -230,7 +230,7 @@ module Megam
230
230
  @applinks = o["applinks"] if o.has_key?("applinks")
231
231
  @attach = o["attach"] if o.has_key?("attach")
232
232
  @predefnode = o["predefnode"] if o.has_key?("predefnode")
233
- @approved = o["approved"] if o.has_key?("approved")
233
+ @approved = o["approved"] if o.has_key?("approved")
234
234
  @created_at = o["created_at"] if o.has_key?("created_at")
235
235
  self
236
236
  end
@@ -1,4 +1,4 @@
1
- # Copyright:: Copyright (c) 2012, 2013 Megam Systems
1
+ # Copyright:: Copyright (c) 2012, 2014 Megam Systems
2
2
  # License:: Apache License, Version 2.0
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,7 +15,7 @@
15
15
  #
16
16
  module Megam
17
17
  class MarketPlaceAddons< Megam::ServerAPI
18
-
18
+
19
19
  def initialize(email=nil, api_key=nil)
20
20
  @id = nil
21
21
  @node_id = nil
@@ -27,11 +27,11 @@ module Megam
27
27
  @some_msg = {}
28
28
  super(email,api_key)
29
29
  end
30
-
30
+
31
31
  def market_place_addons
32
32
  self
33
33
  end
34
-
34
+
35
35
 
36
36
  def id(arg=nil)
37
37
  if arg != nil
@@ -117,7 +117,7 @@ module Megam
117
117
 
118
118
  # Serialize this object as a hash: called from JsonCompat.
119
119
  # Verify if this called from JsonCompat during testing.
120
- def to_json(*a)
120
+ def to_json(*a)
121
121
  for_json.to_json(*a)
122
122
  end
123
123
 
@@ -130,7 +130,7 @@ module Megam
130
130
  "config" => {},
131
131
  "config_id" => config_id,
132
132
  "created_at" => created_at
133
- }
133
+ }
134
134
  result
135
135
  end
136
136
 
@@ -143,8 +143,8 @@ module Megam
143
143
  addon.marketplace_id(o["marketplace_id"]) if o.has_key?("marketplace_id")
144
144
  addon.config(o["config"]) if o.has_key?("config")
145
145
  addon.config_id(o["config_id"]) if o.has_key?("config_id")
146
- addon.created_at(o["created_at"]) if o.has_key?("created_at")
147
-
146
+ addon.created_at(o["created_at"]) if o.has_key?("created_at")
147
+
148
148
  addon.some_msg[:code] = o["code"] if o.has_key?("code")
149
149
  addon.some_msg[:msg_type] = o["msg_type"] if o.has_key?("msg_type")
150
150
  addon.some_msg[:msg]= o["msg"] if o.has_key?("msg")
@@ -1,4 +1,4 @@
1
- # Copyright:: Copyright (c) 2012, 2013 Megam Systems
1
+ # Copyright:: Copyright (c) 2012, 2014 Megam Systems
2
2
  # License:: Apache License, Version 2.0
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,4 +1,4 @@
1
- # Copyright:: Copyright (c) 2012, 2013 Megam Systems
1
+ # Copyright:: Copyright (c) 2012, 2014 Megam Systems
2
2
  # License:: Apache License, Version 2.0
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");