module It # A generic class for html tags. class Tag include ActionView::Helpers::TagHelper attr_reader :tag_name, :options # See It.tag for details. You can do everything there and save 6 characters. def initialize(tag_name, options = {}) raise TypeError, 'tag_name must be a String or Symbol' unless [String, Symbol].include?(tag_name.class) raise TypeError, 'options must be a Hash' unless options.is_a?(Hash) @tag_name = tag_name.to_sym @options = options.symbolize_keys end # Will be called from inside the helper to return the tag with the given content. def process(content = nil) # :nodoc: if content content_tag(@tag_name, content, @options) else tag(@tag_name, @options) end end end end