From 7a2e33f883784391fae2c5499d6d9af74bcb9d42 Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Sun, 29 Mar 2015 01:09:26 +0900 Subject: [PATCH] Create Hamlit::Concerns::Included ref: b4c515893675c0496489ca6e3e3ed83125d8e057 --- lib/hamlit/compilers/attributes.rb | 6 ++++-- lib/hamlit/compilers/filter.rb | 15 ++++++++------- lib/hamlit/compilers/script.rb | 7 +++++-- lib/hamlit/concerns/escapable.rb | 8 ++++++-- lib/hamlit/concerns/included.rb | 28 ++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 lib/hamlit/concerns/included.rb diff --git a/lib/hamlit/compilers/attributes.rb b/lib/hamlit/compilers/attributes.rb index 346c457b..681c6820 100644 --- a/lib/hamlit/compilers/attributes.rb +++ b/lib/hamlit/compilers/attributes.rb @@ -1,14 +1,16 @@ require 'hamlit/compilers/new_attribute' require 'hamlit/compilers/old_attribute' +require 'hamlit/concerns/included' module Hamlit module Compilers module Attributes + extend Concerns::Included include Compilers::NewAttribute include Compilers::OldAttribute - def self.included(base) - base.define_options :format + included do + define_options :format end def on_haml_attrs(*attrs) diff --git a/lib/hamlit/compilers/filter.rb b/lib/hamlit/compilers/filter.rb index 7c932288..1017fbb2 100644 --- a/lib/hamlit/compilers/filter.rb +++ b/lib/hamlit/compilers/filter.rb @@ -1,3 +1,4 @@ +require 'hamlit/concerns/included' require 'hamlit/concerns/registerable' require 'hamlit/filters/css' require 'hamlit/filters/javascript' @@ -6,17 +7,17 @@ require 'hamlit/filters/ruby' module Hamlit module Compilers module Filter + extend Concerns::Included + BASE_DEPTH = 2 IGNORED_FILTERS = %w[ruby].freeze - def self.included(base) - base.class_eval do - extend Concerns::Registerable + included do + extend Concerns::Registerable - register :javascript, Filters::Javascript - register :css, Filters::Css - register :ruby, Filters::Ruby - end + register :javascript, Filters::Javascript + register :css, Filters::Css + register :ruby, Filters::Ruby end def on_haml_filter(name, exp) diff --git a/lib/hamlit/compilers/script.rb b/lib/hamlit/compilers/script.rb index 55760275..9e45b9eb 100644 --- a/lib/hamlit/compilers/script.rb +++ b/lib/hamlit/compilers/script.rb @@ -1,10 +1,13 @@ require 'hamlit/concerns/escapable' +require 'hamlit/concerns/included' module Hamlit module Compilers module Script - def self.included(base) - base.send(:include, Concerns::Escapable) + extend Concerns::Included + + included do + include Concerns::Escapable end def on_haml_script(*exps) diff --git a/lib/hamlit/concerns/escapable.rb b/lib/hamlit/concerns/escapable.rb index 6292cba2..5b58620d 100644 --- a/lib/hamlit/concerns/escapable.rb +++ b/lib/hamlit/concerns/escapable.rb @@ -1,8 +1,12 @@ +require 'hamlit/concerns/included' + module Hamlit module Concerns module Escapable - def self.included(base) - base.define_options(escape_html: false) + extend Included + + included do + define_options escape_html: false end def escape_html(exp, force_escape = false) diff --git a/lib/hamlit/concerns/included.rb b/lib/hamlit/concerns/included.rb new file mode 100644 index 00000000..20cbbc06 --- /dev/null +++ b/lib/hamlit/concerns/included.rb @@ -0,0 +1,28 @@ +# Mini ActiveSupport::Concern +module Hamlit + module Concerns + class MultipleIncludedBlocks < StandardError + def initialize + super "Cannot define multiple 'included' blocks for a Concern" + end + end + + module Included + def self.extended(klass) + klass.class_eval do + def self.included(base = nil, &block) + if block_given? + raise MultipleIncludedBlocks if defined?(@_included_block) + + @_included_block = block + return + end + + base.instance_exec(&@_included_block) if defined?(@_included_block) + super + end + end + end + end + end +end