ocs 0.0.4 → 0.0.5

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.
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: