megam_api 0.17 → 0.18

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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/lib/megam/api.rb +20 -35
  4. data/lib/megam/api/{nodes.rb → assemblies.rb} +9 -9
  5. data/lib/megam/api/domains.rb +30 -0
  6. data/lib/megam/api/organizations.rb +30 -0
  7. data/lib/megam/api/version.rb +1 -1
  8. data/lib/megam/core/assemblies.rb +180 -0
  9. data/lib/megam/core/{node_collection.rb → assemblies_collection.rb} +44 -65
  10. data/lib/megam/core/csar.rb +0 -1
  11. data/lib/megam/core/domains.rb +129 -0
  12. data/lib/megam/core/json_compat.rb +17 -4
  13. data/lib/megam/core/organizations.rb +129 -0
  14. data/test/test_accounts.rb +1 -1
  15. data/test/test_assemblies.rb +10 -0
  16. data/test/test_domains.rb +27 -0
  17. data/test/test_helper.rb +25 -16
  18. data/test/test_organizations.rb +26 -0
  19. metadata +12 -38
  20. data/lib/megam/api/app_request.rb +0 -27
  21. data/lib/megam/api/appdefns.rb +0 -47
  22. data/lib/megam/api/bolt_request.rb +0 -27
  23. data/lib/megam/api/boltdefns.rb +0 -39
  24. data/lib/megam/api/cloud_tools.rb +0 -35
  25. data/lib/megam/api/logs.rb +0 -18
  26. data/lib/megam/api/predefs.rb +0 -35
  27. data/lib/megam/builder/delete_node.rb +0 -107
  28. data/lib/megam/builder/make_node.rb +0 -133
  29. data/lib/megam/core/app_request.rb +0 -227
  30. data/lib/megam/core/app_request_collection.rb +0 -148
  31. data/lib/megam/core/appdefns.rb +0 -182
  32. data/lib/megam/core/appdefns_collection.rb +0 -148
  33. data/lib/megam/core/bolt_request.rb +0 -225
  34. data/lib/megam/core/bolt_request_collection.rb +0 -148
  35. data/lib/megam/core/boltdefns.rb +0 -207
  36. data/lib/megam/core/boltdefns_collection.rb +0 -148
  37. data/lib/megam/core/cloudinstruction.rb +0 -110
  38. data/lib/megam/core/cloudinstruction_collection.rb +0 -145
  39. data/lib/megam/core/cloudinstruction_group.rb +0 -99
  40. data/lib/megam/core/cloudtemplate.rb +0 -127
  41. data/lib/megam/core/cloudtemplate_collection.rb +0 -145
  42. data/lib/megam/core/cloudtool.rb +0 -152
  43. data/lib/megam/core/cloudtool_collection.rb +0 -145
  44. data/lib/megam/core/node.rb +0 -366
  45. data/lib/megam/core/predef.rb +0 -201
  46. data/lib/megam/core/predef_collection.rb +0 -164
  47. data/test/test_appdefns.rb +0 -35
  48. data/test/test_appreqs.rb +0 -25
  49. data/test/test_boltdefns.rb +0 -32
  50. data/test/test_boltreqs.rb +0 -26
  51. data/test/test_cloudtools.rb +0 -22
  52. data/test/test_nodes.rb +0 -140
  53. data/test/test_predefs.rb +0 -72
@@ -14,36 +14,35 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  module Megam
17
- class NodeCollection
17
+ class AssembliesCollection
18
18
  include Enumerable
19
19
 
20
-
21
20
  attr_reader :iterator
22
21
  def initialize
23
- @nodes = Array.new
24
- @nodes_by_name = Hash.new
22
+ @assemblies = Array.new
23
+ @assemblies_by_name = Hash.new
25
24
  @insert_after_idx = nil
26
25
  end
27
26
 
28
- def all_nodes
29
- @nodes
27
+ def all_assemblies
28
+ @assemblies
30
29
  end
31
30
 
32
31
  def [](index)
33
- @nodes[index]
32
+ @assemblies[index]
34
33
  end
35
34
 
36
35
  def []=(index, arg)
37
- is_megam_node(arg)
38
- @nodes[index] = arg
39
- @nodes_by_name[arg.node_name] = index
36
+ is_megam_assemblies(arg)
37
+ @assemblies[index] = arg
38
+ @assemblies_by_name[arg.assembies_name] = index
40
39
  end
41
40
 
42
41
  def <<(*args)
43
42
  args.flatten.each do |a|
44
- is_megam_node(a)
45
- @nodes << a
46
- @nodes_by_name[a.node_name] = @nodes.length - 1
43
+ is_megam_assemblies(a)
44
+ @assemblies << a
45
+ @assemblies_by_name[a.name] = @assemblies.length - 1
47
46
  end
48
47
  self
49
48
  end
@@ -51,62 +50,62 @@ module Megam
51
50
  # 'push' is an alias method to <<
52
51
  alias_method :push, :<<
53
52
 
54
- def insert(node)
55
- is_megam_node(node)
53
+ def insert(assemblies)
54
+ is_megam_assemblies(assemblies)
56
55
  if @insert_after_idx
57
56
  # in the middle of executing a run, so any nodes inserted now should
58
57
  # be placed after the most recent addition done by the currently executing
59
58
  # node
60
- @nodes.insert(@insert_after_idx + 1, node)
59
+ @assemblies.insert(@insert_after_idx + 1, assemblies)
61
60
  # update name -> location mappings and register new node
62
- @nodes_by_name.each_key do |key|
63
- @nodes_by_name[key] += 1 if @nodes_by_name[key] > @insert_after_idx
61
+ @assemblies_by_name.each_key do |key|
62
+ @assemblies_by_name[key] += 1 if @assemblies_by_name[key] > @insert_after_idx
64
63
  end
65
- @nodes_by_name[node.node_name] = @insert_after_idx + 1
64
+ @assemblies_by_name[assemblies.name] = @insert_after_idx + 1
66
65
  @insert_after_idx += 1
67
66
  else
68
- @nodes << node
69
- @nodes_by_name[node.node_name] = @nodes.length - 1
67
+ @assemblies << assemblies
68
+ @assemblies_by_name[assemblies.name] = @assemblies.length - 1
70
69
  end
71
70
  end
72
71
 
73
72
  def each
74
- @nodes.each do |node|
75
- yield node
73
+ @assemblies.each do |assemblies|
74
+ yield assemblies
76
75
  end
77
76
  end
78
77
 
79
78
  def each_index
80
- @nodes.each_index do |i|
79
+ @assemblies.each_index do |i|
81
80
  yield i
82
81
  end
83
82
  end
84
83
 
85
84
  def empty?
86
- @nodes.empty?
85
+ @assemblies.empty?
87
86
  end
88
87
 
89
- def lookup(node)
88
+ def lookup(assemblies)
90
89
  lookup_by = nil
91
- if node.kind_of?(Megam::Node)
92
- lookup_by = node.node_name
93
- elsif node.kind_of?(String)
94
- lookup_by = node
90
+ if assemblies.kind_of?(Megam::Assemblies)
91
+ lookup_by = assemblies.name
92
+ elsif assemblies.kind_of?(String)
93
+ lookup_by = assemblies
95
94
  else
96
- raise ArgumentError, "Must pass a Megam::Node or String to lookup"
95
+ raise ArgumentError, "Must pass a Megam::Assemblies or String to lookup"
97
96
  end
98
- res = @nodes_by_name[lookup_by]
97
+ res = @assemblies_by_name[lookup_by]
99
98
  unless res
100
99
  raise ArgumentError, "Cannot find a node matching #{lookup_by} (did you define it first?)"
101
100
  end
102
- @nodes[res]
101
+ @assemblies[res]
103
102
  end
104
-
105
- # Transform the ruby obj -> to a Hash
103
+
104
+ # Transform the ruby obj -> to a Hash
106
105
  def to_hash
107
106
  index_hash = Hash.new
108
- self.each do |node|
109
- index_hash[node.node_name] = node.to_s
107
+ self.each do |assemblies|
108
+ index_hash[assemblies.name] = assemblies.to_s
110
109
  end
111
110
  index_hash
112
111
  end
@@ -117,31 +116,13 @@ module Megam
117
116
  for_json.to_json(*a)
118
117
  end
119
118
 
120
-
121
- =begin
122
- ["json_claz":"Megam::NodeCollection",{
123
- "id":"NOD362428315933343744",
124
- "accounts_id":"ACT362211963352121344",
125
- "json_claz":"Megam::Node",
126
- "request":{
127
- "req_id":"NOD362428315933343744",
128
- "command":"commands"
129
- },
130
- "predefs":{
131
- "name":"",
132
- "scm":"",
133
- "war":"",
134
- "db":"",
135
- "queue":""
136
- }
137
- }]
138
- =end
139
119
  def self.json_create(o)
140
120
  collection = self.new()
141
- o["results"].each do |nodes_list|
142
- nodes_array = nodes_list.kind_of?(Array) ? nodes_list : [ nodes_list ]
143
- nodes_array.each do |node|
144
- collection.insert(node)
121
+ o["results"].each do |assemblies_list|
122
+ assemblies_array = assemblies_list.kind_of?(Array) ? assemblies_list : [ assemblies_list ]
123
+ assemblies_array.each do |assemblies|
124
+ collection.insert(assemblies)
125
+
145
126
  end
146
127
  end
147
128
  collection
@@ -149,11 +130,9 @@ module Megam
149
130
 
150
131
  private
151
132
 
152
-
153
-
154
- def is_megam_node(arg)
155
- unless arg.kind_of?(Megam::Node)
156
- raise ArgumentError, "Members must be Megam::Node's"
133
+ def is_megam_assemblies(arg)
134
+ unless arg.kind_of?(Megam::Assemblies)
135
+ raise ArgumentError, "Members must be Megam::Assemblies's"
157
136
  end
158
137
  true
159
138
  end
@@ -13,7 +13,6 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- require 'hashie'
17
16
 
18
17
  module Megam
19
18
  class CSAR < Megam::ServerAPI
@@ -0,0 +1,129 @@
1
+ # Copyright:: Copyright (c) 2012-2013 Megam Systems, Inc.
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
+
17
+ module Megam
18
+ class Domains < Megam::ServerAPI
19
+ def initialize(email=nil, api_key=nil)
20
+ @id = nil
21
+ @name = nil
22
+ @created_at = nil
23
+ super(email, api_key)
24
+ end
25
+
26
+
27
+ def domain
28
+ self
29
+ end
30
+
31
+ def id(arg=nil)
32
+ if arg != nil
33
+ @id = arg
34
+ else
35
+ @id
36
+ end
37
+ end
38
+
39
+
40
+
41
+ def name(arg=nil)
42
+ if arg != nil
43
+ @name = arg
44
+ else
45
+ @name
46
+ end
47
+ end
48
+
49
+
50
+
51
+ def created_at(arg=nil)
52
+ if arg != nil
53
+ @created_at = arg
54
+ else
55
+ @created_at
56
+ end
57
+ end
58
+
59
+
60
+
61
+ # Transform the ruby obj -> to a Hash
62
+ def to_hash
63
+ index_hash = Hash.new
64
+ index_hash["json_claz"] = self.class.name
65
+ index_hash["id"] = id
66
+ index_hash["name"] = name
67
+ index_hash["created_at"] = created_at
68
+ index_hash
69
+ end
70
+
71
+ def to_json(*a)
72
+ for_json.to_json(*a)
73
+ end
74
+
75
+ def for_json
76
+ result = {
77
+ "id" => id,
78
+ "name" => name,
79
+ "created_at" => created_at
80
+ }
81
+ result
82
+ end
83
+
84
+ # Create a Megam::Domains from JSON (used by the backgroud job workers)
85
+ def self.json_create(o)
86
+ dmn = new
87
+ dmn.id(o["id"]) if o.has_key?("id")
88
+ dmn.name(o["name"]) if o.has_key?("name")
89
+ dmn.created_at(o["created_at"]) if o.has_key?("created_at")
90
+ dmn
91
+ end
92
+
93
+ def self.from_hash(o)
94
+ dmn = self.new(o[:email], o[:api_key])
95
+ dmn.from_hash(o)
96
+ dmn
97
+ end
98
+
99
+ def from_hash(o)
100
+ @id = o[:id] if o.has_key?(:id)
101
+ @name = o[:name] if o.has_key?(:name)
102
+ @created_at = o[:created_at] if o.has_key?(:created_at)
103
+ self
104
+ end
105
+
106
+ def self.create(o)
107
+ dmn = from_hash(o)
108
+ dmn.create
109
+ end
110
+
111
+ # Load a Domain by email_p
112
+ def self.show(email,api_key=nil)
113
+ dmn = self.new(email, api_key)
114
+ dmn.megam_rest.get_domains(email)
115
+ end
116
+
117
+
118
+ def create
119
+ megam_rest.post_domains(to_hash)
120
+ end
121
+
122
+ def to_s
123
+ Megam::Stuff.styled_hash(to_hash)
124
+ end
125
+
126
+
127
+ end
128
+
129
+ end
@@ -37,6 +37,10 @@ module Megam
37
37
  MEGAM_BOLTDEFNSCOLLECTION = "Megam::BoltDefnCollection".freeze
38
38
  MEGAM_REQUEST = "Megam::Request".freeze
39
39
  MEGAM_REQUESTCOLLECTION = "Megam::RequestCollection".freeze
40
+ MEGAM_ORGANIZATION = "Megam::Organizations".freeze
41
+ MEGAM_DOMAIN = "Megam::Domains".freeze
42
+ MEGAM_ASSEMBLIES = "Megam::Assemblies".freeze
43
+ MEGAM_ASSEMBLIESCOLLECTION = "Megam::AssembliesCollection".freeze
40
44
 
41
45
  MEGAM_PREDEF = "Megam::Predef".freeze
42
46
  MEGAM_PREDEFCOLLECTION = "Megam::PredefCollection".freeze
@@ -59,9 +63,6 @@ module Megam
59
63
  MEGAM_MARKETPLACEADDONCOLLECTION = "Megam::MarketPlaceAddonsCollection".freeze
60
64
  MEGAM_CSAR = "Megam::CSAR".freeze
61
65
  MEGAM_CSARCOLLECTION = "Megam::CSARCollection".freeze
62
-
63
-
64
-
65
66
  class <<self
66
67
  # Increase the max nesting for JSON, which defaults
67
68
  # to 19, and isn't enough for some (for example, a Node within a Node)
@@ -77,6 +78,7 @@ module Megam
77
78
  # Just call the JSON gem's parse method with a modified :max_nesting field
78
79
  def from_json(source, opts = {})
79
80
  obj = ::Yajl::Parser.parse(source)
81
+
80
82
  # JSON gem requires top level object to be a Hash or Array (otherwise
81
83
  # you get the "must contain two octets" error). Yajl doesn't impose the
82
84
  # same limitation. For compatibility, we re-impose this condition.
@@ -98,16 +100,19 @@ module Megam
98
100
  # Look at an object that's a basic type (from json parse) and convert it
99
101
  # to an instance of Megam classes if desired.
100
102
  def map_to_rb_obj(json_obj)
103
+
101
104
  case json_obj
102
105
  when Hash
103
106
  mapped_hash = map_hash_to_rb_obj(json_obj)
107
+
104
108
  if json_obj.has_key?(JSON_CLAZ) && (class_to_inflate = class_for_json_class(json_obj[JSON_CLAZ]))
105
109
  class_to_inflate.json_create(mapped_hash)
110
+
106
111
  else
107
112
  mapped_hash
108
113
  end
109
114
  when Array
110
- json_obj.map {|e| map_to_rb_obj(e) }
115
+ json_obj.map {|e| map_to_rb_obj(e)}
111
116
  else
112
117
  json_obj
113
118
  end
@@ -202,10 +207,18 @@ module Megam
202
207
  Megam::MarketPlaceAddons
203
208
  when MEGAM_MARKETPLACEADDONCOLLECTION
204
209
  Megam::MarketPlaceAddonsCollection
210
+ when MEGAM_ORGANIZATION
211
+ Megam::Organizations
205
212
  when MEGAM_CSAR
206
213
  Megam::CSAR
207
214
  when MEGAM_CSARCOLLECTION
208
215
  Megam::CSARCollection
216
+ when MEGAM_DOMAIN
217
+ Megam::Organizations
218
+ when MEGAM_ASSEMBLIES
219
+ Megam::Assemblies
220
+ when MEGAM_ASSEMBLIESCOLLECTION
221
+ Megam::AssembliesCollection
209
222
  else
210
223
  raise JSON::ParserError, "Unsupported `json_class` type '#{json_class}'"
211
224
  end
@@ -0,0 +1,129 @@
1
+ # Copyright:: Copyright (c) 2012-2013 Megam Systems, Inc.
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
+
17
+ module Megam
18
+ class Organizations < Megam::ServerAPI
19
+ def initialize(email=nil, api_key=nil)
20
+ @id = nil
21
+ @name = nil
22
+ @created_at = nil
23
+ super(email, api_key)
24
+ end
25
+
26
+
27
+ def organization
28
+ self
29
+ end
30
+
31
+ def id(arg=nil)
32
+ if arg != nil
33
+ @id = arg
34
+ else
35
+ @id
36
+ end
37
+ end
38
+
39
+
40
+
41
+ def name(arg=nil)
42
+ if arg != nil
43
+ @name = arg
44
+ else
45
+ @name
46
+ end
47
+ end
48
+
49
+
50
+
51
+ def created_at(arg=nil)
52
+ if arg != nil
53
+ @created_at = arg
54
+ else
55
+ @created_at
56
+ end
57
+ end
58
+
59
+
60
+
61
+ # Transform the ruby obj -> to a Hash
62
+ def to_hash
63
+ index_hash = Hash.new
64
+ index_hash["json_claz"] = self.class.name
65
+ index_hash["id"] = id
66
+ index_hash["name"] = name
67
+ index_hash["created_at"] = created_at
68
+ index_hash
69
+ end
70
+
71
+ def to_json(*a)
72
+ for_json.to_json(*a)
73
+ end
74
+
75
+ def for_json
76
+ result = {
77
+ "id" => id,
78
+ "name" => name,
79
+ "created_at" => created_at
80
+ }
81
+ result
82
+ end
83
+
84
+ # Create a Megam::Organization from JSON (used by the backgroud job workers)
85
+ def self.json_create(o)
86
+ org = new
87
+ org.id(o["id"]) if o.has_key?("id")
88
+ org.name(o["name"]) if o.has_key?("name")
89
+ org.created_at(o["created_at"]) if o.has_key?("created_at")
90
+ org
91
+ end
92
+
93
+ def self.from_hash(o)
94
+ org = self.new(o[:email], o[:api_key])
95
+ org.from_hash(o)
96
+ org
97
+ end
98
+
99
+ def from_hash(o)
100
+ @id = o[:id] if o.has_key?(:id)
101
+ @name = o[:name] if o.has_key?(:name)
102
+ @created_at = o[:created_at] if o.has_key?(:created_at)
103
+ self
104
+ end
105
+
106
+ def self.create(o)
107
+ org = from_hash(o)
108
+ org.create
109
+ end
110
+
111
+ # Load a organization by email_p
112
+ def self.show(email,api_key=nil)
113
+ org = self.new(email, api_key)
114
+ org.megam_rest.get_organizations(email)
115
+ end
116
+
117
+
118
+ def create
119
+ megam_rest.post_organizations(to_hash)
120
+ end
121
+
122
+ def to_s
123
+ Megam::Stuff.styled_hash(to_hash)
124
+ end
125
+
126
+
127
+ end
128
+
129
+ end