tnql 1.0.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 +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: []
|