magicka 0.3.0 → 0.5.2
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/.circleci/config.yml +19 -5
- data/README.md +1 -1
- data/config/check_specs.yml +3 -0
- data/config/yardstick.yml +1 -1
- data/lib/magicka.rb +11 -6
- data/lib/magicka/aggregator.rb +47 -0
- data/lib/magicka/aggregator/method_builder.rb +40 -0
- data/lib/magicka/button.rb +9 -0
- data/lib/magicka/display.rb +11 -0
- data/lib/magicka/element.rb +2 -1
- data/lib/magicka/element/method_builder.rb +40 -0
- data/lib/magicka/form.rb +13 -0
- data/lib/magicka/helper.rb +14 -0
- data/lib/magicka/text.rb +8 -0
- data/lib/magicka/version.rb +1 -1
- data/spec/lib/magicka/button_spec.rb +54 -0
- data/spec/lib/magicka/display_spec.rb +142 -0
- data/spec/lib/magicka/{method_builder_spec.rb → element/method_builder_spec.rb} +1 -1
- data/spec/lib/magicka/form_spec.rb +156 -0
- data/spec/lib/magicka/text_spec.rb +52 -0
- metadata +15 -4
- data/lib/magicka/method_builder.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee215dd9512aa8f283dfeedd12e3eaf13ecd7b738cdc5614e7b9fb82532b52a3
|
4
|
+
data.tar.gz: aeb3107ff20cdcc5062176127b5409fd2b574fb41d14b0ba9edb2576b8fccb04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc950ba9d4cbc6b085ae6c0730ccb5cbdcaa96f86014fcaa93a923189711664037f9454d1715dae6f885ed19a93bfc356f5cc3a613c1be1412210e62979b4c78
|
7
|
+
data.tar.gz: 07edd54ef28d7a5638b126ec140926928ea580febe9f9ce0384c179a13ee250a4432c0dc1f31798a6050c26cbadf617a41b012fb7ca35a318f40b92d662ceb10
|
data/.circleci/config.yml
CHANGED
@@ -7,8 +7,12 @@ workflows:
|
|
7
7
|
filters:
|
8
8
|
tags:
|
9
9
|
only: /.*/
|
10
|
+
- checks:
|
11
|
+
filters:
|
12
|
+
tags:
|
13
|
+
only: /.*/
|
10
14
|
- build-and-release:
|
11
|
-
requires: [test]
|
15
|
+
requires: [test, checks]
|
12
16
|
filters:
|
13
17
|
tags:
|
14
18
|
only: /\d+\.\d+\.\d+/
|
@@ -18,7 +22,7 @@ workflows:
|
|
18
22
|
jobs:
|
19
23
|
test:
|
20
24
|
docker:
|
21
|
-
- image: darthjee/circleci_rails_gems:0.
|
25
|
+
- image: darthjee/circleci_rails_gems:0.6.0
|
22
26
|
environment:
|
23
27
|
PROJECT: magicka
|
24
28
|
steps:
|
@@ -32,12 +36,22 @@ jobs:
|
|
32
36
|
- run:
|
33
37
|
name: RSpec
|
34
38
|
command: bundle exec rspec
|
35
|
-
- run:
|
36
|
-
name: Rubocop
|
37
|
-
command: rubocop
|
38
39
|
- run:
|
39
40
|
name: Coverage Test Report
|
40
41
|
command: cc-test-reporter after-build --exit-code $?
|
42
|
+
checks:
|
43
|
+
docker:
|
44
|
+
- image: darthjee/circleci_rails_gems:0.6.0
|
45
|
+
environment:
|
46
|
+
PROJECT: magicka
|
47
|
+
steps:
|
48
|
+
- checkout
|
49
|
+
- run:
|
50
|
+
name: Bundle Install
|
51
|
+
command: bundle install
|
52
|
+
- run:
|
53
|
+
name: Rubocop
|
54
|
+
command: rubocop
|
41
55
|
- run:
|
42
56
|
name: Yardstick coverage check
|
43
57
|
command: bundle exec rake verify_measurements
|
data/README.md
CHANGED
@@ -11,7 +11,7 @@ Magicka
|
|
11
11
|
|
12
12
|
Yard Documentation
|
13
13
|
-------------------
|
14
|
-
[https://www.rubydoc.info/gems/magicka/0.
|
14
|
+
[https://www.rubydoc.info/gems/magicka/0.5.2](https://www.rubydoc.info/gems/magicka/0.5.2)
|
15
15
|
|
16
16
|
Installation
|
17
17
|
---------------
|
data/config/check_specs.yml
CHANGED
data/config/yardstick.yml
CHANGED
data/lib/magicka.rb
CHANGED
@@ -10,10 +10,15 @@ require 'sinclair'
|
|
10
10
|
#
|
11
11
|
# module holding herlper to render inputs
|
12
12
|
module Magicka
|
13
|
-
autoload :VERSION,
|
14
|
-
autoload :
|
15
|
-
autoload :
|
16
|
-
autoload :
|
17
|
-
autoload :
|
18
|
-
autoload :
|
13
|
+
autoload :VERSION, 'magicka/version'
|
14
|
+
autoload :Aggregator, 'magicka/aggregator'
|
15
|
+
autoload :Button, 'magicka/button'
|
16
|
+
autoload :Display, 'magicka/display'
|
17
|
+
autoload :Element, 'magicka/element'
|
18
|
+
autoload :FormElement, 'magicka/form_element'
|
19
|
+
autoload :Form, 'magicka/form'
|
20
|
+
autoload :Helper, 'magicka/helper'
|
21
|
+
autoload :Input, 'magicka/input'
|
22
|
+
autoload :Select, 'magicka/select'
|
23
|
+
autoload :Text, 'magicka/text'
|
19
24
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Magicka
|
4
|
+
# @api public
|
5
|
+
#
|
6
|
+
# Class representing an element agregator, representing a model
|
7
|
+
class Aggregator
|
8
|
+
autoload :MethodBuilder, 'magicka/aggregator/method_builder'
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def with_element(element_class, method_name = nil)
|
12
|
+
MethodBuilder
|
13
|
+
.new(self, element_class, method_name)
|
14
|
+
.prepare
|
15
|
+
.build
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_reader :model
|
20
|
+
|
21
|
+
def initialize(renderer, model)
|
22
|
+
@renderer = renderer
|
23
|
+
@model = model
|
24
|
+
end
|
25
|
+
|
26
|
+
def with_model(model)
|
27
|
+
new_model = [self.model, model].join('.')
|
28
|
+
|
29
|
+
yield self.class.new(renderer, new_model)
|
30
|
+
end
|
31
|
+
|
32
|
+
def equal?(other)
|
33
|
+
return unless other.class == self.class
|
34
|
+
|
35
|
+
other.renderer == renderer &&
|
36
|
+
other.model == model
|
37
|
+
end
|
38
|
+
|
39
|
+
alias == equal?
|
40
|
+
|
41
|
+
protected
|
42
|
+
|
43
|
+
attr_reader :renderer
|
44
|
+
|
45
|
+
delegate :render, to: :renderer
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Magicka
|
4
|
+
class Aggregator
|
5
|
+
# @api private
|
6
|
+
#
|
7
|
+
# Class responsible for building an {Aggregator} method
|
8
|
+
class MethodBuilder < Sinclair
|
9
|
+
def initialize(klass, element_class, method_name = nil)
|
10
|
+
super(klass)
|
11
|
+
|
12
|
+
@element_class = element_class
|
13
|
+
@method_name = method_name
|
14
|
+
end
|
15
|
+
|
16
|
+
def prepare
|
17
|
+
element_klass = element_class
|
18
|
+
|
19
|
+
add_method(method_name) do |field, model: self.model, **args|
|
20
|
+
element_klass.render(
|
21
|
+
renderer: renderer, field: field, model: model, **args
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :element_class
|
31
|
+
|
32
|
+
def method_name
|
33
|
+
@method_name ||= element_class
|
34
|
+
.name
|
35
|
+
.underscore
|
36
|
+
.gsub(%r{.*/}, '')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/magicka/element.rb
CHANGED
@@ -5,7 +5,8 @@ module Magicka
|
|
5
5
|
#
|
6
6
|
# Base class for element rendering
|
7
7
|
class Element < Sinclair::Options
|
8
|
-
autoload :ClassMethods,
|
8
|
+
autoload :ClassMethods, 'magicka/element/class_methods'
|
9
|
+
autoload :MethodBuilder, 'magicka/element/method_builder'
|
9
10
|
|
10
11
|
skip_validation
|
11
12
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Magicka
|
4
|
+
class Element
|
5
|
+
# @api private
|
6
|
+
#
|
7
|
+
# class responsible for building methods on {Magicka::Element}
|
8
|
+
class MethodBuilder < Sinclair
|
9
|
+
# adds a mehtod +#template+
|
10
|
+
#
|
11
|
+
# The method will always return the template given in the params
|
12
|
+
#
|
13
|
+
# @param template [String] path to template file
|
14
|
+
#
|
15
|
+
# @return [Array<Sinclair::MethodDefinition>]
|
16
|
+
def add_template(template)
|
17
|
+
add_method(:template) do
|
18
|
+
template
|
19
|
+
end
|
20
|
+
|
21
|
+
build
|
22
|
+
end
|
23
|
+
|
24
|
+
# adds a mehtod +#template_folder+
|
25
|
+
#
|
26
|
+
# The method will always return the template folder given in the params
|
27
|
+
#
|
28
|
+
# @param template_folder [String] path to template folder
|
29
|
+
#
|
30
|
+
# @return [Array<Sinclair::MethodDefinition>]
|
31
|
+
def add_template_folder(folder)
|
32
|
+
add_method(:template_folder) do
|
33
|
+
folder
|
34
|
+
end
|
35
|
+
|
36
|
+
build
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/magicka/form.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Magicka
|
4
|
+
# Class responsible for controlling one object form
|
5
|
+
class Form < Aggregator
|
6
|
+
with_element(Input)
|
7
|
+
with_element(Select)
|
8
|
+
|
9
|
+
def button(**args)
|
10
|
+
Button.render(renderer: renderer, **args)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/magicka/text.rb
ADDED
data/lib/magicka/version.rb
CHANGED
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Magicka::Button do
|
6
|
+
let(:renderer) { instance_double('renderer') }
|
7
|
+
let(:template) { 'templates/forms/button' }
|
8
|
+
|
9
|
+
let(:ng_click) { 'controler.click()' }
|
10
|
+
let(:ng_disabled) { 'false' }
|
11
|
+
let(:classes) { 'custom class' }
|
12
|
+
let(:text) { 'Click' }
|
13
|
+
|
14
|
+
let(:locals) do
|
15
|
+
{
|
16
|
+
ng_click: ng_click,
|
17
|
+
ng_disabled: ng_disabled,
|
18
|
+
classes: classes,
|
19
|
+
text: text
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.render' do
|
24
|
+
let(:arguments) do
|
25
|
+
{
|
26
|
+
renderer: renderer,
|
27
|
+
ng_click: ng_click,
|
28
|
+
ng_disabled: ng_disabled,
|
29
|
+
classes: classes,
|
30
|
+
text: text
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
before do
|
35
|
+
allow(renderer)
|
36
|
+
.to receive(:render)
|
37
|
+
.with(partial: template, locals: locals)
|
38
|
+
end
|
39
|
+
|
40
|
+
it do
|
41
|
+
described_class.render(arguments)
|
42
|
+
|
43
|
+
expect(renderer).to have_received(:render)
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when called with extra params' do
|
47
|
+
it do
|
48
|
+
described_class.render(name: 'Name', **arguments)
|
49
|
+
|
50
|
+
expect(renderer).to have_received(:render)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Magicka::Display do
|
6
|
+
subject(:form) { described_class.new(renderer, model) }
|
7
|
+
|
8
|
+
let(:model) { :my_model }
|
9
|
+
let(:renderer) { instance_double('renderer') }
|
10
|
+
let(:template) { 'templates/display/text' }
|
11
|
+
let(:locals) { {} }
|
12
|
+
|
13
|
+
before do
|
14
|
+
allow(renderer)
|
15
|
+
.to receive(:render)
|
16
|
+
.with(partial: template, locals: locals)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#input' do
|
20
|
+
let(:template) { 'templates/display/text' }
|
21
|
+
let(:field) { :field }
|
22
|
+
let(:label) { 'Label' }
|
23
|
+
let(:placeholder) { 'Value' }
|
24
|
+
|
25
|
+
let(:locals) do
|
26
|
+
{
|
27
|
+
field: field,
|
28
|
+
label: label,
|
29
|
+
ng_errors: 'my_model.errors.field',
|
30
|
+
ng_model: 'my_model.field'
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
let(:arguments) do
|
35
|
+
{
|
36
|
+
label: label,
|
37
|
+
placeholder: placeholder
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'renders a text' do
|
42
|
+
form.input(field, arguments)
|
43
|
+
|
44
|
+
expect(renderer).to have_received(:render)
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when passing a custom model' do
|
48
|
+
let(:locals) do
|
49
|
+
{
|
50
|
+
field: field,
|
51
|
+
label: label,
|
52
|
+
ng_errors: 'my_custom_model.errors.field',
|
53
|
+
ng_model: 'my_custom_model.field'
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'renders a text' do
|
58
|
+
form.input(field, model: 'my_custom_model', **arguments)
|
59
|
+
|
60
|
+
expect(renderer).to have_received(:render)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#select' do
|
66
|
+
let(:template) { 'templates/display/text' }
|
67
|
+
let(:field) { :field }
|
68
|
+
let(:label) { 'Label' }
|
69
|
+
let(:options) { %i[option_a option_b] }
|
70
|
+
|
71
|
+
let(:locals) do
|
72
|
+
{
|
73
|
+
field: field,
|
74
|
+
label: label,
|
75
|
+
ng_errors: 'my_model.errors.field',
|
76
|
+
ng_model: 'my_model.field'
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
let(:arguments) do
|
81
|
+
{
|
82
|
+
label: label,
|
83
|
+
options: options
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'renders a text' do
|
88
|
+
form.select(field, arguments)
|
89
|
+
|
90
|
+
expect(renderer).to have_received(:render)
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'when passing a custom model' do
|
94
|
+
let(:locals) do
|
95
|
+
{
|
96
|
+
field: field,
|
97
|
+
label: label,
|
98
|
+
ng_errors: 'my_custom_model.errors.field',
|
99
|
+
ng_model: 'my_custom_model.field'
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'renders a text' do
|
104
|
+
form.select(field, model: 'my_custom_model', **arguments)
|
105
|
+
|
106
|
+
expect(renderer).to have_received(:render)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe '#button' do
|
112
|
+
let(:ng_click) { 'controler.click()' }
|
113
|
+
let(:ng_disabled) { 'false' }
|
114
|
+
let(:classes) { 'custom class' }
|
115
|
+
let(:text) { 'Click' }
|
116
|
+
|
117
|
+
let(:arguments) do
|
118
|
+
{
|
119
|
+
ng_click: ng_click,
|
120
|
+
ng_disabled: ng_disabled,
|
121
|
+
classes: classes,
|
122
|
+
text: text
|
123
|
+
}
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'renders nothing' do
|
127
|
+
form.button(arguments)
|
128
|
+
|
129
|
+
expect(renderer).not_to have_received(:render)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe '#with_model' do
|
134
|
+
let(:expected_form) { described_class.new(renderer, 'my_model.inner') }
|
135
|
+
|
136
|
+
it do
|
137
|
+
form.with_model(:inner) do |new_form|
|
138
|
+
expect(new_form).to eq(expected_form)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Magicka::Form do
|
6
|
+
subject(:form) { described_class.new(renderer, model) }
|
7
|
+
|
8
|
+
let(:model) { :my_model }
|
9
|
+
let(:renderer) { instance_double('renderer') }
|
10
|
+
let(:template) { 'templates/forms/input' }
|
11
|
+
let(:locals) { {} }
|
12
|
+
|
13
|
+
before do
|
14
|
+
allow(renderer)
|
15
|
+
.to receive(:render)
|
16
|
+
.with(partial: template, locals: locals)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#input' do
|
20
|
+
let(:template) { 'templates/forms/input' }
|
21
|
+
let(:field) { :field }
|
22
|
+
let(:label) { 'Label' }
|
23
|
+
let(:placeholder) { 'Value' }
|
24
|
+
|
25
|
+
let(:locals) do
|
26
|
+
{
|
27
|
+
field: field,
|
28
|
+
label: label,
|
29
|
+
ng_errors: 'my_model.errors.field',
|
30
|
+
ng_model: 'my_model.field',
|
31
|
+
placeholder: placeholder
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:arguments) do
|
36
|
+
{
|
37
|
+
label: label,
|
38
|
+
placeholder: placeholder
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'renders an input' do
|
43
|
+
form.input(field, arguments)
|
44
|
+
|
45
|
+
expect(renderer).to have_received(:render)
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'when passing a custom model' do
|
49
|
+
let(:locals) do
|
50
|
+
{
|
51
|
+
field: field,
|
52
|
+
label: label,
|
53
|
+
ng_errors: 'my_custom_model.errors.field',
|
54
|
+
ng_model: 'my_custom_model.field',
|
55
|
+
placeholder: placeholder
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'renders an input' do
|
60
|
+
form.input(field, model: 'my_custom_model', **arguments)
|
61
|
+
|
62
|
+
expect(renderer).to have_received(:render)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#select' do
|
68
|
+
let(:template) { 'templates/forms/select' }
|
69
|
+
let(:field) { :field }
|
70
|
+
let(:label) { 'Label' }
|
71
|
+
let(:options) { %i[option_a option_b] }
|
72
|
+
|
73
|
+
let(:locals) do
|
74
|
+
{
|
75
|
+
field: field,
|
76
|
+
label: label,
|
77
|
+
ng_errors: 'my_model.errors.field',
|
78
|
+
ng_model: 'my_model.field',
|
79
|
+
options: options
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
83
|
+
let(:arguments) do
|
84
|
+
{
|
85
|
+
label: label,
|
86
|
+
options: options
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'renders a select' do
|
91
|
+
form.select(field, arguments)
|
92
|
+
|
93
|
+
expect(renderer).to have_received(:render)
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when passing a custom model' do
|
97
|
+
let(:locals) do
|
98
|
+
{
|
99
|
+
field: field,
|
100
|
+
label: label,
|
101
|
+
ng_errors: 'my_custom_model.errors.field',
|
102
|
+
ng_model: 'my_custom_model.field',
|
103
|
+
options: options
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'renders a select' do
|
108
|
+
form.select(field, model: 'my_custom_model', **arguments)
|
109
|
+
|
110
|
+
expect(renderer).to have_received(:render)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe '#button' do
|
116
|
+
let(:template) { 'templates/forms/button' }
|
117
|
+
let(:ng_click) { 'controler.click()' }
|
118
|
+
let(:ng_disabled) { 'false' }
|
119
|
+
let(:classes) { 'custom class' }
|
120
|
+
let(:text) { 'Click' }
|
121
|
+
|
122
|
+
let(:locals) do
|
123
|
+
{
|
124
|
+
ng_click: ng_click,
|
125
|
+
ng_disabled: ng_disabled,
|
126
|
+
classes: classes,
|
127
|
+
text: text
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
let(:arguments) do
|
132
|
+
{
|
133
|
+
ng_click: ng_click,
|
134
|
+
ng_disabled: ng_disabled,
|
135
|
+
classes: classes,
|
136
|
+
text: text
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'renders an input' do
|
141
|
+
form.button(arguments)
|
142
|
+
|
143
|
+
expect(renderer).to have_received(:render)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe '#with_model' do
|
148
|
+
let(:expected_form) { described_class.new(renderer, 'my_model.inner') }
|
149
|
+
|
150
|
+
it do
|
151
|
+
form.with_model(:inner) do |new_form|
|
152
|
+
expect(new_form).to eq(expected_form)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Magicka::Text do
|
6
|
+
let(:renderer) { instance_double('renderer') }
|
7
|
+
let(:template) { 'templates/display/text' }
|
8
|
+
|
9
|
+
let(:model) { :my_model }
|
10
|
+
let(:field) { :field }
|
11
|
+
let(:label) { 'Label' }
|
12
|
+
|
13
|
+
let(:locals) do
|
14
|
+
{
|
15
|
+
field: field,
|
16
|
+
label: label,
|
17
|
+
ng_model: 'my_model.field',
|
18
|
+
ng_errors: 'my_model.errors.field'
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.render' do
|
23
|
+
let(:arguments) do
|
24
|
+
{
|
25
|
+
renderer: renderer,
|
26
|
+
field: field,
|
27
|
+
label: label,
|
28
|
+
model: model
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
before do
|
33
|
+
allow(renderer)
|
34
|
+
.to receive(:render)
|
35
|
+
.with(partial: template, locals: locals)
|
36
|
+
end
|
37
|
+
|
38
|
+
it do
|
39
|
+
described_class.render(arguments)
|
40
|
+
|
41
|
+
expect(renderer).to have_received(:render)
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'when called with extra params' do
|
45
|
+
it do
|
46
|
+
described_class.render(name: 'Name', **arguments)
|
47
|
+
|
48
|
+
expect(renderer).to have_received(:render)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
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.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DarthJee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -397,12 +397,19 @@ files:
|
|
397
397
|
- config/yardstick.yml
|
398
398
|
- docker-compose.yml
|
399
399
|
- lib/magicka.rb
|
400
|
+
- lib/magicka/aggregator.rb
|
401
|
+
- lib/magicka/aggregator/method_builder.rb
|
402
|
+
- lib/magicka/button.rb
|
403
|
+
- lib/magicka/display.rb
|
400
404
|
- lib/magicka/element.rb
|
401
405
|
- lib/magicka/element/class_methods.rb
|
406
|
+
- lib/magicka/element/method_builder.rb
|
407
|
+
- lib/magicka/form.rb
|
402
408
|
- lib/magicka/form_element.rb
|
409
|
+
- lib/magicka/helper.rb
|
403
410
|
- lib/magicka/input.rb
|
404
|
-
- lib/magicka/method_builder.rb
|
405
411
|
- lib/magicka/select.rb
|
412
|
+
- lib/magicka/text.rb
|
406
413
|
- lib/magicka/version.rb
|
407
414
|
- magicka.gemspec
|
408
415
|
- magicka.jpg
|
@@ -467,12 +474,16 @@ files:
|
|
467
474
|
- spec/dummy/storage/.keep
|
468
475
|
- spec/integration/readme/.keep
|
469
476
|
- spec/integration/yard/.keep
|
477
|
+
- spec/lib/magicka/button_spec.rb
|
478
|
+
- spec/lib/magicka/display_spec.rb
|
470
479
|
- spec/lib/magicka/element/class_methods_spec.rb
|
480
|
+
- spec/lib/magicka/element/method_builder_spec.rb
|
471
481
|
- spec/lib/magicka/element_spec.rb
|
472
482
|
- spec/lib/magicka/form_element_spec.rb
|
483
|
+
- spec/lib/magicka/form_spec.rb
|
473
484
|
- spec/lib/magicka/input_spec.rb
|
474
|
-
- spec/lib/magicka/method_builder_spec.rb
|
475
485
|
- spec/lib/magicka/select_spec.rb
|
486
|
+
- spec/lib/magicka/text_spec.rb
|
476
487
|
- spec/spec_helper.rb
|
477
488
|
- spec/support/models/.keep
|
478
489
|
- spec/support/shared_examples/.keep
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Magicka
|
4
|
-
# @api private
|
5
|
-
#
|
6
|
-
# class responsible for building methods on {Magicka::Element}
|
7
|
-
class MethodBuilder < Sinclair
|
8
|
-
# adds a mehtod +#template+
|
9
|
-
#
|
10
|
-
# The method will always return the template given in the params
|
11
|
-
#
|
12
|
-
# @param template [String] path to template file
|
13
|
-
#
|
14
|
-
# @return [Array<Sinclair::MethodDefinition>]
|
15
|
-
def add_template(template)
|
16
|
-
add_method(:template) do
|
17
|
-
template
|
18
|
-
end
|
19
|
-
|
20
|
-
build
|
21
|
-
end
|
22
|
-
|
23
|
-
# adds a mehtod +#template_folder+
|
24
|
-
#
|
25
|
-
# The method will always return the template folder given in the params
|
26
|
-
#
|
27
|
-
# @param template_folder [String] path to template folder
|
28
|
-
#
|
29
|
-
# @return [Array<Sinclair::MethodDefinition>]
|
30
|
-
def add_template_folder(folder)
|
31
|
-
add_method(:template_folder) do
|
32
|
-
folder
|
33
|
-
end
|
34
|
-
|
35
|
-
build
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|