Class: Markaby::Tagset

Inherits:
Object
  • Object
show all
Defined in:
lib/markaby/tagset.rb

Direct Known Subclasses

HTML5, XmlTagset

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.doctypeObject

Returns the value of attribute doctype.



33
34
35
# File 'lib/markaby/tagset.rb', line 33

def doctype
  @doctype
end

.formsObject

Returns the value of attribute forms.



33
34
35
# File 'lib/markaby/tagset.rb', line 33

def forms
  @forms
end

.self_closingObject

Returns the value of attribute self_closing.



33
34
35
# File 'lib/markaby/tagset.rb', line 33

def self_closing
  @self_closing
end

.tagsObject

Returns the value of attribute tags.



33
34
35
# File 'lib/markaby/tagset.rb', line 33

def tags
  @tags
end

.tagsetObject

Returns the value of attribute tagset.



33
34
35
# File 'lib/markaby/tagset.rb', line 33

def tagset
  @tagset
end

Class Method Details

.can_handle?(tag_name) ⇒ Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/markaby/tagset.rb', line 39

def can_handle? tag_name
  false
end

.default_optionsObject



35
36
37
# File 'lib/markaby/tagset.rb', line 35

def default_options
  {tagset: self}
end

.handle_tag(tag_name, builder, *args, &block) ⇒ Object

Raises:

  • (NoMethodError)


43
44
45
# File 'lib/markaby/tagset.rb', line 43

def handle_tag tag_name, builder, *args, &block
  raise NoMethodError.new
end

.transform_attribute_hash(attributes, prefix) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/markaby/tagset.rb', line 70

def transform_attribute_hash attributes, prefix
  values = attributes[prefix]
  expanded_attributes = {}
  values.each do |suffix, value|
    name = transform_attribute_name "#{prefix}-#{suffix}"
    expanded_attributes[name] = value
  end
  attributes.merge!(expanded_attributes).delete(prefix)
end

.transform_attribute_name(name) ⇒ Object



66
67
68
# File 'lib/markaby/tagset.rb', line 66

def transform_attribute_name name
  name.to_s.downcase.tr("_", "-").to_sym
end

.transform_attributes(tag_name, attributes) ⇒ Object



56
57
58
59
60
61
62
63
64
# File 'lib/markaby/tagset.rb', line 56

def transform_attributes tag_name, attributes
  attributes[:name] ||= attributes[:id] if forms.include?(tag_name) && attributes[:id]
  attributes.transform_keys! { |name| transform_attribute_name name }
  hashed_attributes = attributes.keys.select { |name| attributes[name].is_a? Hash }
  hashed_attributes.each { |name| transform_attribute_hash attributes, name }
  attributes.reject! { |name, value| name.nil? || (AttrsBoolean.include?(name) && value.nil?) }
  attributes.keys.each { |name| validate_attribute! tag_name, name }
  attributes
end

.valid_attribute_name?(tag_name, attribute_name) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/markaby/tagset.rb', line 84

def valid_attribute_name? tag_name, attribute_name
  attribute_name.to_s.start_with?(":", "data-", "aria-") || @tagset[tag_name].include?(attribute_name)
end

.validate_and_transform_attributes!(tag_name, *args) ⇒ Object



52
53
54
# File 'lib/markaby/tagset.rb', line 52

def validate_and_transform_attributes! tag_name, *args
  args.last.respond_to?(:to_hash) ? transform_attributes(tag_name, args.last.to_hash) : {}
end

.validate_and_transform_tag_name!(tag_name) ⇒ Object

Raises:



47
48
49
50
# File 'lib/markaby/tagset.rb', line 47

def validate_and_transform_tag_name! tag_name
  raise(InvalidXhtmlError, "no element `#{tag_name}' for #{doctype}") unless @tagset.has_key?(tag_name)
  tag_name
end

.validate_attribute!(tag_name, attribute_name) ⇒ Object

Raises:



80
81
82
# File 'lib/markaby/tagset.rb', line 80

def validate_attribute! tag_name, attribute_name
  raise InvalidXhtmlError, "no attribute `#{attribute_name}' on #{tag_name} elements" unless valid_attribute_name? tag_name, attribute_name
end