sprint_client 0.0.6 → 0.1.0

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/sprint_client.rb +62 -18
  3. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 170e6b6ee33cd8f973be154337d2d1ad1e034ce912c5f869bdbe9d7c0c3dd3e7
4
- data.tar.gz: 35f5a95ed99fd93be81382601412225b533228e638041989cbc71df88ed216b6
3
+ metadata.gz: c21d3dac4bda250212579d1b8d3b593e0208d365354d9aae1e1085ecb6711bef
4
+ data.tar.gz: a029637cc6ff98f21409ec28f050dd7058dae5f539437115806e3e93601a4b00
5
5
  SHA512:
6
- metadata.gz: abdb40499b6fdc6eb269b66e442b195f6b3f4223c14499e2e278e38135ea9cfbc9e5032600e18fc9205f9ee9db7acd707eb8e574efea47163a39b01e2a6d6db5
7
- data.tar.gz: 61a1a012eddd76546cb4c47cdfd2a9fb37a2d2065e4292b0ab1ca64cecb654b68cb423a2ff94693e9e82496cceed120fab6523c61291ae135d5cf920d5a9ec5e
6
+ metadata.gz: f50f3845d341a9f1f6a2484ee17a18b99b4e925894377a04da186a30eab3d7da953fb274c62d328a9ef6e5d4b94e9aa8b58c63c61db1549caa7563efd7796e54
7
+ data.tar.gz: f4297e1d3e2040622a4b5990f3561b86d1f11d364d1c7be3e8b7c1838eec0c68017f5a708e9d83d7f4100b3097312c3dd4cfa5fdb17c39be30e0927b7fd3448b
data/lib/sprint_client.rb CHANGED
@@ -1,14 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Interfaces with SPrint service: https://github.com/sanger/sprint
4
- class SprintClient
3
+ # Interfaces with SPrint service: https://github.com/sanger/sprint
4
+ class SPrintClient
5
5
  require 'uri'
6
6
  require 'erb'
7
-
7
+ require 'yaml'
8
+ require 'net/http'
9
+ require 'json'
10
+
8
11
  # printer_name - a string showing which printer to send the request to
9
- # label_template_name - a string to identify which label template to be used in the print request
12
+ # label_template_name - a string to identify which label template to be used in the print request e.g plate_384.yml.erb
10
13
  # merge_fields_list - a list of hashes, each containing the field values for a particular label
11
- # e.g [{ barcode: "DN111111", date: "1-APR-2020" }, { barcode: "DN222222", date: "2-APR-2020" }] would print two labels
14
+ # e.g
15
+ # [
16
+ # {"right_text"=>"DN9000003B", "left_text"=>"DN9000003B", "barcode"=>"DN9000003B", "extra_right_text"=>"DN9000003B LTHR-384 RT", "extra_left_text"=>"10-NOV-2020"},
17
+ # {"right_text"=>"DN9000003B", "left_text"=>"DN9000003B", "barcode"=>"DN9000003B", "extra_right_text"=>"DN9000003B LTHR-384 RT", "extra_left_text"=>"10-NOV-2020"}
18
+ # ]
19
+ # would print two labels
12
20
  def self.send_print_request(printer_name, label_template_name, merge_fields_list)
13
21
  # define GraphQL print mutation
14
22
  query = "mutation Print($printRequest: PrintRequest!, $printer: String!) {
@@ -17,14 +25,27 @@ class SprintClient
17
25
  }
18
26
  }"
19
27
 
20
- # locate the required label template
21
- path = File.join('config', 'sprint', label_template_name)
22
- template = ERB.new File.read(path)
28
+ # locate the required label template
29
+ path = get_label_template_path(label_template_name)
30
+ begin
31
+ template = get_template(path)
32
+ rescue StandardError => e
33
+ return Net::HTTPResponse.new('1.1', '422', "Could not find label template with name #{label_template_name}")
34
+ end
23
35
 
24
36
  # parse the template for each label
25
- layouts = merge_fields_list.map do |merge_fields|
26
- YAML.load template.result binding
27
- end
37
+ layouts = set_layouts(merge_fields_list, template)
38
+ # layouts: [
39
+ # {
40
+ # "labelSize"=>{"width"=>68, "height"=>6, "displacement"=>13},
41
+ # "barcodeFields"=>[{"x"=>21, "y"=>0, "cellWidth"=>0.2, "barcodeType"=>"code39", "value"=>"DN9000003B", "height"=>5}],
42
+ # "textFields"=>[{"x"=>1, "y"=>4, "value"=>"DN9000003B", "font"=>"proportional", "fontSize"=>1.7}, {"x"=>47, "y"=>4, "value"=>"DN9000003B", "font"=>"proportional", "fontSize"=>1.7}]
43
+ # },
44
+ # {
45
+ # "labelSize"=>{"width"=>68, "height"=>6, "displacement"=>13},
46
+ # "textFields"=>[{"x"=>1, "y"=>3, "value"=>"10-NOV-2020", "font"=>"proportional", "fontSize"=>1.7}, {"x"=>15, "y"=>3, "value"=>"DN9000003B LTHR-384 RT", "font"=>"proportional", "fontSize"=>1.7}]
47
+ # }
48
+ # ]
28
49
 
29
50
  # build the body of the print request
30
51
  body = {
@@ -37,13 +58,36 @@ class SprintClient
37
58
  }
38
59
  }
39
60
 
40
- # send POST request to SPrint url
41
- reponse = Net::HTTP.post URI(configatron.sprint_url),
42
- body.to_json,
43
- 'Content-Type' => 'application/json'
61
+ send_post(body)
62
+ end
63
+
64
+ def self.sprint_uri=(sprint_uri)
65
+ @@sprint_uri = sprint_uri
66
+ end
67
+
68
+ def self.send_post(body)
69
+ # send POST request to SPrint url and return response
70
+ Net::HTTP.post URI(@@sprint_uri),
71
+ body.to_json,
72
+ 'Content-Type' => 'application/json'
73
+ rescue StandardError => e
74
+ Net::HTTPResponse.new('1.1', '422', "Failed to send post to #{@@sprint_uri}")
75
+ end
76
+
77
+ def self.get_template(path)
78
+ ERB.new File.read(path)
79
+ end
80
+
81
+ def self.set_layouts(merge_fields_list, template)
82
+ layouts = []
83
+ merge_fields_list.each do |merge_fields|
84
+ template_array = YAML.load template.result binding
85
+ template_array.each { |ar| layouts << ar }
86
+ end
87
+ layouts
88
+ end
44
89
 
45
- # return response of POST request
46
- puts response
47
- reponse
90
+ def self.get_label_template_path(label_template_name)
91
+ File.join('config', 'sprint', 'label_templates', label_template_name)
48
92
  end
49
93
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprint_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harriet Craven
@@ -9,8 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-10-27 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2020-11-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 3.9.0
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 3.9.0
14
28
  description: ''
15
29
  email: seq-help@sanger.ac.uk
16
30
  executables: []