simple-trail 0.2.5 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31e1ae2c7eae42ebfc12025e5d2aad3694211d63adc83afecd16e8f56ced84dc
4
- data.tar.gz: 302d051c4761b2330b504b1b3f6f258078f2affba3e343fa2bd80fc634dfd88e
3
+ metadata.gz: 4ec7ad04579f7af6e5c6df0517ee1f8ef8ba986f8895ce92e7548fddec91dabe
4
+ data.tar.gz: 694d57d1ec75c501e48e93acbdaad27d63dda944671323666d045c47031b4e77
5
5
  SHA512:
6
- metadata.gz: 60389e48d5b20f1ae913fdf2ff45466ca01af63c81476c93d9f8899ae1a43f1b792545f5043782966ec339887494f8a425a28a9229f6dccf5f8c3451220abe36
7
- data.tar.gz: 06d43df7c91a0b58f23afd7196583bb1f855adfe2931d606167180dab7cd7d6ef5ffa7b52858aedd72424379efcf9e69bae853e203c901f56cf679ddc453e83e
6
+ metadata.gz: b18740f2f648846202cf58a00f9a1debdae27273cd769bb401b27752d6c6c5b6b6f514445573c57fc3da650fea96827bd75e2146ff5539e8c5c78ca1b4b0861e
7
+ data.tar.gz: 0d1fe7392d9c8701da42433b52ed498e0a959371d405f3dcc8aa4d632af56df28a2cc305f6ef5c6aa9717ce0719b36cc73663e0635922a1e6ee7ccddf6973904
@@ -75,11 +75,12 @@ module Manipulation
75
75
  end
76
76
 
77
77
  def add_km_markers
78
- total_distance = @points[-1][:total_distance].floor - 1
78
+ total_distance = @points[-1][:total_distance].floor
79
79
  start_v = @offset.to_f.ceil
80
80
 
81
81
  (start_v..start_v+total_distance).each do |i|
82
- find_and_enrich_first_occurence(i+1)
82
+ next if i == @offset.to_f
83
+ find_and_enrich_first_occurence(i)
83
84
  end
84
85
  end
85
86
 
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ module Parser
3
+ class Base
4
+
5
+ private
6
+
7
+ def extract_points
8
+ points_reader = ExtractPoints.new(@parsed_file)
9
+ points_reader.read_points
10
+ @points = points_reader.points
11
+ @simplified_points = points_reader.simplified_points
12
+ end
13
+
14
+ def extract_pois
15
+ @points_of_interests = @parsed_file[:wpt]
16
+ end
17
+
18
+ def extract_data
19
+ metadata = @parsed_file[:metadata]
20
+ {
21
+ name: metadata[:name],
22
+ author: metadata[:author][:name]
23
+ }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Parser
4
+ class ExtractPoints
5
+ attr_reader :simplified_points, :points
6
+
7
+ def initialize(parsed_file)
8
+ @parsed_file = parsed_file
9
+ end
10
+
11
+ def read_points
12
+ segments = @parsed_file.dig(:trk, :trkseg)
13
+ @points = segments.is_a?(Array) ? segments.map { |seg| seg[:trkpt] }.flatten : segments[:trkpt]
14
+ @simplified_points = @points.map { |point| point.select { |key, _| [:lon, :lat].include? key } }
15
+ end
16
+ end
17
+ end
18
+
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Parser
4
- class Gpx
4
+ class Gpx < Base
5
5
  attr_reader :simplified_points, :points, :points_of_interests, :parsed_file
6
6
 
7
7
  def initialize(filename)
@@ -19,25 +19,5 @@ module Parser
19
19
  def meta
20
20
  @meta ||= extract_data
21
21
  end
22
-
23
- private
24
-
25
- def extract_points
26
- segments = @parsed_file.dig(:trk, :trkseg)
27
- @points = segments.is_a?(Array) ? segments.map { |seg| seg[:trkpt] }.flatten : segments[:trkpt]
28
- @simplified_points = @points.map { |point| point.select { |key, _| [:lon, :lat].include? key } }
29
- end
30
-
31
- def extract_pois
32
- @points_of_interests = @parsed_file[:wpt]
33
- end
34
-
35
- def extract_data
36
- metadata = @parsed_file[:metadata]
37
- {
38
- name: metadata[:name],
39
- author: metadata[:author][:name]
40
- }
41
- end
42
22
  end
43
23
  end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ module Parser
3
+ class GpxString < Base
4
+ attr_reader :simplified_points, :points, :points_of_interests, :parsed_file
5
+
6
+ def initialize(file_content)
7
+ @file_content = file_content
8
+ end
9
+
10
+ def read
11
+ @parsed_file = XmlHasher.parse(@file_content)[:gpx]
12
+ fail unless @parsed_file
13
+ extract_points
14
+ extract_pois
15
+ end
16
+
17
+ def meta
18
+ @meta ||= extract_data
19
+ end
20
+ end
21
+ end
data/lib/simple_trail.rb CHANGED
@@ -3,7 +3,10 @@
3
3
  require 'geokit'
4
4
  require 'xmlhasher'
5
5
 
6
+ require File.expand_path('simple_trail/parser/base', __dir__)
6
7
  require File.expand_path('simple_trail/parser/gpx', __dir__)
8
+ require File.expand_path('simple_trail/parser/gpx_string', __dir__)
9
+ require File.expand_path('simple_trail/parser/extract_points', __dir__)
7
10
  require File.expand_path('simple_trail/manipulation/statistics', __dir__)
8
11
  require File.expand_path('simple_trail/manipulation/straightener', __dir__)
9
12
  require File.expand_path('simple_trail/manipulation/unifier', __dir__)
data/simple-trail.gemspec CHANGED
@@ -5,12 +5,13 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'simple-trail'
8
- s.version = '0.2.5'
8
+ s.version = '0.3.0'
9
9
  s.date = '2020-08-03'
10
10
  s.summary = 'Readind and manipulating GPX and other trail representation file'
11
11
  s.description = 'Optimazing and manipulating GPX file data. For my private purposes mostly'
12
12
  s.authors = ['Staszek Zawadzki']
13
13
  s.email = 'st.zawadzki@gmail.com'
14
+ s.homepage = 'https://github.com/PadawanBreslau/simple-trail'
14
15
 
15
16
  s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
16
17
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe Parser::GpxString do
6
+ it 'reads the file' do
7
+ gpx_parser = described_class.new(File.new('./spec/examples/test_1.gpx').read)
8
+ expect { gpx_parser.read }.not_to raise_error
9
+ expect(gpx_parser.parsed_file).not_to be_nil
10
+ end
11
+
12
+ it 'reads metadata' do
13
+ gpx_parser = described_class.new(File.new('./spec/examples/test_1.gpx').read)
14
+ gpx_parser.read
15
+
16
+ expect(gpx_parser.meta[:author]).to eq 'choosen'
17
+ expect(gpx_parser.meta[:name]).to eq '06.06.2020 18:56'
18
+ end
19
+
20
+ it 'reads points simplified/all' do
21
+ gpx_parser = described_class.new(File.new('./spec/examples/test_1.gpx').read)
22
+ gpx_parser.read
23
+ expect(gpx_parser.points.size).to eq 190
24
+ expect(gpx_parser.points.size).to eq gpx_parser.simplified_points.size
25
+
26
+ random_index = rand(gpx_parser.points.size)
27
+ expect(gpx_parser.points[random_index][:lat]).to eq gpx_parser.simplified_points[random_index][:lat]
28
+ expect(gpx_parser.points[random_index][:lon]).to eq gpx_parser.simplified_points[random_index][:lon]
29
+ end
30
+
31
+ it 'reads file with segments' do
32
+ gpx_parser = described_class.new(File.new('./spec/examples/test_with_segments.gpx').read)
33
+ expect { gpx_parser.read }.not_to raise_error
34
+
35
+ expect(gpx_parser.points.size).to eq 355
36
+ end
37
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-trail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Staszek Zawadzki
@@ -96,7 +96,10 @@ files:
96
96
  - lib/simple_trail/manipulation/statistics.rb
97
97
  - lib/simple_trail/manipulation/straightener.rb
98
98
  - lib/simple_trail/manipulation/unifier.rb
99
+ - lib/simple_trail/parser/base.rb
100
+ - lib/simple_trail/parser/extract_points.rb
99
101
  - lib/simple_trail/parser/gpx.rb
102
+ - lib/simple_trail/parser/gpx_string.rb
100
103
  - simple-trail.gemspec
101
104
  - spec/examples/gss20-full-official.gpx
102
105
  - spec/examples/kbl.gpx
@@ -124,8 +127,9 @@ files:
124
127
  - spec/manipulation/unifier_spec.rb
125
128
  - spec/parser/gpx_poi_spec.rb
126
129
  - spec/parser/gpx_spec.rb
130
+ - spec/parser/gpx_string_spec.rb
127
131
  - spec/spec_helper.rb
128
- homepage:
132
+ homepage: https://github.com/PadawanBreslau/simple-trail
129
133
  licenses:
130
134
  - MIT
131
135
  metadata: {}
@@ -175,4 +179,5 @@ test_files:
175
179
  - spec/manipulation/unifier_spec.rb
176
180
  - spec/parser/gpx_poi_spec.rb
177
181
  - spec/parser/gpx_spec.rb
182
+ - spec/parser/gpx_string_spec.rb
178
183
  - spec/spec_helper.rb