tnql 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.hound.yml +10 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +11 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/Guardfile +15 -0
- data/LICENSE.txt +21 -0
- data/README.md +74 -0
- data/Rakefile +12 -0
- data/bin/console +10 -0
- data/bin/setup +7 -0
- data/code_safety.yml +272 -0
- data/lib/tnql.rb +4 -0
- data/lib/tnql/constants.rb +8 -0
- data/lib/tnql/grammars.rb +16 -0
- data/lib/tnql/grammars/age.treetop +63 -0
- data/lib/tnql/grammars/batch_types.treetop +65 -0
- data/lib/tnql/grammars/dates.treetop +35 -0
- data/lib/tnql/grammars/diagnosis.treetop +23 -0
- data/lib/tnql/grammars/e_base_records.treetop +86 -0
- data/lib/tnql/grammars/main.treetop +54 -0
- data/lib/tnql/grammars/patient.treetop +39 -0
- data/lib/tnql/grammars/provider.treetop +21 -0
- data/lib/tnql/grammars/registration_status.treetop +11 -0
- data/lib/tnql/grammars/registry.treetop +15 -0
- data/lib/tnql/grammars/staging.treetop +23 -0
- data/lib/tnql/grammars/treatment.treetop +35 -0
- data/lib/tnql/grammars/tumour_type.treetop +54 -0
- data/lib/tnql/grammars/vital_status.treetop +19 -0
- data/lib/tnql/nodes.rb +25 -0
- data/lib/tnql/nodes/age.rb +82 -0
- data/lib/tnql/nodes/batch_types.rb +52 -0
- data/lib/tnql/nodes/dates.rb +50 -0
- data/lib/tnql/nodes/diagnosis.rb +31 -0
- data/lib/tnql/nodes/e_base_records.rb +61 -0
- data/lib/tnql/nodes/main.rb +11 -0
- data/lib/tnql/nodes/patient.rb +9 -0
- data/lib/tnql/nodes/provider.rb +24 -0
- data/lib/tnql/nodes/registration_status.rb +27 -0
- data/lib/tnql/nodes/registry.rb +33 -0
- data/lib/tnql/nodes/staging.rb +17 -0
- data/lib/tnql/nodes/treatment.rb +45 -0
- data/lib/tnql/nodes/tumour_type.rb +74 -0
- data/lib/tnql/nodes/vital_status.rb +15 -0
- data/lib/tnql/parser.rb +56 -0
- data/lib/tnql/treetop/extensions.rb +20 -0
- data/lib/tnql/version.rb +4 -0
- data/tnql.gemspec +39 -0
- metadata +286 -0
@@ -0,0 +1,24 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module ProviderNameNode
|
4
|
+
def meta_data_item
|
5
|
+
# default to provider
|
6
|
+
key = provider_type.text_value == 'cancer network' ? 'cn_ukacrname' : 'providername'
|
7
|
+
{
|
8
|
+
"diagnosis.#{key}" => {
|
9
|
+
Tnql::BEGINS => name.text_value.upcase,
|
10
|
+
:interval => interval
|
11
|
+
}
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module ProviderCodeNode
|
17
|
+
def meta_data_item
|
18
|
+
# default to provider
|
19
|
+
key = provider_type.text_value == 'cancer network' ? 'cn_ukacr' : 'providercode'
|
20
|
+
{ "diagnosis.#{key}" => { Tnql::EQUALS => code.text_value.upcase } }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module RegistrationStatusNode
|
4
|
+
def meta_data_item
|
5
|
+
{ 'tumour.statusofregistration' => { Tnql::EQUALS => statuses } }
|
6
|
+
end
|
7
|
+
|
8
|
+
def statuses
|
9
|
+
[status_keyword.statusofregistration] + remaining_statuses
|
10
|
+
end
|
11
|
+
|
12
|
+
def remaining_statuses
|
13
|
+
more_statuses.elements.map do |comma_and_status|
|
14
|
+
comma_and_status.status_keyword.statusofregistration
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module StatusKeywordNode
|
20
|
+
def statusofregistration
|
21
|
+
# Currently every status is the upper case first letter of the description
|
22
|
+
# May need to replace this with a case statement at a later date, if needed
|
23
|
+
text_value[0, 1].upcase
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module RegistryNode
|
4
|
+
def meta_data_item
|
5
|
+
{ 'tumour.registry' => { Tnql::EQUALS => registry.to_registrycode } }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module RegistryCodeNode
|
10
|
+
def to_registrycode
|
11
|
+
text_value.upcase
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module RegistryAbbrNode
|
16
|
+
REGISTRY_ABBR = {
|
17
|
+
'nycris' => 'Y0201',
|
18
|
+
'trent' => 'Y0301',
|
19
|
+
'ecric' => 'Y0401',
|
20
|
+
'thames' => 'Y0801',
|
21
|
+
'oxford' => 'Y0901',
|
22
|
+
'ociu' => 'Y0901',
|
23
|
+
'swcis' => 'Y1001',
|
24
|
+
'wmciu' => 'Y1201',
|
25
|
+
'nwcis' => 'Y1701'
|
26
|
+
}.freeze unless defined?(REGISTRY_ABBR)
|
27
|
+
|
28
|
+
def to_registrycode
|
29
|
+
REGISTRY_ABBR[text_value]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module StageDetailNode
|
4
|
+
def meta_data_item
|
5
|
+
case text_value
|
6
|
+
when 'unstaged'
|
7
|
+
{ 'staging.stage' => { Tnql::EQUALS => nil } }
|
8
|
+
when 'valid stage'
|
9
|
+
{ 'staging.stage' => { Tnql::BEGINS => %w(1 2 3 4) } }
|
10
|
+
else
|
11
|
+
stage_values = stages.elements.map(&:text_value).map(&:upcase)
|
12
|
+
{ 'staging.stage' => { Tnql::BEGINS => stage_values } }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module TreatmentDateRangeNode
|
4
|
+
def meta_data_item
|
5
|
+
{
|
6
|
+
'treatment.startoradmissiondate' => {
|
7
|
+
Tnql::LIMITS => [
|
8
|
+
start.to_daterange.date1.try(:to_date).try(:iso8601),
|
9
|
+
finish.to_daterange.date2.try(:to_date).try(:iso8601)
|
10
|
+
]
|
11
|
+
}
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module TreatmentPreciseDateNode
|
17
|
+
def meta_data_item
|
18
|
+
date_range = date_fragment.to_daterange
|
19
|
+
|
20
|
+
{
|
21
|
+
'treatment.startoradmissiondate' => {
|
22
|
+
Tnql::LIMITS => [
|
23
|
+
date_range.date1.try(:to_date).try(:iso8601),
|
24
|
+
date_range.date2.try(:to_date).try(:iso8601)
|
25
|
+
]
|
26
|
+
}
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module TreatmentProviderNameNode
|
32
|
+
def meta_data_item
|
33
|
+
{ 'treatment.providername' => { Tnql::MESSAGE => 'TODO: "' + text_value + '" ignored' } }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module TreatmentProviderCodeNode
|
38
|
+
def meta_data_item
|
39
|
+
# default to provider
|
40
|
+
key = provider_type.text_value == 'cancer network' ? 'cn_ukacr' : 'providercode'
|
41
|
+
{ "treatment.#{key}" => { Tnql::EQUALS => code.text_value.upcase } }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module BehaviourDetailNode
|
4
|
+
def meta_data_item
|
5
|
+
case text_value
|
6
|
+
when 'noninvasive', 'non-invasive'
|
7
|
+
{ 'tumour.behaviour' => { Tnql::EQUALS => %w(0 1 2) } }
|
8
|
+
when 'invasive'
|
9
|
+
{ 'tumour.behaviour' => { Tnql::EQUALS => %w(3 5) } }
|
10
|
+
when 'metastatic'
|
11
|
+
{ 'tumour.behaviour' => { Tnql::EQUALS => '6' } }
|
12
|
+
else
|
13
|
+
{ 'tumour.behaviour' => { Tnql::EQUALS => number.text_value } }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module SiteGroupNode
|
19
|
+
SITE_GROUPS = {
|
20
|
+
'brain' => 1,
|
21
|
+
'breast' => 2,
|
22
|
+
'endocrine' => 3,
|
23
|
+
'gynaecological' => 6,
|
24
|
+
'haematological' => 7,
|
25
|
+
'head and neck' => 8,
|
26
|
+
'lower gi' => 4,
|
27
|
+
'lung' => 9,
|
28
|
+
'other' => 14,
|
29
|
+
'sarcoma' => 10,
|
30
|
+
'skin' => 11,
|
31
|
+
'upper gi' => 5,
|
32
|
+
'urological' => 12
|
33
|
+
}.freeze unless defined?(SITE_GROUPS)
|
34
|
+
|
35
|
+
def meta_data_item
|
36
|
+
{ 'tumour.site_group' => { Tnql::EQUALS => SITE_GROUPS[text_value] } }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
module MelanomaNode
|
41
|
+
def meta_data_item
|
42
|
+
{ 'tumour.icd10o2_primarycode' => { Tnql::BEGINS => 'C43' } }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
module NonMelanomaNode
|
47
|
+
def meta_data_item
|
48
|
+
{ 'tumour.icd10o2_primarycode' => { Tnql::BEGINS => 'C44' } }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
module SitesNode
|
53
|
+
def meta_data_item
|
54
|
+
sites_array = [first.to_site]
|
55
|
+
rest.elements.map { |e| sites_array << e.to_site if !e.nil? && e.respond_to?(:to_site) }
|
56
|
+
sites_array.flatten.delete_if { |a| a.nil? || a.empty? }
|
57
|
+
|
58
|
+
{ 'tumour.primarycode' => { Tnql::BEGINS => sites_array } }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
module AdditionalSiteNode
|
63
|
+
def to_site
|
64
|
+
site.to_site
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
module SingleSiteNode
|
69
|
+
def to_site
|
70
|
+
text_value.upcase
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Tnql #:nodoc: all
|
2
|
+
module Nodes
|
3
|
+
module DeadOrAliveNode
|
4
|
+
def meta_data_item
|
5
|
+
{ 'patient.dead' => { Tnql::EQUALS => vital_status.text_value == 'dead' } }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module DeathCertificateNode
|
10
|
+
def meta_data_item
|
11
|
+
{ 'patient.death_certificate' => { Tnql::EQUALS => modifier.text_value != 'no' } }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/tnql/parser.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'tnql/nodes'
|
2
|
+
require 'tnql/grammars'
|
3
|
+
|
4
|
+
module Tnql
|
5
|
+
# This class simplifies TNQL queries by wrapping them in a little syntactic sugar.
|
6
|
+
class Parser
|
7
|
+
attr_reader :parser
|
8
|
+
|
9
|
+
def initialize(query)
|
10
|
+
raise ArgumentError unless query.is_a?(String)
|
11
|
+
|
12
|
+
@parser = TnqlParser.new
|
13
|
+
@result = @parser.parse(query.downcase)
|
14
|
+
|
15
|
+
return if valid?
|
16
|
+
# FIXME: should log "Parser failed parsing \"#{query}\": #{@parser.failure_reason} " \
|
17
|
+
# "(line: #{@parser.failure_line}, column: #{@parser.failure_column})"
|
18
|
+
end
|
19
|
+
|
20
|
+
def valid?
|
21
|
+
!@result.nil?
|
22
|
+
end
|
23
|
+
|
24
|
+
def failure_reason
|
25
|
+
valid? ? nil : @parser.failure_reason
|
26
|
+
end
|
27
|
+
|
28
|
+
def failure_line
|
29
|
+
valid? ? nil : @parser.failure_line
|
30
|
+
end
|
31
|
+
|
32
|
+
def failure_column
|
33
|
+
valid? ? nil : @parser.failure_column
|
34
|
+
end
|
35
|
+
|
36
|
+
def diagnosis_range
|
37
|
+
tumour_diagnosisdate = meta_data['tumour.diagnosisdate']
|
38
|
+
return nil unless tumour_diagnosisdate
|
39
|
+
|
40
|
+
starts, ends = tumour_diagnosisdate[Tnql::LIMITS]
|
41
|
+
Daterange.new(Date.parse(starts), Date.parse(ends))
|
42
|
+
end
|
43
|
+
|
44
|
+
def messages # check if any query conditions been ignored or modified
|
45
|
+
msg = ''.html_safe
|
46
|
+
meta_data.each do |_canonical_name, filter|
|
47
|
+
msg += filter[Tnql::MESSAGE] if filter.key?(Tnql::MESSAGE)
|
48
|
+
end
|
49
|
+
msg
|
50
|
+
end
|
51
|
+
|
52
|
+
def meta_data
|
53
|
+
valid? ? @result.meta_data : {}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Treetop
|
2
|
+
module Runtime
|
3
|
+
# We extend the SyntaxNode class to include a hash of meta data.
|
4
|
+
# Individual rules can define meta_data_item method that must return
|
5
|
+
# a hash that is merged with the hash data for the entire query.
|
6
|
+
class SyntaxNode
|
7
|
+
def meta_data(hash = {})
|
8
|
+
hash.merge!(meta_data_item) if respond_to?(:meta_data_item)
|
9
|
+
|
10
|
+
if nonterminal?
|
11
|
+
elements.each do |element|
|
12
|
+
element.meta_data(hash)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
hash
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/tnql/version.rb
ADDED
data/tnql.gemspec
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'tnql/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'tnql'
|
8
|
+
spec.version = Tnql::VERSION
|
9
|
+
spec.authors = ['PHE NDR IT Development Team']
|
10
|
+
spec.email = []
|
11
|
+
|
12
|
+
spec.summary = 'Tumour Natural Query Language'
|
13
|
+
spec.description = 'Domain Specific Language for querying PHE NCRAS datastores'
|
14
|
+
spec.homepage = 'https://github.com/PublicHealthEngland/tnql'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").
|
18
|
+
reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = 'exe'
|
20
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.required_ruby_version = '>= 2.2.0'
|
24
|
+
|
25
|
+
spec.add_dependency 'activesupport', '>= 3.2.18', '< 5.1'
|
26
|
+
spec.add_dependency 'ndr_support', '>= 3.0', '< 6'
|
27
|
+
spec.add_dependency 'treetop', '>= 1.4.10'
|
28
|
+
spec.add_dependency 'chronic', '~> 0.3.0'
|
29
|
+
|
30
|
+
spec.add_development_dependency 'ndr_dev_support', '~> 2.1'
|
31
|
+
spec.add_development_dependency 'bundler'
|
32
|
+
spec.add_development_dependency 'rake'
|
33
|
+
spec.add_development_dependency 'minitest', '>= 5.0.0'
|
34
|
+
spec.add_development_dependency 'pry'
|
35
|
+
spec.add_development_dependency 'guard'
|
36
|
+
spec.add_development_dependency 'guard-rubocop'
|
37
|
+
spec.add_development_dependency 'guard-minitest'
|
38
|
+
spec.add_development_dependency 'terminal-notifier-guard' if RUBY_PLATFORM =~ /darwin/
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,286 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tnql
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- PHE NDR IT Development Team
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-05-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.18
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.1'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.18
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.1'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: ndr_support
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '3.0'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '6'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.0'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '6'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: treetop
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 1.4.10
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.4.10
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: chronic
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - "~>"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 0.3.0
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.3.0
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: ndr_dev_support
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '2.1'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '2.1'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: bundler
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rake
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: minitest
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 5.0.0
|
130
|
+
type: :development
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 5.0.0
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: pry
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: guard
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
type: :development
|
159
|
+
prerelease: false
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
- !ruby/object:Gem::Dependency
|
166
|
+
name: guard-rubocop
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
type: :development
|
173
|
+
prerelease: false
|
174
|
+
version_requirements: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
- !ruby/object:Gem::Dependency
|
180
|
+
name: guard-minitest
|
181
|
+
requirement: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - ">="
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
type: :development
|
187
|
+
prerelease: false
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
189
|
+
requirements:
|
190
|
+
- - ">="
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: terminal-notifier-guard
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
200
|
+
type: :development
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
207
|
+
description: Domain Specific Language for querying PHE NCRAS datastores
|
208
|
+
email: []
|
209
|
+
executables: []
|
210
|
+
extensions: []
|
211
|
+
extra_rdoc_files: []
|
212
|
+
files:
|
213
|
+
- ".gitignore"
|
214
|
+
- ".hound.yml"
|
215
|
+
- ".rubocop.yml"
|
216
|
+
- ".travis.yml"
|
217
|
+
- CODE_OF_CONDUCT.md
|
218
|
+
- Gemfile
|
219
|
+
- Guardfile
|
220
|
+
- LICENSE.txt
|
221
|
+
- README.md
|
222
|
+
- Rakefile
|
223
|
+
- bin/console
|
224
|
+
- bin/setup
|
225
|
+
- code_safety.yml
|
226
|
+
- lib/tnql.rb
|
227
|
+
- lib/tnql/constants.rb
|
228
|
+
- lib/tnql/grammars.rb
|
229
|
+
- lib/tnql/grammars/age.treetop
|
230
|
+
- lib/tnql/grammars/batch_types.treetop
|
231
|
+
- lib/tnql/grammars/dates.treetop
|
232
|
+
- lib/tnql/grammars/diagnosis.treetop
|
233
|
+
- lib/tnql/grammars/e_base_records.treetop
|
234
|
+
- lib/tnql/grammars/main.treetop
|
235
|
+
- lib/tnql/grammars/patient.treetop
|
236
|
+
- lib/tnql/grammars/provider.treetop
|
237
|
+
- lib/tnql/grammars/registration_status.treetop
|
238
|
+
- lib/tnql/grammars/registry.treetop
|
239
|
+
- lib/tnql/grammars/staging.treetop
|
240
|
+
- lib/tnql/grammars/treatment.treetop
|
241
|
+
- lib/tnql/grammars/tumour_type.treetop
|
242
|
+
- lib/tnql/grammars/vital_status.treetop
|
243
|
+
- lib/tnql/nodes.rb
|
244
|
+
- lib/tnql/nodes/age.rb
|
245
|
+
- lib/tnql/nodes/batch_types.rb
|
246
|
+
- lib/tnql/nodes/dates.rb
|
247
|
+
- lib/tnql/nodes/diagnosis.rb
|
248
|
+
- lib/tnql/nodes/e_base_records.rb
|
249
|
+
- lib/tnql/nodes/main.rb
|
250
|
+
- lib/tnql/nodes/patient.rb
|
251
|
+
- lib/tnql/nodes/provider.rb
|
252
|
+
- lib/tnql/nodes/registration_status.rb
|
253
|
+
- lib/tnql/nodes/registry.rb
|
254
|
+
- lib/tnql/nodes/staging.rb
|
255
|
+
- lib/tnql/nodes/treatment.rb
|
256
|
+
- lib/tnql/nodes/tumour_type.rb
|
257
|
+
- lib/tnql/nodes/vital_status.rb
|
258
|
+
- lib/tnql/parser.rb
|
259
|
+
- lib/tnql/treetop/extensions.rb
|
260
|
+
- lib/tnql/version.rb
|
261
|
+
- tnql.gemspec
|
262
|
+
homepage: https://github.com/PublicHealthEngland/tnql
|
263
|
+
licenses:
|
264
|
+
- MIT
|
265
|
+
metadata: {}
|
266
|
+
post_install_message:
|
267
|
+
rdoc_options: []
|
268
|
+
require_paths:
|
269
|
+
- lib
|
270
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
271
|
+
requirements:
|
272
|
+
- - ">="
|
273
|
+
- !ruby/object:Gem::Version
|
274
|
+
version: 2.2.0
|
275
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
276
|
+
requirements:
|
277
|
+
- - ">="
|
278
|
+
- !ruby/object:Gem::Version
|
279
|
+
version: '0'
|
280
|
+
requirements: []
|
281
|
+
rubyforge_project:
|
282
|
+
rubygems_version: 2.5.1
|
283
|
+
signing_key:
|
284
|
+
specification_version: 4
|
285
|
+
summary: Tumour Natural Query Language
|
286
|
+
test_files: []
|