slotmachine 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 +4 -4
- data/{MIT-LICENSE → LICENSE} +0 -0
- data/README.md +7 -0
- data/lib/slot_machine.rb +1 -3
- data/lib/slot_machine/config.rb +5 -8
- data/lib/slot_machine/controller_concern.rb +102 -0
- data/lib/slot_machine/version.rb +1 -1
- data/lib/slotmachine.rb +1 -0
- metadata +6 -7
- data/lib/slot_machine/application_controller_concern.rb +0 -9
- data/lib/slot_machine/helper.rb +0 -77
- data/lib/slot_machine/railtie.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2888bc896a4e6518d88c01b1fa1e9ecf39b07dd2
|
4
|
+
data.tar.gz: cb08aec43d4b45d705ca312b2c2a8dab1537d536
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ece189ab4344b53364c7aafa4097691c4803e83ccd2ce8cf74e967572681d235eabf25a16a17bef2a777da3997188826c5aa31889088e48d80f15a00fcba21bd
|
7
|
+
data.tar.gz: cde30b1568177c73af6085c74d50bc83920bd9d36248e05c17c4dd06515b53a2e147a24d9434271749c79003287d1f02b1fce5a0a72a5339957278477a54cc90
|
data/{MIT-LICENSE → LICENSE}
RENAMED
File without changes
|
data/README.md
CHANGED
@@ -29,6 +29,13 @@ require "slot_machine"
|
|
29
29
|
SlotMachine::Config.path = MyEngine::Engine.root.join('app/views/slots/_*')
|
30
30
|
```
|
31
31
|
|
32
|
+
And then in your application controller
|
33
|
+
```ruby
|
34
|
+
include SlotMachine::ControllerConcern
|
35
|
+
helper slot_machine_helper(path: 'you_can_override_the_path_of_the_slots_here/_*')
|
36
|
+
```
|
37
|
+
|
38
|
+
|
32
39
|
## Usage
|
33
40
|
|
34
41
|
### The simplest case
|
data/lib/slot_machine.rb
CHANGED
data/lib/slot_machine/config.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# Config where is store all informations
|
2
2
|
module SlotMachine::Config
|
3
|
-
def self.read_slots
|
4
|
-
slots_array = Dir[path].map do |
|
5
|
-
basename = File.basename(
|
3
|
+
def self.read_slots(custom_path = nil)
|
4
|
+
slots_array = Dir[custom_path || path].map do |p|
|
5
|
+
basename = File.basename(p, File.extname(p))
|
6
6
|
basename = basename.split('.').first
|
7
7
|
basename.slice!(0)
|
8
8
|
method_name = basename.parameterize.underscore.to_sym
|
9
|
-
|
9
|
+
partial_path = File.dirname(p).split('/views/').last
|
10
|
+
partial = File.join(partial_path, basename)
|
10
11
|
[method_name, partial]
|
11
12
|
end
|
12
13
|
|
@@ -24,8 +25,4 @@ module SlotMachine::Config
|
|
24
25
|
def self.path
|
25
26
|
@path || Rails.root.join('app/views/slots/_*')
|
26
27
|
end
|
27
|
-
|
28
|
-
def self.path=(value)
|
29
|
-
@path = value
|
30
|
-
end
|
31
28
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# Helper to be included in application_controller
|
2
|
+
module SlotMachine::ControllerConcern
|
3
|
+
# In the the view:
|
4
|
+
# `= foo label: 'toto' do 'something awesome' end`
|
5
|
+
#
|
6
|
+
# In the partial foo:
|
7
|
+
# `slots[:label] == label == 'toto'`
|
8
|
+
# `slots[:main] == main == 'something awesome'`
|
9
|
+
#
|
10
|
+
# so you should use `slots[:something]` when it could be unassigned
|
11
|
+
extend ActiveSupport::Concern
|
12
|
+
|
13
|
+
# A builder class base for the builder of the different partials
|
14
|
+
class Builder
|
15
|
+
attr_internal :slots
|
16
|
+
|
17
|
+
def initialize(template)
|
18
|
+
@template = template
|
19
|
+
end
|
20
|
+
|
21
|
+
# attribute reader
|
22
|
+
def slots
|
23
|
+
@slots ||= Hash.new { |h, k| h[k] = ActiveSupport::SafeBuffer.new('') }
|
24
|
+
end
|
25
|
+
|
26
|
+
def slot?(name)
|
27
|
+
!slots[name].blank?
|
28
|
+
end
|
29
|
+
|
30
|
+
# append the named slot
|
31
|
+
def append_slot(name = :main, string = nil, &block)
|
32
|
+
slots[name].concat(@template.get_buffer(string, &block))
|
33
|
+
nil # why the fuck do I need this. It shouldn't put anything in the buffer but it does.
|
34
|
+
end
|
35
|
+
alias_method :slot, :append_slot
|
36
|
+
end
|
37
|
+
|
38
|
+
class_methods do
|
39
|
+
# create the module to be called as a helper
|
40
|
+
# Typically :
|
41
|
+
# ```
|
42
|
+
# include SlotMachine::ControllerConcern
|
43
|
+
# helper slot_machine_create_module(my_path)
|
44
|
+
# ````
|
45
|
+
def slot_machine_helper(path: nil)
|
46
|
+
return @helper_module unless @helper_module.nil?
|
47
|
+
|
48
|
+
# Read slot on the custom path
|
49
|
+
slots = SlotMachine::Config.read_slots(path)
|
50
|
+
method_names = slots.keys
|
51
|
+
|
52
|
+
# Instantiate the new module
|
53
|
+
@helper_module = Module.new
|
54
|
+
|
55
|
+
# Create a child builder class with all the methods
|
56
|
+
builder_class = Class.new(Builder)
|
57
|
+
|
58
|
+
builder_class.class_eval do
|
59
|
+
method_names.each do |method_name|
|
60
|
+
define_method(method_name) do |args = { slot: :main }, &block|
|
61
|
+
slot_name = args.delete(:slot)
|
62
|
+
rendered_partial = @template.send(method_name, args, &block)
|
63
|
+
append_slot(slot_name, rendered_partial)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Add 1 method per partial in the module as well
|
69
|
+
method_names.each do |method_name|
|
70
|
+
@helper_module.module_eval do
|
71
|
+
# this one should be in the builder but it doesnt have the builder method
|
72
|
+
def get_buffer(string = nil, &block)
|
73
|
+
return string unless block
|
74
|
+
|
75
|
+
capture { yield }
|
76
|
+
end
|
77
|
+
define_method(method_name) do |locals = {}, &block|
|
78
|
+
# that is some weird shit but il allow to access all the local_assigns
|
79
|
+
# within the slots and still access the directly
|
80
|
+
locals[:slots] = locals
|
81
|
+
|
82
|
+
# Here we create the builder
|
83
|
+
# we execute the block while passing the builder
|
84
|
+
# all the slotted partial will be in the builder
|
85
|
+
# and activeview buffer is captured and slotted
|
86
|
+
# in the main slot
|
87
|
+
if block
|
88
|
+
builder = builder_class.new(self)
|
89
|
+
captured = capture { block.call(builder) }
|
90
|
+
builder.append_slot(:main, captured)
|
91
|
+
locals[:slots] = locals[:slots].merge(builder.slots)
|
92
|
+
locals[:m] = builder
|
93
|
+
end
|
94
|
+
render slots[method_name], locals
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
@helper_module
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/lib/slot_machine/version.rb
CHANGED
data/lib/slotmachine.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'slot_machine'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slotmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cedric Feyaerts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,22 +24,21 @@ dependencies:
|
|
24
24
|
- - ">"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
|
-
description:
|
27
|
+
description: Hides the ugly css and html from your views
|
28
28
|
email:
|
29
29
|
- c.feyaerts@adhoc-gti.com
|
30
30
|
executables: []
|
31
31
|
extensions: []
|
32
32
|
extra_rdoc_files: []
|
33
33
|
files:
|
34
|
-
-
|
34
|
+
- LICENSE
|
35
35
|
- README.md
|
36
36
|
- Rakefile
|
37
37
|
- lib/slot_machine.rb
|
38
|
-
- lib/slot_machine/application_controller_concern.rb
|
39
38
|
- lib/slot_machine/config.rb
|
40
|
-
- lib/slot_machine/
|
41
|
-
- lib/slot_machine/railtie.rb
|
39
|
+
- lib/slot_machine/controller_concern.rb
|
42
40
|
- lib/slot_machine/version.rb
|
41
|
+
- lib/slotmachine.rb
|
43
42
|
homepage: https://gitlab.com/cedricfeyaerts/slot-machine
|
44
43
|
licenses:
|
45
44
|
- MIT
|
data/lib/slot_machine/helper.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
# Helper to be included in application_controller
|
2
|
-
module SlotMachine::Helper
|
3
|
-
# In the the view:
|
4
|
-
# `= foo label: 'toto' do 'something awesome' end`
|
5
|
-
#
|
6
|
-
# In the partial foo:
|
7
|
-
# `slots[:label] == label == 'toto'`
|
8
|
-
# `slots[:main] == main == 'something awesome'`
|
9
|
-
#
|
10
|
-
# so you should use `slots[:something]` when it could be unassigned
|
11
|
-
extend ActiveSupport::Concern
|
12
|
-
|
13
|
-
included do
|
14
|
-
SlotMachine::Config.read_slots
|
15
|
-
SlotMachine::Config.method_names.each do |method_name|
|
16
|
-
define_method(method_name) do |locals = {}, &block|
|
17
|
-
# that is some weird shit but il allow to access all the local_assigns
|
18
|
-
# within the slots and still access the directly
|
19
|
-
locals[:slots] = locals
|
20
|
-
|
21
|
-
# Here we create the builder
|
22
|
-
# we execute the block while passing the builder
|
23
|
-
# all the slotted partial will be in the builder
|
24
|
-
# and activeview buffer is captured and slotted
|
25
|
-
# in the main slot
|
26
|
-
if block
|
27
|
-
builder = Builder.new(self)
|
28
|
-
captured = capture { block.call(builder) }
|
29
|
-
builder.append_slot(:main, captured)
|
30
|
-
locals[:slots] = locals[:slots].merge(builder.slots)
|
31
|
-
locals[:m] = builder
|
32
|
-
end
|
33
|
-
render SlotMachine::Config.partial(method_name), locals
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# A builder for the different partial
|
38
|
-
class Builder
|
39
|
-
attr_internal :slots
|
40
|
-
|
41
|
-
def initialize(template)
|
42
|
-
@template = template
|
43
|
-
end
|
44
|
-
|
45
|
-
# attribute reader
|
46
|
-
def slots
|
47
|
-
@slots ||= Hash.new { |h, k| h[k] = ActiveSupport::SafeBuffer.new('') }
|
48
|
-
end
|
49
|
-
|
50
|
-
def slot?(name)
|
51
|
-
!slots[name].blank?
|
52
|
-
end
|
53
|
-
|
54
|
-
# append the named slot
|
55
|
-
def append_slot(name = :main, string = nil, &block)
|
56
|
-
slots[name].concat(@template.get_buffer(string, &block))
|
57
|
-
nil # why the fuck do I need this. It shouldn't put anything in the buffer but it does.
|
58
|
-
end
|
59
|
-
alias_method :slot, :append_slot
|
60
|
-
|
61
|
-
SlotMachine::Config.method_names.each do |method_name|
|
62
|
-
define_method(method_name) do |args = { slot: :main }, &block|
|
63
|
-
slot_name = args.delete(:slot)
|
64
|
-
rendered_partial = @template.send(method_name, args, &block)
|
65
|
-
append_slot(slot_name, rendered_partial)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# this one should be in the builder but it doesnt have the builder method
|
72
|
-
def get_buffer(string = nil, &block)
|
73
|
-
return string unless block
|
74
|
-
|
75
|
-
capture { yield }
|
76
|
-
end
|
77
|
-
end
|
data/lib/slot_machine/railtie.rb
DELETED