dost 0.0.3 → 0.0.4

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dost.rb +33 -7
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa3529277f8d4a7e707177292c9fd05c6441db19
4
- data.tar.gz: 0e15c808fb080596ee560ffd2ed18c155222a62e
3
+ metadata.gz: 7a7533d8f01e26763794d5da377801dfe560caa9
4
+ data.tar.gz: e00ee61b072c398d0ad74c2f492817cccc363b3f
5
5
  SHA512:
6
- metadata.gz: 2fd316facada5b765e00165e99348313fde08ad03dbecada3336693c0a321e06c1d8eb557838e01aa1e0661808b4a0d04b47173513ab867298e7f9bd4ff9a4ff
7
- data.tar.gz: c42959614245fc8ac2287a9a1911147a7aa864c67ae4efed5583e7881393603cc046013d0a56e76b4b47d69a2f7459dcb175be0a374b0f918304eb8919eac74c
6
+ metadata.gz: 550cf596bcdc4108053e11add25fe46cf5e69616892dfcafa969ec6ba69292649578b1752cbebe35e83ea40d0f81c54c620be96704756142370679b4e12f128f
7
+ data.tar.gz: 54467348c7b173ea25a7be0bf43993ed41dc2c737046157773c3b7fffad49476b53862b166e87bfcf210880454fa721f7518840ee04db124a163f905eededd79
@@ -1,12 +1,12 @@
1
- require 'pry'
2
1
  module DOST
3
2
  class Data
4
- attr_reader :lines, :headers_delimiters, :values_delimiters
3
+ attr_reader :lines, :headers_delimiters, :values_delimiters, :key_modifier
5
4
 
6
- def initialize(lines:, headers_delimiters:, values_delimiters:)
5
+ def initialize(lines:, headers_delimiters:, values_delimiters:, key_modifier: nil)
7
6
  @lines = lines.map(&:chomp)
8
7
  @headers_delimiters = headers_delimiters
9
8
  @values_delimiters = values_delimiters
9
+ @key_modifier = key_modifier
10
10
  end
11
11
 
12
12
  def headers
@@ -17,11 +17,29 @@ module DOST
17
17
  @values ||= parse_values
18
18
  end
19
19
 
20
+ def dynamic_offseted_values(left_dynamic_bound_headers = [])
21
+ values_lines.map do |line|
22
+ headers.reverse.map do |(name, range)|
23
+ is_dynamic = left_dynamic_bound_headers.include?(name)
24
+ str = line[range]
25
+ if is_dynamic && range.first > 0
26
+ i = range.first - 1
27
+ while present?(line[i]) && i >= 0 do
28
+ str.prepend(line[i])
29
+ line[i] = ' '
30
+ i -= 1
31
+ end
32
+ end
33
+ [name, str.strip]
34
+ end.reverse.to_h
35
+ end
36
+ end
37
+
20
38
  private def parse_headers
21
39
  raw_headers = header_lines.map { |header_line| calc_ranges(header_line) }
22
40
 
23
41
  first_row = raw_headers.first
24
- second_row = raw_headers.last
42
+ second_row = raw_headers[1]
25
43
 
26
44
  first_row.map.with_index do |(first_key, first_range)|
27
45
  values_inside = second_row.select do |(second_key, second_range)|
@@ -32,7 +50,7 @@ module DOST
32
50
  end
33
51
 
34
52
  if values_inside.empty?
35
- [[first_key.strip.to_sym, first_range]]
53
+ [[modify_key(first_key), first_range]]
36
54
  else
37
55
  values_inside.map.with_index do |(second_item_key, second_item_range), index|
38
56
  key = (first_key.strip + second_item_key.strip.prepend('_'))
@@ -42,7 +60,7 @@ module DOST
42
60
  right_bound = is_last_item ? [second_item_range.last, first_range.last].min : second_item_range.last
43
61
 
44
62
  range = left_bound..right_bound
45
- [key.strip.to_sym, range]
63
+ [modify_key(key), range]
46
64
  end
47
65
  end
48
66
  end.flatten(1)
@@ -91,7 +109,7 @@ module DOST
91
109
  end
92
110
 
93
111
  private def delimiter?(line)
94
- line.chars.uniq.count == 1 && !blank?(delimiter_char(line))
112
+ line.chars.uniq.count == 1 && present?(delimiter_char(line))
95
113
  end
96
114
 
97
115
  private def delimiter_char(line)
@@ -102,9 +120,17 @@ module DOST
102
120
  str !~ /[^[:space:]]/
103
121
  end
104
122
 
123
+ private def present?(str)
124
+ !blank?(str)
125
+ end
126
+
105
127
  # from https://apidock.com/rails/Range/overlaps
106
128
  private def overlaps?(orig, other)
107
129
  orig.cover?(other.first) || other.cover?(orig.first)
108
130
  end
131
+
132
+ private def modify_key(key)
133
+ key_modifier.nil? ? keyа : key_modifier.call(key)
134
+ end
109
135
  end
110
136
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Takarlikov