softlayer 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: beb400af02666f554f5a060246e92fb1ba3df387
4
- data.tar.gz: d7c85d3b78eea84b2bf185ffbba6aba383115798
3
+ metadata.gz: 5a16ca70dcbda31e591758d296bbaf4f7d21a0cb
4
+ data.tar.gz: 2aa960fbd9fb2794cfed46fadac95dc2ef52a509
5
5
  SHA512:
6
- metadata.gz: 33ab36f13f61b4714ded223b1fe2745ddf068b6742da298e2a70d55f9aba396bea6fb884b5399d7cc1e82b360a1e857277950bc0c44ba607ea064ccf3c4fae38
7
- data.tar.gz: f2c4527286a9c9c8c126eca28c84975efbe5bad18148d093d6721e3eb3458de688fab4baa2ab0d578d3d0dae384e1456e62a610b3ab964e4b8973dce26ed20d3
6
+ metadata.gz: f8db194bb0b5c0478f7f92b37e28a04e3dbab6fce200817b1b43d9a8b117c7433d3edae495592dac724c95fac9d942386dba7bebcd6e66f10ab640d9b5ce6c64
7
+ data.tar.gz: 0d6b13032ba198aa15010c4e95c62d77602f25056e37986e3716c0a05b47a4538b1ecd0f2ea76c5b8833f240b6d2ca11897364650c18940220d7ce17c4f37d66
data/README.md CHANGED
@@ -41,11 +41,11 @@ Softlayer::Account.get_virtual_guests
41
41
 
42
42
  ## README Driven Development
43
43
 
44
- * Add support for Object Masks
45
- * Add support for Object Filters
44
+ * Improve support for masks and filters (parse a better format instead of using ruby hash)
46
45
 
47
46
  ## Known Issues
48
47
 
48
+ * Mask and Filter not working correctly with `SoftLayer_Account` calls
49
49
  * Using Savon master until a version is released containing the commit to support rpc/encoded XML
50
50
  * Actually arrays are being wrongly mapped, so when we pass an argument containing **one** array, we need to pass inside another array, like this:
51
51
 
@@ -1,15 +1,6 @@
1
1
  module Softlayer
2
2
  class Client < Savon::Client
3
- class << self
4
- def call(method, message = {})
5
- safe do
6
- resp = super method, message: message
7
- resp.to_hash["#{method}_response".to_sym]["#{method}_return".to_sym]
8
- end
9
- end
10
- end
11
3
 
12
- # Create a new client.
13
4
  def initialize(service)
14
5
  @service = service
15
6
  super client_params
@@ -48,7 +39,9 @@ module Softlayer
48
39
  end
49
40
 
50
41
  def client_params
51
- { wsdl: "https://api.softlayer.com/soap/v3.1/#{@service}?wsdl" }.tap do |params|
42
+ # Use the already downloaded wsdl files, this speeds up A LOT!
43
+ wsdl_file = File.join(File.dirname(Softlayer.root), 'data', @service.sub('SoftLayer_', '') + '.wsdl')
44
+ { wsdl: wsdl_file }.tap do |params|
52
45
  params[:open_timeout] = Softlayer.configuration.open_timeout if Softlayer.configuration.open_timeout
53
46
  params[:read_timeout] = Softlayer.configuration.read_timeout if Softlayer.configuration.read_timeout
54
47
  params[:soap_header] = auth_params
@@ -0,0 +1,16 @@
1
+ module Softlayer
2
+ class Model
3
+ class Filter
4
+ def initialize(service_name, filter)
5
+ @service_name = service_name
6
+ @filter = filter
7
+ end
8
+
9
+ def to_header
10
+ {
11
+ "#{@service_name}ObjectFilter" => @filter
12
+ }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ module Softlayer
2
+ class Model
3
+ class Limit
4
+ def initialize(limit, offset = 0)
5
+ @limit = limit
6
+ @offset = offset
7
+ end
8
+
9
+ def to_header
10
+ {
11
+ 'resultLimit' => {
12
+ 'limit' => @limit,
13
+ 'offset' => @offset
14
+ }
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ module Softlayer
2
+ class Model
3
+ class Mask
4
+ def initialize(service_name, mask)
5
+ @service_name = service_name
6
+ @mask = mask
7
+ end
8
+
9
+ def to_header
10
+ {
11
+ "#{@service_name}ObjectMask" => {
12
+ 'mask' => @mask
13
+ }
14
+ }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,44 @@
1
+ module Softlayer
2
+ class Model
3
+ module Operations
4
+ def self.included(base)
5
+ base.send(:attr_accessor, :headers)
6
+ end
7
+
8
+ def self.extended(klass)
9
+ klass.define_singleton_method("headers=") { |headers| @headers = headers }
10
+ klass.define_singleton_method("headers") { @headers }
11
+ end
12
+
13
+ def filter(filter)
14
+ @filter = Filter.new(service_name, filter) if filter.is_a? Hash
15
+ @filter = filter if filter.is_a? Filter
16
+ self
17
+ end
18
+
19
+ def limit(limit, offset = 0)
20
+ @limit = Limit.new(limit, offset)
21
+ self
22
+ end
23
+
24
+ def mask(mask)
25
+ @mask = Mask.new(service_name, mask) if mask.is_a? Hash
26
+ @mask = mask if mask.is_a? Mask
27
+ self
28
+ end
29
+
30
+ def request_headers
31
+ headers = {}
32
+ headers.merge!(@headers) if @headers
33
+ @headers = nil
34
+ %w(filter limit mask).each do |header|
35
+ if instance_variable_get("@#{header}")
36
+ headers.merge!(instance_variable_get("@#{header}").to_header)
37
+ instance_variable_set("@#{header}", nil)
38
+ end
39
+ end
40
+ headers
41
+ end
42
+ end
43
+ end
44
+ end
@@ -2,7 +2,14 @@ require 'softlayer/generator/converter'
2
2
 
3
3
  module Softlayer #:nodoc:
4
4
  class Model
5
- autoload :Response,'softlayer/model/response'
5
+ autoload :Filter, 'softlayer/model/filter'
6
+ autoload :Limit, 'softlayer/model/limit'
7
+ autoload :Mask, 'softlayer/model/mask'
8
+ autoload :Operations, 'softlayer/model/operations'
9
+ autoload :Response, 'softlayer/model/response'
10
+
11
+ include Operations
12
+ extend Operations
6
13
 
7
14
  class << self
8
15
  # user friendly methods
@@ -10,6 +17,7 @@ module Softlayer #:nodoc:
10
17
  object = self.new.tap do |obj|
11
18
  obj.id = id.to_s
12
19
  end
20
+ object.headers = request_headers
13
21
  object.get_object
14
22
  end
15
23
 
@@ -20,20 +28,27 @@ module Softlayer #:nodoc:
20
28
  def all
21
29
  request = all_request_for(self)
22
30
  return nil if request.nil?
31
+ Softlayer::Account.headers = request_headers
23
32
  Softlayer::Account.send(request)
24
33
  end
25
34
 
26
- def request(method, return_object, message = {})
27
- service_name = Generator::Converter.to_softlayer_name(self.to_s)
28
- service_name = self.class::SERVICE if defined?(self.class::SERVICE)
29
- return Softlayer::Mock.request(service_name, method, return_object, message) if Softlayer.mock?
30
- parse(Softlayer::Client.new(service_name).call(method, message), return_object, method)
35
+ def request(method, return_object, message = {}, headers = {})
36
+ headers.merge! request_headers
37
+
38
+ return Softlayer::Mock.request(service_name, method, return_object, message, headers) if Softlayer.mock?
39
+ parse(Softlayer::Client.new(service_name).call(method, message, headers), return_object, method)
31
40
  end
32
41
 
33
42
  def parse(hash, return_object, method)
34
43
  Response.new(hash).process(return_object)
35
44
  end
36
45
 
46
+ def service_name
47
+ name = Generator::Converter.to_softlayer_name(self.to_s)
48
+ name = self::SERVICE if defined?(self::SERVICE)
49
+ name
50
+ end
51
+
37
52
  def all_request_for(klass)
38
53
  klass = klass.to_s
39
54
  requests = {
@@ -105,19 +120,22 @@ module Softlayer #:nodoc:
105
120
  end
106
121
 
107
122
  def request(method, return_object, message = {})
108
- service_name = Generator::Converter.to_softlayer_name(self.class.to_s)
109
- service_name = self.class::SERVICE if defined?(self.class::SERVICE)
110
- init_headers = {
111
- "#{service_name}InitParameters" => {
112
- "id" => self.id.to_i
113
- }
114
- }
115
- return Softlayer::Mock.request(service_name, method, return_object, message, init_headers) if Softlayer.mock?
116
- self.class.parse(Softlayer::Client.new(service_name).call(method, message, init_headers), return_object, method)
123
+ headers = request_headers.merge(init_headers)
124
+
125
+ self.class.request(method, return_object, message, headers)
117
126
  end
118
127
 
119
128
  def to_hash
120
129
  (self.class.to_s+"::Representer").constantize.new(self).to_hash
121
130
  end
131
+
132
+ def init_headers
133
+ raise Exception.new('You need to set the ID on object') if id.nil?
134
+ {
135
+ "#{self.class.service_name}InitParameters" => {
136
+ "id" => self.id.to_i
137
+ }
138
+ }
139
+ end
122
140
  end
123
141
  end
@@ -1,5 +1,5 @@
1
1
  module Softlayer
2
- module Network
2
+ class Network
3
3
  module Bandwidth
4
4
  module Version1
5
5
  autoload :Allocation, 'softlayer/network/bandwidth/version1/allocation'
@@ -1,5 +1,5 @@
1
1
  module Softlayer
2
- module Network
2
+ class Network
3
3
  module Bandwidth
4
4
  autoload :Usage, 'softlayer/network/bandwidth/usage'
5
5
  autoload :Version1, 'softlayer/network/bandwidth/version1'
@@ -1,3 +1,3 @@
1
1
  module Softlayer
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/softlayer.rb CHANGED
@@ -72,6 +72,10 @@ module Softlayer
72
72
  # Softlayer gem configuration.
73
73
  attr_accessor :configuration
74
74
 
75
+ def root
76
+ File.dirname(__FILE__)
77
+ end
78
+
75
79
  # Returns true if the gem has been configured.
76
80
  def configured?
77
81
  configuration.present?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: softlayer
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
  - Celso Fernandes
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-28 00:00:00.000000000 Z
11
+ date: 2016-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: excon
@@ -1434,6 +1434,10 @@ files:
1434
1434
  - lib/softlayer/mock/ticket.rb
1435
1435
  - lib/softlayer/mock/virtual/guest.rb
1436
1436
  - lib/softlayer/model.rb
1437
+ - lib/softlayer/model/filter.rb
1438
+ - lib/softlayer/model/limit.rb
1439
+ - lib/softlayer/model/mask.rb
1440
+ - lib/softlayer/model/operations.rb
1437
1441
  - lib/softlayer/model/response.rb
1438
1442
  - lib/softlayer/monitoring.rb
1439
1443
  - lib/softlayer/monitoring/agent.rb