magicka 0.6.0 → 1.1.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -3
  3. data/.rubocop.yml +8 -1
  4. data/Dockerfile +3 -2
  5. data/README.md +5 -1
  6. data/config/check_specs.yml +0 -2
  7. data/config/yardstick.yml +8 -2
  8. data/lib/magicka/aggregator/method_builder.rb +35 -28
  9. data/lib/magicka/aggregator.rb +16 -8
  10. data/lib/magicka/display.rb +1 -1
  11. data/lib/magicka/element/class_methods.rb +2 -0
  12. data/lib/magicka/element.rb +4 -2
  13. data/lib/magicka/helper/aggregator_options.rb +64 -0
  14. data/lib/magicka/helper/class_methods.rb +10 -2
  15. data/lib/magicka/helper/method_builder.rb +10 -6
  16. data/lib/magicka/helper.rb +12 -6
  17. data/lib/magicka/version.rb +1 -1
  18. data/magicka.gemspec +9 -7
  19. data/spec/dummy/app/controllers/application_controller.rb +1 -0
  20. data/spec/dummy/app/controllers/documents_controller.rb +9 -0
  21. data/spec/dummy/app/models/document.rb +5 -0
  22. data/spec/dummy/app/models/magicka/data_entry.rb +7 -0
  23. data/spec/dummy/app/models/magicka/data_table.rb +6 -0
  24. data/spec/dummy/app/views/documents/show.html.erb +6 -0
  25. data/spec/dummy/app/views/templates/display/_data_entry.html.erb +2 -0
  26. data/spec/dummy/config/environments/development.rb +1 -0
  27. data/spec/dummy/config/initializers/magicka.rb +7 -0
  28. data/spec/dummy/config/routes.rb +1 -0
  29. data/spec/dummy/db/schema.rb +5 -0
  30. data/spec/integration/yard/magicka/helper_spec.rb +33 -0
  31. data/spec/lib/magicka/aggregator/class_methods_spec.rb +352 -0
  32. data/spec/lib/magicka/aggregator/method_builder_spec.rb +29 -0
  33. data/spec/lib/magicka/aggregator_spec.rb +0 -221
  34. data/spec/lib/magicka/button_spec.rb +1 -1
  35. data/spec/lib/magicka/display_spec.rb +3 -3
  36. data/spec/lib/magicka/form_element_spec.rb +2 -2
  37. data/spec/lib/magicka/form_spec.rb +3 -3
  38. data/spec/lib/magicka/helper/aggregator_options_spec.rb +99 -0
  39. data/spec/lib/magicka/helper/class_methods_spec.rb +101 -0
  40. data/spec/lib/magicka/helper_spec.rb +2 -18
  41. data/spec/lib/magicka/input_spec.rb +1 -1
  42. data/spec/lib/magicka/select_spec.rb +1 -1
  43. data/spec/lib/magicka/text_spec.rb +1 -1
  44. data/spec/support/factories/document.rb +7 -0
  45. data/spec/support/factory_bot.rb +7 -0
  46. data/spec/support/models/custom_aggregator.rb +12 -0
  47. data/spec/support/models/my_element.rb +6 -0
  48. metadata +69 -25
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Magicka::Helper::AggregatorOptions do
6
+ subject(:options) { described_class.new(options_hash) }
7
+
8
+ let(:options_hash) do
9
+ {
10
+ aggregator: aggregator,
11
+ type: type,
12
+ config_block: config_block
13
+ }
14
+ end
15
+
16
+ let(:aggregator_class) { Class.new(Magicka::Aggregator) }
17
+ let(:aggregator) { aggregator_class }
18
+ let(:type) { :my_aggregator }
19
+ let(:config_block) do
20
+ proc { with_element(Magicka::Input) }
21
+ end
22
+
23
+ describe '#configured_aggregator' do
24
+ let(:renderer) { instance_double(ActionView::OutputBuffer) }
25
+ let(:model) { Object.new }
26
+ let(:element_class) { Magicka::Input }
27
+
28
+ before do
29
+ allow(element_class).to receive(:render).with(
30
+ renderer: renderer,
31
+ field: :name,
32
+ model: model,
33
+ template: nil
34
+ )
35
+ end
36
+
37
+ context 'when aggregator is a class' do
38
+ context 'when config block is given' do
39
+ it 'returns the given aggregator class' do
40
+ expect(options.configured_aggregator)
41
+ .to be(aggregator)
42
+ end
43
+
44
+ it 'configure the aggregator' do
45
+ options.configured_aggregator.new(renderer, model)
46
+ .input(:name)
47
+
48
+ expect(element_class).to have_received(:render)
49
+ end
50
+ end
51
+
52
+ context 'when config block is not given' do
53
+ let(:config_block) { nil }
54
+
55
+ it 'returns the given aggregator class' do
56
+ expect(options.configured_aggregator)
57
+ .to be(aggregator)
58
+ end
59
+ end
60
+ end
61
+
62
+ context 'when aggregator is a String' do
63
+ let(:aggregator) { "Magicka::#{aggregator_name}" }
64
+ let(:aggregator_name) { :CustomAggregator }
65
+
66
+ before { Magicka.const_set(aggregator_name, aggregator_class) }
67
+
68
+ context 'when config block is given' do
69
+ let(:aggregator_name) { :CustomAggregator1 }
70
+
71
+ it 'returns the given aggregator class' do
72
+ expect(options.configured_aggregator)
73
+ .to be(aggregator_class)
74
+ end
75
+ end
76
+
77
+ context 'when config block is given and is called' do
78
+ let(:aggregator_name) { :CustomAggregator2 }
79
+
80
+ it 'configure the aggregator' do
81
+ options.configured_aggregator.new(renderer, model)
82
+ .input(:name)
83
+
84
+ expect(element_class).to have_received(:render)
85
+ end
86
+ end
87
+
88
+ context 'when config block is not given' do
89
+ let(:aggregator_name) { :CustomAggregator3 }
90
+ let(:config_block) { nil }
91
+
92
+ it 'returns the given aggregator class' do
93
+ expect(options.configured_aggregator)
94
+ .to be(aggregator_class)
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Magicka::Helper::ClassMethods do
6
+ subject(:object) { klass.new }
7
+
8
+ let(:model) { Object.new }
9
+
10
+ let(:helper_class) { Magicka::Helper }
11
+ let(:klass) do
12
+ Class.new do
13
+ include Magicka::Helper
14
+ end
15
+ end
16
+
17
+ describe '#with' do
18
+ let(:aggregator_class) do
19
+ Class.new(Magicka::Aggregator) do
20
+ def self.name
21
+ 'Magicka::MyClass'
22
+ end
23
+ end
24
+ end
25
+
26
+ context 'when passing a class' do
27
+ it do
28
+ expect { helper_class.with(aggregator_class) }
29
+ .to add_method('magicka_my_class')
30
+ .to(object)
31
+ end
32
+
33
+ context 'when the method is called' do
34
+ before { helper_class.with(aggregator_class) }
35
+
36
+ it do
37
+ object.magicka_my_class(model) do |aggregator|
38
+ expect(aggregator).to be_a(aggregator_class)
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'when an element is added in the block' do
44
+ before do
45
+ helper_class.with(aggregator_class) do
46
+ with_element(Magicka::Input, :my_input)
47
+ end
48
+ end
49
+
50
+ it do
51
+ object.magicka_my_class(model) do |aggregator|
52
+ expect(aggregator).to respond_to(:my_input)
53
+ end
54
+ end
55
+ end
56
+ end
57
+
58
+ context 'when passing a string as agregator' do
59
+ let(:aggregator_name) { :Test1Aggregator }
60
+ let(:aggregator_class_name) { "Magicka::#{aggregator_name}" }
61
+
62
+ it do
63
+ expect { helper_class.with(aggregator_class_name, :test1_aggregator) }
64
+ .to add_method('magicka_test1_aggregator')
65
+ .to(object)
66
+ end
67
+
68
+ context 'when the method is called' do
69
+ before do
70
+ helper_class.with(aggregator_class_name, :test1_aggregator)
71
+
72
+ Magicka.const_set(aggregator_name, aggregator_class)
73
+ end
74
+
75
+ it do
76
+ object.magicka_test1_aggregator(model) do |aggregator|
77
+ expect(aggregator).to be_a(aggregator_class)
78
+ end
79
+ end
80
+ end
81
+
82
+ context 'when an element is added in the block' do
83
+ let(:aggregator_name) { :Test2Aggregator }
84
+
85
+ before do
86
+ helper_class.with(aggregator_class_name, :test2_aggregator) do
87
+ with_element(Magicka::Input, :my_input)
88
+ end
89
+
90
+ Magicka.const_set(aggregator_name, aggregator_class)
91
+ end
92
+
93
+ it do
94
+ object.magicka_test2_aggregator(model) do |aggregator|
95
+ expect(aggregator).to respond_to(:my_input)
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -5,30 +5,14 @@ require 'spec_helper'
5
5
  describe Magicka::Helper do
6
6
  subject(:object) { klass.new }
7
7
 
8
+ let(:model) { Object.new }
9
+
8
10
  let(:klass) do
9
11
  Class.new do
10
12
  include Magicka::Helper
11
13
  end
12
14
  end
13
15
 
14
- let(:model) { 'model' }
15
-
16
- describe '.with' do
17
- let(:aggregator_class) do
18
- Class.new(Magicka::Aggregator) do
19
- def self.name
20
- 'Magicka::MyClass'
21
- end
22
- end
23
- end
24
-
25
- it do
26
- expect { described_class.with(aggregator_class) }
27
- .to add_method('magicka_my_class')
28
- .to(object)
29
- end
30
- end
31
-
32
16
  describe '#magicka_display' do
33
17
  it do
34
18
  object.magicka_display(model) do |display|
@@ -39,7 +39,7 @@ describe Magicka::Input do
39
39
  end
40
40
 
41
41
  it do
42
- described_class.render(arguments)
42
+ described_class.render(**arguments)
43
43
 
44
44
  expect(renderer).to have_received(:render)
45
45
  end
@@ -39,7 +39,7 @@ describe Magicka::Select do
39
39
  end
40
40
 
41
41
  it do
42
- described_class.render(arguments)
42
+ described_class.render(**arguments)
43
43
 
44
44
  expect(renderer).to have_received(:render)
45
45
  end
@@ -36,7 +36,7 @@ describe Magicka::Text do
36
36
  end
37
37
 
38
38
  it do
39
- described_class.render(arguments)
39
+ described_class.render(**arguments)
40
40
 
41
41
  expect(renderer).to have_received(:render)
42
42
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :document, class: '::Document' do
5
+ sequence(:name) { |n| "Name-#{n}" }
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.configure do |config|
4
+ config.include FactoryBot::Syntax::Methods
5
+ end
6
+
7
+ FactoryBot.find_definitions
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Magicka
4
+ class CustomAggregator < Aggregator
5
+ with_element(Input)
6
+ with_element(Select)
7
+
8
+ def button(**args)
9
+ Button.render(renderer: renderer, **args)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Magicka
4
+ class MyElement < Element
5
+ end
6
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magicka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DarthJee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-07 00:00:00.000000000 Z
11
+ date: 2023-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.x
19
+ version: 7.0.x
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.x
26
+ version: 7.0.x
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sinclair
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.6.7
33
+ version: 2.0.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.6.7
40
+ version: 2.0.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: actionpack
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 5.2.x
47
+ version: 7.0.4.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 5.2.x
54
+ version: 7.0.4.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activerecord
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 5.2.x
61
+ version: 7.0.4.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 5.2.x
68
+ version: 7.0.4.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: 1.16.1
75
+ version: 2.3.25
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 1.16.1
82
+ version: 2.3.25
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: factory_bot
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -140,16 +140,16 @@ dependencies:
140
140
  name: rails
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 5.2.x
145
+ version: 7.0.4.3
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - '='
151
151
  - !ruby/object:Gem::Version
152
- version: 5.2.x
152
+ version: 7.0.4.3
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rails-controller-testing
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -332,6 +332,20 @@ dependencies:
332
332
  - - '='
333
333
  - !ruby/object:Gem::Version
334
334
  version: 0.17.1
335
+ - !ruby/object:Gem::Dependency
336
+ name: sprockets-rails
337
+ requirement: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - '='
340
+ - !ruby/object:Gem::Version
341
+ version: 3.4.2
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - '='
347
+ - !ruby/object:Gem::Version
348
+ version: 3.4.2
335
349
  - !ruby/object:Gem::Dependency
336
350
  name: sqlite3
337
351
  requirement: !ruby/object:Gem::Requirement
@@ -346,6 +360,20 @@ dependencies:
346
360
  - - '='
347
361
  - !ruby/object:Gem::Version
348
362
  version: 1.4.2
363
+ - !ruby/object:Gem::Dependency
364
+ name: tzinfo-data
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - "~>"
368
+ - !ruby/object:Gem::Version
369
+ version: 1.2022.1
370
+ type: :development
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - "~>"
375
+ - !ruby/object:Gem::Version
376
+ version: 1.2022.1
349
377
  - !ruby/object:Gem::Dependency
350
378
  name: yard
351
379
  requirement: !ruby/object:Gem::Requirement
@@ -408,6 +436,7 @@ files:
408
436
  - lib/magicka/form.rb
409
437
  - lib/magicka/form_element.rb
410
438
  - lib/magicka/helper.rb
439
+ - lib/magicka/helper/aggregator_options.rb
411
440
  - lib/magicka/helper/class_methods.rb
412
441
  - lib/magicka/helper/method_builder.rb
413
442
  - lib/magicka/input.rb
@@ -428,14 +457,20 @@ files:
428
457
  - spec/dummy/app/channels/application_cable/connection.rb
429
458
  - spec/dummy/app/controllers/application_controller.rb
430
459
  - spec/dummy/app/controllers/concerns/.keep
460
+ - spec/dummy/app/controllers/documents_controller.rb
431
461
  - spec/dummy/app/helpers/application_helper.rb
432
462
  - spec/dummy/app/jobs/application_job.rb
433
463
  - spec/dummy/app/mailers/application_mailer.rb
434
464
  - spec/dummy/app/models/application_record.rb
435
465
  - spec/dummy/app/models/concerns/.keep
466
+ - spec/dummy/app/models/document.rb
467
+ - spec/dummy/app/models/magicka/data_entry.rb
468
+ - spec/dummy/app/models/magicka/data_table.rb
469
+ - spec/dummy/app/views/documents/show.html.erb
436
470
  - spec/dummy/app/views/layouts/application.html.erb
437
471
  - spec/dummy/app/views/layouts/mailer.html.erb
438
472
  - spec/dummy/app/views/layouts/mailer.text.erb
473
+ - spec/dummy/app/views/templates/display/_data_entry.html.erb
439
474
  - spec/dummy/bin/bundle
440
475
  - spec/dummy/bin/rails
441
476
  - spec/dummy/bin/rake
@@ -458,6 +493,7 @@ files:
458
493
  - spec/dummy/config/initializers/cookies_serializer.rb
459
494
  - spec/dummy/config/initializers/filter_parameter_logging.rb
460
495
  - spec/dummy/config/initializers/inflections.rb
496
+ - spec/dummy/config/initializers/magicka.rb
461
497
  - spec/dummy/config/initializers/mime_types.rb
462
498
  - spec/dummy/config/initializers/wrap_parameters.rb
463
499
  - spec/dummy/config/locales/en.yml
@@ -477,6 +513,9 @@ files:
477
513
  - spec/dummy/storage/.keep
478
514
  - spec/integration/readme/.keep
479
515
  - spec/integration/yard/.keep
516
+ - spec/integration/yard/magicka/helper_spec.rb
517
+ - spec/lib/magicka/aggregator/class_methods_spec.rb
518
+ - spec/lib/magicka/aggregator/method_builder_spec.rb
480
519
  - spec/lib/magicka/aggregator_spec.rb
481
520
  - spec/lib/magicka/button_spec.rb
482
521
  - spec/lib/magicka/display_spec.rb
@@ -485,12 +524,18 @@ files:
485
524
  - spec/lib/magicka/element_spec.rb
486
525
  - spec/lib/magicka/form_element_spec.rb
487
526
  - spec/lib/magicka/form_spec.rb
527
+ - spec/lib/magicka/helper/aggregator_options_spec.rb
528
+ - spec/lib/magicka/helper/class_methods_spec.rb
488
529
  - spec/lib/magicka/helper_spec.rb
489
530
  - spec/lib/magicka/input_spec.rb
490
531
  - spec/lib/magicka/select_spec.rb
491
532
  - spec/lib/magicka/text_spec.rb
492
533
  - spec/spec_helper.rb
534
+ - spec/support/factories/document.rb
535
+ - spec/support/factory_bot.rb
493
536
  - spec/support/models/.keep
537
+ - spec/support/models/custom_aggregator.rb
538
+ - spec/support/models/my_element.rb
494
539
  - spec/support/shared_examples/.keep
495
540
  homepage: https://github.com/darthjee/magicka
496
541
  licenses: []
@@ -503,15 +548,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
503
548
  requirements:
504
549
  - - ">="
505
550
  - !ruby/object:Gem::Version
506
- version: 2.5.0
551
+ version: 2.7.0
507
552
  required_rubygems_version: !ruby/object:Gem::Requirement
508
553
  requirements:
509
554
  - - ">="
510
555
  - !ruby/object:Gem::Version
511
556
  version: '0'
512
557
  requirements: []
513
- rubyforge_project:
514
- rubygems_version: 2.7.6
558
+ rubygems_version: 3.1.2
515
559
  signing_key:
516
560
  specification_version: 4
517
561
  summary: Gem for easy form templating