eskimo-core 3.0.0 → 4.0.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: fc14c3e22761d1079baf6913950b776a4e384dbdacf4fb64ce3bed7e1f112e85
4
- data.tar.gz: 131ea9f78c1232b8316e27f24349205a01ffaad6e842dbe71237d2428cd1d399
3
+ metadata.gz: 959bb830335b91b27d98fb567b1559c0850100dac0fd60e589045bd7d24a8564
4
+ data.tar.gz: 9a03b3bf7d2cf19941b17627ec0483cf619c1c51d66e5ee25cfa0bcfc9110ac6
5
5
  SHA512:
6
- metadata.gz: 2d1be644a0eb5a7e5686bbae7860aaf045956b944ae17810c9bb4d1a7c1abbe48cab25d6a5bdb8e6b699a84186be67bcd3b508d312beb22e980405a5e80634eb
7
- data.tar.gz: a258d82b084f340d7b9ad39d67765ab00c030c095ddd7016cc40f3d3b55cb90ec1bf98372c84fefe53a4282d10822184a26f7f794c9154d5753d531d8c67b1ca
6
+ metadata.gz: 5c6b7af2e3f5ed74c5c1deb884f8cad0da8b28674d115ca3cf3bf2e1f73c622e9da55ca5d58b5ed94c621bb30cfb4fb8aa5080f3b4b706703a9faddeedfceda9
7
+ data.tar.gz: 6768bf9549547792de1f23bfd91201e1262225a332b1034379be3bdb2194d967ec2da50d4c57c7b3176a82a9dcbba0ba38c88fa02d04419dd53e6eab55a686e9
@@ -0,0 +1,33 @@
1
+ module Eskimo
2
+ module Core
3
+ module Props
4
+ def self.included(base)
5
+ fail "#{name} must be prepended"
6
+ end
7
+
8
+ def self.prepended(base)
9
+ if base.include?(Eskimo::Core::Slots)
10
+ fail "#{name} must be prepended before Eskmo::Core::Slots"
11
+ end
12
+ end
13
+
14
+ def initialize(**props, &children)
15
+ @props = props
16
+ @children = children
17
+
18
+ # can't find a cleaner way to check if parent constructor is defined
19
+ # ref (they also can't seem to find a better way):
20
+ # <https://apidock.com/rails/ActiveRecord/Coders/ColumnSerializer/check_arity_of_constructor>
21
+ begin
22
+ super
23
+ rescue ArgumentError => e
24
+ raise unless e.to_s.include?("expected 0")
25
+ end
26
+ end
27
+
28
+ def render(**kwargs)
29
+ super(**kwargs.merge(@props), &@children)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,64 @@
1
+ module Eskimo
2
+ module Core
3
+ module Slots
4
+ def self.included(base)
5
+ fail "#{name} must be prepended"
6
+ end
7
+
8
+ def self.prepended(base)
9
+ base.extend(ClassMethods)
10
+ end
11
+
12
+ def initialize(**props, &occupants_or_children)
13
+ if klass_slots = self.class.instance_variable_get('@slots')
14
+ @slots = Hash[klass_slots.map { |k| [k,nil] }]
15
+
16
+ if occupants_or_children && occupants_or_children.arity == 1
17
+ occupants_or_children[SlotBuilder.new(@slots)]
18
+
19
+ begin
20
+ super(**props, &nil)
21
+ rescue ArgumentError => e
22
+ raise unless e.to_s.include?("expected 0")
23
+ end
24
+
25
+ return
26
+ end
27
+ end
28
+
29
+ begin
30
+ super
31
+ rescue ArgumentError => e
32
+ raise unless e.to_s.include?("expected 0")
33
+ end
34
+ end
35
+
36
+ module ClassMethods
37
+ def slot(name)
38
+ @slots ||= []
39
+ @slots << name
40
+ end
41
+ end
42
+
43
+ class SlotBuilder
44
+ def initialize(store)
45
+ @store = store
46
+ end
47
+
48
+ def method_missing(name, *args, &block)
49
+ if @store.keys.include?(name.to_sym) && block
50
+ @store[name] = block
51
+ else
52
+ super
53
+ end
54
+ end
55
+
56
+ def respond_to_missing?(name, include_private = false)
57
+ true
58
+ end
59
+ end
60
+
61
+ private_constant :SlotBuilder
62
+ end
63
+ end
64
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Eskimo
4
4
  module Core
5
- VERSION = '3.0.0'
5
+ VERSION = '4.0.0'
6
6
  end
7
7
  end
data/lib/eskimo/core.rb CHANGED
@@ -4,4 +4,6 @@ module Eskimo
4
4
  end
5
5
 
6
6
  require 'eskimo/core/renderer'
7
+ require 'eskimo/core/props'
8
+ require 'eskimo/core/slots'
7
9
  require 'eskimo/core/version'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eskimo-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmad Amireh
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-04-18 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rspec
@@ -45,7 +44,9 @@ extensions: []
45
44
  extra_rdoc_files: []
46
45
  files:
47
46
  - lib/eskimo/core.rb
47
+ - lib/eskimo/core/props.rb
48
48
  - lib/eskimo/core/renderer.rb
49
+ - lib/eskimo/core/slots.rb
49
50
  - lib/eskimo/core/version.rb
50
51
  - spec/renderer_spec.rb
51
52
  - spec/spec_helper.rb
@@ -53,7 +54,6 @@ homepage: https://github.com/amireh/eskimo
53
54
  licenses:
54
55
  - MIT
55
56
  metadata: {}
56
- post_install_message:
57
57
  rdoc_options: []
58
58
  require_paths:
59
59
  - lib
@@ -68,11 +68,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  requirements: []
71
- rubyforge_project:
72
- rubygems_version: 2.7.6
73
- signing_key:
71
+ rubygems_version: 3.6.8
74
72
  specification_version: 4
75
73
  summary: Declarative text formatting
76
74
  test_files:
77
- - spec/spec_helper.rb
78
75
  - spec/renderer_spec.rb
76
+ - spec/spec_helper.rb