paf 0.2.0 → 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
  SHA1:
3
- metadata.gz: 6dd17987d33a92bdf4f5fe218b0ad72c570add4f
4
- data.tar.gz: d8c7802c5b9bf6cd4cd02dbd6b56d33a8d89629d
3
+ metadata.gz: 36b4513b6be17e49ed9962e9aafcdbbb4039ee3d
4
+ data.tar.gz: 1f2d2a352533a1fcfb6e6d8ccd321f3de40b2c75
5
5
  SHA512:
6
- metadata.gz: a38a0e2a2922cbaa10f98adfb594ae3abdddf7283d0cc08c4266ab88ecfa0de8cac08f25a185aa8b32325f7c484d3fb0a3fcc083ad7bbd6b5362d8b7a643ea8d
7
- data.tar.gz: b3ba1f6afaca1d5b4654f0186f99e2465be036550310757a15090fae9aee65d2ce14e0cec066e14043bc84f4ccb53348df8115c5c9b79e5cb279d0b9bba259d2
6
+ metadata.gz: 409df603f878fafd0b169d39fc65b26e3419b880d3a3bf8bf857bfff53625fedda83c62d64a629de03117fd22f984cbf13954eefe6414e5d67cfd2ff8e1fb0df
7
+ data.tar.gz: 00d5ae8fef08d1324f7998b1899451fecb1dc52a9e893f2210020085c12c415905acdd0612f862fed5b2f97079d55dca4e34ca5322498a27d89aac760c3e97b4
data/lib/paf.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'paf/version'
2
2
  require 'paf/attribute'
3
3
  require 'paf/formattable'
4
+ require 'paf/core_ext/object'
5
+ require 'paf/core_ext/string'
6
+ require 'paf/core_ext/array'
4
7
 
5
8
  # Base class from the elements of a UK Royal Mail Postcode Address File entry
6
9
  class Paf
@@ -16,7 +19,7 @@ class Paf
16
19
 
17
20
  # PO Box number prepended with the string PO BOX
18
21
  def po_box
19
- "PO BOX #{po_box_number}" unless po_box_number.to_s.empty?
22
+ "PO BOX #{po_box_number}" unless po_box_number.vacant?
20
23
  end
21
24
 
22
25
  # Dependent thoroughfare name and descriptor
@@ -32,7 +35,7 @@ class Paf
32
35
  private
33
36
 
34
37
  def concatenated(attrs)
35
- value = attrs.map { |attr| send(attr).to_s }.reject(&:empty?).join(' ')
36
- value unless value.to_s.empty?
38
+ value = attrs.map { |attr| send(attr) }.condense.join(' ')
39
+ value unless value.vacant?
37
40
  end
38
41
  end
@@ -9,13 +9,19 @@ class Paf
9
9
  # Methods to be added to the including class
10
10
  module ClassMethods
11
11
  def attrs
12
- premises_attrs +
12
+ organisation_attrs +
13
+ premises_attrs +
13
14
  dependent_thoroughfare_attrs +
14
15
  thoroughfare_attrs +
15
16
  locality_attrs +
17
+ post_attrs +
16
18
  other_attrs
17
19
  end
18
20
 
21
+ def organisation_attrs
22
+ %i[organisation_name department_name]
23
+ end
24
+
19
25
  def premises_attrs
20
26
  %i[sub_building_name building_name building_number]
21
27
  end
@@ -32,15 +38,12 @@ class Paf
32
38
  %i[double_dependent_locality dependent_locality]
33
39
  end
34
40
 
41
+ def post_attrs
42
+ %i[post_town postcode]
43
+ end
44
+
35
45
  def other_attrs
36
- %i[
37
- organisation_name
38
- department_name
39
- po_box_number
40
- post_town
41
- postcode
42
- udprn
43
- ]
46
+ %i[po_box_number udprn]
44
47
  end
45
48
  end
46
49
  end
@@ -0,0 +1,14 @@
1
+ require 'paf/core_ext/string'
2
+
3
+ class Paf
4
+ module CoreExt
5
+ # Extend the core Array class with PAF specific processing
6
+ module Array
7
+ def condense
8
+ reject(&:vacant?)
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ Array.include Paf::CoreExt::Array
@@ -0,0 +1,12 @@
1
+ class Paf
2
+ module CoreExt
3
+ # Extend the core Object class with PAF specific processing
4
+ module Object
5
+ def vacant?
6
+ respond_to?(:empty?) ? empty? : !self
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ Object.include Paf::CoreExt::Object
@@ -1,5 +1,5 @@
1
1
  class Paf
2
- module Premises
2
+ module CoreExt
3
3
  # Extend the core String class with PAF specific processing
4
4
  module String
5
5
  def paf_exception?
@@ -13,4 +13,4 @@ class Paf
13
13
  end
14
14
  end
15
15
 
16
- String.include Paf::Premises::String
16
+ String.include Paf::CoreExt::String
@@ -1,3 +1,4 @@
1
+ require 'paf/lineable'
1
2
  require 'paf/premises'
2
3
  require 'paf/thoroughfare_locality'
3
4
 
@@ -7,6 +8,7 @@ class Paf
7
8
  def self.included(base)
8
9
  base.extend ClassMethods
9
10
  base.class_eval do
11
+ include Lineable
10
12
  include Premises
11
13
  include ThoroughfareLocality
12
14
  end
@@ -15,16 +17,6 @@ class Paf
15
17
 
16
18
  # Methods to be added to the including class
17
19
  module ClassMethods
18
- def lines_methods
19
- %i[
20
- organisation_name
21
- department_name
22
- po_box
23
- premises
24
- thoroughfares_and_localities
25
- ]
26
- end
27
-
28
20
  # Formats a hash of PAF address elements into an array of strings
29
21
  def format(args)
30
22
  new(args).format
@@ -40,27 +32,16 @@ class Paf
40
32
  # Formats a Paf instance into an array of strings
41
33
  def format
42
34
  array = lines
43
- %i[post_town postcode].each do |attr|
44
- array << send(attr) unless send(attr).to_s.empty?
35
+ self.class.post_attrs.each do |attr|
36
+ array << send(attr) unless send(attr).vacant?
45
37
  end
46
38
  array
47
39
  end
48
40
 
49
41
  # Formats a Paf instance into a string
50
42
  def to_s
51
- string = (lines + [post_town.to_s]).reject(&:empty?).join(', ')
52
- ([string] + [postcode]).reject(&:empty?).join('. ')
53
- end
54
-
55
- private
56
-
57
- def lines
58
- lines = []
59
- self.class.lines_methods.each do |method|
60
- value = send(method)
61
- (lines << value).flatten! unless value.nil? || value.empty?
62
- end
63
- lines
43
+ string = (lines + [post_town]).condense.join(', ')
44
+ ([string] + [postcode]).condense.join('. ')
64
45
  end
65
46
  end
66
47
  end
@@ -0,0 +1,27 @@
1
+ class Paf
2
+ # Processing to format PAF entry lines
3
+ module Lineable
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ end
7
+ private_class_method :included
8
+
9
+ # Methods to be added to the including class
10
+ module ClassMethods
11
+ def lines_methods
12
+ organisation_attrs + %i[po_box premises thoroughfares_and_localities]
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def lines
19
+ lines = []
20
+ self.class.lines_methods.each do |method|
21
+ value = send(method)
22
+ (lines << value).flatten! unless value.vacant?
23
+ end
24
+ lines
25
+ end
26
+ end
27
+ end
@@ -1,4 +1,3 @@
1
- require 'paf/premises/string'
2
1
  require 'paf/premises/common'
3
2
 
4
3
  class Paf
@@ -35,9 +34,7 @@ class Paf
35
34
  end
36
35
 
37
36
  def rule_key
38
- self.class.premises_attrs.map do |attr|
39
- send(attr).to_s.empty? ? 0 : 1
40
- end.join
37
+ self.class.premises_attrs.map { |attr| send(attr).vacant? ? 0 : 1 }.join
41
38
  end
42
39
  end
43
40
  end
@@ -20,7 +20,7 @@ class Paf
20
20
  self.class.thoroughfare_and_locality_attrs.each do |attr|
21
21
  next if used?(attr)
22
22
  value = send(attr)
23
- array << value unless value.to_s.empty?
23
+ array << value unless value.vacant?
24
24
  end
25
25
  array
26
26
  end
@@ -32,7 +32,7 @@ class Paf
32
32
 
33
33
  def first_thoroughfare_or_locality_attr
34
34
  self.class.thoroughfare_and_locality_attrs.find do |attr|
35
- !send(attr).to_s.empty?
35
+ !send(attr).vacant?
36
36
  end
37
37
  end
38
38
 
@@ -1,4 +1,4 @@
1
1
  # PAF gem version
2
2
  class Paf
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Bard
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-21 00:00:00.000000000 Z
11
+ date: 2017-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -104,7 +104,11 @@ files:
104
104
  - bin/setup
105
105
  - lib/paf.rb
106
106
  - lib/paf/attribute.rb
107
+ - lib/paf/core_ext/array.rb
108
+ - lib/paf/core_ext/object.rb
109
+ - lib/paf/core_ext/string.rb
107
110
  - lib/paf/formattable.rb
111
+ - lib/paf/lineable.rb
108
112
  - lib/paf/premises.rb
109
113
  - lib/paf/premises/common.rb
110
114
  - lib/paf/premises/rule000.rb
@@ -114,7 +118,6 @@ files:
114
118
  - lib/paf/premises/rule101.rb
115
119
  - lib/paf/premises/rule110.rb
116
120
  - lib/paf/premises/rule111.rb
117
- - lib/paf/premises/string.rb
118
121
  - lib/paf/thoroughfare_locality.rb
119
122
  - lib/paf/version.rb
120
123
  - paf.gemspec