conceptql 0.1.1 → 0.2.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.
Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +53 -1
  4. data/Guardfile +52 -24
  5. data/conceptql.gemspec +5 -3
  6. data/doc/spec.md +2 -2
  7. data/lib/conceptql/behaviors/debuggable.rb +70 -0
  8. data/lib/conceptql/behaviors/dottable.rb +28 -14
  9. data/lib/conceptql/behaviors/metadatable.rb +97 -0
  10. data/lib/conceptql/behaviors/preppable.rb +20 -0
  11. data/lib/conceptql/cli.rb +31 -5
  12. data/lib/conceptql/converter.rb +65 -0
  13. data/lib/conceptql/debugger.rb +48 -0
  14. data/lib/conceptql/graph.rb +14 -13
  15. data/lib/conceptql/graph_nodifier.rb +49 -17
  16. data/lib/conceptql/nodifier.rb +31 -6
  17. data/lib/conceptql/operators/after.rb +25 -0
  18. data/lib/conceptql/operators/any_overlap.rb +15 -0
  19. data/lib/conceptql/operators/before.rb +21 -0
  20. data/lib/conceptql/{nodes/binary_operator_node.rb → operators/binary_operator_operator.rb} +12 -8
  21. data/lib/conceptql/{nodes/casting_node.rb → operators/casting_operator.rb} +8 -7
  22. data/lib/conceptql/{nodes → operators}/complement.rb +14 -11
  23. data/lib/conceptql/operators/concept.rb +70 -0
  24. data/lib/conceptql/{nodes → operators}/condition_type.rb +13 -5
  25. data/lib/conceptql/operators/contains.rb +17 -0
  26. data/lib/conceptql/operators/count.rb +26 -0
  27. data/lib/conceptql/operators/cpt.rb +25 -0
  28. data/lib/conceptql/{nodes → operators}/date_range.rb +11 -6
  29. data/lib/conceptql/operators/death.rb +23 -0
  30. data/lib/conceptql/operators/drug_type_concept.rb +21 -0
  31. data/lib/conceptql/{nodes → operators}/during.rb +9 -3
  32. data/lib/conceptql/operators/equal.rb +13 -0
  33. data/lib/conceptql/operators/except.rb +28 -0
  34. data/lib/conceptql/operators/filter.rb +21 -0
  35. data/lib/conceptql/{nodes → operators}/first.rb +7 -5
  36. data/lib/conceptql/{nodes → operators}/from.rb +2 -2
  37. data/lib/conceptql/operators/from_seer_visits.rb +23 -0
  38. data/lib/conceptql/{nodes → operators}/gender.rb +6 -6
  39. data/lib/conceptql/operators/hcpcs.rb +25 -0
  40. data/lib/conceptql/operators/icd10.rb +28 -0
  41. data/lib/conceptql/operators/icd9.rb +28 -0
  42. data/lib/conceptql/operators/icd9_procedure.rb +25 -0
  43. data/lib/conceptql/{nodes → operators}/intersect.rb +7 -3
  44. data/lib/conceptql/{nodes → operators}/last.rb +7 -5
  45. data/lib/conceptql/operators/loinc.rb +25 -0
  46. data/lib/conceptql/operators/medcode.rb +28 -0
  47. data/lib/conceptql/operators/medcode_procedure.rb +27 -0
  48. data/lib/conceptql/operators/ndc.rb +29 -0
  49. data/lib/conceptql/operators/numeric.rb +54 -0
  50. data/lib/conceptql/operators/observation_by_enttype.rb +29 -0
  51. data/lib/conceptql/operators/observation_period.rb +30 -0
  52. data/lib/conceptql/operators/occurrence.rb +70 -0
  53. data/lib/conceptql/operators/one_in_two_out.rb +62 -0
  54. data/lib/conceptql/{nodes/node.rb → operators/operator.rb} +84 -52
  55. data/lib/conceptql/operators/overlapped_by.rb +23 -0
  56. data/lib/conceptql/operators/overlaps.rb +19 -0
  57. data/lib/conceptql/operators/pass_thru.rb +11 -0
  58. data/lib/conceptql/{nodes → operators}/person.rb +8 -4
  59. data/lib/conceptql/operators/person_filter.rb +13 -0
  60. data/lib/conceptql/{nodes → operators}/place_of_service_code.rb +7 -7
  61. data/lib/conceptql/operators/procedure_occurrence.rb +25 -0
  62. data/lib/conceptql/operators/prodcode.rb +29 -0
  63. data/lib/conceptql/{nodes → operators}/race.rb +7 -7
  64. data/lib/conceptql/operators/recall.rb +38 -0
  65. data/lib/conceptql/operators/rxnorm.rb +24 -0
  66. data/lib/conceptql/operators/snomed.rb +24 -0
  67. data/lib/conceptql/operators/snomed_condition.rb +26 -0
  68. data/lib/conceptql/{nodes/source_vocabulary_node.rb → operators/source_vocabulary_operator.rb} +7 -4
  69. data/lib/conceptql/{nodes/standard_vocabulary_node.rb → operators/standard_vocabulary_operator.rb} +6 -4
  70. data/lib/conceptql/{nodes → operators}/started_by.rb +9 -3
  71. data/lib/conceptql/{nodes → operators}/sum.rb +9 -4
  72. data/lib/conceptql/{nodes/temporal_node.rb → operators/temporal_operator.rb} +7 -4
  73. data/lib/conceptql/{nodes → operators}/time_window.rb +19 -7
  74. data/lib/conceptql/operators/to_seer_visits.rb +24 -0
  75. data/lib/conceptql/operators/trim_date_end.rb +55 -0
  76. data/lib/conceptql/operators/trim_date_start.rb +56 -0
  77. data/lib/conceptql/{nodes → operators}/union.rb +6 -2
  78. data/lib/conceptql/operators/visit.rb +15 -0
  79. data/lib/conceptql/{nodes → operators}/visit_occurrence.rb +7 -3
  80. data/lib/conceptql/query.rb +19 -17
  81. data/lib/conceptql/scope.rb +69 -0
  82. data/lib/conceptql/tree.rb +33 -18
  83. data/lib/conceptql/utils/temp_table.rb +72 -0
  84. data/lib/conceptql/version.rb +1 -1
  85. data/spec/conceptql/behaviors/dottable_spec.rb +39 -51
  86. data/spec/conceptql/converter_spec.rb +51 -0
  87. data/spec/conceptql/date_adjuster_spec.rb +15 -15
  88. data/spec/conceptql/operators/after_spec.rb +16 -0
  89. data/spec/conceptql/operators/before_spec.rb +16 -0
  90. data/spec/conceptql/{nodes/casting_node_spec.rb → operators/casting_operator_spec.rb} +16 -20
  91. data/spec/conceptql/operators/complement_spec.rb +15 -0
  92. data/spec/conceptql/operators/concept_spec.rb +40 -0
  93. data/spec/conceptql/{nodes → operators}/condition_type_spec.rb +39 -24
  94. data/spec/conceptql/operators/contains_spec.rb +19 -0
  95. data/spec/conceptql/operators/cpt_spec.rb +29 -0
  96. data/spec/conceptql/operators/date_range_spec.rb +33 -0
  97. data/spec/conceptql/operators/death_spec.rb +10 -0
  98. data/spec/conceptql/operators/during_spec.rb +30 -0
  99. data/spec/conceptql/operators/except_spec.rb +15 -0
  100. data/spec/conceptql/operators/first_spec.rb +35 -0
  101. data/spec/conceptql/operators/from_spec.rb +13 -0
  102. data/spec/conceptql/operators/gender_spec.rb +27 -0
  103. data/spec/conceptql/operators/hcpcs_spec.rb +29 -0
  104. data/spec/conceptql/operators/icd10_spec.rb +34 -0
  105. data/spec/conceptql/operators/icd9_procedure_spec.rb +29 -0
  106. data/spec/conceptql/operators/icd9_spec.rb +34 -0
  107. data/spec/conceptql/operators/intersect_spec.rb +28 -0
  108. data/spec/conceptql/operators/last_spec.rb +36 -0
  109. data/spec/conceptql/operators/loinc_spec.rb +29 -0
  110. data/spec/conceptql/operators/medcode_procedure_spec.rb +34 -0
  111. data/spec/conceptql/operators/medcode_spec.rb +34 -0
  112. data/spec/conceptql/operators/observation_period_spec.rb +10 -0
  113. data/spec/conceptql/operators/occurrence_spec.rb +87 -0
  114. data/spec/conceptql/operators/overlapped_by_spec.rb +32 -0
  115. data/spec/conceptql/operators/overlaps_spec.rb +21 -0
  116. data/spec/conceptql/operators/person_filter_spec.rb +15 -0
  117. data/spec/conceptql/operators/person_spec.rb +10 -0
  118. data/spec/conceptql/{nodes → operators}/place_of_service_code_spec.rb +6 -8
  119. data/spec/conceptql/operators/procedure_occurrence_spec.rb +10 -0
  120. data/spec/conceptql/operators/prodcode_spec.rb +35 -0
  121. data/spec/conceptql/operators/query_double.rb +20 -0
  122. data/spec/conceptql/operators/query_double_spec.rb +7 -0
  123. data/spec/conceptql/operators/race_spec.rb +21 -0
  124. data/spec/conceptql/operators/rxnorm_spec.rb +29 -0
  125. data/spec/conceptql/operators/snomed_spec.rb +29 -0
  126. data/spec/conceptql/operators/source_vocabulary_operator_spec.rb +35 -0
  127. data/spec/conceptql/operators/standard_vocabulary_operator_spec.rb +35 -0
  128. data/spec/conceptql/operators/started_by_spec.rb +22 -0
  129. data/spec/conceptql/{nodes/temporal_node_spec.rb → operators/temporal_operator_spec.rb} +11 -17
  130. data/spec/conceptql/operators/time_window_spec.rb +77 -0
  131. data/spec/conceptql/operators/union_spec.rb +21 -0
  132. data/spec/conceptql/operators/visit_occurrence_spec.rb +10 -0
  133. data/spec/conceptql/query_spec.rb +10 -9
  134. data/spec/conceptql/tree_spec.rb +24 -28
  135. data/spec/doubles/stream_for_casting_double.rb +1 -1
  136. data/spec/doubles/stream_for_occurrence_double.rb +1 -1
  137. data/spec/doubles/stream_for_temporal_double.rb +1 -1
  138. data/spec/spec_helper.rb +74 -58
  139. metadata +202 -133
  140. data/lib/conceptql/nodes/after.rb +0 -12
  141. data/lib/conceptql/nodes/before.rb +0 -11
  142. data/lib/conceptql/nodes/concept.rb +0 -38
  143. data/lib/conceptql/nodes/count.rb +0 -23
  144. data/lib/conceptql/nodes/cpt.rb +0 -20
  145. data/lib/conceptql/nodes/death.rb +0 -19
  146. data/lib/conceptql/nodes/define.rb +0 -96
  147. data/lib/conceptql/nodes/drug_type_concept.rb +0 -18
  148. data/lib/conceptql/nodes/equal.rb +0 -11
  149. data/lib/conceptql/nodes/except.rb +0 -11
  150. data/lib/conceptql/nodes/hcpcs.rb +0 -20
  151. data/lib/conceptql/nodes/icd10.rb +0 -23
  152. data/lib/conceptql/nodes/icd9.rb +0 -23
  153. data/lib/conceptql/nodes/icd9_procedure.rb +0 -20
  154. data/lib/conceptql/nodes/loinc.rb +0 -20
  155. data/lib/conceptql/nodes/numeric.rb +0 -40
  156. data/lib/conceptql/nodes/occurrence.rb +0 -49
  157. data/lib/conceptql/nodes/pass_thru.rb +0 -11
  158. data/lib/conceptql/nodes/person_filter.rb +0 -12
  159. data/lib/conceptql/nodes/procedure_occurrence.rb +0 -21
  160. data/lib/conceptql/nodes/recall.rb +0 -50
  161. data/lib/conceptql/nodes/rxnorm.rb +0 -20
  162. data/lib/conceptql/nodes/snomed.rb +0 -19
  163. data/lib/conceptql/nodes/visit.rb +0 -11
  164. data/spec/conceptql/nodes/after_spec.rb +0 -18
  165. data/spec/conceptql/nodes/before_spec.rb +0 -18
  166. data/spec/conceptql/nodes/complement_spec.rb +0 -15
  167. data/spec/conceptql/nodes/concept_spec.rb +0 -34
  168. data/spec/conceptql/nodes/cpt_spec.rb +0 -31
  169. data/spec/conceptql/nodes/date_range_spec.rb +0 -35
  170. data/spec/conceptql/nodes/death_spec.rb +0 -12
  171. data/spec/conceptql/nodes/during_spec.rb +0 -32
  172. data/spec/conceptql/nodes/except_spec.rb +0 -18
  173. data/spec/conceptql/nodes/first_spec.rb +0 -37
  174. data/spec/conceptql/nodes/from_spec.rb +0 -15
  175. data/spec/conceptql/nodes/gender_spec.rb +0 -29
  176. data/spec/conceptql/nodes/hcpcs_spec.rb +0 -31
  177. data/spec/conceptql/nodes/icd10_spec.rb +0 -36
  178. data/spec/conceptql/nodes/icd9_procedure_spec.rb +0 -31
  179. data/spec/conceptql/nodes/icd9_spec.rb +0 -36
  180. data/spec/conceptql/nodes/intersect_spec.rb +0 -33
  181. data/spec/conceptql/nodes/last_spec.rb +0 -38
  182. data/spec/conceptql/nodes/loinc_spec.rb +0 -31
  183. data/spec/conceptql/nodes/occurrence_spec.rb +0 -89
  184. data/spec/conceptql/nodes/person_filter_spec.rb +0 -18
  185. data/spec/conceptql/nodes/person_spec.rb +0 -12
  186. data/spec/conceptql/nodes/procedure_occurrence_spec.rb +0 -12
  187. data/spec/conceptql/nodes/query_double.rb +0 -19
  188. data/spec/conceptql/nodes/race_spec.rb +0 -23
  189. data/spec/conceptql/nodes/rxnorm_spec.rb +0 -31
  190. data/spec/conceptql/nodes/snomed_spec.rb +0 -31
  191. data/spec/conceptql/nodes/source_vocabulary_node_spec.rb +0 -37
  192. data/spec/conceptql/nodes/standard_vocabulary_node_spec.rb +0 -40
  193. data/spec/conceptql/nodes/started_by_spec.rb +0 -25
  194. data/spec/conceptql/nodes/time_window_spec.rb +0 -85
  195. data/spec/conceptql/nodes/union_spec.rb +0 -25
  196. data/spec/conceptql/nodes/visit_occurrence_spec.rb +0 -12
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
- require 'conceptql/nodes/source_vocabulary_node'
3
-
4
- describe ConceptQL::Nodes::SourceVocabularyNode do
5
- it 'behaves itself' do
6
- ConceptQL::Nodes::SourceVocabularyNode.new.must_behave_like(:evaluator)
7
- end
8
-
9
- class SourceVocabularyDouble < ConceptQL::Nodes::SourceVocabularyNode
10
- def table
11
- :table
12
- end
13
-
14
- def source_column
15
- :source_column
16
- end
17
-
18
- def concept_column
19
- :concept_column
20
- end
21
-
22
- def vocabulary_id
23
- 1
24
- end
25
- end
26
-
27
- describe '#query' do
28
- it 'works for single values' do
29
- SourceVocabularyDouble.new('value').query(Sequel.mock).sql.must_equal "SELECT * FROM table AS tab INNER JOIN vocabulary.source_to_concept_map AS scm ON (scm.target_concept_id = tab.concept_column) WHERE ((scm.source_code IN ('value')) AND (scm.source_vocabulary_id = 1) AND (scm.source_code = tab.source_column))"
30
- end
31
-
32
- it 'works for multiple values' do
33
- SourceVocabularyDouble.new('value1', 'value2').query(Sequel.mock).sql.must_equal "SELECT * FROM table AS tab INNER JOIN vocabulary.source_to_concept_map AS scm ON (scm.target_concept_id = tab.concept_column) WHERE ((scm.source_code IN ('value1', 'value2')) AND (scm.source_vocabulary_id = 1) AND (scm.source_code = tab.source_column))"
34
- end
35
- end
36
- end
37
-
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
- require 'conceptql/nodes/standard_vocabulary_node'
3
-
4
- describe ConceptQL::Nodes::StandardVocabularyNode do
5
- it 'behaves itself' do
6
- ConceptQL::Nodes::StandardVocabularyNode.new.must_behave_like(:evaluator)
7
- end
8
-
9
- class StandardVocabularyDouble < ConceptQL::Nodes::StandardVocabularyNode
10
- def table
11
- :table
12
- end
13
-
14
- def concept_column
15
- :concept_column
16
- end
17
-
18
- def vocabulary_id
19
- 1
20
- end
21
- end
22
-
23
- describe StandardVocabularyDouble do
24
- it 'behaves itself' do
25
- StandardVocabularyDouble.new.must_behave_like(:standard_vocabulary_node)
26
- end
27
- end
28
-
29
- describe '#query' do
30
- it 'works for single values' do
31
- StandardVocabularyDouble.new('value').query(Sequel.mock).sql.must_equal "SELECT * FROM table AS tab INNER JOIN vocabulary.concept AS c ON (c.concept_id = tab.concept_column) WHERE ((c.concept_code IN ('value')) AND (c.vocabulary_id = 1))"
32
- end
33
-
34
- it 'works for multiple diagnoses' do
35
- StandardVocabularyDouble.new('value1', 'value2').query(Sequel.mock).sql.must_equal "SELECT * FROM table AS tab INNER JOIN vocabulary.concept AS c ON (c.concept_id = tab.concept_column) WHERE ((c.concept_code IN ('value1', 'value2')) AND (c.vocabulary_id = 1))"
36
- end
37
- end
38
- end
39
-
40
-
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
- require 'conceptql/nodes/started_by'
3
- require_double('stream_for_temporal')
4
-
5
- describe ConceptQL::Nodes::StartedBy do
6
- it 'behaves itself' do
7
- ConceptQL::Nodes::StartedBy.new.must_behave_like(:temporal_node)
8
- end
9
-
10
- subject do
11
- ConceptQL::Nodes::StartedBy.new(left: StreamForTemporalDouble.new, right: StreamForTemporalDouble.new)
12
- end
13
-
14
- it 'should use proper where clause' do
15
- subject.query(Sequel.mock).sql.must_match 'l.start_date = r.start_date'
16
- subject.query(Sequel.mock).sql.must_match 'l.end_date > r.end_date'
17
- end
18
-
19
- it 'should use proper where clause when inclusive' do
20
- sub = ConceptQL::Nodes::StartedBy.new(left: StreamForTemporalDouble.new, right: StreamForTemporalDouble.new, inclusive: true)
21
- sub.query(Sequel.mock).sql.must_match 'l.start_date = r.start_date'
22
- sub.query(Sequel.mock).sql.must_match 'l.end_date >= r.end_date'
23
- end
24
- end
25
-
@@ -1,85 +0,0 @@
1
- require 'spec_helper'
2
- require 'conceptql/nodes/time_window'
3
- require 'conceptql/nodes/node'
4
-
5
- describe ConceptQL::Nodes::TimeWindow do
6
- class Stream4TimeWindowDouble < ConceptQL::Nodes::Node
7
- def types
8
- [:visit_occurrence]
9
- end
10
-
11
- def query(db)
12
- db.from(:table)
13
- end
14
- end
15
-
16
- before do
17
- @db_mock = Sequel.mock
18
- @sequel_mock = Minitest::Mock.new
19
- @sequel_mock.expect :expr, @sequel_mock, [:start_date]
20
- @sequel_mock.expect :expr, @sequel_mock, [:end_date]
21
- @sequel_mock.expect :as, @sequel_mock, [:start_date]
22
- @sequel_mock.expect :as, @sequel_mock, [:end_date]
23
- end
24
-
25
- describe '#evaluate' do
26
- it 'adjusts start by 1 day' do
27
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, days: 1]
28
-
29
- stub_const(ConceptQL::Nodes::TimeWindow, :Sequel, @sequel_mock) do
30
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: 'd', end: '' }).evaluate(@db_mock)
31
- end
32
- @sequel_mock.verify
33
- end
34
-
35
- it 'adjusts start by 1 day' do
36
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, days: 1]
37
- stub_const(ConceptQL::Nodes::TimeWindow, :Sequel, @sequel_mock) do
38
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: '', end: 'd' }).evaluate(@db_mock)
39
- end
40
- @sequel_mock.verify
41
- end
42
-
43
- it 'adjusts both values by 1 day' do
44
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, days: 1]
45
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, days: 1]
46
- stub_const(ConceptQL::Nodes::TimeWindow, :Sequel, @sequel_mock) do
47
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: 'd', end: 'd' }).evaluate(@db_mock)
48
- end
49
- @sequel_mock.verify
50
- end
51
-
52
- it 'makes multiple adjustments to both values' do
53
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, days: 1]
54
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, months: 1]
55
- @sequel_mock.expect :date_add, @sequel_mock, [@sequel_mock, years: 1]
56
-
57
- @sequel_mock.expect :date_sub, @sequel_mock, [@sequel_mock, days: 1]
58
- @sequel_mock.expect :date_sub, @sequel_mock, [@sequel_mock, months: 1]
59
- @sequel_mock.expect :date_sub, @sequel_mock, [@sequel_mock, years: 1]
60
-
61
- stub_const(ConceptQL::Nodes::TimeWindow, :Sequel, @sequel_mock) do
62
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: 'dmy', end: '-d-m-y' }).evaluate(@db_mock)
63
- end
64
- @sequel_mock.verify
65
- end
66
-
67
- it 'can set start_date to be end_date' do
68
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: 'end', end: '' }).evaluate(@db_mock)
69
- end
70
-
71
- it 'can set end_date to be start_date' do
72
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: '', end: 'start' }).evaluate(@db_mock)
73
- end
74
-
75
- it 'will swap start and end dates, though this is a bad idea but you should probably know about this' do
76
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: 'end', end: 'start' }).evaluate(@db_mock)
77
- end
78
-
79
- it 'handles nil arguments to both start and end' do
80
- ConceptQL::Nodes::TimeWindow.new(Stream4TimeWindowDouble.new, { start: nil, end: nil }).evaluate(@db_mock)
81
- end
82
- end
83
- end
84
-
85
-
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
- require 'conceptql/nodes/union'
3
- require_relative 'query_double'
4
-
5
- describe ConceptQL::Nodes::Union do
6
- it 'behaves itself' do
7
- ConceptQL::Nodes::Union.new.must_behave_like(:evaluator)
8
- end
9
-
10
- describe '#query' do
11
- it 'works for multiple criteria' do
12
- double1 = QueryDouble.new(1)
13
- double2 = QueryDouble.new(2)
14
- double3 = QueryDouble.new(3)
15
- double1.must_behave_like(:evaluator)
16
- ConceptQL::Nodes::Union.new(double1, double2, double3).query(Sequel.mock).sql.must_equal "SELECT * FROM (SELECT * FROM (SELECT * FROM table1 UNION ALL SELECT * FROM table2) AS t1 UNION ALL SELECT * FROM table3) AS t1"
17
- end
18
-
19
- it 'works for single criteria' do
20
- double1 = QueryDouble.new(1)
21
- double1.must_behave_like(:evaluator)
22
- ConceptQL::Nodes::Union.new(double1).query(Sequel.mock).sql.must_equal "SELECT * FROM table1"
23
- end
24
- end
25
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
- require 'conceptql/nodes/visit_occurrence'
3
- require_double('stream_for_casting')
4
-
5
- describe ConceptQL::Nodes::CastingNode do
6
- it 'behaves itself' do
7
- ConceptQL::Nodes::VisitOccurrence.new.must_behave_like(:casting_node)
8
- end
9
- end
10
-
11
-
12
-