ncirlMailParser 0.0.1 → 0.0.2

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/mailParser.rb +116 -27
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ebd4d602909a6c04c9abf38e8cdcd200fcbe76a
4
- data.tar.gz: d524e3a7408eff07f969fd7a696a4ab9b84f1ebb
3
+ metadata.gz: 94d52ebac07b0f5d633b7fdd75f480b3c9febb13
4
+ data.tar.gz: 5351ba94feb30746c4c80bacbb63af66be401c2c
5
5
  SHA512:
6
- metadata.gz: 9b192225d8046f882d6457efd863f77b826c203838bc69691592109fde57601b115d054497f1eed9f70c1e7f3d9acd8411b10b3fa3c85d9cedd5c0454fbe00f4
7
- data.tar.gz: 67f55c94586180ed838890d0f4c9d48462ba8da0e39eb0f6c036f1603b77ac82e068493a79de5db662b18f41ed347bcb40b221a2479c4169a8c375b2322897bb
6
+ metadata.gz: 60fdd13d915b93bdf0f63b6f778919513f852d971bbed23fa79fc5fbde78eded6b90142d4b50eea9ca062933c7d902de45326b0e556176e7ef014ac263796ebf
7
+ data.tar.gz: 3ff4ef0fae07ea5ff6da1984c859ba29203edb9cb3903f339f06a523c9140bd20fadf3b8ab88f4a2a6a4fc46bdff2690f1024d26da96a9e9a5a1b09a1cae27a5
@@ -1,62 +1,151 @@
1
1
  module MailParser
2
+
2
3
  def self.receive_mail(message)
3
4
 
5
+ @email = message
6
+ strategy = @strategies
7
+
8
+
9
+ @strategies = {}
10
+ @strategies['Plane'] = PlaneParser
11
+ @strategies['Train'] = TrainParser
12
+ @strategies['Bus'] = BusParser
13
+
4
14
  puts "++++++++++++++++++++++++++++++++++"
5
15
  puts message.body.inspect
6
16
  puts "++++++++++++++++++++++++++++++++++"
7
-
8
- @email = message
9
-
17
+
10
18
  #take from DB
11
19
  airplane = ["plane", "airplane", "flight"]
12
20
  train = ["train", "rail"]
13
21
  bus = ["bus"]
14
-
15
- airlines = ["aer lingus", "asl airlines ireland", "cityjet", "norwegian air international", "ryanair", "stobard air"]
16
- railcarriers = ["dart", "northern commuter", "south eastern commuter", "south western commuter", "western commuter"]
17
- buscarriers = ["bus eireann", "matthews"]
18
22
 
19
- trip = Trip.new
20
-
21
23
  airplane.each do |word|
22
24
  if @email.body.include?(word)
23
- trip.category = "plane"
25
+ strategy = @strategies["Plane"]
24
26
  end
25
27
  end
26
28
  train.each do |word|
27
29
  if @email.body.include?(word)
28
- trip.category = "train"
30
+ strategy = @strategies["Train"]
29
31
  end
30
32
  end
31
33
  bus.each do |word|
32
34
  if @email.body.include?(word)
33
- trip.category = "bus"
35
+ strategy = @strategies["Bus"]
34
36
  end
35
37
  end
36
38
 
37
- if trip.category == "plane"
38
- airlines.each do |word|
39
- if @email.body.include?(word)
39
+ trip = strategy.parse(message)
40
+
41
+ return trip
42
+
43
+ end
44
+ end
45
+
46
+ class PlaneParser
47
+
48
+ #The plane parser looks for specific patterns for plane tickets.
49
+ def self.parse(message)
50
+
51
+ @email = message
52
+ #would Idealy have this as a database call
53
+ airlines = ["aer lingus", "asl airlines ireland", "cityjet", "norwegian air international", "ryanair", "stobard air"]
54
+ trip = Trip.new
55
+ trip.category = "plane"
56
+
57
+ airlines.each do |word|
58
+ if @email.body.include?(word)
40
59
  trip.carrier = word
41
- end
42
60
  end
61
+ end
62
+
63
+ #airline confirmation numbers are always 3 capital letters followed by 4 digits
64
+ trip.confirmationNumber = @email.body.match(/[A-Z]{3}\d{4}/)[0]
65
+ string = @email.body.to_s
66
+
67
+ #times are displayed as a 12 hour digital display ending with an a or p
68
+ times = string.scan(/(\d:\d\d[a|p]|\d\d:\d\d[a|p])/)
69
+ trip.startTime = times[0][0]
70
+ trip.endTime = times[1][0]
71
+
72
+ #locations are a 3 capital character format
73
+ locations = string.scan(/[A-Z]{3}\b/)
74
+ trip.startLocation = locations[0]
75
+ trip.endLocation = locations[1]
76
+
77
+ #dates use the 00/00/00 format
78
+ dates = string.scan(/\d{2}\/\d{2}\/\d{2}/)
79
+ trip.startDate = dates[0]
80
+ trip.endDate = dates[1]
81
+
82
+ return trip
83
+
84
+ end
85
+ end
43
86
 
44
- elsif trip.category == "train"
45
- railcarriers.each do |word|
46
- if @email.body.include?(word)
87
+ class TrainParser
88
+
89
+ def self.parse(message)
90
+
91
+ @email = message
92
+ railcarriers = ["dart", "northern commuter", "south eastern commuter", "south western commuter", "western commuter"]
93
+ stations = ["malahide", "heuston", "portlaoise", "portmarnock"]
94
+ trip = Trip.new
95
+ trip.category = "train"
96
+
97
+ railcarriers.each do |word|
98
+ if @email.body.include?(word)
47
99
  trip.carrier = word
48
- end
49
100
  end
50
-
51
- elsif trip.category == "bus"
52
- buscarriers.each do |word|
53
- if @email.body.include?(word)
54
- trip.carrier = word
101
+ end
102
+
103
+ #Train confirmation numbers are always 11 digits
104
+ trip.confirmationNumber = @email.body.match(/\d{11}/)[0]
105
+ string = @email.body.to_s
106
+
107
+ #times are displayed as a 24 hour digital display
108
+ times = string.scan(/\d:\d\d|\d\d:\d\d/)
109
+ trip.startTime = times[0]
110
+ trip.endTime = times[1]
111
+
112
+ first = true
113
+ stations.each do |word|
114
+ if @email.body.include?(word)
115
+ if first == true
116
+ trip.startLocation = word
117
+ first = false
118
+ else
119
+ trip.endLocation = word
120
+ first = true
55
121
  end
56
122
  end
57
123
  end
58
124
 
59
- trip.confirmationNumber = @email.body.match(/[a-zA-Z]{3}\d{4}/)[0]
125
+ dates = string.scan(/\d{2}\/\d{2}\/\d{2}/)
126
+ trip.startDate = dates[0]
127
+ trip.endDate = dates[1]
128
+
129
+ return trip
130
+
131
+ end
132
+ end
133
+
134
+ class BusParser
135
+ def self.parse(message)
136
+
137
+ @email = message
138
+ buscarriers = ["bus eireann", "matthews"]
139
+ trip = Trip.new
140
+ trip.category = "bus"
141
+
142
+ buscarriers.each do |word|
143
+ if @email.body.include?(word)
144
+ trip.carrier = word
145
+ end
146
+ end
147
+
148
+ trip.confirmationNumber = @email.body.match(/[a-zA-Z]{3}\d{4}/)[0]
60
149
  string = @email.body.to_s
61
150
 
62
151
  times = string.scan(/(\d:\d\d[a|p]|\d\d:\d\d[a|p])/)
@@ -72,6 +161,6 @@ module MailParser
72
161
  trip.endDate = dates[1]
73
162
 
74
163
  return trip
75
-
164
+
76
165
  end
77
166
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncirlMailParser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John o Bruachail