open-elevation-api 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 6b140920a500137c4eb837a745242868a0b2ef6448a0a3b96515f1e9e28b6d5d
4
+ data.tar.gz: f0ca081ab2bc0b434739c40b4c282945239d27707630f6e0ca694eb29b847a42
5
+ SHA512:
6
+ metadata.gz: e14888ab9df8df14ac881880aa1c5f6ac96d8cbbb67fb54e4b7897110c177f9aaebf3b90f1ba84bf45fe7ffc733b73686bb0094e64370af67081a6dcd6d72130
7
+ data.tar.gz: 3bef980cee75a518fd70fc0d5b9de47cb9094fa2f8697ead6b8a2e942b1f68e4805d4c2c065f2027be590cfc71e06b80cff76ad498adaa7a4ac815a3ea89fa80
data/.rubocop.yml ADDED
@@ -0,0 +1,23 @@
1
+ require:
2
+ - rubocop-rspec
3
+ AllCops:
4
+ DisplayCopNames: true
5
+ NewCops: enable
6
+ TargetRubyVersion: 3.1
7
+ Style/Documentation:
8
+ Enabled: false
9
+ Style/FrozenStringLiteralComment:
10
+ Enabled: false
11
+ Metrics/MethodLength:
12
+ Max: 18
13
+ Metrics/BlockLength:
14
+ Max: 40
15
+ Gemspec/DevelopmentDependencies:
16
+ Enabled: false
17
+ RSpec/MultipleExpectations:
18
+ Enabled: false
19
+ RSpec/ExampleLength:
20
+ Max: 30
21
+ Layout/LineLength:
22
+ Exclude:
23
+ - spec/quelink_mg/resp/*_spec.rb
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,104 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ open-elevation-api (0.1.0)
5
+ activesupport (~> 7.0)
6
+ httparty
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (7.0.7.2)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 1.6, < 2)
14
+ minitest (>= 5.1)
15
+ tzinfo (~> 2.0)
16
+ addressable (2.8.6)
17
+ public_suffix (>= 2.0.2, < 6.0)
18
+ ast (2.4.2)
19
+ base64 (0.1.1)
20
+ coderay (1.1.3)
21
+ concurrent-ruby (1.2.2)
22
+ crack (0.4.5)
23
+ rexml
24
+ diff-lcs (1.5.0)
25
+ hashdiff (1.1.0)
26
+ httparty (0.21.0)
27
+ mini_mime (>= 1.0.0)
28
+ multi_xml (>= 0.5.2)
29
+ i18n (1.14.1)
30
+ concurrent-ruby (~> 1.0)
31
+ json (2.6.3)
32
+ language_server-protocol (3.17.0.3)
33
+ method_source (1.0.0)
34
+ mini_mime (1.1.5)
35
+ minitest (5.20.0)
36
+ multi_xml (0.6.0)
37
+ parallel (1.23.0)
38
+ parser (3.2.2.3)
39
+ ast (~> 2.4.1)
40
+ racc
41
+ pry (0.14.2)
42
+ coderay (~> 1.1)
43
+ method_source (~> 1.0)
44
+ public_suffix (5.0.4)
45
+ racc (1.7.1)
46
+ rainbow (3.1.1)
47
+ regexp_parser (2.8.1)
48
+ rexml (3.2.6)
49
+ rspec (3.12.0)
50
+ rspec-core (~> 3.12.0)
51
+ rspec-expectations (~> 3.12.0)
52
+ rspec-mocks (~> 3.12.0)
53
+ rspec-core (3.12.2)
54
+ rspec-support (~> 3.12.0)
55
+ rspec-expectations (3.12.3)
56
+ diff-lcs (>= 1.2.0, < 2.0)
57
+ rspec-support (~> 3.12.0)
58
+ rspec-mocks (3.12.6)
59
+ diff-lcs (>= 1.2.0, < 2.0)
60
+ rspec-support (~> 3.12.0)
61
+ rspec-support (3.12.1)
62
+ rubocop (1.56.0)
63
+ base64 (~> 0.1.1)
64
+ json (~> 2.3)
65
+ language_server-protocol (>= 3.17.0)
66
+ parallel (~> 1.10)
67
+ parser (>= 3.2.2.3)
68
+ rainbow (>= 2.2.2, < 4.0)
69
+ regexp_parser (>= 1.8, < 3.0)
70
+ rexml (>= 3.2.5, < 4.0)
71
+ rubocop-ast (>= 1.28.1, < 2.0)
72
+ ruby-progressbar (~> 1.7)
73
+ unicode-display_width (>= 2.4.0, < 3.0)
74
+ rubocop-ast (1.29.0)
75
+ parser (>= 3.2.1.0)
76
+ rubocop-capybara (2.18.0)
77
+ rubocop (~> 1.41)
78
+ rubocop-rspec (2.21.0)
79
+ rubocop (~> 1.33)
80
+ rubocop-capybara (~> 2.17)
81
+ ruby-progressbar (1.13.0)
82
+ tzinfo (2.0.6)
83
+ concurrent-ruby (~> 1.0)
84
+ unicode-display_width (2.4.2)
85
+ vcr (6.1.0)
86
+ webmock (3.19.1)
87
+ addressable (>= 2.8.0)
88
+ crack (>= 0.3.2)
89
+ hashdiff (>= 0.4.0, < 2.0.0)
90
+
91
+ PLATFORMS
92
+ x86_64-linux
93
+
94
+ DEPENDENCIES
95
+ open-elevation-api!
96
+ pry (~> 0.13)
97
+ rspec (~> 3.9)
98
+ rubocop (~> 1.0)
99
+ rubocop-rspec (~> 2.2)
100
+ vcr (~> 6.0)
101
+ webmock (~> 3.0)
102
+
103
+ BUNDLED WITH
104
+ 2.4.7
data/README.md ADDED
@@ -0,0 +1,54 @@
1
+ # open-api-elevation
2
+ This gem is both for using official Open Elevation API https://open-elevation.com/ and the one you can serve on your own server https://github.com/Jorl17/open-elevation/blob/master/docs/host-your-own.md
3
+ I encourage you if you plan to use Open Elevation API to either host on your own (mind it requires to store a lot of data ~20GB) or donate for Open Elevation API servers to help the creator provide the service
4
+
5
+
6
+ ## Instalation
7
+
8
+ The open-api-elevation gem is available at rubygems.org. You can install with:
9
+
10
+ `gem install open-api-elevation`
11
+
12
+ Alternatively, you can install the gem with bundler:
13
+
14
+ ## Gemfile
15
+
16
+ `gem 'open-api-elevation'`
17
+
18
+ After doing bundle install, you should have the gem installed in your bundle.
19
+
20
+
21
+ ## Configuration
22
+ If you want to use public OpenElevation API you may omit this step
23
+
24
+ ```
25
+ OpenElevation.configure do |config|
26
+ config.api_url = 'https://EXAMPLE_API_SERVER/api/v1/lookup'
27
+ end
28
+ ```
29
+
30
+ ## Usage
31
+
32
+ You need to prepare collection that reponds to longitude and latitude methods
33
+ ```
34
+ service = described_class.new(collection: ...)
35
+ service.call
36
+ ```
37
+
38
+ Results then may be obtained by
39
+ ```
40
+ service.raw_response # as Hash
41
+ service.collection_with_result # as original collection with elevation filled (if possible)
42
+ ```
43
+
44
+
45
+ ## Development
46
+
47
+ Building gem locally (you can change file name, ofc):
48
+
49
+ `gem build *.gemspec -o pkg/open-api-elevation.gem`
50
+
51
+ Installing:
52
+ `gem install pkg/open-api-elevation.gem`
53
+
54
+
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OpenElevationApi
4
+ class Configuration
5
+ attr_accessor :api_url
6
+
7
+ OPEN_ELEVATION_API_URL = 'https://api.open-elevation.com/api/v1/lookup'
8
+
9
+ def initialize(api_url = nil)
10
+ @api_url = api_url || OPEN_ELEVATION_API_URL
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,55 @@
1
+ require 'httparty'
2
+
3
+ module OpenElevationApi
4
+ InvalidCollection = Class.new(StandardError)
5
+ class GetElevations
6
+ attr_reader :raw_response, :collection_with_result
7
+
8
+ def initialize(collection:, longitude_method: :longitude, latitude_method: :latitude)
9
+ @collection = collection
10
+ @longitude_method = longitude_method
11
+ @latitude_method = latitude_method
12
+ end
13
+
14
+ def call
15
+ raise InvalidCollection, 'Latitude or Longitude not provided' unless verify_collection
16
+
17
+ @raw_response = api_result
18
+ @collection_with_result = combined_results
19
+ end
20
+
21
+ private
22
+
23
+ def verify_collection
24
+ @collection.all? { |obj| obj.respond_to?(@longitude_method) && obj.respond_to?(@latitude_method) }
25
+ end
26
+
27
+ def body
28
+ {
29
+ locations: @collection.map do |obj|
30
+ { latitude: obj.send(@latitude_method), longitude: obj.send(@longitude_method) }
31
+ end
32
+ }.to_json
33
+ end
34
+
35
+ def api_result
36
+ @api_result ||= HTTParty.post(
37
+ OpenElevationApi.configuration.api_url,
38
+ body:,
39
+ headers: { 'Content-Type': 'application/json', Accept: 'application/json' }
40
+ )['results']
41
+ end
42
+
43
+ def combined_results
44
+ @collection.each do |obj|
45
+ result = api_result.find do |res|
46
+ res['latitude'] == obj.send(@latitude_method) && res['longitude'] == obj.send(@longitude_method)
47
+ end
48
+
49
+ next if result.nil? || !obj.respond_to?(:elevation)
50
+
51
+ obj.elevation = result['elevation']
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pry'
4
+ require 'date'
5
+ require 'active_support'
6
+ require 'active_support/time_with_zone'
7
+ require 'active_support/core_ext/time/zones'
8
+
9
+ require File.expand_path('open-elevation-api/get_elevations.rb', __dir__)
10
+ require File.expand_path('open-elevation-api/configuration.rb', __dir__)
11
+
12
+ module OpenElevationApi
13
+ class << self
14
+ def configuration
15
+ @configuration ||= Configuration.new
16
+ end
17
+
18
+ def configure
19
+ yield(configuration)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'open-elevation-api'
3
+ s.version = '0.1.0'
4
+ s.summary = 'Handles selecting elevation from Open Elevation API'
5
+ s.description = 'Works for both official API and self-hosted versions'
6
+ s.authors = ['Stanislaw Zawadzki']
7
+ s.email = 'st.zawadzki@gmail.com '
8
+
9
+ s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
10
+ s.require_paths = ['lib']
11
+ s.license = 'MIT'
12
+ s.required_ruby_version = '>= 3.1'
13
+ s.add_dependency 'activesupport', '~> 7.0'
14
+ s.add_dependency 'httparty'
15
+ s.add_development_dependency 'pry', '~> 0.13'
16
+ s.add_development_dependency 'rspec', '~> 3.9'
17
+ s.add_development_dependency 'rubocop', '~> 1.0'
18
+ s.add_development_dependency 'rubocop-rspec', '~> 2.2'
19
+ s.add_development_dependency 'vcr', '~> 6.0'
20
+ s.add_development_dependency 'webmock', '~> 3.0'
21
+ s.metadata['rubygems_mfa_required'] = 'false'
22
+ end
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.open-elevation.com/api/v1/lookup
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"locations":[{"latitude":51.01,"longitude":21.01},{"latitude":51.21,"longitude":21.06},{"latitude":51.51,"longitude":20.91}]}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ User-Agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx/1.21.1
25
+ Date:
26
+ - Tue, 09 Jan 2024 18:59:59 GMT
27
+ Content-Type:
28
+ - application/json
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Access-Control-Allow-Origin:
36
+ - "*"
37
+ Access-Control-Allow-Methods:
38
+ - GET, POST, OPTIONS
39
+ Access-Control-Allow-Headers:
40
+ - DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Origin,Accept,Content-Type,X-Requested_with,X-CSRF-Token
41
+ body:
42
+ encoding: ASCII-8BIT
43
+ string: '{"results":[{"latitude":51.01,"longitude":21.01,"elevation":290.0},{"elevation":193.0,"longitude":21.06,"latitude":51.21},{"latitude":51.51,"longitude":20.91,"elevation":162.0}]}'
44
+ recorded_at: Tue, 09 Jan 2024 18:59:59 GMT
45
+ recorded_with: VCR 6.1.0
@@ -0,0 +1,45 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.open-elevation.com/api/v1/lookup
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"locations":[{"latitude":51.01,"longitude":21.01}]}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ User-Agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx/1.21.1
25
+ Date:
26
+ - Tue, 09 Jan 2024 18:21:25 GMT
27
+ Content-Type:
28
+ - application/json
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Strict-Transport-Security:
34
+ - max-age=31536000; includeSubDomains
35
+ Access-Control-Allow-Origin:
36
+ - "*"
37
+ Access-Control-Allow-Methods:
38
+ - GET, POST, OPTIONS
39
+ Access-Control-Allow-Headers:
40
+ - DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Origin,Accept,Content-Type,X-Requested_with,X-CSRF-Token
41
+ body:
42
+ encoding: ASCII-8BIT
43
+ string: '{"results":[{"latitude":51.01,"longitude":21.01,"elevation":290.0}]}'
44
+ recorded_at: Tue, 09 Jan 2024 18:21:25 GMT
45
+ recorded_with: VCR 6.1.0
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe OpenElevationApi::GetElevations do
4
+ it 'returns error if longitude or latitude missing' do
5
+ elevation_stuct = OpenStruct.new(longitude: 21.01, elevation: nil)
6
+
7
+ service = described_class.new(collection: [elevation_stuct])
8
+ expect{service.call}.to raise_error OpenElevationApi::InvalidCollection
9
+ end
10
+
11
+ it 'gets single elevation - and enhancing collection' do
12
+ VCR.use_cassette('single location') do
13
+ elevation_stuct = OpenStruct.new(longitude: 21.01, latitude: 51.01, elevation: nil)
14
+
15
+ service = described_class.new(collection: [elevation_stuct])
16
+ service.call
17
+
18
+ expect(service.raw_response).to eq [{ 'latitude' => 51.01, 'longitude' => 21.01, 'elevation' => 290.0 }]
19
+ expect(service.collection_with_result.first.elevation).to eq 290.0
20
+ end
21
+ end
22
+
23
+ it 'gets single elevation - and enhancing collection, but with different method names' do
24
+ VCR.use_cassette('single location') do
25
+ elevation_stuct = OpenStruct.new(lon: 21.01, lat: 51.01, elevation: nil)
26
+
27
+ service = described_class.new(collection: [elevation_stuct], longitude_method: :lon, latitude_method: :lat)
28
+ service.call
29
+
30
+ expect(service.raw_response).to eq [{ 'latitude' => 51.01, 'longitude' => 21.01, 'elevation' => 290.0 }]
31
+ expect(service.collection_with_result.first.elevation).to eq 290.0
32
+ expect(service.collection_with_result.first.lat).to eq 51.01
33
+ end
34
+ end
35
+
36
+ it 'gets single elevation - and enhancing collection' do
37
+ VCR.use_cassette('single location') do
38
+ ElevationImmutableStruct = Struct.new(:longitude, :latitude)
39
+ elevation_stuct = ElevationImmutableStruct.new(21.01, 51.01)
40
+
41
+ collection = [elevation_stuct]
42
+ service = described_class.new(collection:)
43
+ service.call
44
+
45
+ expect(service.raw_response).to eq [{ 'latitude' => 51.01, 'longitude' => 21.01, 'elevation' => 290.0 }]
46
+ expect(service.collection_with_result).to eq collection
47
+ end
48
+ end
49
+
50
+ it 'gets multiple elevation - and enhancing collection' do
51
+ VCR.use_cassette('multiple location') do
52
+ elevation_stuct = OpenStruct.new(longitude: 21.01, latitude: 51.01, elevation: nil)
53
+ elevation_stuct_2 = OpenStruct.new(longitude: 21.06, latitude: 51.21, elevation: nil)
54
+ elevation_stuct_3 = OpenStruct.new(longitude: 20.91, latitude: 51.51, elevation: nil)
55
+
56
+ service = described_class.new(collection: [elevation_stuct, elevation_stuct_2, elevation_stuct_3])
57
+ service.call
58
+
59
+ expect(service.raw_response.map{|r| r['elevation']}).to eq [290.0, 193.0, 162.0]
60
+ expect(service.collection_with_result.first.elevation).to eq 290.0
61
+ expect(service.collection_with_result.last.elevation).to eq 162.0
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,23 @@
1
+ require 'vcr'
2
+ require_relative '../lib/open-elevation-api'
3
+
4
+ OpenElevationApi.configure do |config|
5
+ config.api_url = OpenElevationApi::Configuration::OPEN_ELEVATION_API_URL
6
+ end
7
+
8
+ RSpec.configure do |config|
9
+ config.expect_with :rspec do |expectations|
10
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
11
+ end
12
+
13
+ config.mock_with :rspec do |mocks|
14
+ mocks.verify_partial_doubles = true
15
+ end
16
+
17
+ config.shared_context_metadata_behavior = :apply_to_host_groups
18
+ end
19
+
20
+ VCR.configure do |config|
21
+ config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
22
+ config.hook_into :webmock
23
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: open-elevation-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stanislaw Zawadzki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-01-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.13'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '6.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '6.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.0'
125
+ description: Works for both official API and self-hosted versions
126
+ email: 'st.zawadzki@gmail.com '
127
+ executables: []
128
+ extensions: []
129
+ extra_rdoc_files: []
130
+ files:
131
+ - ".rubocop.yml"
132
+ - Gemfile
133
+ - Gemfile.lock
134
+ - README.md
135
+ - lib/open-elevation-api.rb
136
+ - lib/open-elevation-api/configuration.rb
137
+ - lib/open-elevation-api/get_elevations.rb
138
+ - open-elevation-api.gemspec
139
+ - spec/fixtures/vcr_cassettes/multiple_location.yml
140
+ - spec/fixtures/vcr_cassettes/single_location.yml
141
+ - spec/open-elevation-api/get_elevations_spec.rb
142
+ - spec/spec_helper.rb
143
+ homepage:
144
+ licenses:
145
+ - MIT
146
+ metadata:
147
+ rubygems_mfa_required: 'false'
148
+ post_install_message:
149
+ rdoc_options: []
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '3.1'
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ requirements: []
163
+ rubygems_version: 3.3.7
164
+ signing_key:
165
+ specification_version: 4
166
+ summary: Handles selecting elevation from Open Elevation API
167
+ test_files: []