module Rbem
Constants
- VERSION
Public Instance Methods
b(*args, &block)
click to toggle source
# File lib/rbem.rb, line 10 def b(*args, &block) _args = parse_args(args) @block_name = _args[:name] @block_mods = _args[:mods] block_type = _args[:type] block_opts = _args[:options] block_opts[:class] = collect_bem_class(@block_name, @block_mods, block_opts, type: :block) content_tag(block_type, block_given? ? capture(&block) : nil, block_opts) end
e(*args, &block)
click to toggle source
# File lib/rbem.rb, line 24 def e(*args, &block) _args = parse_args(args) el_name = _args[:name] el_mods = _args[:mods] el_type = _args[:type] el_opts = _args[:options] el_opts[:class] = collect_bem_class(el_name, el_mods, el_opts, type: :element, inherit_names: _args[:i_names], inherit_mods: _args[:i_mods] ) content_tag(el_type, block_given? ? capture(&block) : nil, el_opts) end
Private Instance Methods
collect_bem_class(name, mods, options, type: nil, inherit_names: nil, inherit_mods: nil)
click to toggle source
# File lib/rbem.rb, line 73 def collect_bem_class(name, mods, options, type: nil, inherit_names: nil, inherit_mods: nil) _separ = @@notation _separ = '_' unless _separ.is_a?(String) _class = [] if type === :block _class << "#{name}" if mods for mod in mods _class << "#{name}#{_separ}#{mod}" end end end if type === :element # block__element _class << "#{@block_name}__#{name}" # block__element_mod if mods for mod in mods mod = mod.split(':')[0].sub('&','') _class << "#{@block_name}__#{name}#{_separ}#{mod}" end end # block_mod__element if inherit_names and @block_mods.present? for inherit_name in inherit_names _class << "#{@block_name}#{_separ}#{inherit_name}__#{name}" end end # block_mod__element_mod if inherit_mods and mods and @block_mods.present? for i_mod in inherit_mods el_mod = i_mod.split(':')[0].sub('&','') block_mods = i_mod.split(':') block_mods.shift if block_mods.empty? block_mods = @block_mods end for block_mod in block_mods _class << "#{@block_name}#{_separ}#{block_mod}__#{name}#{_separ}#{el_mod}" end end end end if options and options.has_key?(:class) _extra_class = options[:class].split(' ') else _extra_class = [] end _class.concat(_extra_class).flatten.join(' ') end
parse_args(args)
click to toggle source
# File lib/rbem.rb, line 45 def parse_args(args) _name_mod = args.select{ |e| e.is_a?(String) } _type = args.select{ |e| e.is_a?(Symbol) } _options = args.select{ |e| e.is_a?(Hash) } _return = {} if _name_mod[0].present? _return[:name] = _name_mod[0].sub('&','').split(':')[0] if _name_mod[0].start_with?('&') _names = _name_mod[0].split(':') _names.shift if _names.empty? _names = @block_mods end _return[:i_names] = _names end end if _name_mod[1].present? _return[:mods] = _name_mod[1].split.map { |e| e.sub('&','') } _return[:i_mods] = _name_mod[1].split.select { |e| e.start_with?('&') } end _return[:type] = _type[0] || :div _return[:options] = _options[0] || {} _return end