ocean-names 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce07db74c392b1aea09122b6e3c390acb1db68481839e2063a195db7c60a258c
4
- data.tar.gz: 5c54633399da14543917069a449656cf5582a877edbbbc3cdc13f8c421574934
3
+ metadata.gz: 8b3fcd9b45bddee3727772b3515016ac765c5b42ac266b48a5a44dc15e105445
4
+ data.tar.gz: acbfd16ef0d5af323ce7b6ebdfc5ff2ef7df1b644d4e9f4eb1748fe81dbc76e4
5
5
  SHA512:
6
- metadata.gz: e34ff1fd502acc0a46f7668f439a9c8f28c1be18e022d6576241f064bef3519bdac8f0688d0bfc1216256c0a46d051796bba61cb00face5df8ae560dd595ccf9
7
- data.tar.gz: 6e68eb4fc3b42a7911f25ca9325b98dcaa522b84f9a0ab758904aab0eca6410ad600d9fd60bcc541887884bfef75d515dfea24f3212f444ace2a6bc5185761a3
6
+ metadata.gz: 4fef1186bdcace4947750b157b3f01daea48b9bc5cb8dc9df31020024fc198285b682c1a0fc5c8381a5828a11ced97b1aefbd7cff192437c7c98ae90661fea64
7
+ data.tar.gz: e5e295d9c1bced6151771ee1042c253dffa7aeda26d6fde2e746cd5c7b9b3f81c8674897d343c436bfb17222b0778d6a9a947eca0f3c6a6d60cf7c6880282cf1
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ocean-names (0.4.8)
4
+ ocean-names (1.0.1)
5
5
  oj (~> 3.3)
6
6
 
7
7
  GEM
@@ -10,26 +10,26 @@ GEM
10
10
  coderay (1.1.2)
11
11
  diff-lcs (1.3)
12
12
  docile (1.3.2)
13
- json (2.2.0)
13
+ json (2.3.0)
14
14
  method_source (0.9.2)
15
- oj (3.9.2)
15
+ oj (3.10.6)
16
16
  pry (0.12.2)
17
17
  coderay (~> 1.1.0)
18
18
  method_source (~> 0.9.0)
19
- rake (10.5.0)
19
+ rake (13.0.1)
20
20
  rspec (3.9.0)
21
21
  rspec-core (~> 3.9.0)
22
22
  rspec-expectations (~> 3.9.0)
23
23
  rspec-mocks (~> 3.9.0)
24
- rspec-core (3.9.0)
25
- rspec-support (~> 3.9.0)
26
- rspec-expectations (3.9.0)
24
+ rspec-core (3.9.1)
25
+ rspec-support (~> 3.9.1)
26
+ rspec-expectations (3.9.1)
27
27
  diff-lcs (>= 1.2.0, < 2.0)
28
28
  rspec-support (~> 3.9.0)
29
- rspec-mocks (3.9.0)
29
+ rspec-mocks (3.9.1)
30
30
  diff-lcs (>= 1.2.0, < 2.0)
31
31
  rspec-support (~> 3.9.0)
32
- rspec-support (3.9.0)
32
+ rspec-support (3.9.2)
33
33
  rspec_junit_formatter (0.4.1)
34
34
  rspec-core (>= 2, < 4, != 2.12.0)
35
35
  simplecov (0.17.1)
@@ -45,10 +45,10 @@ DEPENDENCIES
45
45
  bundler (~> 2.0)
46
46
  ocean-names!
47
47
  pry (~> 0.12.2)
48
- rake (~> 10.0)
48
+ rake (~> 13.0)
49
49
  rspec (~> 3.0)
50
50
  rspec_junit_formatter (~> 0.4.1)
51
51
  simplecov (~> 0.17.1)
52
52
 
53
53
  BUNDLED WITH
54
- 2.0.2
54
+ 2.1.4
data/README.md CHANGED
@@ -26,19 +26,19 @@ Or install it yourself as:
26
26
  ## Usage
27
27
 
28
28
  ```ruby
29
- 2.6.5 :001 > require "ocean/names"
29
+ 2.6.5 :001 > require "ocean_names"
30
30
  => true
31
- 2.6.5 :002 > Ocean::Names.reverse_geocode(lng: 0, lat: 0)
31
+ 2.6.5 :002 > OceanNames.reverse_geocode(lng: 0, lat: 0)
32
32
  => {"name"=>"South Atlantic Ocean", "lng"=>-18.80876715914, "lat"=>-33.73239551445, "min_lng"=>-69.60083675371, "min_lat"=>-60, "max_lng"=>20.00904913827, "max_lat"=>0.07510554798, "area"=>40501812}
33
- 2.6.5 :003 > Ocean::Names.reverse_geocode(lng: -18, lat: -33)
33
+ 2.6.5 :003 > OceanNames.reverse_geocode(lng: -18, lat: -33)
34
34
  => {"name"=>"South Atlantic Ocean", "lng"=>-18.80876715914, "lat"=>-33.73239551445, "min_lng"=>-69.60083675371, "min_lat"=>-60, "max_lng"=>20.00904913827, "max_lat"=>0.07510554798, "area"=>40501812}
35
- 2.6.5 :004 > Ocean::Names.reverse_geocode(lng: 79, lat: -32)
35
+ 2.6.5 :004 > OceanNames.reverse_geocode(lng: 79, lat: -32)
36
36
  => {"name"=>"Indian Ocean", "lng"=>79.20858601429, "lat"=>-32.72458381046, "min_lng"=>20.00261595272, "min_lat"=>-60, "max_lng"=>146.8982192222, "max_lat"=>10.44499945636, "area"=>58230954}
37
- 2.6.5 :005 > Ocean::Names.reverse_geocode(lng: 135, lat: -40)
37
+ 2.6.5 :005 > OceanNames.reverse_geocode(lng: 135, lat: -40)
38
38
  => {"name"=>"Great Australian Bight", "lng"=>132.7165581317, "lat"=>-36.72591576597, "min_lng"=>117.6141982382, "min_lat"=>-43.56601647135, "max_lng"=>146.23115575344, "max_lat"=>-31.46366941901, "area"=>1326209}
39
- 2.6.5 :006 > Ocean::Names.reverse_geocode(lng: 135, lat: 40)
39
+ 2.6.5 :006 > OceanNames.reverse_geocode(lng: 135, lat: 40)
40
40
  => {"name"=>"Japan Sea", "lng"=>135.13274500727, "lat"=>40.5084302428, "min_lng"=>125.8013889, "min_lat"=>32.57501368363, "max_lng"=>142.2638347153, "max_lat"=>51.74733316939, "area"=>1066307}
41
- 2.6.5 :007 > Ocean::Names.reverse_geocode(lng: 125, lat: 29)
41
+ 2.6.5 :007 > OceanNames.reverse_geocode(lng: 125, lat: 29)
42
42
  => {"name"=>"Eastern China Sea", "lng"=>125.21708986497, "lat"=>29.13089135213, "min_lng"=>118.47804582106, "min_lat"=>24.05760752069, "max_lng"=>131.1322036827, "max_lat"=>33.37195920955, "area"=>761356}
43
43
  ```
44
44
 
@@ -58,4 +58,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
58
58
 
59
59
  ## Code of Conduct
60
60
 
61
- Everyone interacting in the Ocean::Names project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/ocean-names/blob/master/CODE_OF_CONDUCT.md).
61
+ Everyone interacting in the OceanNames project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/ocean-names/blob/master/CODE_OF_CONDUCT.md).
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "bundler/setup"
4
- require "ocean/names"
4
+ require "ocean_names"
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ocean_names/version"
4
+ require "ocean_names/polygon"
5
+ require "oj"
6
+
7
+ module OceanNames
8
+ class Error < StandardError; end
9
+
10
+ # drill down to main geometry points array
11
+ GET_POINTS = ->(arg) {
12
+ return arg unless arg.first.first.is_a?(Array)
13
+
14
+ GET_POINTS.(arg.first)
15
+ }
16
+
17
+ # check bounds to avoid
18
+ WITHIN_BOUNDS = ->(record, x, y) {
19
+ record["min_lng"] <= x &&
20
+ record["max_lng"] >= x &&
21
+ record["min_lat"] <= y &&
22
+ record["max_lat"] >= y
23
+ }
24
+
25
+ def self.reverse_geocode(lat:, lng:)
26
+ rec = data.find do |record|
27
+ # avoid check of obviously false geometries
28
+ next unless WITHIN_BOUNDS.(record, lng, lat)
29
+
30
+ record["geometry"].any? do |geometry|
31
+ # get points from nested arrays
32
+ points = GET_POINTS.(geometry)
33
+ polygon = OceanNames::Polygon.new(points)
34
+ polygon.contains?(lat: lat, lng: lng)
35
+ end
36
+ end
37
+
38
+ rec&.reject do |key|
39
+ key == "geometry"
40
+ end
41
+ end
42
+
43
+ def self.file
44
+ File.expand_path("../data/water.json", File.dirname(__FILE__))
45
+ end
46
+
47
+ def self.data
48
+ @data ||= Oj.load(File.read(file))
49
+ end
50
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OceanNames
4
+ class Polygon
5
+ def initialize(points)
6
+ @points = points
7
+ @points << points[0] if points[0] != points[-1]
8
+ end
9
+
10
+ def contains?(lat:, lng:)
11
+ last_point = @points[-1]
12
+
13
+ odd_node = false
14
+
15
+ x = lng
16
+ y = lat
17
+
18
+ @points.each do |p|
19
+ # p = [lng, lat]
20
+ x1 = p.first
21
+ y1 = p.last
22
+ x2 = last_point.first
23
+ y2 = last_point.last
24
+
25
+ if x1 < x && x2 >= x || x2 < x && x1 >= x
26
+ odd_node = !odd_node if y1 + (x - x1) / (x2 - x1) * (y2 - y1) < y
27
+ end
28
+
29
+ last_point = p
30
+ end
31
+
32
+ odd_node
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OceanNames
4
+ VERSION = "1.0.1"
5
+ end
@@ -1,10 +1,10 @@
1
1
  lib = File.expand_path("lib", __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "ocean/names/version"
3
+ require "ocean_names/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "ocean-names"
7
- spec.version = Ocean::Names::VERSION
7
+ spec.version = OceanNames::VERSION
8
8
  spec.authors = ["rafael"]
9
9
  spec.email = ["skcc321@gmail.com"]
10
10
 
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency "oj", "~> 3.3"
32
32
 
33
33
  spec.add_development_dependency "bundler", "~> 2.0"
34
- spec.add_development_dependency "rake", "~> 10.0"
34
+ spec.add_development_dependency "rake", "~> 13.0"
35
35
  spec.add_development_dependency "rspec", "~> 3.0"
36
36
  spec.add_development_dependency "rspec_junit_formatter", "~> 0.4.1"
37
37
  spec.add_development_dependency "simplecov", "~> 0.17.1"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocean-names
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - rafael
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-03 00:00:00.000000000 Z
11
+ date: 2020-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -128,9 +128,9 @@ files:
128
128
  - bin/console
129
129
  - bin/setup
130
130
  - data/water.json
131
- - lib/ocean/names.rb
132
- - lib/ocean/names/polygon.rb
133
- - lib/ocean/names/version.rb
131
+ - lib/ocean_names.rb
132
+ - lib/ocean_names/polygon.rb
133
+ - lib/ocean_names/version.rb
134
134
  - ocean-names.gemspec
135
135
  homepage: https://github.com/skcc321/ocean-names
136
136
  licenses:
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "ocean/names/version"
4
- require "ocean/names/polygon"
5
- require "oj"
6
-
7
- module Ocean
8
- module Names
9
- class Error < StandardError; end
10
-
11
- # drill down to main geometry points array
12
- GET_POINTS = ->(arg) {
13
- return arg unless arg.first.first.is_a?(Array)
14
-
15
- GET_POINTS.(arg.first)
16
- }
17
-
18
- # check bounds to avoid
19
- WITHIN_BOUNDS = ->(record, x, y) {
20
- record["min_lng"] <= x &&
21
- record["max_lng"] >= x &&
22
- record["min_lat"] <= y &&
23
- record["max_lat"] >= y
24
- }
25
-
26
- def self.reverse_geocode(lat:, lng:)
27
- rec = data.find do |record|
28
- # avoid check of obviously false geometries
29
- next unless WITHIN_BOUNDS.(record, lng, lat)
30
-
31
- record["geometry"].any? do |geometry|
32
- # get points from nested arrays
33
- points = GET_POINTS.(geometry)
34
- polygon = Ocean::Names::Polygon.new(points)
35
- polygon.contains?(lat: lat, lng: lng)
36
- end
37
- end
38
-
39
- rec&.reject do |key|
40
- key == "geometry"
41
- end
42
- end
43
-
44
- def self.file
45
- File.expand_path("../../data/water.json", File.dirname(__FILE__))
46
- end
47
-
48
- def self.data
49
- @data ||= Oj.load(File.read(file))
50
- end
51
- end
52
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ocean
4
- module Names
5
- class Polygon
6
- def initialize(points)
7
- @points = points
8
- @points << points[0] if points[0] != points[-1]
9
- end
10
-
11
- def contains?(lat:, lng:)
12
- last_point = @points[-1]
13
-
14
- odd_node = false
15
-
16
- x = lng
17
- y = lat
18
-
19
- @points.each do |p|
20
- # p = [lng, lat]
21
- x1 = p.first
22
- y1 = p.last
23
- x2 = last_point.first
24
- y2 = last_point.last
25
-
26
- if x1 < x && x2 >= x || x2 < x && x1 >= x
27
- odd_node = !odd_node if y1 + (x - x1) / (x2 - x1) * (y2 - y1) < y
28
- end
29
-
30
- last_point = p
31
- end
32
-
33
- odd_node
34
- end
35
- end
36
- end
37
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Ocean
4
- module Names
5
- VERSION = "1.0.0"
6
- end
7
- end