siba_api 0.1.1 → 0.1.3
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 +4 -4
- data/Gemfile +0 -2
- data/Gemfile.lock +46 -41
- data/lib/siba_api/api.rb +40 -44
- data/lib/siba_api/client.rb +1 -1
- data/lib/siba_api/constants.rb +24 -0
- data/lib/siba_api/version.rb +1 -1
- data/lib/siba_api.rb +2 -36
- data/siba_api.gemspec +3 -3
- metadata +24 -14
- data/lib/siba_api/api/config/property.rb +0 -25
- data/lib/siba_api/api/config/property_set.rb +0 -119
- data/lib/siba_api/api/config.rb +0 -101
- data/lib/siba_api/configuration.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8d53139f0b7019f8f461bf5e10bbf72ee8f1bb4ab848682acff014a21a75a36
|
4
|
+
data.tar.gz: 5735aab02771c80e56e392099c1aa770640b65c565f9cced69359c609b288ebb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b27c3f86f69d3a8ea0dddd7e95ff784129d7d17ac5f4e89811cf31693143fe00c13b5ab859beca477249ecd8e82d57e657a1fb7a73d6498fe6a53d7f8f5820e2
|
7
|
+
data.tar.gz: 358d01d1732f0b91c30c664c27f264bcc9d572512723344a71a38f6d09c02548711f590fe6dd357d96f0aa049b5ae77aa04f208d1221306507f84e68260cca2d
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,62 +1,68 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
siba_api (0.1.
|
5
|
-
|
6
|
-
|
4
|
+
siba_api (0.1.1)
|
5
|
+
dry-configurable (~> 0.12)
|
6
|
+
gyoku (~> 1.4.0)
|
7
|
+
savon (~> 2.13)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
11
|
-
addressable (2.
|
12
|
-
public_suffix (>= 2.0.2, <
|
12
|
+
addressable (2.8.1)
|
13
|
+
public_suffix (>= 2.0.2, < 6.0)
|
13
14
|
akami (1.3.1)
|
14
15
|
gyoku (>= 0.4.0)
|
15
16
|
nokogiri
|
16
17
|
ast (2.4.2)
|
17
18
|
builder (3.2.4)
|
19
|
+
concurrent-ruby (1.1.10)
|
18
20
|
crack (0.4.5)
|
19
21
|
rexml
|
20
|
-
diff-lcs (1.
|
21
|
-
|
22
|
+
diff-lcs (1.5.0)
|
23
|
+
dry-configurable (0.16.1)
|
24
|
+
dry-core (~> 0.6)
|
25
|
+
zeitwerk (~> 2.6)
|
26
|
+
dry-core (0.9.1)
|
27
|
+
concurrent-ruby (~> 1.0)
|
28
|
+
zeitwerk (~> 2.6)
|
22
29
|
gyoku (1.4.0)
|
23
30
|
builder (>= 2.1.2)
|
24
31
|
rexml (~> 3.0)
|
25
32
|
hashdiff (1.0.1)
|
26
|
-
httpi (
|
33
|
+
httpi (3.0.1)
|
27
34
|
rack
|
28
|
-
socksify
|
29
35
|
mail (2.7.1)
|
30
36
|
mini_mime (>= 0.1.1)
|
31
37
|
mini_mime (1.1.2)
|
32
|
-
nokogiri (1.13.
|
38
|
+
nokogiri (1.13.9-aarch64-linux)
|
33
39
|
racc (~> 1.4)
|
34
|
-
nokogiri (1.13.
|
40
|
+
nokogiri (1.13.9-x86_64-linux)
|
35
41
|
racc (~> 1.4)
|
36
42
|
nori (2.6.0)
|
37
|
-
parallel (1.
|
38
|
-
parser (3.
|
43
|
+
parallel (1.22.1)
|
44
|
+
parser (3.1.2.1)
|
39
45
|
ast (~> 2.4.1)
|
40
|
-
public_suffix (
|
46
|
+
public_suffix (5.0.0)
|
41
47
|
racc (1.6.0)
|
42
|
-
rack (
|
43
|
-
rainbow (3.
|
44
|
-
rake (13.0.
|
45
|
-
regexp_parser (2.
|
46
|
-
rexml (3.2.
|
47
|
-
rspec (3.
|
48
|
-
rspec-core (~> 3.
|
49
|
-
rspec-expectations (~> 3.
|
50
|
-
rspec-mocks (~> 3.
|
51
|
-
rspec-core (3.
|
52
|
-
rspec-support (~> 3.
|
53
|
-
rspec-expectations (3.
|
48
|
+
rack (3.0.0)
|
49
|
+
rainbow (3.1.1)
|
50
|
+
rake (13.0.6)
|
51
|
+
regexp_parser (2.6.0)
|
52
|
+
rexml (3.2.5)
|
53
|
+
rspec (3.12.0)
|
54
|
+
rspec-core (~> 3.12.0)
|
55
|
+
rspec-expectations (~> 3.12.0)
|
56
|
+
rspec-mocks (~> 3.12.0)
|
57
|
+
rspec-core (3.12.0)
|
58
|
+
rspec-support (~> 3.12.0)
|
59
|
+
rspec-expectations (3.12.0)
|
54
60
|
diff-lcs (>= 1.2.0, < 2.0)
|
55
|
-
rspec-support (~> 3.
|
56
|
-
rspec-mocks (3.
|
61
|
+
rspec-support (~> 3.12.0)
|
62
|
+
rspec-mocks (3.12.0)
|
57
63
|
diff-lcs (>= 1.2.0, < 2.0)
|
58
|
-
rspec-support (~> 3.
|
59
|
-
rspec-support (3.
|
64
|
+
rspec-support (~> 3.12.0)
|
65
|
+
rspec-support (3.12.0)
|
60
66
|
rubocop (0.93.1)
|
61
67
|
parallel (~> 1.10)
|
62
68
|
parser (>= 2.7.1.5)
|
@@ -66,10 +72,10 @@ GEM
|
|
66
72
|
rubocop-ast (>= 0.6.0)
|
67
73
|
ruby-progressbar (~> 1.7)
|
68
74
|
unicode-display_width (>= 1.4.0, < 2.0)
|
69
|
-
rubocop-ast (1.
|
70
|
-
parser (>=
|
75
|
+
rubocop-ast (1.23.0)
|
76
|
+
parser (>= 3.1.1.0)
|
71
77
|
ruby-progressbar (1.11.0)
|
72
|
-
savon (2.13.
|
78
|
+
savon (2.13.1)
|
73
79
|
akami (~> 1.2)
|
74
80
|
builder (>= 2.1.2)
|
75
81
|
gyoku (~> 1.2)
|
@@ -78,24 +84,23 @@ GEM
|
|
78
84
|
nokogiri (>= 1.8.1)
|
79
85
|
nori (~> 2.4)
|
80
86
|
wasabi (~> 3.4)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
wasabi (3.7.0)
|
87
|
+
unicode-display_width (1.8.0)
|
88
|
+
vcr (6.1.0)
|
89
|
+
wasabi (3.8.0)
|
85
90
|
addressable
|
86
|
-
httpi (~>
|
91
|
+
httpi (~> 3.0)
|
87
92
|
nokogiri (>= 1.4.2)
|
88
|
-
webmock (3.
|
89
|
-
addressable (>= 2.
|
93
|
+
webmock (3.18.1)
|
94
|
+
addressable (>= 2.8.0)
|
90
95
|
crack (>= 0.3.2)
|
91
96
|
hashdiff (>= 0.4.0, < 2.0.0)
|
97
|
+
zeitwerk (2.6.1)
|
92
98
|
|
93
99
|
PLATFORMS
|
94
100
|
aarch64-linux
|
95
101
|
x86_64-linux
|
96
102
|
|
97
103
|
DEPENDENCIES
|
98
|
-
dotenv (~> 2.7)
|
99
104
|
rake (~> 13.0)
|
100
105
|
rspec (~> 3.0)
|
101
106
|
rubocop (~> 0.80)
|
data/lib/siba_api/api.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'api_exceptions'
|
4
|
-
require_relative 'configuration'
|
5
4
|
require_relative 'constants'
|
6
5
|
require_relative 'http_status_codes'
|
6
|
+
require 'dry-configurable'
|
7
7
|
|
8
8
|
module SIBAApi
|
9
9
|
# Core class responsible for api interface operations
|
@@ -11,22 +11,8 @@ module SIBAApi
|
|
11
11
|
include ApiExceptions
|
12
12
|
include Constants
|
13
13
|
include HttpStatusCodes
|
14
|
+
include Dry::Configurable
|
14
15
|
|
15
|
-
attr_reader(*SIBAApi.configuration.property_names)
|
16
|
-
|
17
|
-
attr_accessor :current_options, :last_response
|
18
|
-
|
19
|
-
# Callback to update current configuration options
|
20
|
-
class_eval do
|
21
|
-
SIBAApi.configuration.property_names.each do |key|
|
22
|
-
define_method "#{key}=" do |arg|
|
23
|
-
instance_variable_set("@#{key}", arg)
|
24
|
-
current_options.merge!({ "#{key}": arg })
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
API_WSDL = 'https://siba.sef.pt/bawsdev/boletinsalojamento.asmx?wsdl'
|
30
16
|
HTTP_STATUS_MAPPING = {
|
31
17
|
HTTP_BAD_REQUEST_CODE => BadRequestError,
|
32
18
|
HTTP_UNAUTHORIZED_CODE => UnauthorizedError,
|
@@ -36,15 +22,42 @@ module SIBAApi
|
|
36
22
|
'default' => ApiError
|
37
23
|
}.freeze
|
38
24
|
|
25
|
+
setting :follow_redirects, default: true
|
26
|
+
|
27
|
+
# The value sent in the http header for 'User-Agent' if none is set
|
28
|
+
setting :user_agent, default: "SIBAApi API Ruby Gem #{SIBAApi::VERSION}"
|
29
|
+
|
30
|
+
# By default uses the Faraday connection options if none is set
|
31
|
+
setting :connection_options, default: {}
|
32
|
+
|
33
|
+
# Add Faraday::RackBuilder to overwrite middleware
|
34
|
+
setting :stack
|
35
|
+
|
36
|
+
# WSDL to use for SIBA API
|
37
|
+
setting :wsdl, default: API_WSDL, reader: true
|
38
|
+
|
39
|
+
# Hotel unit
|
40
|
+
setting :hotel_unit, default: API_HOTEL_UNIT, reader: true
|
41
|
+
|
42
|
+
# API Key
|
43
|
+
setting :access_key, default: API_ACCESS_KEY, reader: true
|
44
|
+
|
45
|
+
# Establishment to use
|
46
|
+
setting :establishment, default: API_ESTABLISHMENT, reader: true
|
47
|
+
|
48
|
+
# Hotel Unit complete information
|
49
|
+
setting :hotel_unit_info, default: API_HOTEL_UNIT_INFO, reader: true
|
50
|
+
|
51
|
+
attr_accessor :last_response
|
52
|
+
|
39
53
|
# Create new API
|
40
54
|
#
|
41
55
|
# @api public
|
42
56
|
def initialize(options = {}, &block)
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
send("#{key}=", opts[key])
|
57
|
+
configure do |c|
|
58
|
+
options.each_key do |key|
|
59
|
+
c.send("#{key}=", options[key])
|
60
|
+
end
|
48
61
|
end
|
49
62
|
|
50
63
|
yield_or_eval(&block) if block_given?
|
@@ -63,18 +76,20 @@ module SIBAApi
|
|
63
76
|
|
64
77
|
def client
|
65
78
|
@client ||= Savon.client do |globals|
|
66
|
-
globals.wsdl
|
79
|
+
globals.wsdl config.wsdl
|
67
80
|
globals.log true
|
68
81
|
globals.log_level :debug
|
69
82
|
globals.convert_request_keys_to :camelcase
|
83
|
+
globals.ssl_verify_mode :none # NOTE: As of 2024.07.15 ssl validation is failing
|
84
|
+
# TEST: openssl s_client -showcerts -verify 5 -connect siba.sef.pt:443 < /dev/null
|
70
85
|
end
|
71
86
|
end
|
72
87
|
|
73
88
|
def request(operation:, params: {})
|
74
89
|
default_params = {
|
75
|
-
UnidadeHoteleira:
|
76
|
-
Estabelecimento:
|
77
|
-
ChaveAcesso:
|
90
|
+
UnidadeHoteleira: config.hotel_unit,
|
91
|
+
Estabelecimento: config.establishment,
|
92
|
+
ChaveAcesso: config.access_key
|
78
93
|
}
|
79
94
|
|
80
95
|
response = client.call(operation.to_sym, message: default_params.merge(params))
|
@@ -112,24 +127,5 @@ module SIBAApi
|
|
112
127
|
def response_successful?(response)
|
113
128
|
response.successful? and (response.http.code == HTTP_OK_CODE)
|
114
129
|
end
|
115
|
-
|
116
|
-
# Responds to attribute query or attribute clear
|
117
|
-
#
|
118
|
-
# @api private
|
119
|
-
def method_missing(method_name, *args, &block)
|
120
|
-
# :nodoc:
|
121
|
-
case method_name.to_s
|
122
|
-
when /^(.*)\?$/
|
123
|
-
!send(Regexp.last_match(1).to_s).nil?
|
124
|
-
when /^clear_(.*)$/
|
125
|
-
send("#{Regexp.last_match(1)}=", nil)
|
126
|
-
else
|
127
|
-
super
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def respond_to_missing?(method_name, include_private = false)
|
132
|
-
method_name.to_s.start_with?('clear_') || super
|
133
|
-
end
|
134
130
|
end
|
135
131
|
end
|
data/lib/siba_api/client.rb
CHANGED
data/lib/siba_api/constants.rb
CHANGED
@@ -58,5 +58,29 @@ module SIBAApi
|
|
58
58
|
PARAM_START_PAGE = 'start_page'
|
59
59
|
|
60
60
|
PARAM_INCLUDE_RELATED = 'include_related_objects'
|
61
|
+
|
62
|
+
# Default API config constants
|
63
|
+
API_WSDL = 'https://siba.sef.pt/bawsdev/boletinsalojamento.asmx?wsdl'
|
64
|
+
|
65
|
+
API_HOTEL_UNIT = '121212121'
|
66
|
+
|
67
|
+
API_HOTEL_UNIT_INFO = {
|
68
|
+
'Codigo_Unidade_Hoteleira' => '121212121',
|
69
|
+
'Estabelecimento' => '00',
|
70
|
+
'Nome' => 'Hotel teste',
|
71
|
+
'Abreviatura' => 'teste',
|
72
|
+
'Morada' => 'Rua da Alegria, 172',
|
73
|
+
'Localidade' => 'Portalegre',
|
74
|
+
'Codigo_Postal' => '1000',
|
75
|
+
'Zona_Postal' => '234',
|
76
|
+
'Telefone' => '214017744',
|
77
|
+
'Fax' => '214017766',
|
78
|
+
'Nome_Contacto' => 'Nuno teste',
|
79
|
+
'Email_Contacto' => 'teste.teste@sef.pt'
|
80
|
+
}.freeze
|
81
|
+
|
82
|
+
API_ACCESS_KEY = '999999999'
|
83
|
+
|
84
|
+
API_ESTABLISHMENT = '00'
|
61
85
|
end
|
62
86
|
end
|
data/lib/siba_api/version.rb
CHANGED
data/lib/siba_api.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'savon'
|
4
3
|
require_relative 'siba_api/version'
|
4
|
+
require 'savon'
|
5
5
|
|
6
6
|
# Base module for SIBA API Wrapper
|
7
7
|
module SIBAApi
|
@@ -12,35 +12,6 @@ module SIBAApi
|
|
12
12
|
LIBDIR = File.expand_path(LIBNAME.to_s, __dir__)
|
13
13
|
|
14
14
|
class << self
|
15
|
-
# The client configuration
|
16
|
-
#
|
17
|
-
# @return [Configuration]
|
18
|
-
#
|
19
|
-
# @api public
|
20
|
-
def configuration
|
21
|
-
@configuration ||= Configuration.new
|
22
|
-
end
|
23
|
-
|
24
|
-
alias config configuration
|
25
|
-
|
26
|
-
# Configure options
|
27
|
-
#
|
28
|
-
# @example
|
29
|
-
# SIBAApi.configure do |c|
|
30
|
-
# c.some_option = true
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# @yield the configuration block
|
34
|
-
# @yieldparam configuration [SIBAApi::Configuration]
|
35
|
-
# the configuration instance
|
36
|
-
#
|
37
|
-
# @return [nil]
|
38
|
-
#
|
39
|
-
# @api public
|
40
|
-
def configure
|
41
|
-
yield configuration
|
42
|
-
end
|
43
|
-
|
44
15
|
# Alias for SIBAApi::Client.new
|
45
16
|
#
|
46
17
|
# @param [Hash] options
|
@@ -69,20 +40,15 @@ module SIBAApi
|
|
69
40
|
def method_missing(method_name, *args, &block)
|
70
41
|
if new.respond_to?(method_name)
|
71
42
|
new.send(method_name, *args, &block)
|
72
|
-
elsif configuration.respond_to?(method_name)
|
73
|
-
SIBAApi.configuration.send(method_name, *args, &block)
|
74
43
|
else
|
75
44
|
super.respond_to_missing?
|
76
45
|
end
|
77
46
|
end
|
78
47
|
|
79
48
|
def respond_to_missing?(method_name, include_private = false)
|
80
|
-
new.respond_to?(method_name, include_private) ||
|
81
|
-
configuration.respond_to?(method_name) ||
|
82
|
-
super(method_name, include_private)
|
49
|
+
new.respond_to?(method_name, include_private) || super(method_name, include_private)
|
83
50
|
end
|
84
51
|
end
|
85
52
|
end
|
86
53
|
|
87
54
|
require_relative 'siba_api/client'
|
88
|
-
require_relative 'siba_api/configuration'
|
data/siba_api.gemspec
CHANGED
@@ -30,10 +30,10 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ['lib']
|
31
31
|
|
32
32
|
# Uncomment to register a new dependency of your gem
|
33
|
-
spec.add_dependency 'gyoku', '~> 1.0'
|
34
|
-
spec.add_dependency 'savon', '~> 2.
|
33
|
+
spec.add_dependency 'gyoku', '~> 1.4.0'
|
34
|
+
spec.add_dependency 'savon', '~> 2.13'
|
35
35
|
|
36
|
-
|
36
|
+
spec.add_dependency 'dry-configurable', '~> 0.12'
|
37
37
|
|
38
38
|
# For more information and examples about making a new gem, checkout our
|
39
39
|
# guide at: https://bundler.io/guides/creating_gem.html
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: siba_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dinis
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gyoku
|
@@ -16,28 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.4.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.4.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: savon
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '2.
|
33
|
+
version: '2.13'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '2.
|
40
|
+
version: '2.13'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-configurable
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.12'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.12'
|
41
55
|
description: A gem that implements functions from the SIBA API.
|
42
56
|
email:
|
43
57
|
- dinis@lage.pw
|
@@ -64,12 +78,8 @@ files:
|
|
64
78
|
- docker-compose.yml
|
65
79
|
- lib/siba_api.rb
|
66
80
|
- lib/siba_api/api.rb
|
67
|
-
- lib/siba_api/api/config.rb
|
68
|
-
- lib/siba_api/api/config/property.rb
|
69
|
-
- lib/siba_api/api/config/property_set.rb
|
70
81
|
- lib/siba_api/api_exceptions.rb
|
71
82
|
- lib/siba_api/client.rb
|
72
|
-
- lib/siba_api/configuration.rb
|
73
83
|
- lib/siba_api/constants.rb
|
74
84
|
- lib/siba_api/http_status_codes.rb
|
75
85
|
- lib/siba_api/version.rb
|
@@ -84,7 +94,7 @@ metadata:
|
|
84
94
|
homepage_uri: https://github.com/dlage/siba_api
|
85
95
|
source_code_uri: https://github.com/dlage/siba_api
|
86
96
|
changelog_uri: https://github.com/dlage/siba_api/blob/master/CHANGELOG.md
|
87
|
-
post_install_message:
|
97
|
+
post_install_message:
|
88
98
|
rdoc_options: []
|
89
99
|
require_paths:
|
90
100
|
- lib
|
@@ -99,8 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
109
|
- !ruby/object:Gem::Version
|
100
110
|
version: '0'
|
101
111
|
requirements: []
|
102
|
-
rubygems_version: 3.
|
103
|
-
signing_key:
|
112
|
+
rubygems_version: 3.3.7
|
113
|
+
signing_key:
|
104
114
|
specification_version: 4
|
105
115
|
summary: SEF SIBA API Wrapper for Local Accommodation Bulletin submission.
|
106
116
|
test_files: []
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module SIBAApi
|
4
|
-
class API
|
5
|
-
class Config
|
6
|
-
# Property objects provide an interface for configuration options
|
7
|
-
class Property
|
8
|
-
attr_reader :name, :default, :required
|
9
|
-
|
10
|
-
def initialize(name, options)
|
11
|
-
@name = name
|
12
|
-
@default = options.fetch(:default, nil)
|
13
|
-
@required = options.fetch(:required, nil)
|
14
|
-
@options = options
|
15
|
-
end
|
16
|
-
|
17
|
-
# @api private
|
18
|
-
def define_accessor_methods(properties)
|
19
|
-
properties.define_reader_method(self, name, :public)
|
20
|
-
properties.define_writer_method(self, "#{name}=", :public)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,119 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'set'
|
4
|
-
|
5
|
-
module SIBAApi
|
6
|
-
class API
|
7
|
-
class Config
|
8
|
-
# Class responsible for storing configuration properties
|
9
|
-
class PropertySet
|
10
|
-
include Enumerable
|
11
|
-
|
12
|
-
attr_reader :parent, :properties
|
13
|
-
|
14
|
-
# Initialize an PropertySet
|
15
|
-
#
|
16
|
-
# @param [Object] parent
|
17
|
-
# @param [Set] properties
|
18
|
-
#
|
19
|
-
# @return [undefined]
|
20
|
-
#
|
21
|
-
# @api private
|
22
|
-
def initialize(parent = nil, properties = Set.new)
|
23
|
-
@parent = parent
|
24
|
-
@properties = properties
|
25
|
-
@map = {}
|
26
|
-
end
|
27
|
-
|
28
|
-
# Iterate over properties
|
29
|
-
#
|
30
|
-
# @yield [property]
|
31
|
-
#
|
32
|
-
# @yieldparam [Property] property
|
33
|
-
#
|
34
|
-
# @return [self]
|
35
|
-
#
|
36
|
-
# @api public
|
37
|
-
def each
|
38
|
-
return to_enum unless block_given?
|
39
|
-
|
40
|
-
@map.each { |name, property| yield property if name.is_a?(Symbol) }
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
|
-
# Adds property to the set
|
45
|
-
#
|
46
|
-
# @example
|
47
|
-
# properties_set << property
|
48
|
-
#
|
49
|
-
# @param [Property] property
|
50
|
-
#
|
51
|
-
# @return [self]
|
52
|
-
#
|
53
|
-
# @api public
|
54
|
-
def <<(property)
|
55
|
-
properties << property
|
56
|
-
update_map(property.name, property.default)
|
57
|
-
property.define_accessor_methods(self)
|
58
|
-
self
|
59
|
-
end
|
60
|
-
|
61
|
-
# Access property by name
|
62
|
-
#
|
63
|
-
# @api public
|
64
|
-
def [](name)
|
65
|
-
@map[name]
|
66
|
-
end
|
67
|
-
alias fetch []
|
68
|
-
|
69
|
-
# Set property value by name
|
70
|
-
#
|
71
|
-
# @api public
|
72
|
-
def []=(name, property)
|
73
|
-
update_map(name, property)
|
74
|
-
end
|
75
|
-
|
76
|
-
# Update map with index
|
77
|
-
#
|
78
|
-
# @api private
|
79
|
-
def update_map(name, property)
|
80
|
-
@map[name.to_sym] = @map[name.to_s.freeze] = property
|
81
|
-
end
|
82
|
-
|
83
|
-
# Convert properties to a hash of property names and
|
84
|
-
# corresponding values
|
85
|
-
#
|
86
|
-
# @api public
|
87
|
-
def to_hash
|
88
|
-
properties.each_with_object({}) do |property, props|
|
89
|
-
name = property.name
|
90
|
-
props[name] = self[name]
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# Check if properties exist
|
95
|
-
#
|
96
|
-
# @api public
|
97
|
-
def empty?
|
98
|
-
@map.empty?
|
99
|
-
end
|
100
|
-
|
101
|
-
# @api private
|
102
|
-
def define_reader_method(property, method_name, visibility)
|
103
|
-
property_set = self
|
104
|
-
parent.send(:define_method, method_name) { property_set[property.name] }
|
105
|
-
parent.send(visibility, method_name)
|
106
|
-
end
|
107
|
-
|
108
|
-
# @api private
|
109
|
-
def define_writer_method(property, method_name, visibility)
|
110
|
-
property_set = self
|
111
|
-
parent.send(:define_method, method_name) do |value|
|
112
|
-
property_set[property.name] = value
|
113
|
-
end
|
114
|
-
parent.send(visibility, method_name)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
data/lib/siba_api/api/config.rb
DELETED
@@ -1,101 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'config/property'
|
4
|
-
require_relative 'config/property_set'
|
5
|
-
|
6
|
-
module SIBAApi
|
7
|
-
class API
|
8
|
-
# A base class for constructing api configuration
|
9
|
-
class Config
|
10
|
-
# Defines a property on an object's class or instance
|
11
|
-
#
|
12
|
-
# @example
|
13
|
-
# class Configuration < Api::Config
|
14
|
-
# property :adapter, default: :net_http
|
15
|
-
# property :user, required: true
|
16
|
-
# end
|
17
|
-
#
|
18
|
-
# @param [Symbol] name
|
19
|
-
# the name of a property
|
20
|
-
#
|
21
|
-
# @param [#to_hash] options
|
22
|
-
# the extra options
|
23
|
-
#
|
24
|
-
# @return [self]
|
25
|
-
#
|
26
|
-
# @api public
|
27
|
-
def self.property(name, options = {})
|
28
|
-
property_set << Property.new(name, options)
|
29
|
-
update_subclasses(name, options)
|
30
|
-
self
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.update_subclasses(name, options)
|
34
|
-
@subclasses.each { |klass| klass.property(name, options) } if defined?(@subclasses) && @subclasses
|
35
|
-
end
|
36
|
-
|
37
|
-
# Check if property is defined
|
38
|
-
#
|
39
|
-
# @param [Symbol] name
|
40
|
-
# the name to check
|
41
|
-
#
|
42
|
-
# @return [Boolean]
|
43
|
-
#
|
44
|
-
# @api public
|
45
|
-
def self.property?(name)
|
46
|
-
property_set.include?(name)
|
47
|
-
end
|
48
|
-
|
49
|
-
class << self
|
50
|
-
attr_reader :property_set
|
51
|
-
end
|
52
|
-
|
53
|
-
instance_variable_set('@property_set', PropertySet.new(self))
|
54
|
-
|
55
|
-
def self.inherited(descendant)
|
56
|
-
super
|
57
|
-
(@subclasses ||= Set.new) << descendant
|
58
|
-
descendant.instance_variable_set(
|
59
|
-
'@property_set',
|
60
|
-
PropertySet.new(descendant, property_set.properties.dup)
|
61
|
-
)
|
62
|
-
end
|
63
|
-
|
64
|
-
def property_names
|
65
|
-
self.class.property_set.properties.map(&:name)
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.property_names
|
69
|
-
property_set.properties.map(&:name)
|
70
|
-
end
|
71
|
-
|
72
|
-
# Fetch all the properties and their values
|
73
|
-
#
|
74
|
-
# @return [Hash[Symbol]]
|
75
|
-
#
|
76
|
-
# @api public
|
77
|
-
def fetch(value = nil)
|
78
|
-
if value
|
79
|
-
self.class.property_set[value]
|
80
|
-
else
|
81
|
-
self.class.property_set.to_hash
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# Provide access to properties
|
86
|
-
#
|
87
|
-
# @example
|
88
|
-
# config.call do |config|
|
89
|
-
# config.adapter = :net_http
|
90
|
-
# end
|
91
|
-
#
|
92
|
-
# @return [self]
|
93
|
-
#
|
94
|
-
# @api private
|
95
|
-
def call(&block)
|
96
|
-
block.call(self) if block_given?
|
97
|
-
self
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'api/config'
|
4
|
-
require_relative 'version'
|
5
|
-
|
6
|
-
module SIBAApi
|
7
|
-
# Stores the configuration
|
8
|
-
class Configuration < API::Config
|
9
|
-
property :follow_redirects, default: true
|
10
|
-
|
11
|
-
# The value sent in the http header for 'User-Agent' if none is set
|
12
|
-
property :user_agent, default: "SIBAApi API Ruby Gem #{SIBAApi::VERSION}"
|
13
|
-
|
14
|
-
# By default uses the Faraday connection options if none is set
|
15
|
-
property :connection_options, default: {}
|
16
|
-
|
17
|
-
# Add Faraday::RackBuilder to overwrite middleware
|
18
|
-
property :stack
|
19
|
-
|
20
|
-
# WSDL to use for SIBA API
|
21
|
-
property :wsdl, default: 'https://siba.sef.pt/bawsdev/boletinsalojamento.asmx?wsdl'
|
22
|
-
|
23
|
-
# Hotel unit
|
24
|
-
property :hotel_unit, default: '121212121'
|
25
|
-
|
26
|
-
# API Key
|
27
|
-
property :access_key, default: '999999999'
|
28
|
-
|
29
|
-
# Establishment to use
|
30
|
-
property :establishment, default: '00'
|
31
|
-
|
32
|
-
# Hotel Unit complete information
|
33
|
-
property :hotel_unit_info, default: {
|
34
|
-
'Codigo_Unidade_Hoteleira' => '121212121',
|
35
|
-
'Estabelecimento' => '00',
|
36
|
-
'Nome' => 'Hotel teste',
|
37
|
-
'Abreviatura' => 'teste',
|
38
|
-
'Morada' => 'Rua da Alegria, 172',
|
39
|
-
'Localidade' => 'Portalegre',
|
40
|
-
'Codigo_Postal' => '1000',
|
41
|
-
'Zona_Postal' => '234',
|
42
|
-
'Telefone' => '214017744',
|
43
|
-
'Fax' => '214017766',
|
44
|
-
'Nome_Contacto' => 'Nuno teste',
|
45
|
-
'Email_Contacto' => 'teste.teste@sef.pt'
|
46
|
-
}
|
47
|
-
end
|
48
|
-
end
|