ocs 0.0.4 → 0.0.5

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: f8c215e6924e10df79b386df078dc3d8a29b4674
4
- data.tar.gz: afef6522a19430d1311ef964dd5abb24fbb6268a
3
+ metadata.gz: 0c4206748407fad21d3dbacc44d8423e227f84f8
4
+ data.tar.gz: 38af688e8939ca50ee13c94ad9fbfdd04db2bee6
5
5
  SHA512:
6
- metadata.gz: 5bd0b3b9d4bc4ce58a8fba98faa8f15fbad18caa8a22f302b290c49b4f6ab05bae9aa948262130b02b30f917b2abcb380b984739acd035a45f8014caf1a972a6
7
- data.tar.gz: dfda45f337a17f60d9011c155023f4ebffbb5cf2ce2e2786ee60074f84f4d0869551c8ddd9b8cfd50d064b13d2786bff3e20af82d0ba495d61db049eb9919861
6
+ metadata.gz: 0aadd1303c2f8edb858d65e3ab034799b3b2def746a9133f0b57a31685eb94811b197dc49805f5bdce48f70187c4c001c2b10a44e3561d3872bcc6cb09ec74dc
7
+ data.tar.gz: 74b6f561ec1342187b3c69fb153f4ad8616687a473ba831260639be08bac2da06de9508526370ab5e732baa59743e5e5ed01ce702a607af1445086211840f969
data/lib/ocs.rb CHANGED
@@ -2,6 +2,7 @@ require "base64"
2
2
  require "openssl"
3
3
  require "uri"
4
4
 
5
+ require "active_support/concern"
5
6
  require "active_support/core_ext/class/attribute"
6
7
  require "active_support/core_ext/hash/indifferent_access"
7
8
  require "active_support/core_ext/object/blank"
@@ -1,14 +1,14 @@
1
1
  module Ocs
2
2
  module Resources
3
3
  class Base
4
+ include DynamicDefiners
5
+
4
6
  BOOLEAN = [TrueClass, FalseClass].freeze
5
7
 
6
8
  class_attribute :delegations, instance_writer: false
7
9
  self.delegations = {}
8
10
 
9
11
  class << self
10
- include DynamicDefiners
11
-
12
12
  def all(client)
13
13
  list(client)
14
14
  end
@@ -85,28 +85,6 @@ module Ocs
85
85
 
86
86
  private
87
87
 
88
- def action_parameters(required_keys, optional_keys)
89
- check_required_keys(required_keys)
90
- parameters(required_keys + optional_keys)
91
- end
92
-
93
- def check_required_keys(required_keys)
94
- required_keys.each do |key|
95
- key = key[:attribute] if key.is_a?(Hash)
96
- raise MissingKeyError.new("#{key} key is required") if public_send(key).nil?
97
- end
98
- end
99
-
100
- def parameters(keys)
101
- keys.inject({}) do |params, key|
102
- attribute_name = key.is_a?(Hash) ? key[:attribute] : key
103
- request_key = key.is_a?(Hash) ? key[:as].to_s : key.to_s.delete("_")
104
- value = public_send(attribute_name)
105
- params[request_key] = value if value
106
- params
107
- end
108
- end
109
-
110
88
  def resource_class(class_name)
111
89
  "ocs/resources/#{class_name}".camelize.constantize
112
90
  end
@@ -1,93 +1,120 @@
1
1
  module Ocs
2
2
  module Resources
3
3
  module DynamicDefiners
4
- def alias_attribute(alias_name, original_name)
5
- alias_method alias_name, original_name
6
- alias_method :"#{alias_name}=", :"#{original_name}="
7
- end
4
+ extend ActiveSupport::Concern
8
5
 
9
- def define_action(action_name, required: [], optional: [], api_name: nil)
10
- define_method(action_name) do |special_parameters = {}|
11
- api = api_name || "#{action_name}#{self.class.name}"
12
- parameters = action_parameters(required, optional).merge(special_parameters)
13
- send_and_update(api, parameters)
6
+ module ClassMethods
7
+ def alias_attribute(alias_name, original_name)
8
+ alias_method alias_name, original_name
9
+ alias_method :"#{alias_name}=", :"#{original_name}="
14
10
  end
15
11
 
16
- define_method(:"#{action_name}!") do |special_parameters = {}|
17
- send(action_name) || fail(@error)
18
- end
19
- end
12
+ def define_action(action_name, required: [], optional: [], api_name: nil)
13
+ define_method(action_name) do |special_parameters = {}|
14
+ api = api_name || "#{action_name}#{self.class.name}"
15
+ parameters = action_parameters(required, optional).merge(special_parameters)
16
+ send_and_update(api, parameters)
17
+ end
20
18
 
21
- def define_attribute(attribute_name, type:)
22
- define_method(:"#{attribute_name}=") do |value|
23
- unless [*type].any? { |t| value.is_a?(t) }
24
- fail AttributeTypeMismatch.new(
25
- "#{attribute_name} needs to be a #{[*type].join(" or ")}"
26
- )
19
+ define_method(:"#{action_name}!") do |special_parameters = {}|
20
+ send(action_name) || fail(@error)
27
21
  end
28
- instance_variable_set(:"@#{attribute_name}", value)
29
22
  end
30
23
 
31
- attr_reader attribute_name
32
- end
33
-
34
- def delegate_attribute(attribute_name, to:, as:)
35
- writer_method_name = :"#{to}_#{as}="
36
- define_method(writer_method_name) do |value|
37
- instance =
38
- public_send(to) ||
39
- public_send(:"#{to}=", resource_class(to).new(client))
40
- instance.public_send(:"#{as}=", value)
41
- end
42
- delegations[attribute_name] = writer_method_name
24
+ def define_attribute(attribute_name, type:)
25
+ define_method(:"#{attribute_name}=") do |value|
26
+ unless [*type].any? { |t| value.is_a?(t) }
27
+ fail AttributeTypeMismatch.new(
28
+ "#{attribute_name} needs to be a #{[*type].join(" or ")}"
29
+ )
30
+ end
31
+ instance_variable_set(:"@#{attribute_name}", value)
32
+ end
43
33
 
44
- define_method(:"#{to}_#{as}") do
45
- instance = public_send(to)
46
- instance && instance.public_send(as)
34
+ attr_reader attribute_name
47
35
  end
48
- end
49
36
 
50
- def delegate_attributes(attribute_name, to:)
51
- delegations[attribute_name] = :"#{to}="
52
- end
37
+ def delegate_attribute(attribute_name, to:, as:)
38
+ writer_method_name = :"#{to}_#{as}="
39
+ define_method(writer_method_name) do |value|
40
+ instance =
41
+ public_send(to) ||
42
+ public_send(:"#{to}=", resource_class(to).new(client))
43
+ instance.public_send(:"#{as}=", value)
44
+ end
45
+ delegations[attribute_name] = writer_method_name
53
46
 
54
- def has_one(attribute_name)
55
- define_method(:"#{attribute_name}=") do |value|
56
- klass = resource_class(attribute_name)
57
- unless value.instance_of?(klass)
58
- fail AttributeClassMismatch.new(
59
- "#{attribute_name} needs to be an instance of #{klass}"
60
- )
47
+ define_method(:"#{to}_#{as}") do
48
+ instance = public_send(to)
49
+ instance && instance.public_send(as)
61
50
  end
62
- instance_variable_set(:"@#{attribute_name}", value)
63
51
  end
64
52
 
65
- attr_reader attribute_name
66
- end
67
-
68
- def has_many(attribute_name)
69
- define_method(:"#{attribute_name}=") do |values|
70
- unless values.is_a?(Array)
71
- fail AttributeTypeMismatch.new("#{attribute_name} needs to be an Array")
72
- end
53
+ def delegate_attributes(attribute_name, to:)
54
+ delegations[attribute_name] = :"#{to}="
55
+ end
73
56
 
74
- klass = resource_class(attribute_name.to_s.singularize)
75
- instances = values.map do |value|
76
- case value
77
- when klass
78
- value
79
- when Hash
80
- klass.new(client, value)
81
- else
57
+ def has_one(attribute_name)
58
+ define_method(:"#{attribute_name}=") do |value|
59
+ klass = resource_class(attribute_name)
60
+ unless value.instance_of?(klass)
82
61
  fail AttributeClassMismatch.new(
83
- "Elements of #{attribute_name} need to be instances of #{klass} or Hash"
62
+ "#{attribute_name} needs to be an instance of #{klass}"
84
63
  )
85
64
  end
65
+ instance_variable_set(:"@#{attribute_name}", value)
86
66
  end
87
- instance_variable_set(:"@#{attribute_name}", instances)
67
+
68
+ attr_reader attribute_name
69
+ end
70
+
71
+ def has_many(attribute_name)
72
+ define_method(:"#{attribute_name}=") do |values|
73
+ unless values.is_a?(Array)
74
+ fail AttributeTypeMismatch.new("#{attribute_name} needs to be an Array")
75
+ end
76
+
77
+ klass = resource_class(attribute_name.to_s.singularize)
78
+ instances = values.map do |value|
79
+ case value
80
+ when klass
81
+ value
82
+ when Hash
83
+ klass.new(client, value)
84
+ else
85
+ fail AttributeClassMismatch.new(
86
+ "Elements of #{attribute_name} need to be instances of #{klass} or Hash"
87
+ )
88
+ end
89
+ end
90
+ instance_variable_set(:"@#{attribute_name}", instances)
91
+ end
92
+
93
+ attr_reader attribute_name
88
94
  end
95
+ end
96
+
97
+ private
98
+
99
+ def action_parameters(required_keys, optional_keys)
100
+ check_required_keys(required_keys)
101
+ parameters(required_keys + optional_keys)
102
+ end
89
103
 
90
- attr_reader attribute_name
104
+ def check_required_keys(required_keys)
105
+ required_keys.each do |key|
106
+ key = key[:attribute] if key.is_a?(Hash)
107
+ raise MissingKeyError.new("#{key} key is required") if public_send(key).nil?
108
+ end
109
+ end
110
+
111
+ def parameters(keys)
112
+ keys.each_with_object({}) do |key, params|
113
+ attribute_name = key.is_a?(Hash) ? key[:attribute] : key
114
+ request_key = key.is_a?(Hash) ? key[:as].to_s : key.to_s.delete("_")
115
+ value = public_send(attribute_name)
116
+ params[request_key] = value if value
117
+ end
91
118
  end
92
119
  end
93
120
  end
@@ -47,6 +47,7 @@ module Ocs
47
47
  define_attribute :rootdevicetype, type: String
48
48
  #define_attribute :servicestate
49
49
  define_attribute :state, type: String
50
+ define_attribute :userdata, type: String
50
51
  #define_attribute :vgpu
51
52
 
52
53
  delegate_attribute :account, to: :account, as: :name
@@ -85,7 +86,7 @@ module Ocs
85
86
 
86
87
  define_action :deploy,
87
88
  required: %i(service_offering_id template_id zone_id),
88
- optional: %i(displayname name displayvm) + [
89
+ optional: %i(displayname name displayvm userdata) + [
89
90
  {attribute: :group_name, as: :group},
90
91
  {attribute: :ssh_key_pair_name, as: :keypair}
91
92
  ]
@@ -119,6 +120,14 @@ module Ocs
119
120
  parameters = {nicid: nic.id, virtualmachineid: id}
120
121
  send_and_update("removeNicFromVirtualMachine", parameters)
121
122
  end
123
+
124
+ attr_reader :raw_userdata
125
+
126
+ def raw_userdata=(raw_userdata)
127
+ @raw_userdata = raw_userdata
128
+ raw_userdata << "\n" until raw_userdata.bytesize % 3 == 0
129
+ self.userdata = Base64.strict_encode64(raw_userdata)
130
+ end
122
131
  end
123
132
  end
124
133
  end
@@ -21,7 +21,7 @@ module Ocs
21
21
  end
22
22
 
23
23
  def success?
24
- !content.has_key?("cserrorcode")
24
+ !content.has_key?("errorcode")
25
25
  end
26
26
  end
27
27
  end
@@ -1,3 +1,3 @@
1
1
  module Ocs
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - nownabe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-21 00:00:00.000000000 Z
11
+ date: 2015-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -199,4 +199,3 @@ signing_key:
199
199
  specification_version: 4
200
200
  summary: Ocs is an objective CloudStack API client.
201
201
  test_files: []
202
- has_rdoc: