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