stac 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|