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 +4 -4
- data/README.md +8 -0
- data/lib/rightmove_blm/document.rb +26 -7
- data/lib/rightmove_blm/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adcdd9888460d3dde61600d67eb0a610fbbb971b268220a54d1eb10e66198ac2
|
4
|
+
data.tar.gz: ed1f65811a5f46e3462891e16db3b9e90a632fc2d7c7466c4d34983c72bfc3cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
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
|
-
|
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
|
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.
|
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-
|
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.
|
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
|