landb 0.0.4
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.
- data/lib/landb.rb +3 -0
- data/lib/landb/landb_client.rb +133 -0
- data/lib/landb/landb_responce.rb +36 -0
- metadata +48 -0
data/lib/landb.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
class LandbClient
|
2
|
+
|
3
|
+
def self.instance
|
4
|
+
@@instance ||= LandbClient.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.set_config(config)
|
8
|
+
@@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.flush
|
12
|
+
@@instance = LandbClient.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
# Get the configurations. arguments are: wsdl, username, password.
|
17
|
+
if !@@config
|
18
|
+
return
|
19
|
+
end
|
20
|
+
|
21
|
+
# Make HTTPI silent.
|
22
|
+
HTTPI.log = false
|
23
|
+
|
24
|
+
# Make savon silent.
|
25
|
+
Savon.configure do |savon_config|
|
26
|
+
savon_config.log = false
|
27
|
+
end
|
28
|
+
|
29
|
+
# Getting the SOAP client with WSDL specifications.
|
30
|
+
@client = Savon.client(@@config["wsdl"])
|
31
|
+
@client.http.auth.ssl.verify_mode = :none
|
32
|
+
|
33
|
+
|
34
|
+
# Create a hash that contains all the operations and arguments that SOAP server supports.
|
35
|
+
# e.g. The get_auth_token action is taking 3 arguments: Login, Password, Type.
|
36
|
+
@operations_to_arguments_hash = get_all_operations_and_arguments
|
37
|
+
|
38
|
+
# For each action the SOAP server supports, we create a dynamic method for our class.
|
39
|
+
@client.wsdl.soap_actions.each do |method_name|
|
40
|
+
# Ruby method "send" helps us to create the methods of the class.
|
41
|
+
self.class.send :define_method, method_name do |arg|
|
42
|
+
|
43
|
+
# Error handling for arguments.
|
44
|
+
arg = arg.to_a unless arg.instance_of? Array
|
45
|
+
|
46
|
+
if arg.count != @operations_to_arguments_hash[method_name].count
|
47
|
+
puts "Arguments are: #{@operations_to_arguments_hash[method_name].inspect}"
|
48
|
+
puts 'Arguments should be in an array. e.g. ["test", "test2"]'
|
49
|
+
return
|
50
|
+
end
|
51
|
+
|
52
|
+
# For each action we have, we must integrate it with Savon.
|
53
|
+
response = @client.request(:message, method_name) do |soap|
|
54
|
+
# We are dynamically creating the content of the SOAP request.
|
55
|
+
soap.header = {"Auth" => {"token" => @auth_token } } if @auth_token
|
56
|
+
|
57
|
+
soap.body = {}
|
58
|
+
|
59
|
+
i = 0
|
60
|
+
# The operations_to_arguments_hash hash has all the needed arguments for the request.
|
61
|
+
# We populate the soap arguments with the user arguments.
|
62
|
+
@operations_to_arguments_hash[method_name].each do |soap_argument|
|
63
|
+
soap.body.merge! soap_argument => arg[i]
|
64
|
+
i+=1
|
65
|
+
end
|
66
|
+
|
67
|
+
# Savon tutorials infoms that if you are using ruby<1.9 there might be problems with the order.
|
68
|
+
# This is a workaround to this problem.
|
69
|
+
soap.body.merge! :order! => @operations_to_arguments_hash[method_name]
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
# We are setting the auth token automatically when existes.
|
74
|
+
if response.to_hash[:get_auth_token_response]
|
75
|
+
@auth_token = response.to_hash[:get_auth_token_response][:token]
|
76
|
+
end
|
77
|
+
|
78
|
+
LandbResponse.new(response.to_hash["#{method_name}_response".to_sym])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# There is a bug in the current version of Savon.(?)(i am using 1.1.0) This is a workarround.
|
83
|
+
# Ref: https://github.com/rubiii/savon/pull/275
|
84
|
+
@client = Savon.client do |wsdl|
|
85
|
+
wsdl.endpoint = @client.wsdl.endpoint.to_s
|
86
|
+
wsdl.namespace = @client.wsdl.namespace
|
87
|
+
end
|
88
|
+
@client.http.auth.ssl.verify_mode = :none
|
89
|
+
|
90
|
+
# Initialize the token, so the client would be ready for usage
|
91
|
+
# only if name and password have been provided
|
92
|
+
|
93
|
+
if (!@@config['username'].nil? || !@@config['password'].nil?)
|
94
|
+
self.get_auth_token [@@config["username"], @@config["password"], "NICE"]
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
def print_auth_token
|
100
|
+
@auth_token
|
101
|
+
end
|
102
|
+
|
103
|
+
def help_all_operations
|
104
|
+
@operations_to_arguments_hash.keys
|
105
|
+
end
|
106
|
+
|
107
|
+
def help_arguments_for_operation(operation)
|
108
|
+
@operations_to_arguments_hash[operation.to_sym]
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
# This method is mapping all operations, that are declared at WSDL, and their arguments in order.
|
114
|
+
# e.g. Gets get_auth_token and find that the arguments of this operation is: [:login, :password, :type].
|
115
|
+
def get_all_operations_and_arguments
|
116
|
+
hash = {}
|
117
|
+
|
118
|
+
@client.wsdl.parser.document.xpath('wsdl:definitions/wsdl:binding/wsdl:operation').each do |action|
|
119
|
+
action.children.each do |child_node|
|
120
|
+
next unless child_node.element? && child_node.name == "input"
|
121
|
+
|
122
|
+
child_node.children.each do |att|
|
123
|
+
hash[action.attributes["name"].value.snakecase.to_sym] ||= []
|
124
|
+
next unless att.element?
|
125
|
+
next if att.attributes["parts"].nil?
|
126
|
+
hash[action.attributes["name"].value.snakecase.to_sym] = att.attributes["parts"].value.split(" ").collect {|p| p.snakecase.to_sym }
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
hash
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class LandbResponse
|
2
|
+
|
3
|
+
def initialize(hash)
|
4
|
+
hash.each do |k,v|
|
5
|
+
next if k.to_s =~ /@|:/
|
6
|
+
|
7
|
+
if v.instance_of? Hash
|
8
|
+
self.instance_variable_set("@#{k}", LandbResponse.new(v)) ## create and initialize an instance variable for this hash.
|
9
|
+
else
|
10
|
+
self.instance_variable_set("@#{k}", v) ## create and initialize an instance variable for this key/value pair.
|
11
|
+
end
|
12
|
+
self.class.send(:define_method, k, proc{self.instance_variable_get("@#{k}")}) ## create the getter that returns the instance variable
|
13
|
+
self.class.send(:define_method, "#{k}=", proc{|v| self.instance_variable_set("@#{k}", v)}) ## create the setter that sets the instance variable
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_values_for_paths paths_array
|
18
|
+
responces = []
|
19
|
+
|
20
|
+
paths_array.each do |path|
|
21
|
+
responces << get_value_for_path(path)
|
22
|
+
end
|
23
|
+
|
24
|
+
responces
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_value_for_path path_array
|
28
|
+
responce_runner = self
|
29
|
+
|
30
|
+
path_array.each do |domain|
|
31
|
+
responce_runner = responce_runner.send domain.to_sym
|
32
|
+
end
|
33
|
+
|
34
|
+
responce_runner
|
35
|
+
end
|
36
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: landb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Anastasios Andronidis, Daniel Lobato Garcia
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-17 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: This is a WSDL dynamic wrapper for lanDB to puppet use. It's writen from
|
15
|
+
Anastasis Andronidis as an OpenLab Summer Student project
|
16
|
+
email: anastasis90@yahoo.gr
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/landb/landb_responce.rb
|
22
|
+
- lib/landb/landb_client.rb
|
23
|
+
- lib/landb.rb
|
24
|
+
homepage: https://gitgw.cern.ch/gitweb/?p=gem-landb.git;a=summary;js=1
|
25
|
+
licenses: []
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 1.8.24
|
45
|
+
signing_key:
|
46
|
+
specification_version: 3
|
47
|
+
summary: This is a WSDL dynamic wrapper for lanDB to puppet use.
|
48
|
+
test_files: []
|