quby 4.0.3 → 5.0.0.pre1
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 +4 -4
- data/lib/quby/questionnaires.rb +1 -0
- data/lib/quby/questionnaires/api.rb +5 -1
- data/lib/quby/questionnaires/deserializer.rb +433 -0
- data/lib/quby/questionnaires/dsl.rb +10 -15
- data/lib/quby/questionnaires/entities.rb +1 -0
- data/lib/quby/questionnaires/entities/charting/line_chart.rb +23 -0
- data/lib/quby/questionnaires/entities/charting/overview_chart.rb +3 -1
- data/lib/quby/questionnaires/entities/definition.rb +3 -5
- data/lib/quby/questionnaires/entities/fields.rb +0 -15
- data/lib/quby/questionnaires/entities/question.rb +9 -32
- data/lib/quby/questionnaires/entities/questionnaire.rb +4 -15
- data/lib/quby/questionnaires/entities/questions/checkbox_question.rb +0 -24
- data/lib/quby/questionnaires/entities/questions/date_question.rb +0 -8
- data/lib/quby/questionnaires/entities/score_calculation.rb +36 -3
- data/lib/quby/questionnaires/repos.rb +1 -0
- data/lib/quby/questionnaires/repos/bundle_disk_repo.rb +51 -0
- data/lib/quby/version.rb +1 -1
- data/spec/internal/log/test-events.log +166 -0
- data/spec/internal/log/test.log +6170 -0
- data/spec/internal/tmp/capybara/screenshot_2020-10-27-14-25-21.063.html +207 -0
- data/spec/internal/tmp/capybara/screenshot_2020-10-27-14-25-21.063.png +0 -0
- data/spec/quby/answers/services/answer_validations_spec.rb +8 -8
- data/spec/quby/questionnaires/deserializer/questionnaire_spec.rb +237 -0
- data/spec/quby/questionnaires/dsl_spec.rb +0 -9
- data/spec/quby/questionnaires/entities/fields_spec.rb +3 -3
- data/spec/quby/questionnaires/entities/question_spec.rb +0 -8
- data/spec/quby/questionnaires/entities/questionnaire_spec.rb +2 -26
- data/spec/quby/table_backend/range_tree_spec.rb +7 -0
- data/spec/spec_helper.rb +1 -0
- metadata +25 -46
- data/lib/quby/questionnaires/dsl/base.rb +0 -20
- data/lib/quby/questionnaires/dsl/calls_custom_methods.rb +0 -29
- data/lib/quby/questionnaires/dsl/charting/bar_chart_builder.rb +0 -18
- data/lib/quby/questionnaires/dsl/charting/chart_builder.rb +0 -91
- data/lib/quby/questionnaires/dsl/charting/line_chart_builder.rb +0 -57
- data/lib/quby/questionnaires/dsl/charting/overview_chart_builder.rb +0 -31
- data/lib/quby/questionnaires/dsl/charting/radar_chart_builder.rb +0 -18
- data/lib/quby/questionnaires/dsl/helpers.rb +0 -51
- data/lib/quby/questionnaires/dsl/panel_builder.rb +0 -80
- data/lib/quby/questionnaires/dsl/question_builder.rb +0 -40
- data/lib/quby/questionnaires/dsl/questionnaire_builder.rb +0 -252
- data/lib/quby/questionnaires/dsl/questions/base.rb +0 -179
- data/lib/quby/questionnaires/dsl/questions/checkbox_question_builder.rb +0 -20
- data/lib/quby/questionnaires/dsl/questions/date_question_builder.rb +0 -18
- data/lib/quby/questionnaires/dsl/questions/deprecated_question_builder.rb +0 -18
- data/lib/quby/questionnaires/dsl/questions/float_question_builder.rb +0 -21
- data/lib/quby/questionnaires/dsl/questions/integer_question_builder.rb +0 -21
- data/lib/quby/questionnaires/dsl/questions/radio_question_builder.rb +0 -20
- data/lib/quby/questionnaires/dsl/questions/select_question_builder.rb +0 -18
- data/lib/quby/questionnaires/dsl/questions/string_question_builder.rb +0 -20
- data/lib/quby/questionnaires/dsl/questions/text_question_builder.rb +0 -22
- data/lib/quby/questionnaires/dsl/score_builder.rb +0 -22
- data/lib/quby/questionnaires/dsl/standardized_panel_generators.rb +0 -33
- data/lib/quby/questionnaires/dsl/table_builder.rb +0 -48
- data/lib/quby/questionnaires/services/definition_validator.rb +0 -298
- data/spec/quby/questionnaires/dsl/calls_custom_methods_spec.rb +0 -38
- data/spec/quby/questionnaires/dsl/charting/bar_chart_builder_spec.rb +0 -41
- data/spec/quby/questionnaires/dsl/charting/chart_builder_spec.rb +0 -127
- data/spec/quby/questionnaires/dsl/charting/line_chart_builder_spec.rb +0 -66
- data/spec/quby/questionnaires/dsl/charting/radar_chart_builder_spec.rb +0 -41
- data/spec/quby/questionnaires/dsl/helpers_spec.rb +0 -80
- data/spec/quby/questionnaires/dsl/questionnaire_builder_spec.rb +0 -480
- data/spec/quby/questionnaires/services/definition_validator_spec.rb +0 -793
- data/spec/support/examples_for_chart_builders.rb +0 -59
@@ -8,15 +8,6 @@ module Quby::Questionnaires
|
|
8
8
|
definition = repo.find('simple')
|
9
9
|
expect(described_class.build_from_definition(definition)).to be_instance_of(Entities::Questionnaire)
|
10
10
|
end
|
11
|
-
|
12
|
-
it 'uses a path on instance eval, so we get correct stack traces' do
|
13
|
-
definition = Quby::Questionnaires::Entities::Definition.new(key: 'test',
|
14
|
-
sourcecode: 'raise("problem")',
|
15
|
-
path: 'spec/fixtures/raising.rb')
|
16
|
-
expected_backtrace = include(end_with("spec/fixtures/raising.rb:1:in `block in build_from_definition'"))
|
17
|
-
expect { described_class.build_from_definition(definition) }.to \
|
18
|
-
raise_exception(having_attributes(backtrace: expected_backtrace))
|
19
|
-
end
|
20
11
|
end
|
21
12
|
end
|
22
13
|
end
|
@@ -82,8 +82,8 @@ module Quby::Questionnaires::Entities
|
|
82
82
|
end
|
83
83
|
|
84
84
|
describe '#description_for_variable' do
|
85
|
-
let(:
|
86
|
-
|
85
|
+
let(:questionnaire) do
|
86
|
+
Quby::Questionnaires::DSL.build("test") do
|
87
87
|
flag key: :flagtest, description_true: 'it true', description_false: 'it false', description: 'it described'
|
88
88
|
textvar key: :textvartest, description: 'tv description'
|
89
89
|
question :v_1, type: :radio, title: 'select a few'
|
@@ -105,7 +105,7 @@ module Quby::Questionnaires::Entities
|
|
105
105
|
score_schema :tot, 'Total', [{key: :value, export_key: 'tot', label: 'Score'},
|
106
106
|
{key: :interpretation, export_key: 'tot_i', label: 'Interpretation'}]
|
107
107
|
|
108
|
-
|
108
|
+
end
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'returns question context free titles if the variable is a question' do
|
@@ -42,14 +42,6 @@ module Quby::Questionnaires::Entities
|
|
42
42
|
let(:valid_question_options) { {type: :string} }
|
43
43
|
subject(:question) { Question.new(:v_1, valid_question_options) }
|
44
44
|
|
45
|
-
it 'validates the key to be a symbol' do
|
46
|
-
questionnaire = Quby::Questionnaires::DSL.build("test2") do
|
47
|
-
question "key", type: :radio
|
48
|
-
end
|
49
|
-
expect(questionnaire.questions.first.valid?).to eq false
|
50
|
-
expect(questionnaire.questions.first.errors.full_messages).to eq ["Key Is not of type Symbol"]
|
51
|
-
end
|
52
|
-
|
53
45
|
describe 'sbg_key' do
|
54
46
|
it 'can be set by options hash' do
|
55
47
|
expect(questionnaire.question_hash[:date].sbg_key).to eq 'foo'
|
@@ -432,30 +432,6 @@ module Quby::Questionnaires::Entities
|
|
432
432
|
end
|
433
433
|
end
|
434
434
|
|
435
|
-
describe '#ensure_scores_have_schemas' do
|
436
|
-
let(:score_missing_schema_quest) do
|
437
|
-
Quby::Questionnaires::DSL.build("test") do
|
438
|
-
question :v_1, type: :date, title: 'vraag'
|
439
|
-
|
440
|
-
score(:key, label: 'score') { {value: 'oh no'} }
|
441
|
-
score(:key2, label: 'score2', schema: [{key: :value, label: 'Score', export_key: :key2}]) { {value: 'oh'} }
|
442
|
-
score(:key3, label: 'score3') { {value: 'oh no'} }
|
443
|
-
end
|
444
|
-
end
|
445
|
-
|
446
|
-
it 'does not validate presense of score schemas by default' do
|
447
|
-
expect(score_missing_schema_quest.errors.full_messages).to be_blank
|
448
|
-
end
|
449
|
-
|
450
|
-
describe 'if quby settings require_score_schemas is true' do
|
451
|
-
before { Quby::Settings.require_score_schemas = true }
|
452
|
-
it 'validates every score has a score schema' do
|
453
|
-
expect(score_missing_schema_quest.errors.full_messages).to eq(["Score key is missing a score schema",
|
454
|
-
"Score key3 is missing a score schema"])
|
455
|
-
end
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
435
|
describe '#add_outcome_table' do
|
460
436
|
let(:questionnaire) do
|
461
437
|
Quby::Questionnaires::DSL.build("test") do
|
@@ -488,8 +464,8 @@ module Quby::Questionnaires::Entities
|
|
488
464
|
{"fieldKey" => :v_2, "type" => :requires_answer, "explanation" => nil},
|
489
465
|
# a float type automatically adds a validation that the data entered must be parseable as a float
|
490
466
|
{"fieldKey" => :v_2, "type" => :valid_float, "explanation" => nil},
|
491
|
-
{"fieldKey" => :v_2, "type" => :minimum, "subtype" => :number, "value" => 5},
|
492
|
-
{"fieldKey" => :v_2, "type" => :maximum, "subtype" => :number, "value" => 10}
|
467
|
+
{"fieldKey" => :v_2, "type" => :minimum, "subtype" => :number, "value" => 5, "explanation" => nil},
|
468
|
+
{"fieldKey" => :v_2, "type" => :maximum, "subtype" => :number, "value" => 10, "explanation" => nil}
|
493
469
|
])
|
494
470
|
end
|
495
471
|
|
@@ -101,6 +101,13 @@ describe Quby::TableBackend::RangeTree do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
+
describe 'array leaves' do
|
105
|
+
it 'returns the leaf fully' do
|
106
|
+
tree = described_class.new levels: ['key', 'leaf'], tree: {a: [1, 2, 3], b: [9, 8, 7]}
|
107
|
+
expect(tree.lookup(key: :a)).to eq([1, 2, 3])
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
104
111
|
describe 'parameter validation' do
|
105
112
|
it 'raises when parameter keys do not match header keys' do
|
106
113
|
params = {foo: :bar}
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marten Veldthuis
|
@@ -537,6 +537,20 @@ dependencies:
|
|
537
537
|
- - "~>"
|
538
538
|
- !ruby/object:Gem::Version
|
539
539
|
version: 0.9.0
|
540
|
+
- !ruby/object:Gem::Dependency
|
541
|
+
name: quby-compiler
|
542
|
+
requirement: !ruby/object:Gem::Requirement
|
543
|
+
requirements:
|
544
|
+
- - ">="
|
545
|
+
- !ruby/object:Gem::Version
|
546
|
+
version: '0'
|
547
|
+
type: :development
|
548
|
+
prerelease: false
|
549
|
+
version_requirements: !ruby/object:Gem::Requirement
|
550
|
+
requirements:
|
551
|
+
- - ">="
|
552
|
+
- !ruby/object:Gem::Version
|
553
|
+
version: '0'
|
540
554
|
description: Quby is a Rails engine that can render and update answers for questionnaires
|
541
555
|
defined in a custom DSL.
|
542
556
|
email:
|
@@ -742,31 +756,8 @@ files:
|
|
742
756
|
- lib/quby/pdf_renderer.rb
|
743
757
|
- lib/quby/questionnaires.rb
|
744
758
|
- lib/quby/questionnaires/api.rb
|
759
|
+
- lib/quby/questionnaires/deserializer.rb
|
745
760
|
- lib/quby/questionnaires/dsl.rb
|
746
|
-
- lib/quby/questionnaires/dsl/base.rb
|
747
|
-
- lib/quby/questionnaires/dsl/calls_custom_methods.rb
|
748
|
-
- lib/quby/questionnaires/dsl/charting/bar_chart_builder.rb
|
749
|
-
- lib/quby/questionnaires/dsl/charting/chart_builder.rb
|
750
|
-
- lib/quby/questionnaires/dsl/charting/line_chart_builder.rb
|
751
|
-
- lib/quby/questionnaires/dsl/charting/overview_chart_builder.rb
|
752
|
-
- lib/quby/questionnaires/dsl/charting/radar_chart_builder.rb
|
753
|
-
- lib/quby/questionnaires/dsl/helpers.rb
|
754
|
-
- lib/quby/questionnaires/dsl/panel_builder.rb
|
755
|
-
- lib/quby/questionnaires/dsl/question_builder.rb
|
756
|
-
- lib/quby/questionnaires/dsl/questionnaire_builder.rb
|
757
|
-
- lib/quby/questionnaires/dsl/questions/base.rb
|
758
|
-
- lib/quby/questionnaires/dsl/questions/checkbox_question_builder.rb
|
759
|
-
- lib/quby/questionnaires/dsl/questions/date_question_builder.rb
|
760
|
-
- lib/quby/questionnaires/dsl/questions/deprecated_question_builder.rb
|
761
|
-
- lib/quby/questionnaires/dsl/questions/float_question_builder.rb
|
762
|
-
- lib/quby/questionnaires/dsl/questions/integer_question_builder.rb
|
763
|
-
- lib/quby/questionnaires/dsl/questions/radio_question_builder.rb
|
764
|
-
- lib/quby/questionnaires/dsl/questions/select_question_builder.rb
|
765
|
-
- lib/quby/questionnaires/dsl/questions/string_question_builder.rb
|
766
|
-
- lib/quby/questionnaires/dsl/questions/text_question_builder.rb
|
767
|
-
- lib/quby/questionnaires/dsl/score_builder.rb
|
768
|
-
- lib/quby/questionnaires/dsl/standardized_panel_generators.rb
|
769
|
-
- lib/quby/questionnaires/dsl/table_builder.rb
|
770
761
|
- lib/quby/questionnaires/entities.rb
|
771
762
|
- lib/quby/questionnaires/entities/charting/bar_chart.rb
|
772
763
|
- lib/quby/questionnaires/entities/charting/chart.rb
|
@@ -803,9 +794,9 @@ files:
|
|
803
794
|
- lib/quby/questionnaires/entities/visibility_rule.rb
|
804
795
|
- lib/quby/questionnaires/repos.rb
|
805
796
|
- lib/quby/questionnaires/repos/base.rb
|
797
|
+
- lib/quby/questionnaires/repos/bundle_disk_repo.rb
|
806
798
|
- lib/quby/questionnaires/repos/disk_repo.rb
|
807
799
|
- lib/quby/questionnaires/repos/memory_repo.rb
|
808
|
-
- lib/quby/questionnaires/services/definition_validator.rb
|
809
800
|
- lib/quby/questionnaires/specs.rb
|
810
801
|
- lib/quby/questionnaires/specs/api_specs.rb
|
811
802
|
- lib/quby/questionnaires/specs/repo_specs.rb
|
@@ -6333,6 +6324,8 @@ files:
|
|
6333
6324
|
- spec/internal/tmp/capybara/screenshot_2020-10-22-10-23-49.678.png
|
6334
6325
|
- spec/internal/tmp/capybara/screenshot_2020-10-22-10-23-52.495.html
|
6335
6326
|
- spec/internal/tmp/capybara/screenshot_2020-10-22-10-23-52.495.png
|
6327
|
+
- spec/internal/tmp/capybara/screenshot_2020-10-27-14-25-21.063.html
|
6328
|
+
- spec/internal/tmp/capybara/screenshot_2020-10-27-14-25-21.063.png
|
6336
6329
|
- spec/javascripts/ajax_callbacks_spec.coffee
|
6337
6330
|
- spec/javascripts/flag_spec.coffee
|
6338
6331
|
- spec/javascripts/flags_collection_spec.coffee
|
@@ -6370,13 +6363,7 @@ files:
|
|
6370
6363
|
- spec/quby/lookup_table_spec.rb
|
6371
6364
|
- spec/quby/markdown_parser_spec.rb
|
6372
6365
|
- spec/quby/pdf_renderer_spec.rb
|
6373
|
-
- spec/quby/questionnaires/
|
6374
|
-
- spec/quby/questionnaires/dsl/charting/bar_chart_builder_spec.rb
|
6375
|
-
- spec/quby/questionnaires/dsl/charting/chart_builder_spec.rb
|
6376
|
-
- spec/quby/questionnaires/dsl/charting/line_chart_builder_spec.rb
|
6377
|
-
- spec/quby/questionnaires/dsl/charting/radar_chart_builder_spec.rb
|
6378
|
-
- spec/quby/questionnaires/dsl/helpers_spec.rb
|
6379
|
-
- spec/quby/questionnaires/dsl/questionnaire_builder_spec.rb
|
6366
|
+
- spec/quby/questionnaires/deserializer/questionnaire_spec.rb
|
6380
6367
|
- spec/quby/questionnaires/dsl_spec.rb
|
6381
6368
|
- spec/quby/questionnaires/entities/charting/bar_chart_spec.rb
|
6382
6369
|
- spec/quby/questionnaires/entities/charting/chart_spec.rb
|
@@ -6398,7 +6385,6 @@ files:
|
|
6398
6385
|
- spec/quby/questionnaires/entities/textvar_spec.rb
|
6399
6386
|
- spec/quby/questionnaires/repos/disk_repo_spec.rb
|
6400
6387
|
- spec/quby/questionnaires/repos/memory_repo_spec.rb
|
6401
|
-
- spec/quby/questionnaires/services/definition_validator_spec.rb
|
6402
6388
|
- spec/quby/range_categories_spec.rb
|
6403
6389
|
- spec/quby/table_backend/range_tree_spec.rb
|
6404
6390
|
- spec/rcov.opts
|
@@ -6407,7 +6393,6 @@ files:
|
|
6407
6393
|
- spec/spec_helper.rb
|
6408
6394
|
- spec/support/engine_controller_testing.rb
|
6409
6395
|
- spec/support/examples_for_chart.rb
|
6410
|
-
- spec/support/examples_for_chart_builders.rb
|
6411
6396
|
- spec/support/feature_helpers.rb
|
6412
6397
|
- spec/support/javascript_numericality_validations.rb
|
6413
6398
|
- spec/support/questionnaire_helpers.rb
|
@@ -6465,9 +6450,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
6465
6450
|
version: '2.0'
|
6466
6451
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
6467
6452
|
requirements:
|
6468
|
-
- - "
|
6453
|
+
- - ">"
|
6469
6454
|
- !ruby/object:Gem::Version
|
6470
|
-
version:
|
6455
|
+
version: 1.3.1
|
6471
6456
|
requirements: []
|
6472
6457
|
rubygems_version: 3.1.4
|
6473
6458
|
signing_key:
|
@@ -6479,15 +6464,8 @@ test_files:
|
|
6479
6464
|
- spec/quby/i18n_spec.rb
|
6480
6465
|
- spec/quby/questionnaires/repos/memory_repo_spec.rb
|
6481
6466
|
- spec/quby/questionnaires/repos/disk_repo_spec.rb
|
6467
|
+
- spec/quby/questionnaires/deserializer/questionnaire_spec.rb
|
6482
6468
|
- spec/quby/questionnaires/dsl_spec.rb
|
6483
|
-
- spec/quby/questionnaires/dsl/questionnaire_builder_spec.rb
|
6484
|
-
- spec/quby/questionnaires/dsl/helpers_spec.rb
|
6485
|
-
- spec/quby/questionnaires/dsl/charting/chart_builder_spec.rb
|
6486
|
-
- spec/quby/questionnaires/dsl/charting/line_chart_builder_spec.rb
|
6487
|
-
- spec/quby/questionnaires/dsl/charting/radar_chart_builder_spec.rb
|
6488
|
-
- spec/quby/questionnaires/dsl/charting/bar_chart_builder_spec.rb
|
6489
|
-
- spec/quby/questionnaires/dsl/calls_custom_methods_spec.rb
|
6490
|
-
- spec/quby/questionnaires/services/definition_validator_spec.rb
|
6491
6469
|
- spec/quby/questionnaires/entities/outcome_table_spec.rb
|
6492
6470
|
- spec/quby/questionnaires/entities/textvar_spec.rb
|
6493
6471
|
- spec/quby/questionnaires/entities/sub_score_schema_spec.rb
|
@@ -10864,6 +10842,7 @@ test_files:
|
|
10864
10842
|
- spec/internal/tmp/capybara/screenshot_2020-07-10-09-51-51.554.html
|
10865
10843
|
- spec/internal/tmp/capybara/screenshot_2020-05-20-16-42-30.602.html
|
10866
10844
|
- spec/internal/tmp/capybara/screenshot_2020-07-10-09-52-10.631.png
|
10845
|
+
- spec/internal/tmp/capybara/screenshot_2020-10-27-14-25-21.063.png
|
10867
10846
|
- spec/internal/tmp/capybara/screenshot_2020-10-19-17-52-57.803.html
|
10868
10847
|
- spec/internal/tmp/capybara/screenshot_2020-07-10-09-51-48.849.html
|
10869
10848
|
- spec/internal/tmp/capybara/screenshot_2020-10-22-10-23-41.012.html
|
@@ -11022,6 +11001,7 @@ test_files:
|
|
11022
11001
|
- spec/internal/tmp/capybara/screenshot_2020-08-20-11-34-12.962.png
|
11023
11002
|
- spec/internal/tmp/capybara/screenshot_2020-10-19-16-04-07.136.png
|
11024
11003
|
- spec/internal/tmp/capybara/screenshot_2020-10-19-18-32-38.667.png
|
11004
|
+
- spec/internal/tmp/capybara/screenshot_2020-10-27-14-25-21.063.html
|
11025
11005
|
- spec/internal/tmp/capybara/screenshot_2020-10-19-16-04-04.546.png
|
11026
11006
|
- spec/internal/tmp/capybara/screenshot_2020-10-19-17-46-33.383.png
|
11027
11007
|
- spec/internal/tmp/capybara/screenshot_2020-08-20-11-33-55.775.html
|
@@ -12029,7 +12009,6 @@ test_files:
|
|
12029
12009
|
- spec/rcov.opts
|
12030
12010
|
- spec/requests/quby/answers_spec.rb
|
12031
12011
|
- spec/support/examples_for_chart.rb
|
12032
|
-
- spec/support/examples_for_chart_builders.rb
|
12033
12012
|
- spec/support/testsuite_controller.rb
|
12034
12013
|
- spec/support/questionnaire_helpers.rb
|
12035
12014
|
- spec/support/javascript_numericality_validations.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'quby/questionnaires/dsl/helpers'
|
4
|
-
require 'quby/questionnaires/dsl/calls_custom_methods'
|
5
|
-
|
6
|
-
module Quby
|
7
|
-
module Questionnaires
|
8
|
-
module DSL
|
9
|
-
class Base
|
10
|
-
include Helpers
|
11
|
-
|
12
|
-
def self.build(*args, &block)
|
13
|
-
builder = new(*args)
|
14
|
-
builder.instance_eval(&block) if block
|
15
|
-
builder.build
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Quby
|
4
|
-
module Questionnaires
|
5
|
-
module DSL
|
6
|
-
module CallsCustomMethods
|
7
|
-
attr_reader :custom_methods
|
8
|
-
|
9
|
-
def initialize(*args)
|
10
|
-
options = args.last.is_a?(::Hash) ? args.last : {}
|
11
|
-
@custom_methods = options[:custom_methods] || {}
|
12
|
-
super
|
13
|
-
end
|
14
|
-
|
15
|
-
def method_missing(method_sym, *args, &block)
|
16
|
-
if @custom_methods.key? method_sym
|
17
|
-
instance_exec(*args, &custom_methods[method_sym])
|
18
|
-
else
|
19
|
-
super
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def respond_to_missing?(method_name, include_private = false)
|
24
|
-
custom_methods.key?(method_name) || super
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'quby/questionnaires/entities/charting/bar_chart'
|
4
|
-
require_relative 'chart_builder'
|
5
|
-
|
6
|
-
module Quby
|
7
|
-
module Questionnaires
|
8
|
-
module DSL
|
9
|
-
class BarChartBuilder < ChartBuilder
|
10
|
-
set_chart_class(Entities::Charting::BarChart)
|
11
|
-
|
12
|
-
def plotline(value, color)
|
13
|
-
@chart.plotlines << {value: value, color: color, width: 1, zIndex: 3}
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'quby/questionnaires/entities'
|
4
|
-
|
5
|
-
module Quby
|
6
|
-
module Questionnaires
|
7
|
-
module DSL
|
8
|
-
class ChartBuilder
|
9
|
-
# rubocop:disable AccessorMethodName
|
10
|
-
def self.set_chart_class(chart_class)
|
11
|
-
@chart_class = chart_class
|
12
|
-
end
|
13
|
-
# rubocop:enable AccessorMethodName
|
14
|
-
|
15
|
-
def self.chart_class
|
16
|
-
@chart_class
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize(questionnaire, key, options = {})
|
20
|
-
@chart = self.class.chart_class.new(key, options)
|
21
|
-
@questionnaire = questionnaire
|
22
|
-
end
|
23
|
-
|
24
|
-
def title(title)
|
25
|
-
@chart.title = title
|
26
|
-
end
|
27
|
-
|
28
|
-
def range(range)
|
29
|
-
@chart.y_range = range
|
30
|
-
end
|
31
|
-
|
32
|
-
def tick_interval(tick_interval)
|
33
|
-
@chart.tick_interval = tick_interval
|
34
|
-
end
|
35
|
-
|
36
|
-
def y_categories(y_categories)
|
37
|
-
@chart.y_categories = y_categories
|
38
|
-
end
|
39
|
-
|
40
|
-
def y_range_categories(*y_range_categories)
|
41
|
-
@chart.y_range_categories = RangeCategories.new(*y_range_categories).as_range_hash
|
42
|
-
end
|
43
|
-
|
44
|
-
def plotband(from, to, color)
|
45
|
-
@chart.plotbands << {from: from, to: to, color: color}
|
46
|
-
end
|
47
|
-
|
48
|
-
def plot(key, options = {})
|
49
|
-
unless plottable = @questionnaire.find_plottable(key)
|
50
|
-
fail "Questionnaire #{@questionnaire.key} chart #{@chart.key} references unknown score or question #{key}"
|
51
|
-
end
|
52
|
-
|
53
|
-
configure_options plottable, options
|
54
|
-
|
55
|
-
@chart.plottables << Entities::Charting::Plottable.new(plottable.key, options)
|
56
|
-
end
|
57
|
-
|
58
|
-
def chart_type(type)
|
59
|
-
@chart.chart_type = type
|
60
|
-
end
|
61
|
-
|
62
|
-
def build(&block)
|
63
|
-
instance_eval(&block)
|
64
|
-
validate!
|
65
|
-
@chart
|
66
|
-
end
|
67
|
-
|
68
|
-
def validate!
|
69
|
-
if @chart.y_categories.present? && @chart.y_range.present? &&
|
70
|
-
@chart.y_range != (0..(@chart.y_categories.count - 1))
|
71
|
-
fail ArgumentError, 'Y_categories size and range do not match'
|
72
|
-
end
|
73
|
-
|
74
|
-
true
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
|
79
|
-
def configure_options(plottable, options)
|
80
|
-
case plottable
|
81
|
-
when Entities::ScoreCalculation
|
82
|
-
options.reverse_merge! plottable.options
|
83
|
-
when Entities::Question
|
84
|
-
options[:label] ||= plottable.title
|
85
|
-
end
|
86
|
-
options[:questionnaire_key] = @questionnaire.key
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'quby/questionnaires/entities/charting/line_chart'
|
4
|
-
require_relative 'chart_builder'
|
5
|
-
|
6
|
-
module Quby
|
7
|
-
module Questionnaires
|
8
|
-
module DSL
|
9
|
-
class LineChartBuilder < ChartBuilder
|
10
|
-
set_chart_class(Entities::Charting::LineChart)
|
11
|
-
|
12
|
-
def y_axis_label(label)
|
13
|
-
@chart.y_label = label
|
14
|
-
end
|
15
|
-
|
16
|
-
def tonality(value)
|
17
|
-
@chart.tonality = value
|
18
|
-
end
|
19
|
-
|
20
|
-
# value - Number or a hash `{from_age..to_age => {female: 5, default: 4}, .., default: { default: 3 }}`
|
21
|
-
# block - deprecated.
|
22
|
-
def baseline(value = nil, &block)
|
23
|
-
unless value.nil? ^ block.nil?
|
24
|
-
fail ArgumentError, "Must give either value or a block"
|
25
|
-
end
|
26
|
-
|
27
|
-
if value && value.is_a?(Hash)
|
28
|
-
@chart.baseline = ->(age, gender) {
|
29
|
-
age_match = value.find { |age_range, _v| age && age_range === age }
|
30
|
-
hash_by_gender = (age_match&.last || value.stringify_keys["default"])
|
31
|
-
|
32
|
-
gender_match = hash_by_gender.find {|gender_key, _v| gender && gender_key.to_s == gender.to_s }
|
33
|
-
gender_match&.last || hash_by_gender.stringify_keys['default']
|
34
|
-
}
|
35
|
-
elsif value
|
36
|
-
@chart.baseline = ->(age, gender) { value }
|
37
|
-
end
|
38
|
-
|
39
|
-
if block
|
40
|
-
if block.arity != 2
|
41
|
-
fail ArgumentError, "Given block must take two arguments"
|
42
|
-
end
|
43
|
-
@chart.baseline = block
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def clinically_relevant_change(value)
|
48
|
-
@chart.clinically_relevant_change = value
|
49
|
-
end
|
50
|
-
|
51
|
-
def validate!
|
52
|
-
fail "Chart #{@chart.key} has no range specified" unless @chart.y_range
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|