canql 2.0.1 → 2.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 0bf9c1067bbfdecf14c5e4835bb5a2eadca68e718d3e14280e84838f75b4ffc8
4
- data.tar.gz: 8716857a8c0fe1928c7eda79e663866f962e8488957ffcf16db55c34526d919c
2
+ SHA1:
3
+ metadata.gz: ec5860921323a9b19adb7e31a3e3df34f9154572
4
+ data.tar.gz: 5af7802c15c0d787c87dfc48dcb4e2fc93361093
5
5
  SHA512:
6
- metadata.gz: 03b0e5ccde1478aa7a23c4bf3a6da94185c4e32ad575ca919a3d6cfb4b94a0c2928d3eba302df2641be1fb4c506e1bc467b8c4ff9756ec0aed2c54db7ff66506
7
- data.tar.gz: 72322bf3fc7fa52c02b2935a19d3240d3140b204916f4d6f4cccd199c47e2f95e3d1d42905bd27e61b1b871754e3ab9ac446def16b6a40f312712195066c07db
6
+ metadata.gz: 2d05ac765951510e9746f4f65e4fddd9778d634b7999bc1719fcd770b6695f5e9ef6b4c2eecc8cfee3411c7bda9462ad5e804f97b96ecec43f3e282fda533e37
7
+ data.tar.gz: d52b09c8edaaaa4e4f6c365a73d9481c64f6f3909aa8dce988dcd70a79204460257bb329a9752501bbe6a6962fb10ed328bc951cf900a5ffda1d210d0dba2710
data/README.md CHANGED
@@ -50,7 +50,7 @@ would output:
50
50
 
51
51
  The parser is case insensitive. An example of an almost fully involved CANQL query is:
52
52
 
53
- > First 27 Male Liveborn Thames Cases Due between 20/06/2015 and 25/06/2015 and Born on 22/06/2015 and that Died on 07/07/2015 with Prenatal Suspected Q20 Anomalies and Postnatal Tests and Missing Postcode and Date of Birth and QA Action and Unprocessed paediatric records and Mother Born between 01/10/1990 and 10/01/1999 and who Died on 01/08/2015 with Populated Postcode and NHS Number
53
+ > First 27 Male Liveborn Thames Cases Due between 20/06/2015 and 25/06/2015 and Born on 22/06/2015 and that Died on 07/07/2015 with Suspected Prenatal Q20 Anomalies and Postnatal Tests and Missing Postcode and Date of Birth and QA Action and Unprocessed paediatric records and Mother Born between 01/10/1990 and 10/01/1999 and who Died on 01/08/2015 with Populated Postcode and NHS Number
54
54
 
55
55
  Please see the tests for many more examples.
56
56
 
@@ -31,7 +31,7 @@ file safety:
31
31
  README.md:
32
32
  comments:
33
33
  reviewed_by: timgentry
34
- safe_revision: d3ea041b101e40e6847608705ecc2c3f6e0ca03f
34
+ safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
35
35
  Rakefile:
36
36
  comments:
37
37
  reviewed_by: timgentry
@@ -68,8 +68,8 @@ file safety:
68
68
  lib/canql/grammars/anomaly.treetop:
69
69
  comments: It is a known issue that this is potentially susceptible to certain
70
70
  kinds of DoS attack
71
- reviewed_by: josh.pencheon
72
- safe_revision: 03d2f9e0a1d3c178241a28e20bcd222165027e01
71
+ reviewed_by: timgentry
72
+ safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
73
73
  lib/canql/grammars/batch_types.treetop:
74
74
  comments:
75
75
  reviewed_by: timgentry
@@ -114,7 +114,7 @@ file safety:
114
114
  lib/canql/nodes/anomaly.rb:
115
115
  comments:
116
116
  reviewed_by: timgentry
117
- safe_revision: bf2fbe12794f8b53e30a1ace01677cf6f215dbca
117
+ safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
118
118
  lib/canql/nodes/batch_types.rb:
119
119
  comments:
120
120
  reviewed_by: timgentry
@@ -153,12 +153,12 @@ file safety:
153
153
  safe_revision: 6932d590299ad4a9d2ba24b425b158c67142bf74
154
154
  lib/canql/version.rb:
155
155
  comments:
156
- reviewed_by: josh.pencheon
157
- safe_revision: 518365b3f1ffc28debccb6bcef055b4329e90739
156
+ reviewed_by: timgentry
157
+ safe_revision: 78fc6f6aaee47fc11b073a8d8d975b4f7c9101cc
158
158
  test/anomaly_test_helper.rb:
159
159
  comments:
160
160
  reviewed_by: timgentry
161
- safe_revision: bf2fbe12794f8b53e30a1ace01677cf6f215dbca
161
+ safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
162
162
  test/canql_test.rb:
163
163
  comments:
164
164
  reviewed_by: timgentry
@@ -177,8 +177,8 @@ file safety:
177
177
  safe_revision: bf2fbe12794f8b53e30a1ace01677cf6f215dbca
178
178
  test/nodes/code_test.rb:
179
179
  comments:
180
- reviewed_by: josh.pencheon
181
- safe_revision: 03d2f9e0a1d3c178241a28e20bcd222165027e01
180
+ reviewed_by: timgentry
181
+ safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
182
182
  test/nodes/e_base_records_test.rb:
183
183
  comments:
184
184
  reviewed_by: timgentry
@@ -190,7 +190,7 @@ file safety:
190
190
  test/nodes/patient_test.rb:
191
191
  comments:
192
192
  reviewed_by: timgentry
193
- safe_revision: 6932d590299ad4a9d2ba24b425b158c67142bf74
193
+ safe_revision: 695cec7ee61f36a9ef054a4079f290421d814666
194
194
  test/nodes/registry_test.rb:
195
195
  comments:
196
196
  reviewed_by: timgentry
@@ -21,15 +21,19 @@ module Canql
21
21
  end
22
22
 
23
23
  rule more_anomalies_icd_codes
24
- ','? space? ('or' space)? anomalies_icd_code <Nodes::Anomaly::AdditionalIcdCodeNode>
24
+ ','? space? ('or' space)? anomalies_icd_code <Nodes::Anomaly::AdditionalCodeNode>
25
25
  end
26
26
 
27
27
  rule anomalies_icd_code
28
- icd_code_name <Nodes::Anomaly::SingleIcdCodeNode>
28
+ (icd_code_name / code_group)
29
29
  end
30
30
 
31
31
  rule icd_code_name
32
- [a-z] [0-9] 1..3
32
+ [a-z] [0-9] 1..3 <Nodes::Anomaly::SingleIcdCodeNode>
33
+ end
34
+
35
+ rule code_group
36
+ ('fasp' / 'structural' / 'trisomy') <Nodes::Anomaly::SingleCodeGroupNode>
33
37
  end
34
38
  end
35
39
  end
@@ -16,7 +16,9 @@ module Canql #:nodoc: all
16
16
  anomaly_hash = { 'exists' => existance_filter }
17
17
  anomaly_hash['type'] = anomaly_type_filter if anomaly_type.present?
18
18
  anomaly_hash['status'] = anomaly_status_type_filter if anomaly_status_type.present?
19
- anomaly_hash['icd_codes'] = code_filter if code_filter.any?
19
+ anomaly_hash['icd_codes'] = code_filter[:icd_code] if code_filter[:icd_code].present?
20
+ return anomaly_hash if code_filter[:code_group].blank?
21
+ anomaly_hash['code_groups'] = code_filter[:code_group]
20
22
  anomaly_hash
21
23
  end
22
24
 
@@ -32,23 +34,56 @@ module Canql #:nodoc: all
32
34
  { Canql::EQUALS => anomaly_status_type }
33
35
  end
34
36
 
37
+ def code_type(code)
38
+ return :icd_code if code.respond_to?(:to_code) && code.to_code.present?
39
+ return :code_group if code.respond_to?(:to_code_group) && code.to_code_group.present?
40
+ raise 'Unable to find code type'
41
+ end
42
+
43
+ def code_value(code)
44
+ return code.to_code if :icd_code == code_type(code)
45
+ code.to_code_group
46
+ end
47
+
48
+ def prepare_code_filters(code_array)
49
+ code_array[:icd_code].flatten!
50
+ code_array[:icd_code].delete_if(&:blank?)
51
+ code_array[:code_group].flatten!
52
+ code_array[:code_group].delete_if(&:blank?)
53
+
54
+ code_filters = {}
55
+ if code_array[:icd_code].any?
56
+ code_filters[:icd_code] = { Canql::BEGINS => code_array[:icd_code] }
57
+ end
58
+ return code_filters if code_array[:code_group].blank?
59
+ code_filters[:code_group] = { Canql::EQUALS => code_array[:code_group] }
60
+ code_filters
61
+ end
62
+
35
63
  def code_filter
36
64
  return {} if code_data.text_value.blank?
37
65
 
38
- code_array = [code_data.first.to_code]
66
+ code_arrays = { icd_code: [], code_group: [] }
67
+ code_arrays[code_type(code_data.first)] << code_value(code_data.first)
39
68
  code_data.rest.elements.each do |code|
40
- code_array << code.try(:to_code)
69
+ code_arrays[code_type(code)] << code_value(code)
41
70
  end
42
- code_array.flatten!
43
- code_array.delete_if(&:blank?)
44
-
45
- { Canql::BEGINS => code_array }
71
+ prepare_code_filters(code_arrays)
46
72
  end
47
73
  end
48
74
 
49
- module AdditionalIcdCodeNode
75
+ module AdditionalCodeNode
76
+ def code_type
77
+ return :icd_code if anomalies_icd_code.respond_to?(:to_code)
78
+ :code_group
79
+ end
80
+
50
81
  def to_code
51
- anomalies_icd_code.to_code
82
+ anomalies_icd_code.to_code if :icd_code == code_type
83
+ end
84
+
85
+ def to_code_group
86
+ anomalies_icd_code.to_code_group if :code_group == code_type
52
87
  end
53
88
  end
54
89
 
@@ -57,6 +92,12 @@ module Canql #:nodoc: all
57
92
  text_value.upcase
58
93
  end
59
94
  end
95
+
96
+ module SingleCodeGroupNode
97
+ def to_code_group
98
+ text_value.upcase
99
+ end
100
+ end
60
101
  end
61
102
  end
62
103
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # This stores the current version of the Canql gem
4
4
  module Canql
5
- VERSION = '2.0.1'
5
+ VERSION = '2.1.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canql
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PHE NDR Development Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-23 00:00:00.000000000 Z
11
+ date: 2018-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chronic
@@ -274,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
274
  version: '0'
275
275
  requirements: []
276
276
  rubyforge_project:
277
- rubygems_version: 2.7.6
277
+ rubygems_version: 2.5.2.3
278
278
  signing_key:
279
279
  specification_version: 4
280
280
  summary: Congenital Anomaly Natural Query Language