simplify_rb 0.1.2 → 0.1.3

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
  SHA1:
3
- metadata.gz: 0f79646c8c01d7c69d1d64e96be6ef6035815879
4
- data.tar.gz: 7d2c38e4bcdab4d114cd4c193539ed9f6a9a7a7c
3
+ metadata.gz: 391f23576ae316977748323dbf295a0b11b5d99a
4
+ data.tar.gz: 21bfa76b9bdbee619f1ea406e729127edde09c44
5
5
  SHA512:
6
- metadata.gz: ac827d96699828338bbc0bf5826a592fb3f1a40ab16e7233aa407f9d7ba5520fa84cf00088b18551cb0176a8117a423cf1476d23c50b296604619f79f769a2bf
7
- data.tar.gz: 6ecb8581a96851cc2e539428cec861a5763f1b964abdab02e2b709deec8d463849586fa317dc807c72eb3c9feeadbba34bd5d9360a7ca37f851c3e1f8e494647
6
+ metadata.gz: b6d2e5cc6e2038c8de7df917a91afd9d1eed41ce436dd95677a568426ff7d5234b9760f42056483b196a569c6196248f2cfad40b71f0557fab50886701642e01
7
+ data.tar.gz: 2646af352034c6633295eba793d0d8702029c0e2c5c3d07ced3d3db72d36154afc67e3bf055f85ae928daf3585d1545cfea59c921d8711b417d18f51f8dd4005
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'spec/fixtures/*'
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.0
4
+ - 2.2
5
+ - 2.1
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SimplifyRb - Polyline simplification
2
2
 
3
- [![Codeship Status for odlp/simplify_rb](https://www.codeship.io/projects/2a8ed250-47d5-0132-a14f-46b32a25e7b0/status)](https://www.codeship.io/projects/45709)
3
+ [![Build Status](https://travis-ci.org/odlp/simplify_rb.svg?branch=master)](https://travis-ci.org/odlp/simplify_rb) [![Gem Version](https://badge.fury.io/rb/simplify_rb.svg)](https://badge.fury.io/rb/simplify_rb)
4
4
 
5
5
  SimplifyRb is a Ruby port of [simplify.js](https://github.com/mourner/simplify-js) by Vladimir Agafonkin.
6
6
 
data/Rakefile CHANGED
@@ -1 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task :default => [:spec]
@@ -0,0 +1,13 @@
1
+ module SimplifyRbUtils
2
+ class Symbolizer
3
+ def keys_are_symbols?(keys)
4
+ keys.all? { |k| k.is_a? Symbol }
5
+ end
6
+
7
+ def symbolize_keys(collection)
8
+ collection.map do |item|
9
+ item.each_with_object({}) { |(k,v), memo| memo[k.to_sym] = v }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  class SimplifyRb
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/simplify_rb.rb CHANGED
@@ -1,29 +1,32 @@
1
- require "simplify_rb/version"
1
+ require 'simplify_rb/version'
2
+ require 'simplify_rb/symbolizer'
2
3
 
3
4
  class SimplifyRb
4
- # Main method
5
- def self.simplify (points, tolerance=1, highest_quality=false)
5
+
6
+ def self.simplify(points, tolerance = 1, highest_quality = false)
6
7
  raise ArgumentError.new('Points must be an array') unless points.is_a? Array
7
8
 
8
9
  return points if points.length <= 1
9
10
 
10
- points = symbolize_keys(points) unless keys_are_symbols?(points.map(&:keys))
11
+ symbolizer = SimplifyRbUtils::Symbolizer.new
12
+
13
+ points = symbolizer.symbolize_keys(points) unless points.all? { |p| symbolizer.keys_are_symbols?(p.keys) }
11
14
 
12
15
  sq_tolerance = tolerance * tolerance
13
16
 
14
17
  # Optimisation step 1
15
- points = simplifyRadialDist(points, sq_tolerance) unless highest_quality
18
+ points = simplify_radial_dist(points, sq_tolerance) unless highest_quality
16
19
 
17
20
  # Optimisation step 2
18
- simplifyDouglasPeucker(points, sq_tolerance)
21
+ simplify_douglas_peucker(points, sq_tolerance)
19
22
  end
20
23
 
21
24
  # Basic distance-based simplification
22
- def self.simplifyRadialDist (points, sq_tolerance)
25
+ def self.simplify_radial_dist(points, sq_tolerance)
23
26
  new_points = [points.first]
24
27
 
25
28
  points.each do |point|
26
- new_points << point if (getSqDist(point, new_points.last) > sq_tolerance)
29
+ new_points << point if (get_sq_dist(point, new_points.last) > sq_tolerance)
27
30
  end
28
31
 
29
32
  new_points << points.last unless new_points.last == points.last
@@ -32,7 +35,7 @@ class SimplifyRb
32
35
  end
33
36
 
34
37
  # Simplification using optimized Douglas-Peucker algorithm with recursion elimination
35
- def self.simplifyDouglasPeucker (points, sq_tolerance)
38
+ def self.simplify_douglas_peucker(points, sq_tolerance)
36
39
  first = 0
37
40
  last = points.length - 1
38
41
  index = nil
@@ -41,11 +44,11 @@ class SimplifyRb
41
44
  points.first[:keep] = true
42
45
  points.last[:keep] = true
43
46
 
44
- while last do
47
+ while last
45
48
  max_sq_dist = 0
46
49
 
47
50
  ((first + 1)...last).each do |i|
48
- sq_dist = getSqSegDist(points[i], points[first], points[last])
51
+ sq_dist = get_sq_seg_dist(points[i], points[first], points[last])
49
52
 
50
53
  if sq_dist > max_sq_dist
51
54
  index = i
@@ -66,7 +69,7 @@ class SimplifyRb
66
69
  end
67
70
 
68
71
  # Square distance between two points
69
- def self.getSqDist (point_1, point_2)
72
+ def self.get_sq_dist(point_1, point_2)
70
73
  dx = point_1[:x] - point_2[:x]
71
74
  dy = point_1[:y] - point_2[:y]
72
75
 
@@ -74,13 +77,13 @@ class SimplifyRb
74
77
  end
75
78
 
76
79
  # Square distance from a point to a segment
77
- def self.getSqSegDist (point, point_1, point_2)
80
+ def self.get_sq_seg_dist(point, point_1, point_2)
78
81
  x = point_1[:x]
79
82
  y = point_1[:y]
80
83
  dx = point_2[:x] - x
81
84
  dy = point_2[:y] - y
82
85
 
83
- if (dx != 0 || dy != 0)
86
+ if dx != 0 || dy != 0
84
87
  t = ((point[:x] - x) * dx + (point[:y] - y) * dy) / (dx * dx + dy * dy)
85
88
 
86
89
  if t > 1
@@ -98,16 +101,4 @@ class SimplifyRb
98
101
 
99
102
  dx * dx + dy * dy
100
103
  end
101
-
102
- # Check if keys are symbols
103
- def self.keys_are_symbols? (keys)
104
- keys.all? {|k| k.is_a? Symbol}
105
- end
106
-
107
- # Symbolize all the hash keys in an array of hashes
108
- def self.symbolize_keys (collection)
109
- collection.map do |item|
110
- item.each_with_object({}) { |(k,v), memo| memo[k.to_sym] = v }
111
- end
112
- end
113
104
  end
data/simplify_rb.gemspec CHANGED
@@ -4,20 +4,20 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'simplify_rb/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "simplify_rb"
7
+ spec.name = 'simplify_rb'
8
8
  spec.version = SimplifyRb::VERSION
9
- spec.authors = ["odlp"]
10
- spec.description = "You can use this gem to reduce the number of points in a complex polyline / polygon, making use of an optimized Douglas-Peucker algorithm. Ruby port of Simplify.js."
11
- spec.summary = "Polyline simplification library. Ruby port of Simplify.js."
12
- spec.homepage = "https://github.com/odlp/simplify_rb"
13
- spec.license = "MIT"
9
+ spec.authors = ['odlp']
10
+ spec.description = 'You can use this gem to reduce the number of points in a complex polyline / polygon, making use of an optimized Douglas-Peucker algorithm. Ruby port of Simplify.js.'
11
+ spec.summary = 'Polyline simplification library. Ruby port of Simplify.js.'
12
+ spec.homepage = 'https://github.com/odlp/simplify_rb'
13
+ spec.license = 'MIT'
14
14
 
15
15
  spec.files = `git ls-files`.split($/)
16
16
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
19
19
 
20
- spec.add_development_dependency "bundler", "~> 1.3"
21
- spec.add_development_dependency "rake", "~> 10"
22
- spec.add_development_dependency "rspec", "~> 3"
20
+ spec.add_development_dependency 'bundler', '~> 1.7'
21
+ spec.add_development_dependency 'rake', '~> 11'
22
+ spec.add_development_dependency 'rspec', '~> 3.5'
23
23
  end
@@ -1,49 +1,43 @@
1
- require "spec_helper"
1
+ require 'spec_helper'
2
+ require 'simplify_rb'
3
+ require File.expand_path('../fixtures/simplify_test_data.rb', __FILE__)
2
4
 
3
5
  describe SimplifyRb do
4
- context "simplifies points correctly with the given tolerance" do
5
- before(:each) {@test_data = SimplifyTestData::points}
6
-
7
- it "uses the fast strategy by default" do
8
- expect(SimplifyRb.simplify(@test_data, 5)).to eq(SimplifyTestData::result_fast)
9
- end
10
-
11
- it "uses the high quality strategy when the flag is passed" do
12
- expect(SimplifyRb.simplify(@test_data, 5, true)).to eq(SimplifyTestData::result_high_quality)
6
+ describe '#simplify' do
7
+ context 'simplifies points correctly with the given tolerance' do
8
+ let(:test_data) { SimplifyTestData::points }
9
+ let(:expected_fast_result) { SimplifyTestData::result_fast }
10
+ let(:expected_high_quality_result) { SimplifyTestData::result_high_quality }
11
+
12
+ it 'uses the fast strategy by default' do
13
+ result = SimplifyRb.simplify(test_data, 5)
14
+ expect(result).to eq(expected_fast_result)
15
+ end
16
+
17
+ it 'uses the high quality strategy when the flag is passed' do
18
+ result = SimplifyRb.simplify(test_data, 5, true)
19
+ expect(result).to eq(expected_high_quality_result)
20
+ end
13
21
  end
14
- end
15
-
16
- it "returns the points if it has only one point" do
17
- data = [{x: 1, y: 2}]
18
-
19
- expect(SimplifyRb.simplify(data)).to eq(data)
20
- end
21
22
 
22
- it "returns the array if it has no points" do
23
- expect(SimplifyRb.simplify([])).to eq([])
24
- end
25
-
26
- it "raises an argument error if the points are passsed as an array" do
27
- data = {x: 1, y: 2}
28
-
29
- expect { SimplifyRb.simplify(data) }.to raise_error(ArgumentError, "Points must be an array")
30
- end
31
-
32
- describe "#keys_are_symbols?" do
33
- it "returns false if any key is not a Symbol" do
34
- expect(SimplifyRb.keys_are_symbols? [:a, 'b', :c]).to equal(false)
23
+ context 'only one point' do
24
+ it 'returns a list with one point' do
25
+ data = [{ x: 1, y: 2 }]
26
+ expect(SimplifyRb.simplify(data)).to eq(data)
27
+ end
35
28
  end
36
29
 
37
- it "returns return true if all the keys are Symbols" do
38
- expect(SimplifyRb.keys_are_symbols? [:a, :b, :c]).to equal(true)
30
+ context 'no points' do
31
+ it 'returns an empty list of points' do
32
+ expect(SimplifyRb.simplify([])).to be_empty
33
+ end
39
34
  end
40
- end
41
-
42
- describe "#symbolize_keys" do
43
- it "converts all of the collection's keys to symbols" do
44
- collection = [{'a' => 1, 'b' => 2}, {'c' => 3}]
45
35
 
46
- expect(SimplifyRb.symbolize_keys(collection)).to eq([{a: 1, b: 2}, {c: 3}])
36
+ describe 'unexpected argument' do
37
+ it 'raises an error if the points are not passsed as an array' do
38
+ data = { x: 1, y: 2 }
39
+ expect { SimplifyRb.simplify(data) }.to raise_error(ArgumentError, 'Points must be an array')
40
+ end
47
41
  end
48
42
  end
49
43
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
1
2
  require 'bundler/setup'
2
3
  require 'rspec'
3
- require File.expand_path '../simplify_test_data.rb', __FILE__
4
- require 'simplify_rb'
5
4
 
6
- Bundler.setup
5
+ Bundler.setup
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+ require 'simplify_rb/symbolizer'
3
+
4
+ describe SimplifyRbUtils::Symbolizer do
5
+ describe '#keys_are_symbols?' do
6
+ it 'returns false if any key is not a Symbol' do
7
+ expect(subject.keys_are_symbols?([:a, 'b', :c])).to equal(false)
8
+ end
9
+
10
+ it 'returns return true if all the keys are Symbols' do
11
+ expect(subject.keys_are_symbols?([:a, :b, :c])).to equal(true)
12
+ end
13
+ end
14
+
15
+ describe '#symbolize_keys' do
16
+ it 'converts all of the collection\'s keys to symbols' do
17
+ collection = [{ 'a' => 1, 'b' => 2 }, { 'c' => 3 }]
18
+ symbolized_result = subject.symbolize_keys(collection)
19
+ expected_result = [{ a: 1, b: 2 }, { c: 3 }]
20
+
21
+ expect(symbolized_result).to eq(expected_result)
22
+ end
23
+ end
24
+ end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplify_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - odlp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-18 00:00:00.000000000 Z
11
+ date: 2016-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10'
33
+ version: '11'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10'
40
+ version: '11'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3'
47
+ version: '3.5'
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: '3'
54
+ version: '3.5'
55
55
  description: You can use this gem to reduce the number of points in a complex polyline
56
56
  / polygon, making use of an optimized Douglas-Peucker algorithm. Ruby port of Simplify.js.
57
57
  email:
@@ -59,18 +59,22 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
63
- - .rspec
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".rubocop.yml"
65
+ - ".travis.yml"
64
66
  - Gemfile
65
67
  - LICENSE.txt
66
68
  - README.md
67
69
  - Rakefile
68
70
  - lib/simplify_rb.rb
71
+ - lib/simplify_rb/symbolizer.rb
69
72
  - lib/simplify_rb/version.rb
70
73
  - simplify_rb.gemspec
74
+ - spec/fixtures/simplify_test_data.rb
71
75
  - spec/simplify_rb_spec.rb
72
- - spec/simplify_test_data.rb
73
76
  - spec/spec_helper.rb
77
+ - spec/symbolizer_spec.rb
74
78
  homepage: https://github.com/odlp/simplify_rb
75
79
  licenses:
76
80
  - MIT
@@ -81,21 +85,22 @@ require_paths:
81
85
  - lib
82
86
  required_ruby_version: !ruby/object:Gem::Requirement
83
87
  requirements:
84
- - - '>='
88
+ - - ">="
85
89
  - !ruby/object:Gem::Version
86
90
  version: '0'
87
91
  required_rubygems_version: !ruby/object:Gem::Requirement
88
92
  requirements:
89
- - - '>='
93
+ - - ">="
90
94
  - !ruby/object:Gem::Version
91
95
  version: '0'
92
96
  requirements: []
93
97
  rubyforge_project:
94
- rubygems_version: 2.2.2
98
+ rubygems_version: 2.5.1
95
99
  signing_key:
96
100
  specification_version: 4
97
101
  summary: Polyline simplification library. Ruby port of Simplify.js.
98
102
  test_files:
103
+ - spec/fixtures/simplify_test_data.rb
99
104
  - spec/simplify_rb_spec.rb
100
- - spec/simplify_test_data.rb
101
105
  - spec/spec_helper.rb
106
+ - spec/symbolizer_spec.rb