Allow layout options configuration from run control

This commit is contained in:
Thibault Jouan 2015-04-26 02:49:39 +00:00
parent 70fe9bdb03
commit 7c2712924a
3 changed files with 34 additions and 9 deletions

View File

@ -4,8 +4,12 @@ Feature: `layout' run control keyword
Given a file named my_layout.rb with:
"""
class MyLayout
def register *_
puts "testing_rc_layout"
def initialize **options
puts "testing_rc_layout_#{options.inspect}" if options.any?
end
def register *_, **options
puts "testing_rc_layout_register"
end
end
"""
@ -16,7 +20,15 @@ Feature: `layout' run control keyword
layout MyLayout
"""
When I run uhwm with options -r./my_layout
Then the output must contain "testing_rc_layout"
Then the output must contain "testing_rc_layout_register"
Scenario: configures a layout class with options
Given a run control file with:
"""
layout MyLayout, foo: :bar
"""
When I run uhwm with options -r./my_layout
Then the output must contain "testing_rc_layout_{:foo=>:bar}"
Scenario: configures a layout instance
Given a run control file with:
@ -24,4 +36,4 @@ Feature: `layout' run control keyword
layout MyLayout.new
"""
When I run uhwm with options -r./my_layout
Then the output must contain "testing_rc_layout"
Then the output must contain "testing_rc_layout_register"

View File

@ -32,11 +32,15 @@ module Uh
@env.keybinds[translate_keysym *keysyms] = block
end
def layout obj
if obj.is_a? Class
@env.layout_class = obj
def layout arg, **options
if arg.is_a? Class
if options.any?
@env.layout = arg.new options
else
@env.layout_class = arg
end
else
@env.layout = obj
@env.layout = arg
end
end

View File

@ -87,10 +87,19 @@ module Uh
describe '#layout' do
context 'when given a class' do
let(:layout_class) { Class.new }
it 'sets a layout class in the env' do
rc.layout layout_class = Class.new
rc.layout layout_class
expect(env.layout_class).to be layout_class
end
context 'when given options' do
it 'instantiates the class with given options' do
expect(layout_class).to receive(:new).with(foo: :bar)
rc.layout layout_class, foo: :bar
end
end
end
context 'when given an object' do