iglu-ruby-client 0.1.0 → 0.2.0.beta
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 +5 -5
- data/README.md +13 -13
- data/lib/iglu-client/core.rb +7 -28
- data/lib/iglu-client/registries.rb +12 -2
- data/lib/iglu-client/resolver.rb +14 -4
- data/lib/iglu-client/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a5f348ad495ca4e03d35075a7e9d79be3e686333cc6bd909281e495c374cb247
|
4
|
+
data.tar.gz: 206069a773a03d9453a3774344c1c3327073318cb540060262d7fbbdd31ad14c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d249cbec95680becc4924c1da173eb7c15033839cc22a0623f39571646c1b034e8be88c754ab5fe88cb1463ea1abdf235db3c36be619deadcb3cd34e210f63e
|
7
|
+
data.tar.gz: f329af06ad188a7d6f52e0ec4d5259f16093aca503d374161f4c3125f1d92b974aa21690e8e52c2d0ee1972a6dd44980f8293191cb469678c4a8213bfe8921bb
|
data/README.md
CHANGED
@@ -1,23 +1,24 @@
|
|
1
1
|
# Ruby client for Iglu
|
2
2
|
|
3
|
-
[![Build Status]
|
4
|
-
[![Release]
|
5
|
-
[![License]
|
6
|
-
[![Coverage Status]
|
3
|
+
[![Build Status][travis-image]][travis]
|
4
|
+
[![Release][release-image]][releases]
|
5
|
+
[![License][license-image]][license]
|
6
|
+
[![Coverage Status][coveralls-image]][coveralls]
|
7
7
|
|
8
|
-
A Ruby client and resolver for **[Iglu schema repositories]
|
8
|
+
A Ruby client and resolver for **[Iglu schema repositories][iglu-wiki]** from the team at **[Snowplow Analytics][snowplow-website]**.
|
9
9
|
|
10
10
|
## Find out more
|
11
11
|
|
12
|
-
|
|
13
|
-
|
14
|
-
|
|
12
|
+
| Technical Docs | Setup Guide | Roadmap | Contributing |
|
13
|
+
|--------------------------------|--------------------------|------------------------|----------------------------------|
|
14
|
+
| ![i1][techdocs-image] | ![i2][setup-image] | ![i3][roadmap-image] | ![i4][contributing-image] |
|
15
|
+
| **[Technical Docs][techdocs]** | **[Setup Guide][setup]** | **[Roadmap][roadmap]** | **[Contributing][contributing]** |
|
15
16
|
|
16
|
-
## Copyright and
|
17
|
+
## Copyright and License
|
17
18
|
|
18
|
-
Iglu Ruby Client is
|
19
|
+
Iglu Ruby Client is © 2017 Snowplow Analytics Ltd.
|
19
20
|
|
20
|
-
Licensed under the **[Apache License, Version 2.0]
|
21
|
+
Licensed under the **[Apache License, Version 2.0][license]** (the "License");
|
21
22
|
you may not use this software except in compliance with the License.
|
22
23
|
|
23
24
|
Unless required by applicable law or agreed to in writing, software
|
@@ -44,11 +45,10 @@ limitations under the License.
|
|
44
45
|
[travis-image]: https://travis-ci.org/snowplow/iglu-ruby-client.png?branch=master
|
45
46
|
|
46
47
|
[releases]: https://github.com/snowplow/ruby-iglu-client/releases
|
47
|
-
[release-image]: http://img.shields.io/badge/release-0.
|
48
|
+
[release-image]: http://img.shields.io/badge/release-0.2.0-blue.svg?style=flat
|
48
49
|
|
49
50
|
[license]: http://www.apache.org/licenses/LICENSE-2.0
|
50
51
|
[license-image]: http://img.shields.io/badge/license-Apache--2-blue.svg?style=flat
|
51
52
|
|
52
53
|
[coveralls]: https://coveralls.io/r/snowplow/iglu-ruby-client
|
53
54
|
[coveralls-image]: https://coveralls.io/repos/snowplow/iglu-ruby-client/badge.png
|
54
|
-
|
data/lib/iglu-client/core.rb
CHANGED
@@ -20,15 +20,7 @@ module Iglu
|
|
20
20
|
SCHEMAVER_REGEX = Regexp.new "^([1-9][0-9]*)-(0|[1-9][0-9]*)-(0|[1-9][0-9]*)$"
|
21
21
|
|
22
22
|
# Class holding SchemaVer data
|
23
|
-
class SchemaVer
|
24
|
-
attr_accessor :model, :revision, :addition
|
25
|
-
|
26
|
-
# Constructor. To initalize from string - use static parse_schemaver
|
27
|
-
def initialize(model, revision, addition)
|
28
|
-
@model = model
|
29
|
-
@revision = revision
|
30
|
-
@addition = addition
|
31
|
-
end
|
23
|
+
class SchemaVer < Struct.new(:model, :revision, :addition)
|
32
24
|
|
33
25
|
# Render as string
|
34
26
|
def as_string
|
@@ -38,26 +30,17 @@ module Iglu
|
|
38
30
|
# Construct SchemaVer from string
|
39
31
|
def self.parse_schemaver(version)
|
40
32
|
model, revision, addition = version.scan(SCHEMAVER_REGEX).flatten
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
33
|
+
if model.nil? or revision.nil? or addition.nil?
|
34
|
+
raise IgluError.new "Schema version #{version} is not a valid Iglu SchemaVer"
|
35
|
+
else
|
36
|
+
SchemaVer.new model.to_i, revision.to_i, addition.to_i
|
37
|
+
end
|
46
38
|
end
|
47
39
|
end
|
48
40
|
|
49
41
|
|
50
42
|
# Class holding Schema metadata
|
51
|
-
class SchemaKey
|
52
|
-
attr_accessor :vendor, :name, :format, :version
|
53
|
-
|
54
|
-
# Constructor. To initalize from string - use static parse_key
|
55
|
-
def initialize(vendor, name, format, version)
|
56
|
-
@vendor = vendor
|
57
|
-
@name = name
|
58
|
-
@format = format
|
59
|
-
@version = version
|
60
|
-
end
|
43
|
+
class SchemaKey < Struct.new(:vendor, :name, :format, :version)
|
61
44
|
|
62
45
|
# Render as Iglu URI (with `iglu:`)
|
63
46
|
def as_uri
|
@@ -79,10 +62,6 @@ module Iglu
|
|
79
62
|
SchemaKey.new vendor, name, format, schema_ver
|
80
63
|
end
|
81
64
|
end
|
82
|
-
|
83
|
-
def ==(other)
|
84
|
-
other.vendor == @vendor && other.name == @name && other.format == @format && other.version == @version
|
85
|
-
end
|
86
65
|
end
|
87
66
|
|
88
67
|
|
@@ -41,13 +41,23 @@ module Iglu
|
|
41
41
|
@uri = uri
|
42
42
|
end
|
43
43
|
|
44
|
-
def lookup_schema(schema_key)
|
44
|
+
def lookup_schema(schema_key, max_retries = 3)
|
45
45
|
schema_uri = "#{@uri}/schemas/#{schema_key.as_path}"
|
46
|
+
times_retried = 0
|
47
|
+
|
46
48
|
begin
|
47
|
-
response = HTTParty.get(schema_uri)
|
49
|
+
response = HTTParty.get(schema_uri, timeout: 3)
|
48
50
|
rescue SocketError => _
|
49
51
|
raise IgluError.new "Iglu registry #{config.name} is not available"
|
52
|
+
rescue Net::ReadTimeout => e
|
53
|
+
if times_retried < max_retries
|
54
|
+
times_retried += 1
|
55
|
+
retry
|
56
|
+
else
|
57
|
+
raise e
|
58
|
+
end
|
50
59
|
end
|
60
|
+
|
51
61
|
if response.code == 200
|
52
62
|
JSON::parse(response.body)
|
53
63
|
else
|
data/lib/iglu-client/resolver.rb
CHANGED
@@ -16,11 +16,12 @@ module Iglu
|
|
16
16
|
|
17
17
|
# Iglu Client. Able to fetch schemas only from Iglu Central
|
18
18
|
class Resolver
|
19
|
-
attr_reader :registries, :cache
|
19
|
+
attr_reader :registries, :cache, :cache_ttl
|
20
20
|
|
21
21
|
def initialize(registries)
|
22
22
|
@registries = registries.unshift(Registries.bootstrap)
|
23
23
|
@cache = Hash.new
|
24
|
+
@cache_ttl = 1 # hour
|
24
25
|
end
|
25
26
|
|
26
27
|
# Lookup schema in cache or try to fetch
|
@@ -30,6 +31,7 @@ module Iglu
|
|
30
31
|
end
|
31
32
|
failures = []
|
32
33
|
|
34
|
+
fetch_time = Time.now.getutc
|
33
35
|
cache_result = @cache[schema_key]
|
34
36
|
|
35
37
|
if cache_result.nil? # Fetch from every registry
|
@@ -50,14 +52,22 @@ module Iglu
|
|
50
52
|
if lookup_result.nil?
|
51
53
|
raise Registries::ResolverError.new(failures, schema_key)
|
52
54
|
else
|
53
|
-
|
55
|
+
store_time = Time.now.getutc
|
56
|
+
@cache[schema_key] = [lookup_result, store_time]
|
54
57
|
lookup_result
|
55
58
|
end
|
56
59
|
else
|
57
60
|
if cache_result.is_a?(Registries::ResolverError)
|
58
61
|
raise cache_result
|
59
62
|
else
|
60
|
-
cache_result
|
63
|
+
if cache_result.is_a? (Array)
|
64
|
+
if (cache_result[1] - fetch_time).round / 3600 >= @cache_ttl
|
65
|
+
@cache.delete(schema_key)
|
66
|
+
end
|
67
|
+
cache_result[0]
|
68
|
+
else # backward compliance
|
69
|
+
cache_result
|
70
|
+
end
|
61
71
|
end
|
62
72
|
end
|
63
73
|
end
|
@@ -81,7 +91,7 @@ module Iglu
|
|
81
91
|
Registries::EmbeddedRegistryRef.new(ref_config, config[:connection][:embedded][:path])
|
82
92
|
elsif not config[:connection][:http].nil?
|
83
93
|
Registries::HttpRegistryRef.new(ref_config, config[:connection][:http][:uri])
|
84
|
-
else
|
94
|
+
else
|
85
95
|
raise IgluError.new "Incorrect RegistryRef"
|
86
96
|
end
|
87
97
|
end
|
data/lib/iglu-client/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iglu-ruby-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.beta
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Parkhomenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -101,12 +101,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
101
|
version: 2.0.0
|
102
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- - "
|
104
|
+
- - ">"
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version:
|
106
|
+
version: 1.3.1
|
107
107
|
requirements: []
|
108
108
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
109
|
+
rubygems_version: 2.7.0
|
110
110
|
signing_key:
|
111
111
|
specification_version: 4
|
112
112
|
summary: A Ruby client for Iglu
|