quby 4.0.3 → 5.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|