magicka 0.3.1 → 0.5.3
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 -7
- data/lib/magicka/aggregator.rb +47 -0
- data/lib/magicka/aggregator/method_builder.rb +40 -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/display_spec.rb +169 -0
- data/spec/lib/magicka/{method_builder_spec.rb → element/method_builder_spec.rb} +1 -1
- data/spec/lib/magicka/form_spec.rb +183 -0
- data/spec/lib/magicka/text_spec.rb +52 -0
- metadata +13 -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: 790574b274384507133ba81bff57316fdee267695e6a86bbb36da2065d98f918
|
4
|
+
data.tar.gz: ded516626da7b9825e1711aa4d299cd0388de7293776cc20c9facc607b4ba8ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2fb23dfa2dca070216bede19831ca54bc0c9ee1340418848e647512d4ec7668ee97b0015aa8d7d3b85e6014883e263107ce8360efed4286342e714f502d93ce
|
7
|
+
data.tar.gz: 6e165bd37c83eb5d3c0c760164f2f93e9d51d05f284621960012e24b81d5b7779140cca6f1d47128bd24a4545201e77becd489fa20d9e0ac6ba816cd01dc8fdf
|
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.3
|
14
|
+
[https://www.rubydoc.info/gems/magicka/0.5.3](https://www.rubydoc.info/gems/magicka/0.5.3)
|
15
15
|
|
16
16
|
Installation
|
17
17
|
---------------
|
data/config/check_specs.yml
CHANGED
data/config/yardstick.yml
CHANGED
data/lib/magicka.rb
CHANGED
@@ -10,11 +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 :
|
19
|
-
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'
|
20
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, base: self.model)
|
27
|
+
new_model = [base, model].compact.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,169 @@
|
|
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
|
+
|
143
|
+
describe '#with_form' do
|
144
|
+
it do
|
145
|
+
form.with_model('sub') do |new_form|
|
146
|
+
expect(new_form)
|
147
|
+
.to eq(described_class.new(renderer, 'my_model.sub'))
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context 'when passing a new base' do
|
152
|
+
it do
|
153
|
+
form.with_model('sub', base: :other_model) do |new_form|
|
154
|
+
expect(new_form)
|
155
|
+
.to eq(described_class.new(renderer, 'other_model.sub'))
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'when passing an empty base' do
|
161
|
+
it do
|
162
|
+
form.with_model('sub', base: nil) do |new_form|
|
163
|
+
expect(new_form)
|
164
|
+
.to eq(described_class.new(renderer, 'sub'))
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,183 @@
|
|
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
|
+
|
157
|
+
describe '#with_form' do
|
158
|
+
it do
|
159
|
+
form.with_model('sub') do |new_form|
|
160
|
+
expect(new_form)
|
161
|
+
.to eq(described_class.new(renderer, 'my_model.sub'))
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
context 'when passing a new base' do
|
166
|
+
it do
|
167
|
+
form.with_model('sub', base: :other_model) do |new_form|
|
168
|
+
expect(new_form)
|
169
|
+
.to eq(described_class.new(renderer, 'other_model.sub'))
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'when passing an empty base' do
|
175
|
+
it do
|
176
|
+
form.with_model('sub', base: nil) do |new_form|
|
177
|
+
expect(new_form)
|
178
|
+
.to eq(described_class.new(renderer, 'sub'))
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
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.3
|
4
|
+
version: 0.5.3
|
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-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -397,13 +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
|
400
402
|
- lib/magicka/button.rb
|
403
|
+
- lib/magicka/display.rb
|
401
404
|
- lib/magicka/element.rb
|
402
405
|
- lib/magicka/element/class_methods.rb
|
406
|
+
- lib/magicka/element/method_builder.rb
|
407
|
+
- lib/magicka/form.rb
|
403
408
|
- lib/magicka/form_element.rb
|
409
|
+
- lib/magicka/helper.rb
|
404
410
|
- lib/magicka/input.rb
|
405
|
-
- lib/magicka/method_builder.rb
|
406
411
|
- lib/magicka/select.rb
|
412
|
+
- lib/magicka/text.rb
|
407
413
|
- lib/magicka/version.rb
|
408
414
|
- magicka.gemspec
|
409
415
|
- magicka.jpg
|
@@ -469,12 +475,15 @@ files:
|
|
469
475
|
- spec/integration/readme/.keep
|
470
476
|
- spec/integration/yard/.keep
|
471
477
|
- spec/lib/magicka/button_spec.rb
|
478
|
+
- spec/lib/magicka/display_spec.rb
|
472
479
|
- spec/lib/magicka/element/class_methods_spec.rb
|
480
|
+
- spec/lib/magicka/element/method_builder_spec.rb
|
473
481
|
- spec/lib/magicka/element_spec.rb
|
474
482
|
- spec/lib/magicka/form_element_spec.rb
|
483
|
+
- spec/lib/magicka/form_spec.rb
|
475
484
|
- spec/lib/magicka/input_spec.rb
|
476
|
-
- spec/lib/magicka/method_builder_spec.rb
|
477
485
|
- spec/lib/magicka/select_spec.rb
|
486
|
+
- spec/lib/magicka/text_spec.rb
|
478
487
|
- spec/spec_helper.rb
|
479
488
|
- spec/support/models/.keep
|
480
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
|