magicka 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb9d51d1218f32ac849193da117869a8bbc8bfa51f8cb2f8c7eb3c4845309200
4
- data.tar.gz: e6728fa98edd29a39de7c53497e542496468006f7c5902f112b3860835f2579d
3
+ metadata.gz: 9431c86cdde2b07ceb2abfd3554f2e40a086df1dc8cfb760dbc7db514db1dcbe
4
+ data.tar.gz: 30e5f36c63e91fb2a6ce81f25f147b474e6613abeca0446c04cfe96d587cfbbd
5
5
  SHA512:
6
- metadata.gz: 07b9a25dd6fd4bb5d978a0d1a8f20e94320735b288ad469f31a2c31331f146f6b0f7c9ef54294d171e87732af3090e3093f7b04785a165ebf89d59f4e9ffb09a
7
- data.tar.gz: 0da01e6080f9c53033dd44ff44f1fe37e442c27875f477d2c16005c3f17fe604a2206c3e10cf20d20b3a0732ca8ac4eb56226f3ac8294ed41604864173632e94
6
+ metadata.gz: ab094ae97de3a63092f2835032152ee71e8747faffef2988540e5ef225b4187d8d688c2578accbccf7e90a7adf02a876bd2b89f847f1a7307d580b552b505a2e
7
+ data.tar.gz: fc74112bcde8321f00b6fee6e61984c13f80ed280ac4ddbfd2bfff59f824c88cdfe796703e914918b0cbbd3f7e6b47a47e9cff94c875d0da7b920d189b093bd3
data/Dockerfile CHANGED
@@ -1,6 +1,6 @@
1
1
  FROM darthjee/scripts:0.1.8 as scripts
2
2
 
3
- FROM darthjee/rails_gems:0.5.4 as base
3
+ FROM darthjee/rails_gems:0.6.0 as base
4
4
 
5
5
  COPY --chown=app:app ./ /home/app/app/
6
6
 
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.1,0](https://www.rubydoc.info/gems/magicka/0.1.0)
14
+ [https://www.rubydoc.info/gems/magicka/0.2,0](https://www.rubydoc.info/gems/magicka/0.2.0)
15
15
 
16
16
  Installation
17
17
  ---------------
@@ -1,4 +1,4 @@
1
- threshold: 90.6
1
+ threshold: 92.2
2
2
  require_exact_threshold: false
3
3
  rules:
4
4
  ApiTag::Presence:
@@ -21,7 +21,8 @@ rules:
21
21
  exclude: []
22
22
  Summary::Presence:
23
23
  enabled: true
24
- exclude: []
24
+ exclude:
25
+ - Magicka::Element#initialize
25
26
  Summary::Length:
26
27
  enabled: true
27
28
  exclude: []
@@ -13,5 +13,6 @@ module Magicka
13
13
  autoload :VERSION, 'magicka/version'
14
14
  autoload :Element, 'magicka/element'
15
15
  autoload :Input, 'magicka/input'
16
+ autoload :InputElement, 'magicka/input_element'
16
17
  autoload :MethodBuilder, 'magicka/method_builder'
17
18
  end
@@ -10,6 +10,12 @@ module Magicka
10
10
  skip_validation
11
11
 
12
12
  class << self
13
+ # @api public
14
+ # @!visibility public
15
+ #
16
+ # Add available options
17
+ #
18
+ # @return [Array<Sinclair::MethodDefinition>]
13
19
  alias with_attributes with_options
14
20
 
15
21
  include ClassMethods
@@ -62,5 +68,16 @@ module Magicka
62
68
  hash.merge!(attribute => send(attribute))
63
69
  end
64
70
  end
71
+
72
+ # @api public
73
+ # @private
74
+ #
75
+ # Returns template file location
76
+ #
77
+ # @return [String]
78
+ def template
79
+ name.underscore
80
+ .gsub(%r{^.*/}, "#{template_folder}/")
81
+ end
65
82
  end
66
83
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Magicka
4
4
  class Element < Sinclair::Options
5
+ # @api public
6
+ #
5
7
  # Class methods used for metaprograming of elements
6
8
  module ClassMethods
7
9
  # render template using the given prameters
@@ -20,11 +22,6 @@ module Magicka
20
22
  @locals ||= superclass.try(:locals)&.dup || Set.new([])
21
23
  end
22
24
 
23
- private
24
-
25
- # @api public
26
- # @!visibility public
27
- #
28
25
  # Sets template for element type
29
26
  #
30
27
  # @return [Array<Sinclair::MethodDefinition>]
@@ -34,6 +31,17 @@ module Magicka
34
31
  .add_template(template)
35
32
  end
36
33
 
34
+ # Sets template folder for element type
35
+ #
36
+ # @return [Array<Sinclair::MethodDefinition>]
37
+ def template_folder(folder)
38
+ MethodBuilder
39
+ .new(self)
40
+ .add_template_folder(folder)
41
+ end
42
+
43
+ private
44
+
37
45
  # @api public
38
46
  # @!visibility public
39
47
  #
@@ -2,46 +2,7 @@
2
2
 
3
3
  module Magicka
4
4
  # Input element representing an HTML +<input/>+
5
- class Input < Element
6
- with_attribute_locals :field, :placeholder, :label
7
- with_attributes :model
8
- with_locals :ng_errors, :ng_model
9
-
10
- template 'templates/forms/input'
11
-
12
- private
13
-
14
- # @api private
15
- # @private
16
- #
17
- # Label to be shon near the input
18
- #
19
- # when no label is provided, the name of
20
- # the field is used
21
- #
22
- # @return [String]
23
- def label
24
- @label ||= field.to_s.capitalize.gsub(/_/, ' ')
25
- end
26
-
27
- # @api private
28
- # @private
29
- #
30
- # ng model to be represented with the input
31
- #
32
- # @return [String]
33
- def ng_model
34
- [model, field].join('.')
35
- end
36
-
37
- # @api private
38
- # @private
39
- #
40
- # ng errors to be exposed with the input
41
- #
42
- # @return [String]
43
- def ng_errors
44
- [model, :errors, field].join('.')
45
- end
5
+ class Input < InputElement
6
+ with_attribute_locals :placeholder
46
7
  end
47
8
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Magicka
4
+ # @api public
5
+ #
6
+ # Basic class for elements for forms
7
+ class InputElement < Element
8
+ with_attribute_locals :field, :label
9
+ with_attributes :model
10
+ with_locals :ng_errors, :ng_model
11
+
12
+ private
13
+
14
+ # @api private
15
+ # @private
16
+ #
17
+ # Label to be shon near the input
18
+ #
19
+ # when no label is provided, the name of
20
+ # the field is used
21
+ #
22
+ # @return [String]
23
+ def label
24
+ @label ||= field.to_s.capitalize.gsub(/_/, ' ')
25
+ end
26
+
27
+ # @api private
28
+ # @private
29
+ #
30
+ # ng model to be represented with the input
31
+ #
32
+ # @return [String]
33
+ def ng_model
34
+ [model, field].join('.')
35
+ end
36
+
37
+ # @api private
38
+ # @private
39
+ #
40
+ # ng errors to be exposed with the input
41
+ #
42
+ # @return [String]
43
+ def ng_errors
44
+ [model, :errors, field].join('.')
45
+ end
46
+ end
47
+ end
@@ -19,5 +19,20 @@ module Magicka
19
19
 
20
20
  build
21
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
22
37
  end
23
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Magicka
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -19,17 +19,17 @@ Gem::Specification.new do |gem|
19
19
  gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
20
20
  gem.require_paths = ['lib']
21
21
 
22
- gem.add_runtime_dependency 'activesupport', '~> 5.2.4.2'
23
- gem.add_runtime_dependency 'sinclair', '>= 1.6.6'
22
+ gem.add_runtime_dependency 'activesupport', '~> 5.2.4.3'
23
+ gem.add_runtime_dependency 'sinclair', '>= 1.6.7'
24
24
 
25
- gem.add_development_dependency 'actionpack', '5.2.4.2'
26
- gem.add_development_dependency 'activerecord', '5.2.4.2'
25
+ gem.add_development_dependency 'actionpack', '5.2.4.3'
26
+ gem.add_development_dependency 'activerecord', '5.2.4.3'
27
27
  gem.add_development_dependency 'bundler', '1.16.1'
28
28
  gem.add_development_dependency 'factory_bot', '5.2.0'
29
29
  gem.add_development_dependency 'nokogiri', '1.10.9'
30
30
  gem.add_development_dependency 'pry', '0.12.2'
31
31
  gem.add_development_dependency 'pry-nav', '0.3.0'
32
- gem.add_development_dependency 'rails', '5.2.4.2'
32
+ gem.add_development_dependency 'rails', '5.2.4.3'
33
33
  gem.add_development_dependency 'rails-controller-testing', '1.0.4'
34
34
  gem.add_development_dependency 'rake', '13.0.1'
35
35
  gem.add_development_dependency 'reek', '5.6.0'
@@ -23,13 +23,13 @@ describe Magicka::Element::ClassMethods do
23
23
 
24
24
  describe '.template' do
25
25
  it do
26
- expect { klass.send(:template, template) }
26
+ expect { klass.template(template) }
27
27
  .to add_method(:template)
28
28
  .to(klass)
29
29
  end
30
30
 
31
31
  context 'when method is build as requested' do
32
- before { klass.send(:template, template) }
32
+ before { klass.template(template) }
33
33
 
34
34
  it 'returns the defined template when method is called' do
35
35
  expect(element.template).to eq(template)
@@ -37,9 +37,27 @@ describe Magicka::Element::ClassMethods do
37
37
  end
38
38
  end
39
39
 
40
+ describe '.template_folder' do
41
+ let(:folder) { 'templates/forms' }
42
+
43
+ it do
44
+ expect { klass.template_folder(folder) }
45
+ .to add_method(:template_folder)
46
+ .to(klass)
47
+ end
48
+
49
+ context 'when method is build as requested' do
50
+ before { klass.template_folder(folder) }
51
+
52
+ it 'returns the defined template when method is called' do
53
+ expect(element.template_folder).to eq(folder)
54
+ end
55
+ end
56
+ end
57
+
40
58
  describe '.render' do
41
59
  before do
42
- klass.send(:template, template)
60
+ klass.template(template)
43
61
 
44
62
  allow(renderer)
45
63
  .to receive(:render)
@@ -11,26 +11,22 @@ describe Magicka::Element do
11
11
 
12
12
  let(:renderer) { instance_double('renderer') }
13
13
  let(:template) { 'templates/forms/element' }
14
+ let(:folder) { 'templates/forms' }
14
15
  let(:locals) { {} }
15
16
 
17
+ let(:method_builder) { Sinclair.new(klass) }
18
+ let(:expected_template) { template }
19
+
16
20
  describe '#render' do
17
21
  before do
18
- klass.send(:template, template)
19
-
20
22
  allow(renderer)
21
23
  .to receive(:render)
22
- .with(partial: template, locals: locals)
23
- end
24
-
25
- it do
26
- element.render
27
-
28
- expect(renderer).to have_received(:render)
24
+ .with(partial: expected_template, locals: locals)
29
25
  end
30
26
 
31
- context 'when initialized with extra params' do
32
- subject(:element) do
33
- klass.new(renderer: renderer, name: 'Name')
27
+ context 'when class has a defined template' do
28
+ before do
29
+ klass.template(template)
34
30
  end
35
31
 
36
32
  it do
@@ -38,17 +34,46 @@ describe Magicka::Element do
38
34
 
39
35
  expect(renderer).to have_received(:render)
40
36
  end
41
- end
42
37
 
43
- context 'when class have locals defined' do
44
- subject(:element) do
45
- klass.new(renderer: renderer, name: 'Name')
38
+ context 'when initialized with extra params' do
39
+ subject(:element) do
40
+ klass.new(renderer: renderer, name: 'Name')
41
+ end
42
+
43
+ it do
44
+ element.render
45
+
46
+ expect(renderer).to have_received(:render)
47
+ end
46
48
  end
47
49
 
48
- let(:locals) { { name: 'Name' } }
50
+ context 'when class have locals defined' do
51
+ subject(:element) do
52
+ klass.new(renderer: renderer, name: 'Name')
53
+ end
54
+
55
+ let(:locals) { { name: 'Name' } }
56
+
57
+ before do
58
+ klass.send(:with_attribute_locals, :name)
59
+ end
60
+
61
+ it do
62
+ element.render
63
+
64
+ expect(renderer).to have_received(:render)
65
+ end
66
+ end
67
+ end
68
+
69
+ context 'when class has only folder defined' do
70
+ let(:expected_template) { 'templates/forms/input' }
49
71
 
50
72
  before do
51
- klass.send(:with_attribute_locals, :name)
73
+ klass.template_folder(folder)
74
+
75
+ method_builder.add_method(:name) { 'Magicka::Input' }
76
+ method_builder.build
52
77
  end
53
78
 
54
79
  it do
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Magicka::InputElement do
6
+ let(:renderer) { instance_double('renderer') }
7
+ let(:template) { 'templates/forms/input' }
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_errors: 'my_model.errors.field',
18
+ ng_model: 'my_model.field'
19
+ }
20
+ end
21
+
22
+ before do
23
+ described_class.template(template)
24
+ end
25
+
26
+ describe '.render' do
27
+ let(:arguments) do
28
+ {
29
+ renderer: renderer,
30
+ field: field,
31
+ label: label,
32
+ model: model
33
+ }
34
+ end
35
+
36
+ before do
37
+ allow(renderer)
38
+ .to receive(:render)
39
+ .with(partial: template, locals: locals)
40
+ end
41
+
42
+ it do
43
+ described_class.render(arguments)
44
+
45
+ expect(renderer).to have_received(:render)
46
+ end
47
+
48
+ context 'when called with extra params' do
49
+ it do
50
+ described_class.render(name: 'Name', **arguments)
51
+
52
+ expect(renderer).to have_received(:render)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -25,4 +25,22 @@ describe Magicka::MethodBuilder do
25
25
  end
26
26
  end
27
27
  end
28
+
29
+ describe '#add_template_folder' do
30
+ let(:folder) { 'path_to_template_folder' }
31
+
32
+ it do
33
+ expect { builder.add_template_folder(folder) }
34
+ .to add_method(:template_folder)
35
+ .to(klass)
36
+ end
37
+
38
+ context 'when method is build as requested' do
39
+ before { builder.add_template_folder(folder) }
40
+
41
+ it 'returns the defined template folder when method is called' do
42
+ expect(instance.template_folder).to eq(folder)
43
+ end
44
+ end
45
+ end
28
46
  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.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DarthJee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-24 00:00:00.000000000 Z
11
+ date: 2020-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.4.2
19
+ version: 5.2.4.3
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.4.2
26
+ version: 5.2.4.3
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.6
33
+ version: 1.6.7
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.6
40
+ version: 1.6.7
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.4.2
47
+ version: 5.2.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.4.2
54
+ version: 5.2.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.4.2
61
+ version: 5.2.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.4.2
68
+ version: 5.2.4.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - '='
144
144
  - !ruby/object:Gem::Version
145
- version: 5.2.4.2
145
+ version: 5.2.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.4.2
152
+ version: 5.2.4.3
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: rails-controller-testing
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -400,6 +400,7 @@ files:
400
400
  - lib/magicka/element.rb
401
401
  - lib/magicka/element/class_methods.rb
402
402
  - lib/magicka/input.rb
403
+ - lib/magicka/input_element.rb
403
404
  - lib/magicka/method_builder.rb
404
405
  - lib/magicka/version.rb
405
406
  - magicka.gemspec
@@ -467,6 +468,7 @@ files:
467
468
  - spec/integration/yard/.keep
468
469
  - spec/lib/magicka/element/class_methods_spec.rb
469
470
  - spec/lib/magicka/element_spec.rb
471
+ - spec/lib/magicka/input_element_spec.rb
470
472
  - spec/lib/magicka/input_spec.rb
471
473
  - spec/lib/magicka/method_builder_spec.rb
472
474
  - spec/spec_helper.rb