stac 0.1.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +28 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +126 -0
- data/LICENSE.txt +21 -0
- data/README.md +94 -0
- data/Rakefile +19 -0
- data/Steepfile +20 -0
- data/lib/stac/asset.rb +36 -0
- data/lib/stac/catalog.rb +69 -0
- data/lib/stac/collection.rb +66 -0
- data/lib/stac/default_http_client.rb +25 -0
- data/lib/stac/errors.rb +15 -0
- data/lib/stac/extent.rb +78 -0
- data/lib/stac/item.rb +85 -0
- data/lib/stac/link.rb +70 -0
- data/lib/stac/object_resolver.rb +66 -0
- data/lib/stac/properties.rb +33 -0
- data/lib/stac/provider.rb +35 -0
- data/lib/stac/spec_version.rb +5 -0
- data/lib/stac/stac_object.rb +92 -0
- data/lib/stac/version.rb +5 -0
- data/lib/stac.rb +25 -0
- data/sig/open-uri.rbs +8 -0
- data/sig/stac/asset.rbs +18 -0
- data/sig/stac/catalog.rbs +20 -0
- data/sig/stac/collection.rbs +29 -0
- data/sig/stac/default_http_client.rbs +9 -0
- data/sig/stac/errors.rbs +13 -0
- data/sig/stac/extent.rbs +35 -0
- data/sig/stac/item.rbs +27 -0
- data/sig/stac/link.rbs +24 -0
- data/sig/stac/object_resolver.rbs +28 -0
- data/sig/stac/properties.rbs +12 -0
- data/sig/stac/provider.rbs +15 -0
- data/sig/stac/spec_version.rbs +3 -0
- data/sig/stac/stac_object.rbs +28 -0
- data/sig/stac/version.rbs +3 -0
- data/sig/stac.rbs +5 -0
- data/stac.gemspec +42 -0
- metadata +91 -0
data/lib/stac/extent.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module STAC
|
4
|
+
# Represents \STAC extent object, which describes the spatio-temporal extents of a Collection.
|
5
|
+
#
|
6
|
+
# Specification: https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#extent-object
|
7
|
+
class Extent
|
8
|
+
# Describes the spatial extents of a Collection
|
9
|
+
class Spatial
|
10
|
+
# Deserializes a Spatial from a Hash.
|
11
|
+
def self.from_hash(hash)
|
12
|
+
new(**hash.transform_keys(&:to_sym))
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_accessor :bbox, :extra
|
16
|
+
|
17
|
+
def initialize(bbox:, **extra)
|
18
|
+
@bbox = bbox
|
19
|
+
@extra = extra.transform_keys(&:to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Serializes self to a Hash.
|
23
|
+
def to_h
|
24
|
+
{
|
25
|
+
'bbox' => bbox,
|
26
|
+
}.merge(extra)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Describes the temporal extents of a Collection.
|
31
|
+
class Temporal
|
32
|
+
# Deserializes a Temporal from a Hash.
|
33
|
+
def self.from_hash(hash)
|
34
|
+
new(**hash.transform_keys(&:to_sym))
|
35
|
+
end
|
36
|
+
|
37
|
+
attr_accessor :interval, :extra
|
38
|
+
|
39
|
+
def initialize(interval:, **extra)
|
40
|
+
@interval = interval
|
41
|
+
@extra = extra.transform_keys(&:to_s)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Serializes self to a Hash.
|
45
|
+
def to_h
|
46
|
+
{
|
47
|
+
'interval' => interval,
|
48
|
+
}.merge(extra)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
# Deserializes an Extent from a Hash.
|
54
|
+
def from_hash(hash)
|
55
|
+
transformed = hash.transform_keys(&:to_sym)
|
56
|
+
transformed[:spatial] = Spatial.from_hash(transformed.fetch(:spatial))
|
57
|
+
transformed[:temporal] = Temporal.from_hash(transformed.fetch(:temporal))
|
58
|
+
new(**transformed)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
attr_accessor :spatial, :temporal, :extra
|
63
|
+
|
64
|
+
def initialize(spatial:, temporal:, **extra)
|
65
|
+
@spatial = spatial
|
66
|
+
@temporal = temporal
|
67
|
+
@extra = extra.transform_keys(&:to_s)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Serializes self to a Hash.
|
71
|
+
def to_h
|
72
|
+
{
|
73
|
+
'spatial' => spatial.to_h,
|
74
|
+
'temporal' => temporal.to_h,
|
75
|
+
}.merge(extra)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/stac/item.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'asset'
|
4
|
+
require_relative 'errors'
|
5
|
+
require_relative 'properties'
|
6
|
+
require_relative 'stac_object'
|
7
|
+
|
8
|
+
module STAC
|
9
|
+
# Represents \STAC item.
|
10
|
+
#
|
11
|
+
# \STAC \Item Specification: https://github.com/radiantearth/stac-spec/tree/master/item-spec
|
12
|
+
class Item < STAC::STACObject
|
13
|
+
self.type = 'Feature'
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def from_hash(hash)
|
17
|
+
h = hash.dup
|
18
|
+
h['properties'] = Properties.from_hash(h.fetch('properties'))
|
19
|
+
h['assets'] = h.fetch('assets').transform_values { |v| Asset.from_hash(v) }
|
20
|
+
super(h)
|
21
|
+
rescue KeyError => e
|
22
|
+
raise ArgumentError, "required field not found: #{e.key}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_accessor :geometry, :bbox, :properties, :assets, :collection_id
|
27
|
+
|
28
|
+
def initialize(
|
29
|
+
id:, geometry:, properties:, links:, assets:, bbox: nil, collection: nil, stac_extensions: nil, **extra
|
30
|
+
)
|
31
|
+
super(id: id, links: links, stac_extensions: stac_extensions, **extra)
|
32
|
+
@geometry = geometry
|
33
|
+
@properties = properties
|
34
|
+
@assets = assets
|
35
|
+
@bbox = bbox
|
36
|
+
case collection
|
37
|
+
when Collection
|
38
|
+
self.collection = collection
|
39
|
+
else
|
40
|
+
@collection_id = collection
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_h
|
45
|
+
super.merge(
|
46
|
+
{
|
47
|
+
'geometry' => geometry, # required but nullable
|
48
|
+
},
|
49
|
+
).merge(
|
50
|
+
{
|
51
|
+
'bbox' => bbox,
|
52
|
+
'properties' => properties.to_h,
|
53
|
+
'assets' => assets.transform_values(&:to_h),
|
54
|
+
'collection' => collection_id,
|
55
|
+
}.compact,
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Returns datetime from #properties.
|
60
|
+
def datetime
|
61
|
+
properties.datetime
|
62
|
+
end
|
63
|
+
|
64
|
+
# Returns a rel="collection" link as a collection object if it exists.
|
65
|
+
def collection
|
66
|
+
link = find_link(rel: 'collection')
|
67
|
+
link&.target
|
68
|
+
end
|
69
|
+
|
70
|
+
# Overwrites rel="collection" link and #collection_id attribute.
|
71
|
+
def collection=(collection)
|
72
|
+
raise ArgumentError, 'collection must have a rel="self" link' unless (collection_href = collection.self_href)
|
73
|
+
|
74
|
+
@collection_id = collection.id
|
75
|
+
collection_link = Link.new(
|
76
|
+
rel: 'collection',
|
77
|
+
href: collection_href,
|
78
|
+
type: 'application/json',
|
79
|
+
title: collection.title,
|
80
|
+
)
|
81
|
+
remove_link(rel: 'collection')
|
82
|
+
add_link(collection_link)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/stac/link.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require 'uri'
|
5
|
+
require_relative 'errors'
|
6
|
+
|
7
|
+
module STAC
|
8
|
+
# Represents \STAC link object, which describes a relationship with another entity.
|
9
|
+
class Link
|
10
|
+
class << self
|
11
|
+
# Deserializes a Link from a Hash.
|
12
|
+
def from_hash(hash)
|
13
|
+
new(**hash.transform_keys(&:to_sym))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_accessor :rel, :href, :type, :title, :extra
|
18
|
+
|
19
|
+
# Owner object of this link.
|
20
|
+
attr_accessor :owner
|
21
|
+
|
22
|
+
attr_writer :resolver # :nodoc:
|
23
|
+
|
24
|
+
def initialize(rel:, href:, type: nil, title: nil, **extra)
|
25
|
+
@rel = rel
|
26
|
+
@href = href
|
27
|
+
@type = type
|
28
|
+
@title = title
|
29
|
+
@extra = extra.transform_keys(&:to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Serializes self to a Hash.
|
33
|
+
def to_h
|
34
|
+
{
|
35
|
+
'rel' => rel,
|
36
|
+
'href' => href,
|
37
|
+
'type' => type,
|
38
|
+
'title' => title,
|
39
|
+
}.merge(extra).compact
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns the absolute HREF for this link.
|
43
|
+
#
|
44
|
+
# When it could not assemble the absolute HREF, it returns nil.
|
45
|
+
def absolute_href
|
46
|
+
if URI(href).absolute?
|
47
|
+
href
|
48
|
+
elsif (base_href = owner&.self_href)
|
49
|
+
Pathname(base_href).dirname.join(href).to_s
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns a \STAC object resolved from HREF.
|
54
|
+
#
|
55
|
+
# When it could not assemble the absolute HREF, it returns nil.
|
56
|
+
def target
|
57
|
+
@target ||= if (url = absolute_href)
|
58
|
+
object = resolver.resolve(url)
|
59
|
+
object.self_href = url
|
60
|
+
object
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def resolver
|
67
|
+
@resolver ||= ObjectResolver.new
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require_relative 'catalog'
|
5
|
+
require_relative 'collection'
|
6
|
+
require_relative 'default_http_client'
|
7
|
+
require_relative 'errors'
|
8
|
+
require_relative 'item'
|
9
|
+
|
10
|
+
module STAC
|
11
|
+
# Resolves a \STAC object from a URL.
|
12
|
+
class ObjectResolver
|
13
|
+
RESOLVABLES = [Catalog, Collection, Item].freeze # :nodoc:
|
14
|
+
|
15
|
+
class << self
|
16
|
+
# Sets the default HTTP client.
|
17
|
+
#
|
18
|
+
# HTTP client must implement method `get: (URI uri) -> String,` which fetches the URI resource through HTTP.
|
19
|
+
attr_writer :default_http_client
|
20
|
+
|
21
|
+
# Returns the default HTTP client.
|
22
|
+
def default_http_client
|
23
|
+
@default_http_client ||= DefaultHTTPClient.new
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader :http_client
|
28
|
+
|
29
|
+
def initialize(http_client: self.class.default_http_client)
|
30
|
+
@http_client = http_client
|
31
|
+
end
|
32
|
+
|
33
|
+
# Reads a JSON from the given URL and returns a \STAC object resolved from it.
|
34
|
+
#
|
35
|
+
# Supports the following URL scheme:
|
36
|
+
# - http
|
37
|
+
# - https
|
38
|
+
# - file
|
39
|
+
#
|
40
|
+
# Raises:
|
41
|
+
# - STAC::UnknownURISchemeError when a URL with unsupported scheme was given
|
42
|
+
# - STAC::TypeError when it could not resolve any \STAC objects
|
43
|
+
def resolve(url)
|
44
|
+
str = read(url)
|
45
|
+
hash = JSON.parse(str)
|
46
|
+
klass = RESOLVABLES.find { |c| c.type == hash['type'] }
|
47
|
+
raise TypeError, "unknown STAC object type: #{hash['type']}" unless klass
|
48
|
+
|
49
|
+
klass.from_hash(hash)
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def read(url)
|
55
|
+
uri = URI.parse(url)
|
56
|
+
case uri
|
57
|
+
when URI::HTTP
|
58
|
+
http_client.get(uri)
|
59
|
+
when URI::File
|
60
|
+
File.read(uri.path.to_s)
|
61
|
+
else
|
62
|
+
raise UnknownURISchemeError, "unknown URI scheme: #{url}"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module STAC
|
6
|
+
# Represents \STAC properties object, which is additional metadata for Item.
|
7
|
+
#
|
8
|
+
# Specification: https://github.com/radiantearth/stac-spec/blob/master/item-spec/item-spec.md#properties-object
|
9
|
+
class Properties
|
10
|
+
class << self
|
11
|
+
# Deserializes a Properties from a Hash.
|
12
|
+
def from_hash(hash)
|
13
|
+
h = hash.transform_keys(&:to_sym)
|
14
|
+
h[:datetime] = h[:datetime] ? Time.iso8601(h[:datetime]) : nil
|
15
|
+
new(**h)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_accessor :datetime, :extra
|
20
|
+
|
21
|
+
def initialize(datetime:, **extra)
|
22
|
+
@datetime = datetime
|
23
|
+
@extra = extra.transform_keys(&:to_s)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Serializes self to a Hash.
|
27
|
+
def to_h
|
28
|
+
{
|
29
|
+
'datetime' => datetime&.iso8601,
|
30
|
+
}.merge(extra)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module STAC
|
4
|
+
# Represents \STAC provider object, which provides information about a provider.
|
5
|
+
#
|
6
|
+
# Specicication: https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#provider-object
|
7
|
+
class Provider
|
8
|
+
class << self
|
9
|
+
# Deserializes a Provider from a Hash.
|
10
|
+
def from_hash(hash)
|
11
|
+
new(**hash.transform_keys(&:to_sym))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_accessor :name, :description, :roles, :url, :extra
|
16
|
+
|
17
|
+
def initialize(name:, description: nil, roles: nil, url: nil, **extra)
|
18
|
+
@name = name
|
19
|
+
@description = description
|
20
|
+
@roles = roles
|
21
|
+
@url = url
|
22
|
+
@extra = extra.transform_keys(&:to_s)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Serializes self to a Hash.
|
26
|
+
def to_h
|
27
|
+
{
|
28
|
+
'name' => name,
|
29
|
+
'description' => description,
|
30
|
+
'roles' => roles,
|
31
|
+
'url' => url,
|
32
|
+
}.merge(extra).compact
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require_relative 'errors'
|
5
|
+
require_relative 'link'
|
6
|
+
require_relative 'spec_version'
|
7
|
+
|
8
|
+
module STAC
|
9
|
+
# Base class for \STAC objects (i.e. Catalog, Collection and Item).
|
10
|
+
class STACObject
|
11
|
+
class << self
|
12
|
+
attr_accessor :type # :nodoc:
|
13
|
+
|
14
|
+
# Base method to deserialize shared fields from a Hash.
|
15
|
+
#
|
16
|
+
# Raises ArgumentError when any required fields are missing.
|
17
|
+
def from_hash(hash)
|
18
|
+
raise TypeError, "type field is not 'Catalog': #{hash['type']}" if hash.fetch('type') != type
|
19
|
+
|
20
|
+
transformed = hash.transform_keys(&:to_sym).except(:type, :stac_version)
|
21
|
+
transformed[:links] = transformed.fetch(:links).map { |link| Link.from_hash(link) }
|
22
|
+
new(**transformed)
|
23
|
+
rescue KeyError => e
|
24
|
+
raise ArgumentError, "required field not found: #{e.key}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_accessor :id, :stac_extensions, :extra
|
29
|
+
|
30
|
+
attr_reader :links
|
31
|
+
|
32
|
+
def initialize(id:, links:, stac_extensions: nil, **extra)
|
33
|
+
@id = id
|
34
|
+
@links = []
|
35
|
+
links.each do |link|
|
36
|
+
add_link(link) # to set `owner`
|
37
|
+
end
|
38
|
+
@stac_extensions = stac_extensions
|
39
|
+
@extra = extra.transform_keys(&:to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
def type
|
43
|
+
self.class.type
|
44
|
+
end
|
45
|
+
|
46
|
+
# Serializes self to a Hash.
|
47
|
+
def to_h
|
48
|
+
{
|
49
|
+
'type' => type,
|
50
|
+
'stac_version' => SPEC_VERSION,
|
51
|
+
'stac_extensions' => stac_extensions,
|
52
|
+
'id' => id,
|
53
|
+
'links' => links.map(&:to_h),
|
54
|
+
}.merge(extra).compact
|
55
|
+
end
|
56
|
+
|
57
|
+
# Serializes self to a JSON string.
|
58
|
+
def to_json(...)
|
59
|
+
to_h.to_json(...)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Adds a link with setting Link#owner as self.
|
63
|
+
def add_link(link)
|
64
|
+
link.owner = self
|
65
|
+
links << link
|
66
|
+
end
|
67
|
+
|
68
|
+
# Reterns HREF of the rel="self" link.
|
69
|
+
def self_href
|
70
|
+
find_link(rel: 'self')&.href
|
71
|
+
end
|
72
|
+
|
73
|
+
# Adds a link with the give HREF as rel="self".
|
74
|
+
#
|
75
|
+
# When any ref="self" links already exist, removes them.
|
76
|
+
def self_href=(absolute_href)
|
77
|
+
self_link = Link.new(rel: 'self', href: absolute_href, type: 'application/json')
|
78
|
+
remove_link(rel: 'self')
|
79
|
+
add_link(self_link)
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def find_link(rel:)
|
85
|
+
links.find { |link| link.rel == rel }
|
86
|
+
end
|
87
|
+
|
88
|
+
def remove_link(rel:)
|
89
|
+
links.reject! { |link| link.rel == rel }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
data/lib/stac/version.rb
ADDED
data/lib/stac.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'stac/object_resolver'
|
4
|
+
require_relative 'stac/version'
|
5
|
+
|
6
|
+
# Gem namespace.
|
7
|
+
#
|
8
|
+
# Provides some utility methods.
|
9
|
+
module STAC
|
10
|
+
class << self
|
11
|
+
# Returns a \STAC object resolved from the given file path.
|
12
|
+
def from_file(path)
|
13
|
+
from_url("file://#{File.expand_path(path)}")
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns a \STAC object resolved from the given URL.
|
17
|
+
#
|
18
|
+
# When the resolved object does not have rel="self" link, adds a rel="self" link with the give url.
|
19
|
+
def from_url(url, resolver: ObjectResolver.new)
|
20
|
+
object = resolver.resolve(url)
|
21
|
+
object.self_href = url unless object.self_href
|
22
|
+
object
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/sig/open-uri.rbs
ADDED
data/sig/stac/asset.rbs
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module STAC
|
2
|
+
class Asset
|
3
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Asset
|
4
|
+
|
5
|
+
attr_accessor href: String
|
6
|
+
attr_accessor title: String?
|
7
|
+
attr_accessor description: String?
|
8
|
+
attr_accessor type: String?
|
9
|
+
attr_accessor roles: Array[String]?
|
10
|
+
attr_accessor extra: Hash[String, untyped]
|
11
|
+
|
12
|
+
def initialize: (
|
13
|
+
href: String, ?title: String?, ?description: String?, ?type: String?, ?roles: Array[String]?, **untyped
|
14
|
+
) -> void
|
15
|
+
|
16
|
+
def to_h: -> Hash[String, untyped]
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module STAC
|
2
|
+
class Catalog < STACObject
|
3
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Catalog
|
4
|
+
|
5
|
+
attr_accessor description: String
|
6
|
+
attr_accessor title: String?
|
7
|
+
|
8
|
+
def initialize: (
|
9
|
+
id: String, description: String, links: Array[Link], ?title: String?, ?stac_extensions: Array[String]?, **untyped
|
10
|
+
) -> void
|
11
|
+
|
12
|
+
def to_h: -> Hash[String, untyped]
|
13
|
+
def children: -> Enumerator::Lazy[Catalog | Collection, void]
|
14
|
+
def collections: -> Enumerator::Lazy[Collection, void]
|
15
|
+
def find_child: (String id, ?recursive: bool) -> (Catalog | Collection | nil)
|
16
|
+
def items: -> Enumerator::Lazy[Item, void]
|
17
|
+
def all_items: -> Enumerator::Lazy[Item, void]
|
18
|
+
def find_item: (String id, ?recursive: bool) -> Item?
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module STAC
|
2
|
+
class Collection < Catalog
|
3
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Collection
|
4
|
+
|
5
|
+
attr_accessor license: String
|
6
|
+
attr_accessor extent: Extent
|
7
|
+
attr_accessor keywords: Array[String]?
|
8
|
+
attr_accessor providers: Array[Provider]?
|
9
|
+
attr_accessor summaries: Hash[String, untyped]?
|
10
|
+
attr_accessor assets: Hash[String, Asset]?
|
11
|
+
|
12
|
+
def initialize: (
|
13
|
+
id: String,
|
14
|
+
description: String,
|
15
|
+
links: Array[Link],
|
16
|
+
license: String,
|
17
|
+
extent: Extent,
|
18
|
+
?title: String?,
|
19
|
+
?keywords: Array[String]?,
|
20
|
+
?providers: Array[Provider]?,
|
21
|
+
?summaries: Hash[String, untyped]?,
|
22
|
+
?assets: Hash[String, Asset]?,
|
23
|
+
?stac_extensions: Array[String]?,
|
24
|
+
**untyped
|
25
|
+
) -> void
|
26
|
+
|
27
|
+
def to_h: -> Hash[String, untyped]
|
28
|
+
end
|
29
|
+
end
|
data/sig/stac/errors.rbs
ADDED
data/sig/stac/extent.rbs
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module STAC
|
2
|
+
class Extent
|
3
|
+
class Spatial
|
4
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Spatial
|
5
|
+
|
6
|
+
attr_accessor bbox: Array[Array[Numeric]]
|
7
|
+
attr_accessor extra: Hash[String, untyped]
|
8
|
+
|
9
|
+
def initialize: (bbox: Array[Array[Numeric]], **untyped) -> void
|
10
|
+
|
11
|
+
def to_h: -> Hash[String, untyped]
|
12
|
+
end
|
13
|
+
|
14
|
+
class Temporal
|
15
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Temporal
|
16
|
+
|
17
|
+
attr_accessor interval: Array[Array[String?]]
|
18
|
+
attr_accessor extra: Hash[String, untyped]
|
19
|
+
|
20
|
+
def initialize: (interval: Array[Array[String?]], **untyped) -> void
|
21
|
+
|
22
|
+
def to_h: -> Hash[String, untyped]
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Extent
|
26
|
+
|
27
|
+
attr_accessor spatial: Spatial
|
28
|
+
attr_accessor temporal: Temporal
|
29
|
+
attr_accessor extra: Hash[String, untyped]
|
30
|
+
|
31
|
+
def initialize: (spatial: Spatial, temporal: Temporal, **untyped) -> void
|
32
|
+
|
33
|
+
def to_h: -> Hash[String, untyped]
|
34
|
+
end
|
35
|
+
end
|
data/sig/stac/item.rbs
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module STAC
|
2
|
+
class Item < STACObject
|
3
|
+
def self.from_hash: (Hash[String, untyped] hash) -> Item
|
4
|
+
|
5
|
+
attr_accessor geometry: Hash[String, untyped]?
|
6
|
+
attr_accessor properties: Properties
|
7
|
+
attr_accessor assets: Hash[String, Asset]
|
8
|
+
attr_accessor bbox: Array[Numeric]?
|
9
|
+
attr_accessor collection_id: String?
|
10
|
+
|
11
|
+
def initialize: (
|
12
|
+
id: String,
|
13
|
+
geometry: Hash[String, untyped]?,
|
14
|
+
properties: Properties,
|
15
|
+
links: Array[Link],
|
16
|
+
assets: Hash[String, Asset],
|
17
|
+
?bbox: Array[Numeric]?,
|
18
|
+
?collection: String | Collection | nil,
|
19
|
+
?stac_extensions: Array[String]?,
|
20
|
+
**untyped
|
21
|
+
) -> void
|
22
|
+
|
23
|
+
def datetime: -> Time?
|
24
|
+
def collection: -> Collection?
|
25
|
+
def collection=: (Collection collection) -> void
|
26
|
+
end
|
27
|
+
end
|
data/sig/stac/link.rbs
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module STAC
|
2
|
+
class Link
|
3
|
+
def self.from_hash: (Hash[String, untyped]) -> Link
|
4
|
+
|
5
|
+
attr_accessor rel: String
|
6
|
+
attr_accessor href: String
|
7
|
+
attr_accessor type: String?
|
8
|
+
attr_accessor title: String?
|
9
|
+
attr_accessor extra: Hash[String, untyped]
|
10
|
+
attr_accessor owner: STACObject | nil
|
11
|
+
@target: Catalog | Collection | Item | nil
|
12
|
+
@resolver: ObjectResolver
|
13
|
+
|
14
|
+
def initialize: (rel: String, href: String, ?type: String?, ?title: String?, **untyped) -> void
|
15
|
+
|
16
|
+
def to_h: -> Hash[String, untyped]
|
17
|
+
def absolute_href: -> String?
|
18
|
+
def target: -> (Catalog | Collection | Item | nil)
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def resolver: -> ObjectResolver
|
23
|
+
end
|
24
|
+
end
|