renalware-forms 0.1.11 → 0.1.15

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.
@@ -1,19 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "zeitwerk"
4
3
  require "prawn"
5
4
  require "prawn/table"
6
5
  require "attr_extras"
7
- require_relative "./forms/version"
8
-
9
- # Set up autoloading with zeitwerk
10
- # As we are nested in lib/renalware/forms, be sure to push an absolute
11
- # path to the lib folder.
12
- loader = Zeitwerk::Loader.new
13
- loader.push_dir File.expand_path("../", __dir__)
14
- loader.setup
15
6
 
16
7
  module Renalware
17
8
  module Forms
18
9
  end
19
10
  end
11
+
12
+ require_relative "forms/base"
13
+ require_relative "forms/helpers"
14
+ require_relative "forms/generic"
15
+ require_relative "forms/homecare"
data/lib/tasks/tasks.rake CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  desc "Starts irb so we can debug the gem"
2
- task :console do
4
+ task console: :environment do
3
5
  exec "irb -r ./lib/renalware/forms"
4
6
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path("lib", __dir__)
4
+
5
+ # Maintain your gem's version:
6
+ require "renalware/forms/version"
7
+
8
+ # Describe your gem and declare its dependencies:
9
+ Gem::Specification.new do |spec|
10
+ spec.name = "renalware-forms"
11
+ spec.version = Renalware::Forms::VERSION
12
+ spec.authors = ["Airslie Ltd"]
13
+ spec.email = ["dev@aisrlie.com"]
14
+ spec.homepage = "http://airslie.com"
15
+ spec.summary = "PDF library for Renalware forms"
16
+ spec.description = "The home for various forms for external providers eg home care prescriptions"
17
+ spec.license = "MIT"
18
+ spec.required_ruby_version = ">= 3.0.0"
19
+
20
+ spec.files = `git ls-files`.split("\n")
21
+ spec.test_files = `git ls-files -- {spec}/*`.split("\n")
22
+ spec.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+ spec.extra_rdoc_files = ["README.md"]
25
+
26
+ spec.add_dependency "activemodel"
27
+ spec.add_dependency "attr_extras", "~> 6.2"
28
+ spec.add_dependency "prawn", "~> 2.2"
29
+ spec.add_dependency "prawn-table", "~> 0.2"
30
+ spec.add_dependency "rake"
31
+ spec.add_dependency "virtus"
32
+ spec.add_development_dependency "pdf-reader"
33
+ spec.add_development_dependency "rspec"
34
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Homecare
6
+ RSpec.describe Args do
7
+ describe "#patient_name" do
8
+ subject {
9
+ hash = default_test_arg_values.update(
10
+ given_name: "John",
11
+ family_name: "SMITH",
12
+ title: title
13
+ )
14
+ described_class.new(hash).patient_name
15
+ }
16
+
17
+ context "when title present" do
18
+ let(:title) { "Mr" }
19
+
20
+ it { is_expected.to eq("SMITH, John (Mr)") }
21
+ end
22
+
23
+ context "when title missing" do
24
+ let(:title) { "" }
25
+
26
+ it { is_expected.to eq("SMITH, John") }
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::Allergies do
7
+ context "when the patient has iit recoreded that they have no known allergies" do
8
+ it do
9
+ hash = default_test_arg_values.update(no_known_allergies: true)
10
+ args = Renalware::Forms::Homecare::Args.new(hash)
11
+ doc = test_prawn_doc
12
+
13
+ described_class.new(doc, args).build
14
+
15
+ text = extract_text_from_prawn_doc(doc)
16
+ expect(text).to include("No Known Allergies")
17
+ end
18
+ end
19
+
20
+ it do
21
+ hash = default_test_arg_values.update(
22
+ no_known_allergies: false,
23
+ allergies: %w(nuts penicillin)
24
+ )
25
+ args = Renalware::Forms::Homecare::Args.new(hash)
26
+ doc = test_prawn_doc
27
+
28
+ described_class.new(doc, args).build
29
+
30
+ text = extract_text_from_prawn_doc(doc)
31
+
32
+ expect(text).not_to include("No Known Allergies")
33
+ expect(text).to include("Known Allergies")
34
+ expect(text).to include("nuts")
35
+ expect(text).to include("penicillin")
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::DeliveryFrequencies do
7
+ def extract_pdf_text(args)
8
+ doc = test_prawn_doc
9
+ described_class.new(doc, args).build
10
+ extract_text_from_prawn_doc(doc)
11
+ end
12
+
13
+ it do
14
+ hash = default_test_arg_values.update(delivery_frequencies: ["Once", "3 weeks", "6 weeks"])
15
+ args = Renalware::Forms::Homecare::Args.new(hash)
16
+
17
+ text = extract_pdf_text(args)
18
+
19
+ expect(text).to include("Frequency of deliveries")
20
+ expect(text).to match(/❏ +Once/)
21
+ expect(text).to match(/❏ +3 weeks/)
22
+ expect(text).to match(/❏ +6 weeks/)
23
+ end
24
+
25
+ context "when there are no frequencies supplied" do
26
+ it "displays the defaults" do
27
+ args = Renalware::Forms::Homecare::Args.new(**default_test_arg_values)
28
+
29
+ text = extract_pdf_text(args)
30
+
31
+ expect(text).to match(/Frequency of deliveries/)
32
+ expect(text).to match(/❏ +3 months/)
33
+ expect(text).to match(/❏ +6 months/)
34
+ end
35
+ end
36
+
37
+ context "when there is a selected delivery_frequency" do
38
+ it "indicates that frequency has been selected by checking a box" do
39
+ hash = default_test_arg_values.update(
40
+ delivery_frequencies: ["3 months", "6 months", "12 months"],
41
+ selected_delivery_frequency: "6 months"
42
+ )
43
+ args = Renalware::Forms::Homecare::Args.new(hash)
44
+
45
+ text = extract_pdf_text(args)
46
+
47
+ expect(text).to match(/❏ +3 months/)
48
+ expect(text).to match(/■ +6 months/)
49
+ expect(text).to match(/❏ +12 months/)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::Heading do
7
+ it do
8
+ hash = default_test_arg_values.update(
9
+ po_number: "P123",
10
+ hospital_number: "H123",
11
+ drug_type: "ESA"
12
+ )
13
+ args = Renalware::Forms::Homecare::Args.new(hash)
14
+ doc = test_prawn_doc
15
+
16
+ described_class.new(doc, args).build
17
+
18
+ text = extract_text_from_prawn_doc(doc)
19
+
20
+ expect(text).to include(args.po_number)
21
+ expect(text).to include(args.hospital_number)
22
+ expect(text).to include(args.drug_type)
23
+ expect(text).to include("Home Delivery Medication List")
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::Medications do
7
+ it do
8
+ args = Renalware::Forms::Homecare::Args.new(**default_test_arg_values)
9
+ args.medications << Renalware::Forms::Homecare::Args::Medication.new(
10
+ date: "2020-01-01",
11
+ drug: "Drug1",
12
+ dose: "Dose1",
13
+ route: "Route1",
14
+ frequency: "Freq1"
15
+ )
16
+ args.medications << Renalware::Forms::Homecare::Args::Medication.new(
17
+ date: "2020-02-02",
18
+ drug: "Drug2",
19
+ dose: "Dose2",
20
+ route: "Route2",
21
+ frequency: "Freq2"
22
+ )
23
+ doc = test_prawn_doc
24
+
25
+ described_class.new(doc, args).build
26
+
27
+ text = extract_text_from_prawn_doc(doc)
28
+
29
+ expect(text).to include("2020-01-01")
30
+ expect(text).to include("Drug1")
31
+ expect(text).to include("Dose1")
32
+ expect(text).to include("Route1")
33
+ expect(text).to include("Freq1")
34
+ expect(text).to include("Drug2")
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::PatientDetails do
7
+ it do
8
+ hash = default_test_arg_values.update(
9
+ given_name: "John",
10
+ family_name: "SMITH",
11
+ title: "Mr",
12
+ modality: "HD",
13
+ born_on: "2001-01-01",
14
+ nhs_number: "0123456789",
15
+ hospital_number: "X123",
16
+ address: %w(aa bb cc),
17
+ postcode: "POSTCODE"
18
+ )
19
+ args = Renalware::Forms::Homecare::Args.new(hash)
20
+ doc = test_prawn_doc
21
+
22
+ described_class.new(doc, args).build
23
+
24
+ text = extract_text_from_prawn_doc(doc)
25
+
26
+ expect(text).to include("SMITH, John (Mr)")
27
+ expect(text).to include("HD")
28
+ expect(text).to include("2001-01-01")
29
+ expect(text).to include("0123456789")
30
+ expect(text).to include("X123")
31
+ expect(text).to include("aa")
32
+ expect(text).to include("bb")
33
+ expect(text).to include("cc")
34
+ expect(text).to include("POSTCODE")
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::PrescriptionDurations do
7
+ def extract_pdf_text(args)
8
+ doc = test_prawn_doc
9
+ described_class.new(doc, args).build
10
+ extract_text_from_prawn_doc(doc)
11
+ end
12
+
13
+ it do
14
+ hash = default_test_arg_values.update(
15
+ prescription_durations: ["3 months", "6 months", "12 months"]
16
+ )
17
+ args = Renalware::Forms::Homecare::Args.new(hash)
18
+
19
+ text = extract_pdf_text(args)
20
+
21
+ expect(text).to include("Repeat prescription for")
22
+ expect(text).to match(/❏ +3 months/)
23
+ expect(text).to match(/❏ +6 months/)
24
+ expect(text).to match(/❏ +12 months/)
25
+ end
26
+
27
+ it "works where there are no prescription_durations supplied" do
28
+ args = Renalware::Forms::Homecare::Args.new(default_test_arg_values)
29
+
30
+ text = extract_pdf_text(args)
31
+
32
+ expect(text).to include("Repeat prescription for")
33
+ end
34
+
35
+ context "when there is a selected prescription_duration" do
36
+ it "indicates that duration has been selected eg for checking a box" do
37
+ args = Renalware::Forms::Homecare::Args.new(
38
+ default_test_arg_values.update(
39
+ prescription_durations: ["3 months", "6 months", "12 months"],
40
+ selected_prescription_duration: "6 months"
41
+ )
42
+ )
43
+
44
+ text = extract_pdf_text(args)
45
+
46
+ expect(text).to match(/❏ +3 months/)
47
+ expect(text).to match(/■ +6 months/)
48
+ expect(text).to match(/❏ +12 months/)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ module Renalware::Forms::Generic
6
+ RSpec.describe Homecare::V1::Signoff do
7
+ it do
8
+ args = Renalware::Forms::Homecare::Args.new(
9
+ **default_test_arg_values.update(consultant: "Dr Pepper")
10
+ )
11
+ doc = test_prawn_doc
12
+
13
+ described_class.new(doc, args).build
14
+
15
+ text = extract_text_from_prawn_doc(doc)
16
+ expect(text).to include("Dr Pepper")
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Renalware::Forms::Homecare::Pdf do
6
+ describe "#generate" do
7
+ # describe "argument validation" do
8
+ # it "throws an error if args is nil" do
9
+ # expect { described_class.generate(nil) }.to raise_error(ArgumentError)
10
+ # end
11
+
12
+ # it "throws an error if arg.provider is nil" do
13
+ # args = Renalware::Forms::Homecare::Args.new(provider: nil)
14
+
15
+ # expect {
16
+ # described_class.generate(args)
17
+ # }.to raise_error(ArgumentError, "Missing provider")
18
+ # end
19
+
20
+ # it "throws an error if arg.provider is an empty string" do
21
+ # args = Renalware::Forms::Homecare::Args.new(provider: "")
22
+
23
+ # expect {
24
+ # described_class.generate(args)
25
+ # }.to raise_error(ArgumentError, "Missing provider")
26
+ # end
27
+
28
+ # it "throws an error if arg.version is not a number" do
29
+ # args = Renalware::Forms::Homecare::Args.new(provider: :a, version: nil)
30
+
31
+ # expect {
32
+ # described_class.generate(args)
33
+ # }.to raise_error(ArgumentError, "Version must be >0")
34
+ # end
35
+
36
+ # it "throws an error no matching provider found" do
37
+ # args = Renalware::Forms::Homecare::Args.new(provider: :generico, version: 1)
38
+
39
+ # expect {
40
+ # described_class.generate(args)
41
+ # }.to raise_error(
42
+ # ArgumentError,
43
+ # "No PDF forms found for provider=generico version=1 "\
44
+ # "trying to resolve Renalware::Forms::Generico::Homecare::V1::Document"
45
+ # )
46
+ # end
47
+
48
+ # it "throws an error no matching version found" do
49
+ # args = Renalware::Forms::Homecare::Args.new(provider: :generic, version: 1000)
50
+
51
+ # expect {
52
+ # described_class.generate(args)
53
+ # }.to raise_error(
54
+ # ArgumentError,
55
+ # "No PDF forms found for provider=generic version=1000 "\
56
+ # "trying to resolve Renalware::Forms::Generic::Homecare::V1000::Document"
57
+ # )
58
+ # end
59
+ # end
60
+
61
+ context "when arguments are valid" do
62
+ it "create render a PDF for a Generic::Homecare::V1::Document" do
63
+ args = Renalware::Forms::Homecare::Args.new(**default_test_arg_values)
64
+
65
+ pdf_data = described_class.generate(args).render
66
+
67
+ expect(pdf_data).to start_with("%PDF-")
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file was generated by the `rspec --init` command. Conventionally, all
4
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
5
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
6
+ # this file to always be loaded, without a need to explicitly require it in any
7
+ # files.
8
+ #
9
+ # Given that it is always loaded, you are encouraged to keep this file as
10
+ # light-weight as possible. Requiring heavyweight dependencies from this file
11
+ # will add to the boot time of your test suite on EVERY test run, even for an
12
+ # individual file that may not need all of that loaded. Instead, consider making
13
+ # a separate helper file that requires the additional dependencies and performs
14
+ # the additional setup, and require it from the spec files that actually need
15
+ # it.
16
+
17
+ require "simplecov"
18
+ SimpleCov.start
19
+
20
+ require "tempfile"
21
+ require "pdf-reader"
22
+ require "./lib/renalware/forms"
23
+
24
+ def pdf_reader_from(prawn_doc)
25
+ file = Tempfile.new("pdf")
26
+ prawn_doc.render_file file
27
+ PDF::Reader.new(file)
28
+ end
29
+
30
+ def test_prawn_doc
31
+ Prawn::Document.new(
32
+ page_size: "A4",
33
+ page_layout: :portrait,
34
+ margin: 15
35
+ )
36
+ end
37
+
38
+ def default_test_arg_values
39
+ {
40
+ provider: :generic,
41
+ version: 1,
42
+ modality: "HD",
43
+ telephone: "",
44
+ hospital_number: nil,
45
+ nhs_number: nil,
46
+ consultant: nil,
47
+ postcode: nil,
48
+ hospital_department: nil,
49
+ hospital_telephone: nil,
50
+ prescriber_name: nil,
51
+ po_number: "134",
52
+ administration_device: nil,
53
+ given_name: "John",
54
+ family_name: "SMITH",
55
+ title: "Mr",
56
+ no_known_allergies: true,
57
+ allergies: [],
58
+ drug_type: :esa,
59
+ born_on: "2019-01-01",
60
+ prescription_date: "2019-01-01"
61
+ }.dup
62
+ end
63
+
64
+ def extract_text_from_prawn_doc(doc)
65
+ pdf_reader_from(doc).pages.map(&:text).join
66
+ end
67
+
68
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
69
+ RSpec.configure do |config|
70
+ config.expect_with :rspec do |expectations|
71
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
72
+ end
73
+
74
+ config.mock_with :rspec do |mocks|
75
+ mocks.verify_partial_doubles = true
76
+ end
77
+ config.shared_context_metadata_behavior = :apply_to_host_groups
78
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: renalware-forms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airslie Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-08 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: dry-types
84
+ name: virtus
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,35 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: dry-struct
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: zeitwerk
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :runtime
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec
98
+ name: pdf-reader
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
101
  - - ">="
@@ -137,7 +109,7 @@ dependencies:
137
109
  - !ruby/object:Gem::Version
138
110
  version: '0'
139
111
  - !ruby/object:Gem::Dependency
140
- name: pdf-reader
112
+ name: rspec
141
113
  requirement: !ruby/object:Gem::Requirement
142
114
  requirements:
143
115
  - - ">="
@@ -150,16 +122,28 @@ dependencies:
150
122
  - - ">="
151
123
  - !ruby/object:Gem::Version
152
124
  version: '0'
153
- description: The home for various forms for external providers e.g. home care prescriptions
125
+ description: The home for various forms for external providers eg home care prescriptions
154
126
  email:
155
127
  - dev@aisrlie.com
156
- executables: []
128
+ executables:
129
+ - rspec
157
130
  extensions: []
158
- extra_rdoc_files: []
131
+ extra_rdoc_files:
132
+ - README.md
159
133
  files:
134
+ - ".gitignore"
135
+ - ".rspec"
136
+ - ".rubocop.yml"
137
+ - ".ruby-version"
138
+ - ".semaphore/semaphore.yml"
139
+ - CHANGELOG.md
140
+ - Gemfile
141
+ - Gemfile.lock
160
142
  - MIT-LICENSE
161
143
  - README.md
162
144
  - Rakefile
145
+ - bin/rspec
146
+ - default.yml
163
147
  - lib/renalware/forms.rb
164
148
  - lib/renalware/forms/base.rb
165
149
  - lib/renalware/forms/generic.rb
@@ -183,6 +167,17 @@ files:
183
167
  - lib/renalware/forms/version.rb
184
168
  - lib/tasks/homecare.rake
185
169
  - lib/tasks/tasks.rake
170
+ - renalware-forms.gemspec
171
+ - spec/renalware/forms/args_spec.rb
172
+ - spec/renalware/forms/homecare/generic/v1/allergies_spec.rb
173
+ - spec/renalware/forms/homecare/generic/v1/delivery_frequencies_spec.rb
174
+ - spec/renalware/forms/homecare/generic/v1/heading_spec.rb
175
+ - spec/renalware/forms/homecare/generic/v1/mediations_spec.rb
176
+ - spec/renalware/forms/homecare/generic/v1/patient_details_spec.rb
177
+ - spec/renalware/forms/homecare/generic/v1/prescription_durations_spec.rb
178
+ - spec/renalware/forms/homecare/generic/v1/signoff_spec.rb
179
+ - spec/renalware/forms/homecare/pdf_spec.rb
180
+ - spec/spec_helper.rb
186
181
  homepage: http://airslie.com
187
182
  licenses:
188
183
  - MIT
@@ -195,14 +190,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
190
  requirements:
196
191
  - - ">="
197
192
  - !ruby/object:Gem::Version
198
- version: '0'
193
+ version: 3.0.0
199
194
  required_rubygems_version: !ruby/object:Gem::Requirement
200
195
  requirements:
201
196
  - - ">="
202
197
  - !ruby/object:Gem::Version
203
198
  version: '0'
204
199
  requirements: []
205
- rubygems_version: 3.0.3
200
+ rubygems_version: 3.2.22
206
201
  signing_key:
207
202
  specification_version: 4
208
203
  summary: PDF library for Renalware forms