stac 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -0
  3. data/CHANGELOG.md +18 -0
  4. data/GETTING_STARTED.md +384 -0
  5. data/Gemfile.lock +48 -37
  6. data/README.md +16 -57
  7. data/Rakefile +62 -4
  8. data/Steepfile +2 -0
  9. data/lib/stac/asset.rb +7 -1
  10. data/lib/stac/catalog.rb +81 -9
  11. data/lib/stac/collection.rb +43 -9
  12. data/lib/stac/common_metadata.rb +162 -0
  13. data/lib/stac/errors.rb +2 -5
  14. data/lib/stac/extension.rb +34 -0
  15. data/lib/stac/extensions/electro_optical.rb +67 -0
  16. data/lib/stac/extensions/projection.rb +42 -0
  17. data/lib/stac/extensions/scientific_citation.rb +84 -0
  18. data/lib/stac/extensions/view_geometry.rb +38 -0
  19. data/lib/stac/extent.rb +39 -31
  20. data/lib/stac/file_writer.rb +31 -0
  21. data/lib/stac/hash_like.rb +74 -0
  22. data/lib/stac/item.rb +58 -22
  23. data/lib/stac/link.rb +50 -14
  24. data/lib/stac/object_resolver.rb +14 -20
  25. data/lib/stac/properties.rb +6 -1
  26. data/lib/stac/provider.rb +5 -1
  27. data/lib/stac/{default_http_client.rb → simple_http_client.rb} +9 -4
  28. data/lib/stac/stac_object.rb +142 -31
  29. data/lib/stac/version.rb +1 -1
  30. data/lib/stac.rb +18 -2
  31. data/sig/stac/asset.rbs +3 -3
  32. data/sig/stac/catalog.rbs +29 -5
  33. data/sig/stac/collection.rbs +13 -5
  34. data/sig/stac/common_metadata.rbs +34 -0
  35. data/sig/stac/errors.rbs +1 -4
  36. data/sig/stac/extension.rbs +12 -0
  37. data/sig/stac/extensions/electro_optical.rbs +40 -0
  38. data/sig/stac/extensions/projection.rbs +32 -0
  39. data/sig/stac/extensions/scientific_citation.rbs +38 -0
  40. data/sig/stac/extensions/view_geometry.rbs +22 -0
  41. data/sig/stac/extent.rbs +13 -16
  42. data/sig/stac/file_writer.rbs +13 -0
  43. data/sig/stac/hash_like.rbs +13 -0
  44. data/sig/stac/item.rbs +17 -7
  45. data/sig/stac/link.rbs +21 -12
  46. data/sig/stac/object_resolver.rbs +5 -9
  47. data/sig/stac/properties.rbs +3 -3
  48. data/sig/stac/provider.rbs +2 -3
  49. data/sig/stac/{default_http_client.rbs → simple_http_client.rbs} +5 -2
  50. data/sig/stac/stac_object.rbs +34 -11
  51. data/sig/stac.rbs +7 -1
  52. data/stac.gemspec +1 -1
  53. metadata +26 -9
@@ -0,0 +1,13 @@
1
+ module STAC
2
+ class FileWriter
3
+ @hash_to_json: ^(Hash[String, untyped]) -> String
4
+
5
+ def initialize: (?hash_to_json: ^(Hash[String, untyped]) -> String) -> void
6
+
7
+ def write: (Hash[String, untyped], dest: String) -> void
8
+ end
9
+
10
+ interface _Writer
11
+ def write: (Hash[String, untyped], dest: String) -> void
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module STAC
2
+ module HashLike
3
+ attr_reader extra: Hash[String, untyped]
4
+
5
+ def []: (String | Symbol key) -> untyped
6
+ def []=: (String | Symbol key, untyped value) -> untyped
7
+ def update: (**untyped) -> self
8
+ def to_hash: -> Hash[String, untyped]
9
+ def to_h: -> Hash[String, untyped]
10
+ def to_json: -> String
11
+ def deep_dup: -> self
12
+ end
13
+ end
data/sig/stac/item.rbs CHANGED
@@ -1,27 +1,37 @@
1
1
  module STAC
2
2
  class Item < STACObject
3
- def self.from_hash: (Hash[String, untyped] hash) -> Item
3
+ def self.from_hash: (Hash[String | Symbol, untyped] hash) -> Item
4
4
 
5
+ attr_accessor id: String
5
6
  attr_accessor geometry: Hash[String, untyped]?
6
- attr_accessor properties: Properties
7
- attr_accessor assets: Hash[String, Asset]
8
7
  attr_accessor bbox: Array[Numeric]?
9
8
  attr_accessor collection_id: String?
10
9
 
10
+ attr_reader properties: Properties
11
+ attr_reader assets: Hash[String, Asset]
12
+
11
13
  def initialize: (
12
14
  id: String,
13
15
  geometry: Hash[String, untyped]?,
14
16
  properties: Properties,
15
- links: Array[Link],
16
- assets: Hash[String, Asset],
17
+ ?links: Array[Hash[String, String]],
18
+ ?assets: Hash[String, Asset],
17
19
  ?bbox: Array[Numeric]?,
18
20
  ?collection: String | Collection | nil,
19
- ?stac_extensions: Array[String]?,
21
+ ?stac_extensions: Array[String],
20
22
  **untyped
21
23
  ) -> void
22
24
 
23
- def datetime: -> Time?
24
25
  def collection: -> Collection?
25
26
  def collection=: (Collection collection) -> void
27
+ def add_asset: (
28
+ key: String,
29
+ href: String,
30
+ ?title: String?,
31
+ ?description: String?,
32
+ ?type: String?,
33
+ ?roles: Array[String]?,
34
+ **untyped
35
+ ) -> self
26
36
  end
27
37
  end
data/sig/stac/link.rbs CHANGED
@@ -1,24 +1,33 @@
1
1
  module STAC
2
+ class LinkHrefError < Error
3
+ attr_reader link: Link
4
+
5
+ def initialize: (?String? msg, link: Link) -> void
6
+ end
7
+
2
8
  class Link
9
+ include HashLike
10
+
3
11
  def self.from_hash: (Hash[String, untyped]) -> Link
4
12
 
5
13
  attr_accessor rel: String
6
- attr_accessor href: String
14
+ attr_writer href: String?
7
15
  attr_accessor type: String?
8
16
  attr_accessor title: String?
9
- attr_accessor extra: Hash[String, untyped]
10
- attr_accessor owner: STACObject | nil
11
- @target: Catalog | Collection | Item | nil
17
+ attr_accessor owner: STACObject?
18
+ attr_accessor http_client: _HTTPClient
19
+ @target: STACObject?
12
20
  @resolver: ObjectResolver
13
21
 
14
- def initialize: (rel: String, href: String, ?type: String?, ?title: String?, **untyped) -> void
15
-
16
- def to_h: -> Hash[String, untyped]
22
+ def initialize: (?STACObject? target, rel: String, href: String?, ?type: String?, ?title: String?, **untyped) -> void
23
+ def resolved?: -> bool
24
+ def href: -> String?
17
25
  def absolute_href: -> String?
18
- def target: -> (Catalog | Collection | Item | nil)
19
-
20
- private
21
-
22
- def resolver: -> ObjectResolver
26
+ def relative_href: -> String?
27
+ def target: (?http_client: _HTTPClient) -> STACObject?
28
+
29
+ def href!: -> String
30
+ def absolute_href!: -> String
31
+ def relative_href!: -> String
23
32
  end
24
33
  end
@@ -2,27 +2,23 @@ module STAC
2
2
  class ObjectResolver
3
3
  RESOLVABLES: Array[_STACObjectClass]
4
4
 
5
- attr_writer self.default_http_client: _HTTPClient
5
+ attr_reader self.resolvables: Array[_STACObjectClass]
6
6
 
7
7
  def self.default_http_client: -> _HTTPClient
8
8
 
9
9
  attr_reader http_client: _HTTPClient
10
10
 
11
- def initialize: (?http_client: _HTTPClient) -> void
11
+ def initialize: (http_client: _HTTPClient) -> void
12
12
 
13
13
  def resolve: (String url) -> (Catalog | Collection | Item)
14
14
 
15
15
  private
16
16
 
17
- def read: (String url) -> String
17
+ def read: (String url) -> Hash[String, untyped]
18
18
  end
19
19
 
20
20
  interface _STACObjectClass
21
- def type: -> String
22
- def from_hash: (Hash[String, untyped] hash) -> (Catalog | Collection | Item)
23
- end
24
-
25
- interface _HTTPClient
26
- def get: (URI uri) -> String
21
+ def type: -> String?
22
+ def from_hash: (Hash[String, untyped] hash) -> untyped
27
23
  end
28
24
  end
@@ -1,12 +1,12 @@
1
1
  module STAC
2
2
  class Properties
3
+ include HashLike
4
+ include CommonMetadata
5
+
3
6
  def self.from_hash: (Hash[String, untyped] hash) -> Properties
4
7
 
5
8
  attr_accessor datetime: Time?
6
- attr_accessor extra: Hash[String, untyped]
7
9
 
8
10
  def initialize: (datetime: Time?, **untyped) -> void
9
-
10
- def to_h: -> Hash[String, untyped]
11
11
  end
12
12
  end
@@ -1,15 +1,14 @@
1
1
  module STAC
2
2
  class Provider
3
+ include HashLike
4
+
3
5
  def self.from_hash: (Hash[String, untyped] hash) -> Provider
4
6
 
5
7
  attr_accessor name: String
6
8
  attr_accessor description: String?
7
9
  attr_accessor roles: Array[String]?
8
10
  attr_accessor url: String?
9
- attr_accessor extra: Hash[String, untyped]
10
11
 
11
12
  def initialize: (name: String, ?description: String?, ?roles: Array[String]?, ?url: String?, **untyped) -> void
12
-
13
- def to_h: -> Hash[String, untyped]
14
13
  end
15
14
  end
@@ -1,9 +1,12 @@
1
1
  module STAC
2
- class DefaultHTTPClient
2
+ class HTTPError < Error
3
+ end
4
+
5
+ class SimpleHTTPClient
3
6
  attr_reader options: Hash[String, String]
4
7
 
5
8
  def initialize: (?Hash[String, String] options) -> void
6
9
 
7
- def get: (URI uri) -> String
10
+ def get: (URI::Generic | String url) -> Hash[String, untyped]
8
11
  end
9
12
  end
@@ -1,28 +1,51 @@
1
1
  module STAC
2
+ class NoSelfHrefError < Error
3
+ attr_reader stac_object: STACObject
4
+
5
+ def initialize: (?String? msg, stac_object: STACObject) -> void
6
+ end
7
+
2
8
  class STACObject
3
- attr_accessor self.type: String
9
+ include HashLike
10
+
11
+ @@extendables: Hash[String, Extension]
4
12
 
5
- def self.from_hash: (Hash[String, untyped]) -> STACObject
13
+ attr_reader self.type: String?
6
14
 
7
- attr_accessor id: String
8
- attr_accessor stac_extensions: Array[String]?
9
- attr_accessor extra: Hash[String, untyped]
15
+ def self.extendables: -> Array[Extension]
16
+ def self.add_extendable: (Extension) -> self
17
+ def self.from_hash: (Hash[String | Symbol, untyped]) -> STACObject
18
+
19
+ attr_accessor http_client: _HTTPClient
20
+ attr_reader stac_extensions: Array[String]
10
21
  attr_reader links: Array[Link]
11
22
 
23
+ @extended: Array[Extension]
24
+
12
25
  def initialize: (
13
- id: String, links: Array[Link], ?stac_extensions: Array[String]?, **untyped
26
+ ?links: Array[Hash[String, String]], ?stac_extensions: Array[String], **untyped
14
27
  ) -> void
15
28
 
16
29
  def type: -> String
17
- def to_h: -> Hash[String, untyped]
18
- def to_json: -> String
19
- def add_link: (Link) -> Array[Link]
30
+ def extended: -> Array[Extension]
31
+ def add_extension: (Extension | String) -> self
32
+ def find_link: (rel: String, ?type: String?) -> Link?
33
+ def add_link: (?STACObject? target, rel: String, ?href: String?, ?type: String?, ?title: String?, **untyped) -> self
20
34
  def self_href: -> String?
21
35
  def self_href=: (String) -> void
36
+ def root: -> Catalog?
37
+ def root=: (Catalog? catalog) -> void
38
+ def parent: -> Catalog?
39
+ def parent=: (Catalog? catalog) -> void
40
+ def save: (?String? dest, ?writer: _Writer) -> void
41
+
42
+ def self_href!: -> String
22
43
 
23
44
  private
24
45
 
25
- def find_link: (rel: String) -> Link?
26
- def remove_link: (rel: String) -> Array[Link]?
46
+ def extensions: -> Array[Extension]
47
+ def apply_extensions!: -> void
48
+ def apply_extension!: (Module) -> void
49
+ def remove_links: (rel: String) -> Array[Link]?
27
50
  end
28
51
  end
data/sig/stac.rbs CHANGED
@@ -1,5 +1,11 @@
1
1
  # See the writing guide of rbs: https://github.com/ruby/rbs#guides
2
2
  module STAC
3
+ attr_accessor self.default_http_client: _HTTPClient
4
+
3
5
  def self.from_file: (String path) -> (Catalog | Collection | Item)
4
- %a{rbs:test:skip} def self.from_url: (String url, ?resolver: ObjectResolver) -> (Catalog | Collection | Item)
6
+ def self.from_url: (String url, ?http_client: _HTTPClient) -> (Catalog | Collection | Item)
7
+
8
+ interface _HTTPClient
9
+ def get: (URI::Generic | String url) -> Hash[String, untyped]
10
+ end
5
11
  end
data/stac.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.files = Dir.chdir(__dir__) do
27
27
  `git ls-files -z`.split("\x0").reject do |f|
28
28
  (f == __FILE__) || f.match(
29
- %r{\A(?:(?:bin|spec|examples)/|\.(?:git|vscode|devcontainer)|stac-spec)},
29
+ %r{\A(?:(?:bin|spec)/|\.(?:git|vscode|devcontainer)|stac-spec)},
30
30
  )
31
31
  end
32
32
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Miyoshi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-09 00:00:00.000000000 Z
11
+ date: 2022-12-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description:
13
+ description:
14
14
  email:
15
15
  - takahiro-miyoshi@sankichi.net
16
16
  executables: []
@@ -21,6 +21,7 @@ files:
21
21
  - ".rubocop.yml"
22
22
  - CHANGELOG.md
23
23
  - CODE_OF_CONDUCT.md
24
+ - GETTING_STARTED.md
24
25
  - Gemfile
25
26
  - Gemfile.lock
26
27
  - LICENSE.txt
@@ -31,14 +32,22 @@ files:
31
32
  - lib/stac/asset.rb
32
33
  - lib/stac/catalog.rb
33
34
  - lib/stac/collection.rb
34
- - lib/stac/default_http_client.rb
35
+ - lib/stac/common_metadata.rb
35
36
  - lib/stac/errors.rb
37
+ - lib/stac/extension.rb
38
+ - lib/stac/extensions/electro_optical.rb
39
+ - lib/stac/extensions/projection.rb
40
+ - lib/stac/extensions/scientific_citation.rb
41
+ - lib/stac/extensions/view_geometry.rb
36
42
  - lib/stac/extent.rb
43
+ - lib/stac/file_writer.rb
44
+ - lib/stac/hash_like.rb
37
45
  - lib/stac/item.rb
38
46
  - lib/stac/link.rb
39
47
  - lib/stac/object_resolver.rb
40
48
  - lib/stac/properties.rb
41
49
  - lib/stac/provider.rb
50
+ - lib/stac/simple_http_client.rb
42
51
  - lib/stac/spec_version.rb
43
52
  - lib/stac/stac_object.rb
44
53
  - lib/stac/version.rb
@@ -47,14 +56,22 @@ files:
47
56
  - sig/stac/asset.rbs
48
57
  - sig/stac/catalog.rbs
49
58
  - sig/stac/collection.rbs
50
- - sig/stac/default_http_client.rbs
59
+ - sig/stac/common_metadata.rbs
51
60
  - sig/stac/errors.rbs
61
+ - sig/stac/extension.rbs
62
+ - sig/stac/extensions/electro_optical.rbs
63
+ - sig/stac/extensions/projection.rbs
64
+ - sig/stac/extensions/scientific_citation.rbs
65
+ - sig/stac/extensions/view_geometry.rbs
52
66
  - sig/stac/extent.rbs
67
+ - sig/stac/file_writer.rbs
68
+ - sig/stac/hash_like.rbs
53
69
  - sig/stac/item.rbs
54
70
  - sig/stac/link.rbs
55
71
  - sig/stac/object_resolver.rbs
56
72
  - sig/stac/properties.rbs
57
73
  - sig/stac/provider.rbs
74
+ - sig/stac/simple_http_client.rbs
58
75
  - sig/stac/spec_version.rbs
59
76
  - sig/stac/stac_object.rbs
60
77
  - sig/stac/version.rbs
@@ -69,7 +86,7 @@ metadata:
69
86
  documentation_uri: https://sankichi92.github.io/stac-ruby/
70
87
  github_repo: https://github.com/sankichi92/stac-ruby.git
71
88
  rubygems_mfa_required: 'true'
72
- post_install_message:
89
+ post_install_message:
73
90
  rdoc_options: []
74
91
  require_paths:
75
92
  - lib
@@ -84,8 +101,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
101
  - !ruby/object:Gem::Version
85
102
  version: '0'
86
103
  requirements: []
87
- rubygems_version: 3.3.7
88
- signing_key:
104
+ rubygems_version: 3.3.26
105
+ signing_key:
89
106
  specification_version: 4
90
107
  summary: A library for working with SpatioTemporal Asset Catalog (STAC)
91
108
  test_files: []