stac 0.2.0 → 0.3.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +10 -0
  4. data/GETTING_STARTED.md +384 -0
  5. data/Gemfile.lock +48 -37
  6. data/README.md +12 -59
  7. data/Rakefile +62 -4
  8. data/Steepfile +2 -0
  9. data/lib/stac/asset.rb +3 -1
  10. data/lib/stac/catalog.rb +78 -8
  11. data/lib/stac/collection.rb +43 -9
  12. data/lib/stac/common_metadata.rb +1 -1
  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 +56 -22
  23. data/lib/stac/link.rb +51 -9
  24. data/lib/stac/object_resolver.rb +4 -4
  25. data/lib/stac/properties.rb +3 -1
  26. data/lib/stac/provider.rb +5 -1
  27. data/lib/stac/simple_http_client.rb +3 -0
  28. data/lib/stac/stac_object.rb +138 -36
  29. data/lib/stac/version.rb +1 -1
  30. data/lib/stac.rb +12 -1
  31. data/sig/stac/asset.rbs +1 -3
  32. data/sig/stac/catalog.rbs +28 -5
  33. data/sig/stac/collection.rbs +13 -5
  34. data/sig/stac/common_metadata.rbs +2 -2
  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 +16 -7
  45. data/sig/stac/link.rbs +20 -12
  46. data/sig/stac/object_resolver.rbs +2 -2
  47. data/sig/stac/properties.rbs +1 -3
  48. data/sig/stac/provider.rbs +2 -3
  49. data/sig/stac/simple_http_client.rbs +3 -0
  50. data/sig/stac/stac_object.rbs +33 -10
  51. data/stac.gemspec +1 -1
  52. metadata +18 -3
data/sig/stac/link.rbs CHANGED
@@ -1,25 +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
17
+ attr_accessor owner: STACObject?
11
18
  attr_accessor http_client: _HTTPClient
12
- @target: Catalog | Collection | Item | nil
19
+ @target: STACObject?
13
20
  @resolver: ObjectResolver
14
21
 
15
- def initialize: (rel: String, href: String, ?type: String?, ?title: String?, **untyped) -> void
16
-
17
- 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?
18
25
  def absolute_href: -> String?
19
- def target: (?http_client: _HTTPClient) -> (Catalog | Collection | Item | nil)
20
-
21
- private
22
-
23
- 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
24
32
  end
25
33
  end
@@ -2,7 +2,7 @@ module STAC
2
2
  class ObjectResolver
3
3
  RESOLVABLES: Array[_STACObjectClass]
4
4
 
5
- attr_accessor self.resolvables: Array[_STACObjectClass]
5
+ attr_reader self.resolvables: Array[_STACObjectClass]
6
6
 
7
7
  def self.default_http_client: -> _HTTPClient
8
8
 
@@ -18,7 +18,7 @@ module STAC
18
18
  end
19
19
 
20
20
  interface _STACObjectClass
21
- def type: -> String
21
+ def type: -> String?
22
22
  def from_hash: (Hash[String, untyped] hash) -> untyped
23
23
  end
24
24
  end
@@ -1,14 +1,12 @@
1
1
  module STAC
2
2
  class Properties
3
+ include HashLike
3
4
  include CommonMetadata
4
5
 
5
6
  def self.from_hash: (Hash[String, untyped] hash) -> Properties
6
7
 
7
8
  attr_accessor datetime: Time?
8
- attr_accessor extra: Hash[String, untyped]
9
9
 
10
10
  def initialize: (datetime: Time?, **untyped) -> void
11
-
12
- def to_h: -> Hash[String, untyped]
13
11
  end
14
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,4 +1,7 @@
1
1
  module STAC
2
+ class HTTPError < Error
3
+ end
4
+
2
5
  class SimpleHTTPClient
3
6
  attr_reader options: Hash[String, String]
4
7
 
@@ -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]
12
+
13
+ attr_reader self.type: String?
4
14
 
5
- def self.from_hash: (Hash[String, untyped]) -> STACObject
15
+ def self.extendables: -> Array[Extension]
16
+ def self.add_extendable: (Extension) -> self
17
+ def self.from_hash: (Hash[String | Symbol, untyped]) -> STACObject
6
18
 
7
- attr_accessor stac_extensions: Array[String]?
8
- attr_accessor extra: Hash[String, untyped]
9
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
- 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
22
- def find_link: (rel: String, ?type: String?) -> Link?
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
23
43
 
24
44
  private
25
45
 
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/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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Miyoshi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-11-02 00:00:00.000000000 Z
11
+ date: 2022-12-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -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
@@ -33,7 +34,14 @@ files:
33
34
  - lib/stac/collection.rb
34
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
@@ -50,7 +58,14 @@ files:
50
58
  - sig/stac/collection.rbs
51
59
  - sig/stac/common_metadata.rbs
52
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
53
66
  - sig/stac/extent.rbs
67
+ - sig/stac/file_writer.rbs
68
+ - sig/stac/hash_like.rbs
54
69
  - sig/stac/item.rbs
55
70
  - sig/stac/link.rbs
56
71
  - sig/stac/object_resolver.rbs
@@ -86,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
101
  - !ruby/object:Gem::Version
87
102
  version: '0'
88
103
  requirements: []
89
- rubygems_version: 3.3.7
104
+ rubygems_version: 3.3.26
90
105
  signing_key:
91
106
  specification_version: 4
92
107
  summary: A library for working with SpatioTemporal Asset Catalog (STAC)