magicka 0.1.0 → 0.2.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.
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