rightmove_blm 0.2.2 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3397a4adccadcad8a3879a3590cd6b18ac9c563534a2b70804731402e71a3a5
4
- data.tar.gz: 78b3e9830e9b4959b73016b8f792389c9d04a3aac90a784da349341577c8f214
3
+ metadata.gz: adcdd9888460d3dde61600d67eb0a610fbbb971b268220a54d1eb10e66198ac2
4
+ data.tar.gz: ed1f65811a5f46e3462891e16db3b9e90a632fc2d7c7466c4d34983c72bfc3cd
5
5
  SHA512:
6
- metadata.gz: 813c20806d366937146dd7e208284a1c2551963f126fe826172c172b483d0927b8c9c8cd954e9e7c9eaae670cb9218c8380b9034dccf6a39b25efbc184d1eb28
7
- data.tar.gz: 4a525eaf7a4d0d64f432bacb44138a5ce1f68108c03fd57c9133a7dda7f3aea4ac9423109986894ed92ce46685df8601b47da0280285608bff99d5068a5a5a5e
6
+ metadata.gz: e1777617db9d0efacdfbecc1ba3a07302c76f7e1f5a519847e08e33b4c05c6ec9b4cb3973ae235a8ba4c6e7a04db5657fb21b51ace24c2e1b8b6017c8b2a0e86
7
+ data.tar.gz: 73698ab1fb45cdaa69d8628cea64c0ae79595da5803d8c71dc339453047e0058027d4faba928468f432b40bd05c2de50c908c66c832c27c2f5e0c224b93425db
data/README.md CHANGED
@@ -18,6 +18,14 @@ Load a BLM file by passing the `source` parameter to `RightmoveBLM::Document.new
18
18
  blm = RightmoveBLM::Document.new(source: File.read('example_data.blm'))
19
19
  ```
20
20
 
21
+ `RightmoveBLM::Document.new` also receives an optional argument `name` which is recommended for all documents to assist in tracking errors when processing many documents, e.g.:
22
+
23
+ ```ruby
24
+ blm = RightmoveBLM::Document.new(source: File.read('example_data.blm'), name: 'example_data.blm')
25
+ ```
26
+
27
+ This name will be included in all parser error messages.
28
+
21
29
  The returned `RightmoveBLM::Document` instance implements:
22
30
 
23
31
  * `#header` - the header containing information about the document's structure.
@@ -2,22 +2,29 @@
2
2
 
3
3
  module RightmoveBLM
4
4
  # A BLM document including its header, definition, and data content.
5
- class Document
5
+ class Document # rubocop:disable Metrics/ClassLength
6
6
  def self.from_array_of_hashes(array)
7
7
  date = Time.now.utc.strftime('%d-%b-%Y %H:%M').upcase
8
8
  header = { version: '3', eof: '^', eor: '~', 'property count': array.size.to_s, 'generated date': date }
9
9
  new(header: header, definition: array.first.keys.map(&:to_sym), data: array)
10
10
  end
11
11
 
12
- def initialize(source: nil, header: nil, definition: nil, data: nil)
13
- @source = source
12
+ def initialize(source: nil, header: nil, definition: nil, data: nil, name: nil)
13
+ @source = source || data
14
14
  @header = header
15
15
  @definition = definition
16
+ @name = name
16
17
  initialize_with_data(data) unless data.nil?
17
18
  end
18
19
 
19
- def inspect
20
- %(<##{self.class.name} version=#{version} rows=#{rows.size} valid=#{valid?} errors=#{errors.size}>)
20
+ def inspect(safe: false, error: nil)
21
+ name = @name.nil? ? nil : %( document="#{@name}")
22
+ error_string = error.nil? ? nil : %( error="#{error}")
23
+ basic = %(<##{self.class.name}#{name}#{error_string}>)
24
+ return basic if safe
25
+
26
+ "<##{self.class.name}#{name}#{error_string} version=#{version} " \
27
+ "rows=#{rows.size} valid=#{valid?} errors=#{errors.size}>"
21
28
  end
22
29
 
23
30
  def to_s
@@ -39,7 +46,7 @@ module RightmoveBLM
39
46
  key, _, value = line.partition(':')
40
47
  next nil if value.nil?
41
48
 
42
- [key.strip.downcase.to_sym, value.tr("'", '').strip]
49
+ [normalized_key(key), value.tr("'", '').strip]
43
50
  end.compact.to_h
44
51
  end
45
52
 
@@ -88,12 +95,20 @@ module RightmoveBLM
88
95
  start = verify(:start, @source.index(marker)) + marker.size
89
96
  finish = verify(:end, @source.index('#END#', start)) - 1
90
97
  @source[start..finish].strip
98
+ rescue Encoding::CompatibilityError => e
99
+ raise_parser_error 'Unable to parse document due to encoding error.', e
100
+ end
101
+
102
+ def normalized_key(key)
103
+ key.strip.downcase.to_sym
104
+ rescue ArgumentError => e
105
+ raise_parser_error "Unable to parse document. Error found in header for key `#{key}`", e
91
106
  end
92
107
 
93
108
  def verify(type, val)
94
109
  return val unless val.nil?
95
110
 
96
- raise ParserError, "Unable to parse document: could not detect #{type} marker."
111
+ raise_parser_error "Unable to parse document: could not detect #{type} marker."
97
112
  end
98
113
 
99
114
  def generated_date
@@ -112,5 +127,9 @@ module RightmoveBLM
112
127
  def data_string
113
128
  ['#DATA#', *data.map { |row| "#{row.attributes.values.join('|')}~" }, '#END#']
114
129
  end
130
+
131
+ def raise_parser_error(message, cause = nil)
132
+ raise ParserError, "#{inspect(safe: true)}: #{message} #{cause}"
133
+ end
115
134
  end
116
135
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RightmoveBLM
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rightmove_blm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Farrell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-12 00:00:00.000000000 Z
11
+ date: 2023-05-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Parse and generate Rightmove BLM files
14
14
  email: git@bob.frl
@@ -52,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  requirements: []
55
- rubygems_version: 3.1.6
55
+ rubygems_version: 3.4.13
56
56
  signing_key:
57
57
  specification_version: 4
58
58
  summary: A parser for the Rightmove .blm format