wicoris-postman 0.10.0 → 0.11.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.
@@ -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