Class: OsMapRef::InputProcessor
- Inherits:
-
Object
- Object
- OsMapRef::InputProcessor
- Defined in:
- lib/os_map_ref/input_processor.rb
Instance Attribute Summary collapse
-
#input ⇒ Object
readonly
Returns the value of attribute input.
Instance Method Summary collapse
- #determine_easting_and_northing ⇒ Object
- #determine_map_reference_elements ⇒ Object
- #easting_and_northing ⇒ Object
- #easting_northing_params ⇒ Object
-
#easting_northing_pattern ⇒ Object
Matches are: 1: First digits which may be followed with a decimal point and more digits 2: The decimal point and trailing digits from first match (if present) 3: Second digits which may be followed with a decimal point and more digits 4: The decimal point and trailing digits from second match (if present) So: “1234.5, 6789.0” –> 1: “1234.5”, 2: “.5”, 3: “6789.0”, 4: “.0” “1234 6789” –> 1: “1234”, 2: nil, 3: “6789”, 4: nil.
- #extended_length ⇒ Object
- #grid_letters ⇒ Object
-
#initialize(input) ⇒ InputProcessor
constructor
A new instance of InputProcessor.
- #map_reference_easting ⇒ Object
- #map_reference_elements ⇒ Object
- #map_reference_northing ⇒ Object
- #map_reference_params ⇒ Object
- #map_reference_pattern ⇒ Object
- #normal_length ⇒ Object
- #northing_longer_than_easting? ⇒ Boolean
- #padded_map_reference_easting ⇒ Object
- #padded_map_reference_northing ⇒ Object
- #padding ⇒ Object
- #params ⇒ Object
- #processed_map_reference ⇒ Object
Constructor Details
#initialize(input) ⇒ InputProcessor
Returns a new instance of InputProcessor.
5 6 7 |
# File 'lib/os_map_ref/input_processor.rb', line 5 def initialize(input) @input = input end |
Instance Attribute Details
#input ⇒ Object (readonly)
Returns the value of attribute input.
3 4 5 |
# File 'lib/os_map_ref/input_processor.rb', line 3 def input @input end |
Instance Method Details
#determine_easting_and_northing ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/os_map_ref/input_processor.rb', line 81 def determine_easting_and_northing match = easting_northing_pattern.match input easting = match[1] northing = match[3] length = northing.length > easting.length ? extended_length : normal_length [ easting.ljust(normal_length, padding), northing.ljust(length, padding) ] end |
#determine_map_reference_elements ⇒ Object
43 44 45 46 |
# File 'lib/os_map_ref/input_processor.rb', line 43 def determine_map_reference_elements match = map_reference_pattern.match input (1..3).collect { |n| match[n] } end |
#easting_and_northing ⇒ Object
77 78 79 |
# File 'lib/os_map_ref/input_processor.rb', line 77 def easting_and_northing @easting_and_northing ||= determine_easting_and_northing end |
#easting_northing_params ⇒ Object
24 25 26 27 28 29 |
# File 'lib/os_map_ref/input_processor.rb', line 24 def easting_northing_params { easting: easting_and_northing[0], northing: easting_and_northing[1] } end |
#easting_northing_pattern ⇒ Object
Matches are: 1: First digits which may be followed with a decimal point and more digits 2: The decimal point and trailing digits from first match (if present) 3: Second digits which may be followed with a decimal point and more digits 4: The decimal point and trailing digits from second match (if present) So: “1234.5, 6789.0” –> 1: “1234.5”, 2: “.5”, 3: “6789.0”, 4: “.0” “1234 6789” –> 1: “1234”, 2: nil, 3: “6789”, 4: nil
112 113 114 115 116 117 118 |
# File 'lib/os_map_ref/input_processor.rb', line 112 def easting_northing_pattern eastings = /\d{3,6}/ # 3 to 6 digits northings = /\d{3,7}/ # 3 to 7 digits decimals = /\.\d+/ # decimal point and trailing digits separator = /[\,\s]+/ # commas or spaces /(#{eastings}(#{decimals})?)#{separator}(#{northings}(#{decimals})?)/ end |
#extended_length ⇒ Object
92 93 94 |
# File 'lib/os_map_ref/input_processor.rb', line 92 def extended_length normal_length + 1 end |
#grid_letters ⇒ Object
48 49 50 |
# File 'lib/os_map_ref/input_processor.rb', line 48 def grid_letters map_reference_elements[0] end |
#map_reference_easting ⇒ Object
52 53 54 |
# File 'lib/os_map_ref/input_processor.rb', line 52 def map_reference_easting map_reference_elements[1] end |
#map_reference_elements ⇒ Object
39 40 41 |
# File 'lib/os_map_ref/input_processor.rb', line 39 def map_reference_elements @map_reference_elements ||= determine_map_reference_elements end |
#map_reference_northing ⇒ Object
56 57 58 |
# File 'lib/os_map_ref/input_processor.rb', line 56 def map_reference_northing map_reference_elements[2] end |
#map_reference_params ⇒ Object
20 21 22 |
# File 'lib/os_map_ref/input_processor.rb', line 20 def map_reference_params { map_reference: processed_map_reference } end |
#map_reference_pattern ⇒ Object
73 74 75 |
# File 'lib/os_map_ref/input_processor.rb', line 73 def map_reference_pattern /([a-zA-Z]{2})\s*(\d{3,5})\s*(\d{3,6})/ end |
#normal_length ⇒ Object
96 97 98 |
# File 'lib/os_map_ref/input_processor.rb', line 96 def normal_length 6 end |
#northing_longer_than_easting? ⇒ Boolean
69 70 71 |
# File 'lib/os_map_ref/input_processor.rb', line 69 def northing_longer_than_easting? map_reference_northing.length > map_reference_easting.length end |
#padded_map_reference_easting ⇒ Object
60 61 62 |
# File 'lib/os_map_ref/input_processor.rb', line 60 def padded_map_reference_easting map_reference_easting.ljust((normal_length - 1), padding) end |
#padded_map_reference_northing ⇒ Object
64 65 66 67 |
# File 'lib/os_map_ref/input_processor.rb', line 64 def padded_map_reference_northing target_length = northing_longer_than_easting? ? extended_length : normal_length map_reference_northing.ljust((target_length - 1), padding) end |
#padding ⇒ Object
100 101 102 |
# File 'lib/os_map_ref/input_processor.rb', line 100 def padding "0" end |
#params ⇒ Object
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/os_map_ref/input_processor.rb', line 9 def params case input when map_reference_pattern map_reference_params when easting_northing_pattern easting_northing_params else raise OsMapRef::Error, "Unable to process input #{input}" end end |
#processed_map_reference ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/os_map_ref/input_processor.rb', line 31 def processed_map_reference [ grid_letters.upcase, padded_map_reference_easting, padded_map_reference_northing ].join(" ") end |