ncirlMailParser 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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