sentofu 0.1.0 → 0.2.0
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/CHANGELOG.md +7 -0
- data/lib/sentofu/api.rb +2 -5
- data/lib/sentofu/http.rb +35 -22
- data/lib/sentofu.rb +43 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b7dc29a9728152c3aa6e84c7112e37743b19e5261ede35083a8937e92763376
|
4
|
+
data.tar.gz: '009438a0d7a8d47de159407759b396632292bd77457381cf52826bab414236c5'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aeab8b37e947bd378312f9d6505501884b299e68600d314632729804d58c1fee6da15ebdfe0e9890b82ad21be15906faaa99bd2f173e16c0e037d3c8ed6d0784
|
7
|
+
data.tar.gz: 887c2f98f8b238157cef6fc711cced2634c51a26d096d34e5c4e645e10631719dcfbc19a488b5223c19263d7cd19322078c5b4452e402f2e91a507db7238942e
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
# CHANGELOG.md
|
3
3
|
|
4
4
|
|
5
|
+
## sentofu 0.2.0 released 2019-05-29
|
6
|
+
|
7
|
+
* Accept a directory for Sentofu.init(x)
|
8
|
+
* Return a Hash error message on JSON parse error
|
9
|
+
* Track request elapsed time
|
10
|
+
|
11
|
+
|
5
12
|
## sentofu 0.1.0 released 2019-05-23
|
6
13
|
|
7
14
|
* Initial implementation
|
data/lib/sentofu/api.rb
CHANGED
@@ -49,9 +49,6 @@ module Sentofu
|
|
49
49
|
|
50
50
|
def fetch(segment, point, index, query)
|
51
51
|
|
52
|
-
#p [ :fetch, segment, '(point)', index, query ]
|
53
|
-
#p path(segment)
|
54
|
-
#pp point
|
55
52
|
Thread.current.thread_variable_set(TVP + segment, index) if index
|
56
53
|
|
57
54
|
q = rectify_query_parameters(point, query)
|
@@ -63,7 +60,7 @@ module Sentofu
|
|
63
60
|
|
64
61
|
return query.merge(path: pa) if query[:debug]
|
65
62
|
|
66
|
-
|
63
|
+
Sentofu::Http.get_and_parse(pa, api.token)
|
67
64
|
end
|
68
65
|
|
69
66
|
def path
|
@@ -184,7 +181,7 @@ module Sentofu
|
|
184
181
|
|
185
182
|
return params.merge(path: pa) if params[:debug]
|
186
183
|
|
187
|
-
|
184
|
+
Sentofu::Http.get_and_parse(pa, token)
|
188
185
|
end
|
189
186
|
|
190
187
|
def modified
|
data/lib/sentofu/http.rb
CHANGED
@@ -7,54 +7,67 @@ module Sentofu
|
|
7
7
|
|
8
8
|
def fetch_token(credentials=nil)
|
9
9
|
|
10
|
-
u = URI(Sentofu.auth_uri)
|
11
|
-
|
12
10
|
cs = narrow_credentials(credentials)
|
13
11
|
|
14
12
|
a = Base64.encode64("#{cs.id}:#{cs.secret}").strip
|
15
|
-
#p a
|
16
13
|
|
17
|
-
req = Net::HTTP::Post.new(
|
14
|
+
req = Net::HTTP::Post.new(Sentofu.auth_uri)
|
18
15
|
req.add_field('Content-Type', 'application/json')
|
19
16
|
req.add_field('Authorization', a)
|
20
17
|
|
21
18
|
req.body = JSON.dump(
|
22
19
|
grant_type: 'password', username: cs.user, password: cs.pass)
|
23
20
|
|
24
|
-
|
25
|
-
|
26
|
-
Sentofu::Token.new(res)
|
21
|
+
Sentofu::Token.new(request(Sentofu.auth_uri, req))
|
27
22
|
end
|
28
23
|
|
29
24
|
def get(uri, token=nil)
|
30
25
|
|
31
|
-
|
26
|
+
request(uri, make_get_req(uri, token))
|
27
|
+
end
|
28
|
+
|
29
|
+
def request(uri, req)
|
30
|
+
|
31
|
+
u = uri.is_a?(String) ? URI(uri) : uri
|
32
|
+
|
33
|
+
t0 = monow
|
34
|
+
|
35
|
+
t = Net::HTTP.new(u.host, u.port)
|
36
|
+
t.use_ssl = (u.scheme == 'https')
|
37
|
+
#t.set_debug_output($stdout) if u.to_s.match(/search/)
|
32
38
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
39
|
+
res = t.request(req)
|
40
|
+
|
41
|
+
class << res; attr_accessor :_elapsed; end
|
42
|
+
res._elapsed = monow - t0
|
37
43
|
|
38
44
|
res
|
39
45
|
end
|
40
46
|
|
41
47
|
def get_and_parse(uri, token=nil)
|
42
48
|
|
43
|
-
|
44
|
-
|
49
|
+
res = get(uri, token)
|
50
|
+
r = JSON.parse(res.body)
|
51
|
+
r[:_elapsed] = res._elapsed
|
45
52
|
|
46
|
-
|
53
|
+
r
|
47
54
|
|
48
|
-
|
55
|
+
rescue JSON::ParserError => pe
|
49
56
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
57
|
+
h = {}
|
58
|
+
h[:code] = res.code.to_i
|
59
|
+
h[:message] = WEBrick::HTTPStatus.reason_phrase(res.code)
|
60
|
+
h[:error_class] = pe.class.to_s
|
61
|
+
h[:error_message] = pe.message
|
62
|
+
h[:body] = res.body unless res.body.index('</html>')
|
54
63
|
|
55
|
-
|
64
|
+
h
|
56
65
|
end
|
57
66
|
|
67
|
+
protected
|
68
|
+
|
69
|
+
def monow; Process.clock_gettime(Process::CLOCK_MONOTONIC); end
|
70
|
+
|
58
71
|
def make_get_req(uri, token)
|
59
72
|
|
60
73
|
req = Net::HTTP::Get.new(uri.to_s)
|
@@ -65,7 +78,6 @@ module Sentofu
|
|
65
78
|
req.set_header('Accept', 'application/json')
|
66
79
|
|
67
80
|
req.set_header('Authorization', token.header_value) if token
|
68
|
-
#pp req.instance_variable_get(:@header)
|
69
81
|
|
70
82
|
req
|
71
83
|
end
|
@@ -93,6 +105,7 @@ module Sentofu
|
|
93
105
|
def initialize(res)
|
94
106
|
|
95
107
|
@h = JSON.parse(res.body)
|
108
|
+
@h[:_elapsed] = res._elapsed
|
96
109
|
@expires_at = Time.now + @h['expires_in']
|
97
110
|
end
|
98
111
|
|
data/lib/sentofu.rb
CHANGED
@@ -3,6 +3,7 @@ require 'json'
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'time'
|
5
5
|
require 'base64'
|
6
|
+
require 'webrick' # for the http code to message mapping
|
6
7
|
require 'ostruct'
|
7
8
|
require 'net/http'
|
8
9
|
|
@@ -13,7 +14,7 @@ require 'sentofu/explo'
|
|
13
14
|
|
14
15
|
module Sentofu
|
15
16
|
|
16
|
-
VERSION = '0.
|
17
|
+
VERSION = '0.2.0'
|
17
18
|
|
18
19
|
USER_AGENT =
|
19
20
|
"Sentofu #{Sentofu::VERSION} - " +
|
@@ -31,6 +32,38 @@ module Sentofu
|
|
31
32
|
|
32
33
|
def init(versions=%w[ common:1.0.0 company:1.0.0 markets:1.0.0 ])
|
33
34
|
|
35
|
+
if versions.is_a?(String) && File.directory?(versions)
|
36
|
+
init_from_dir(versions)
|
37
|
+
else
|
38
|
+
init_from_swagger(versions)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def credentials=(cs)
|
43
|
+
|
44
|
+
apis.each { |_, api| api.credentials = cs }
|
45
|
+
end
|
46
|
+
|
47
|
+
protected
|
48
|
+
|
49
|
+
def init_from_dir(dir)
|
50
|
+
|
51
|
+
paths = Dir[File.join(dir, 'api_*.yaml')]
|
52
|
+
|
53
|
+
fail RuntimeError.new("no api yaml files under #{dir.inspect}") \
|
54
|
+
if paths.empty?
|
55
|
+
|
56
|
+
paths.each do |path|
|
57
|
+
|
58
|
+
api_name = path.match(/api_([^_]+)_\d/)[1]
|
59
|
+
api_spec = YAML.load(File.read(path))
|
60
|
+
|
61
|
+
init_api(api_name, api_spec)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def init_from_swagger(versions)
|
66
|
+
|
34
67
|
vers = split_versions(versions)
|
35
68
|
|
36
69
|
vers << %w[ auth * ] unless vers.find { |n, _| n == 'auth' }
|
@@ -58,23 +91,21 @@ module Sentofu
|
|
58
91
|
spec = Sentofu::Http.get_and_parse(u)
|
59
92
|
spec[:meta] = meta
|
60
93
|
|
61
|
-
|
62
|
-
@auth_uri = spec['servers'][0]['url'] + spec['paths'].keys.first
|
63
|
-
else
|
64
|
-
api = Sentofu::Api.new(api_name, spec)
|
65
|
-
Sentofu.define_singleton_method(api_name) { api }
|
66
|
-
@apis[api_name] = api
|
67
|
-
end
|
94
|
+
init_api(api_name, spec)
|
68
95
|
end
|
69
96
|
end
|
70
97
|
|
71
|
-
def
|
98
|
+
def init_api(name, spec)
|
72
99
|
|
73
|
-
|
100
|
+
if name == 'auth'
|
101
|
+
@auth_uri = spec['servers'][0]['url'] + spec['paths'].keys.first
|
102
|
+
else
|
103
|
+
api = Sentofu::Api.new(name, spec)
|
104
|
+
Sentofu.define_singleton_method(name) { api }
|
105
|
+
@apis[name] = api
|
106
|
+
end
|
74
107
|
end
|
75
108
|
|
76
|
-
protected
|
77
|
-
|
78
109
|
def split_versions(vs)
|
79
110
|
|
80
111
|
case vs
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sentofu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-05-
|
11
|
+
date: 2019-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|