wicoris-postman 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -54,7 +54,6 @@ end
54
54
  Then(/^the copy should have been logged$/) do
55
55
  [
56
56
  'Letter delivered',
57
- @job,
58
- @output_file
57
+ @job
59
58
  ].each { |expected| assert_partial_output(expected, all_output) }
60
59
  end
@@ -39,7 +39,6 @@ end
39
39
  Then(/^the fax should have been logged$/) do
40
40
  [
41
41
  'Letter delivered',
42
- @job,
43
- '0123456789'
42
+ @job
44
43
  ].each { |expected| assert_partial_output(expected, all_output) }
45
44
  end
@@ -13,12 +13,6 @@ module Wicoris
13
13
  # Copy letter to destination.
14
14
  def run
15
15
  FileUtils.cp(source, destination, :noop => (@opts[:noop] == true))
16
- if @logger
17
- msg = @job.to_hash
18
- msg[:destination] = destination
19
- msg[:message] = 'Letter delivered :-)'
20
- @logger.info(msg)
21
- end
22
16
  end
23
17
 
24
18
  private
@@ -17,11 +17,6 @@ module Wicoris
17
17
  # Actually fax the letter.
18
18
  def run
19
19
  system(command) unless @opts[:noop]
20
- if @logger
21
- msg = @job.to_hash
22
- msg[:message] = 'Letter delivered :-)'
23
- @logger.info(msg)
24
- end
25
20
  end
26
21
 
27
22
  # @returns [String] Validated phone number.
@@ -12,10 +12,7 @@ module Wicoris
12
12
  # @returns [String] Path to actual letter
13
13
  def letter
14
14
  if not File.exists?(file)
15
- msg = to_hash
16
- msg[:message] = 'Letter does not exist'
17
- @opts[:logger].error(msg) if @opts[:logger]
18
- raise "Letter does not exist: #{file}" # TODO: DRY!
15
+ fail "Letter does not exist: #{file}"
19
16
  else
20
17
  file
21
18
  end
@@ -23,17 +20,16 @@ module Wicoris
23
20
 
24
21
  # Process the job
25
22
  def process
26
- # NOTE: `Object#type` is an existing method in Ruby 1.8.7, therefore we
27
- # have to fetch the attribute from the JSON hash.
28
- delivery_method =
29
- case json['type']
30
- when 'fax' then FaxMachine
31
- when 'copy' then Copier
32
- # TODO: Handle unknown case!
33
- #else
34
- # ...
35
- end
36
- delivery_method.new(self, @opts).run
23
+ deliver
24
+ logger.info :message => 'Letter delivered :-D',
25
+ :patient => patient,
26
+ :job => @json_file
27
+ rescue => e
28
+ logger.error :message => 'Letter not delivered ;-(',
29
+ :patient => patient,
30
+ :reason => e.message,
31
+ :job => @json_file
32
+ logger.debug e
37
33
  end
38
34
 
39
35
  # Remove the JSON file.
@@ -44,16 +40,35 @@ module Wicoris
44
40
  :json_file => @json_file
45
41
  end
46
42
 
47
- # @returns [Hash] Job properties
48
- def to_hash
49
- properties = { 'json_file' => @json_file }
50
- properties.merge(json)
43
+ # @returns [String] Patient's display name.
44
+ def patient
45
+ format('%s, %s (%s)',
46
+ patient_last_name,
47
+ patient_first_name,
48
+ patient_date_of_birth)
51
49
  rescue
52
- properties
50
+ 'Unknown'
53
51
  end
54
52
 
55
53
  private
56
54
 
55
+ def deliver
56
+ delivery_machine.new(self, @opts).run
57
+ end
58
+
59
+ # How we gonna deliver the letter?
60
+ def delivery_machine
61
+ # NOTE: `Object#type` is an existing method in Ruby 1.8.7, therefore we
62
+ # have to fetch the attribute from the JSON hash.
63
+ case json['type']
64
+ when 'fax' then FaxMachine
65
+ when 'copy' then Copier
66
+ # TODO: Handle unknown case!
67
+ #else
68
+ # ...
69
+ end
70
+ end
71
+
57
72
  # Parse and return the JSON.
58
73
  # @returns [Hash] Cached JSON.
59
74
  def json
@@ -1,5 +1,5 @@
1
1
  module Wicoris
2
2
  module Postman
3
- VERSION = '0.10.0'
3
+ VERSION = '0.11.0'
4
4
  end
5
5
  end
@@ -66,6 +66,39 @@ module Wicoris::Postman
66
66
  end
67
67
 
68
68
  describe '#process' do
69
+ let(:logger) { double('logger') }
70
+ let(:patient) { 'Norris, Chuck (1940-03-10)' }
71
+
72
+ before do
73
+ job.stub(:logger).and_return(logger)
74
+ job.stub(:patient).and_return(patient)
75
+ logger.stub(:info) #todo: remove
76
+ end
77
+
78
+ context 'without errors' do
79
+ it 'logs a successful delivery' do
80
+ job.stub(:deliver)
81
+ logger.should_receive(:info).
82
+ with :message => 'Letter delivered :-D',
83
+ :patient => patient,
84
+ :job => 'example.json'
85
+ job.process
86
+ end
87
+ end
88
+
89
+ context 'with errors' do
90
+ it 'logs a failed delivery' do
91
+ job.stub(:deliver).and_return { fail 'BOOOM!' }
92
+ logger.should_receive(:error).
93
+ with :message => 'Letter not delivered ;-(',
94
+ :patient => patient,
95
+ :reason => 'BOOOM!',
96
+ :job => 'example.json'
97
+ logger.should_receive(:debug)
98
+ job.process
99
+ end
100
+ end
101
+
69
102
  context 'when fax' do
70
103
  it 'faxes the letter' do
71
104
  job.should_receive(:json).and_return('type' => 'fax')
@@ -87,6 +120,19 @@ module Wicoris::Postman
87
120
  end
88
121
  end
89
122
 
123
+ describe '#patient' do
124
+ it 'returns the patient display name' do
125
+ job.stub(:patient_first_name).and_return('Chuck')
126
+ job.stub(:patient_last_name).and_return('Norris')
127
+ job.stub(:patient_date_of_birth).and_return('1940-03-10')
128
+ expect(job.patient).to eq 'Norris, Chuck (1940-03-10)'
129
+ end
130
+
131
+ it 'returns unknown when patient infos are missing' do
132
+ expect(job.patient).to eq 'Unknown'
133
+ end
134
+ end
135
+
90
136
  describe '#patient_first_name' do
91
137
  it 'returns the patients first name' do
92
138
  job.stub(:json).and_return('patient_first_name' => 'Chuck')
@@ -150,33 +196,5 @@ module Wicoris::Postman
150
196
  end
151
197
  end
152
198
  end
153
-
154
- describe '#to_hash' do
155
- let(:job) { Job.new('example.json') }
156
-
157
- context 'with parsable JSON' do
158
- before do
159
- job.stub(:json).and_return({'chunky' => 'bacon'})
160
- end
161
-
162
- it 'includes all JSON attributes' do
163
- expect(job.to_hash['chunky']).to eq 'bacon'
164
- end
165
-
166
- it 'includes the JSON filename' do
167
- expect(job.to_hash['json_file']).to eq 'example.json'
168
- end
169
- end
170
-
171
- context 'with unparsable JSON' do
172
- before do
173
- job.stub(:json).and_return { raise JSON::ParserError, 'Shitty JSON' }
174
- end
175
-
176
- it 'includes only the JSON filename' do
177
- expect(job.to_hash).to eq({'json_file' => 'example.json'})
178
- end
179
- end
180
- end
181
199
  end
182
200
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wicoris-postman
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
4
+ hash: 51
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 10
8
+ - 11
9
9
  - 0
10
- version: 0.10.0
10
+ version: 0.11.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Bjo\xCC\x88rn Albers"
@@ -19,7 +19,7 @@ date: 2014-03-06 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ~>
@@ -29,12 +29,12 @@ dependencies:
29
29
  - 1
30
30
  - 8
31
31
  version: "1.8"
32
+ prerelease: false
33
+ requirement: *id001
32
34
  type: :runtime
33
35
  name: json_pure
34
- version_requirements: *id001
35
- prerelease: false
36
36
  - !ruby/object:Gem::Dependency
37
- requirement: &id002 !ruby/object:Gem::Requirement
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
38
  none: false
39
39
  requirements:
40
40
  - - ~>
@@ -44,12 +44,12 @@ dependencies:
44
44
  - 0
45
45
  - 6
46
46
  version: "0.6"
47
+ prerelease: false
48
+ requirement: *id002
47
49
  type: :runtime
48
50
  name: cabin
49
- version_requirements: *id002
50
- prerelease: false
51
51
  - !ruby/object:Gem::Dependency
52
- requirement: &id003 !ruby/object:Gem::Requirement
52
+ version_requirements: &id003 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ~>
@@ -59,12 +59,12 @@ dependencies:
59
59
  - 1
60
60
  - 4
61
61
  version: "1.4"
62
+ prerelease: false
63
+ requirement: *id003
62
64
  type: :runtime
63
65
  name: mixlib-cli
64
- version_requirements: *id003
65
- prerelease: false
66
66
  - !ruby/object:Gem::Dependency
67
- requirement: &id004 !ruby/object:Gem::Requirement
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
68
  none: false
69
69
  requirements:
70
70
  - - ~>
@@ -74,12 +74,12 @@ dependencies:
74
74
  - 2
75
75
  - 1
76
76
  version: "2.1"
77
+ prerelease: false
78
+ requirement: *id004
77
79
  type: :runtime
78
80
  name: mixlib-config
79
- version_requirements: *id004
80
- prerelease: false
81
81
  - !ruby/object:Gem::Dependency
82
- requirement: &id005 !ruby/object:Gem::Requirement
82
+ version_requirements: &id005 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -89,12 +89,12 @@ dependencies:
89
89
  - 0
90
90
  - 3
91
91
  version: "0.3"
92
+ prerelease: false
93
+ requirement: *id005
92
94
  type: :runtime
93
95
  name: jlo
94
- version_requirements: *id005
95
- prerelease: false
96
96
  - !ruby/object:Gem::Dependency
97
- requirement: &id006 !ruby/object:Gem::Requirement
97
+ version_requirements: &id006 !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements:
100
100
  - - ~>
@@ -104,12 +104,12 @@ dependencies:
104
104
  - 1
105
105
  - 3
106
106
  version: "1.3"
107
+ prerelease: false
108
+ requirement: *id006
107
109
  type: :development
108
110
  name: bundler
109
- version_requirements: *id006
110
- prerelease: false
111
111
  - !ruby/object:Gem::Dependency
112
- requirement: &id007 !ruby/object:Gem::Requirement
112
+ version_requirements: &id007 !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
115
  - - ">="
@@ -118,12 +118,12 @@ dependencies:
118
118
  segments:
119
119
  - 0
120
120
  version: "0"
121
+ prerelease: false
122
+ requirement: *id007
121
123
  type: :development
122
124
  name: rake
123
- version_requirements: *id007
124
- prerelease: false
125
125
  - !ruby/object:Gem::Dependency
126
- requirement: &id008 !ruby/object:Gem::Requirement
126
+ version_requirements: &id008 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ~>
@@ -133,12 +133,12 @@ dependencies:
133
133
  - 0
134
134
  - 5
135
135
  version: "0.5"
136
+ prerelease: false
137
+ requirement: *id008
136
138
  type: :development
137
139
  name: aruba
138
- version_requirements: *id008
139
- prerelease: false
140
140
  - !ruby/object:Gem::Dependency
141
- requirement: &id009 !ruby/object:Gem::Requirement
141
+ version_requirements: &id009 !ruby/object:Gem::Requirement
142
142
  none: false
143
143
  requirements:
144
144
  - - ~>
@@ -148,10 +148,10 @@ dependencies:
148
148
  - 1
149
149
  - 2
150
150
  version: "1.2"
151
+ prerelease: false
152
+ requirement: *id009
151
153
  type: :development
152
154
  name: aruba-doubles
153
- version_requirements: *id009
154
- prerelease: false
155
155
  description: Deliver letters from WiCoRIS
156
156
  email:
157
157
  - bjoernalbers@googlemail.com
@@ -223,7 +223,7 @@ rubyforge_project:
223
223
  rubygems_version: 1.6.2
224
224
  signing_key:
225
225
  specification_version: 3
226
- summary: wicoris-postman-0.10.0
226
+ summary: wicoris-postman-0.11.0
227
227
  test_files:
228
228
  - features/copy.feature
229
229
  - features/fax.feature