class Card::Bootstrap::Component

render components of bootstrap library

Public Class Methods

new(context, *args, &block) click to toggle source
# File lib/card/bootstrap/component.rb, line 7
def initialize context, *args, &block
  @context = context
  @content = ["".html_safe]
  @args = args
  @child_args = []
  @append = []
  @wrap = []
  @build_block = block
  @html = Builder::XmlMarkup.new
end

Public Instance Methods

append(&block) click to toggle source
# File lib/card/bootstrap/component.rb, line 32
def append &block
  @append[-1] << block
end
card() click to toggle source
# File lib/card/bootstrap/component.rb, line 40
def card
  @context.context.card
end
insert(&block) click to toggle source
# File lib/card/bootstrap/component.rb, line 28
def insert &block
  instance_exec(&block)
end
prepend(&block) click to toggle source
# File lib/card/bootstrap/component.rb, line 22
def prepend &block
  tmp = @content.pop
  instance_exec(&block)
  @content << tmp
end
render() click to toggle source
# File lib/card/bootstrap/component.rb, line 18
def render
  @rendered = render_content
end
wrap(tag=nil, &block) click to toggle source
# File lib/card/bootstrap/component.rb, line 36
def wrap tag=nil, &block
  @wrap[-1] << (block_given? ? block : tag)
end

Private Instance Methods

add_classes(opts, html_class, optional_classes) click to toggle source
# File lib/card/bootstrap/component.rb, line 99
def add_classes opts, html_class, optional_classes
  prepend_class opts, html_class if html_class
  Array.wrap(optional_classes).each do |k, v|
    prepend_class opts, v if opts.delete k
  end
end
add_content(content) click to toggle source
# File lib/card/bootstrap/component.rb, line 71
def add_content content
  @content[-1] << "\n#{content}".html_safe if content.present?
end
generate_content(content, processor, &block) click to toggle source
# File lib/card/bootstrap/component.rb, line 58
def generate_content content, processor, &block
  content = instance_exec(&block) if block.present?
  return content if !processor || !content.is_a?(Array)

  content.each { |item| send processor, item }
  ""
end
items_from_args(args) click to toggle source
# File lib/card/bootstrap/component.rb, line 87
def items_from_args args
  ((args.one? && args.last.is_a?(String)) || args.last.is_a?(Array)) && args.pop
end
render_content() click to toggle source
# File lib/card/bootstrap/component.rb, line 53
def render_content
  # if @build_block.arity > 0
  instance_exec(*@args, &@build_block)
end
standardize_args(args, &block) click to toggle source
# File lib/card/bootstrap/component.rb, line 75
def standardize_args args, &block
  opts = standardize_opts args
  items = items_from_args args
  opts, args = standardize_block_args opts, args, &block if block.present?

  [items, opts, args]
end
standardize_block_args(opts, args, &block) click to toggle source
# File lib/card/bootstrap/component.rb, line 91
def standardize_block_args opts, args, &block
  instance_exec(opts, args, &block).tap do |s_opts, _s_args|
    unless s_opts.is_a? Hash
      raise Card::Error, "first return value of a tag block has to be a hash"
    end
  end
end
standardize_opts(args) click to toggle source
# File lib/card/bootstrap/component.rb, line 83
def standardize_opts args
  args.last.is_a?(Hash) ? args.pop : {}
end
tag_method_opts(args, html_class, tag_opts, &tag_opts_block) click to toggle source
# File lib/card/bootstrap/component.rb, line 46
def tag_method_opts args, html_class, tag_opts, &tag_opts_block
  opts = {}
  _blah, opts, _blah = standardize_args args, &tag_opts_block if block_given?
  add_classes opts, html_class, tag_opts.delete(:optional_classes)
  opts
end
with_child_args(args) { || ... } click to toggle source
# File lib/card/bootstrap/component.rb, line 66
def with_child_args args
  @child_args << args if args.present?
  yield.tap { @child_args.pop if args.present? }
end