Class: Bemer::EntityBuilder

Inherits:
Entity
  • Object
show all
Defined in:
lib/bemer/entity_builder.rb

Overview

rubocop:disable Metrics/ClassLength

Direct Known Subclasses

TagBuilder

Constant Summary collapse

DATA_BEM_KEY =
:'data-bem'

Instance Attribute Summary

Attributes inherited from Entity

#bem_class, #block, #content, #elem, #name

Instance Method Summary collapse

Methods inherited from Entity

#block?, #elem?, #initialize, #mix

Constructor Details

This class inherits a constructor from Bemer::Entity

Instance Method Details

#attrsObject



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/bemer/entity_builder.rb', line 10

def attrs
  attributes         = Hash[super]
  attributes[:class] = cls if cls.present?

  return attributes unless bem?

  data_bem = js

  data_bem[DATA_BEM_KEY] = data_bem[DATA_BEM_KEY].to_json if data_bem.key?(DATA_BEM_KEY)

  attributes.merge!(data_bem)
end

#attrs=(new_attrs, save = true) ⇒ Object



23
24
25
26
27
# File 'lib/bemer/entity_builder.rb', line 23

def attrs=(new_attrs, save = true)
  new_attrs = build_attrs(new_attrs)

  save ? @attrs = new_attrs : new_attrs
end

#bemObject



29
30
31
# File 'lib/bemer/entity_builder.rb', line 29

def bem
  bem_via_option? ? super : true
end

#bem=(new_bem, save = true) ⇒ Object



33
34
35
# File 'lib/bemer/entity_builder.rb', line 33

def bem=(new_bem, save = true)
  save ? @bem = new_bem : new_bem
end

#bem?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/bemer/entity_builder.rb', line 37

def bem?
  bem_enabled_via_option? || bem_cascade_enabled_via_option? || bem_enabled_fully?
end

#bem_cascadeObject



41
42
43
# File 'lib/bemer/entity_builder.rb', line 41

def bem_cascade
  bem_cascade_via_option? ? super : true
end

#clsObject



45
46
47
48
49
50
51
# File 'lib/bemer/entity_builder.rb', line 45

def cls
  return super unless bem?

  i_bem = 'i-bem' if need_data_bem? || need_mixed_data_bem?

  [bem_class, mods, mix, super, i_bem].flatten.reject(&:blank?).uniq.join(' ')
end

#cls=(new_cls, save = true) ⇒ Object



53
54
55
56
57
# File 'lib/bemer/entity_builder.rb', line 53

def cls=(new_cls, save = true)
  new_cls = build_css_classes(new_cls)

  save ? @cls = new_cls : new_cls
end

#content=(new_content, save = true) ⇒ Object



59
60
61
# File 'lib/bemer/entity_builder.rb', line 59

def content=(new_content, save = true)
  save ? @content = new_content : new_content
end

#jsObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/bemer/entity_builder.rb', line 63

def js
  need_data_bem       = need_data_bem?
  need_mixed_data_bem = need_mixed_data_bem?

  return {} unless need_data_bem || need_mixed_data_bem

  if !need_data_bem && need_mixed_data_bem
    mixed_data_bem
  else
    data_bem = @js.instance_of?(TrueClass) ? {} : super

    { DATA_BEM_KEY => { name => data_bem }.merge!(mixed_data_bem[DATA_BEM_KEY]) }
  end
end

#js=(new_js, save = true) ⇒ Object



78
79
80
# File 'lib/bemer/entity_builder.rb', line 78

def js=(new_js, save = true)
  save ? @js = new_js : new_js
end

#mix=(new_mix, save = true) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/bemer/entity_builder.rb', line 82

def mix=(new_mix, save = true)
  new_mixes = Mixes.new(new_mix)
  new_mix   = new_mixes.to_a

  if save
    @mixins = new_mixes
    @mix    = new_mix
  else
    new_mix
  end
end

#modsObject



94
95
96
# File 'lib/bemer/entity_builder.rb', line 94

def mods
  modifiers.to_a
end

#mods=(new_mods, save = true) ⇒ Object



98
99
100
101
102
103
# File 'lib/bemer/entity_builder.rb', line 98

def mods=(new_mods, save = true)
  modifiers  = ModifierList.new(block, element, new_mods)
  @modifiers = modifiers if save

  modifiers.to_h
end

#need_data_bem?Boolean

Returns:

  • (Boolean)


115
116
117
# File 'lib/bemer/entity_builder.rb', line 115

def need_data_bem?
  bem? && @js.present? && bem_class.present?
end

#need_mixed_data_bem?Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/bemer/entity_builder.rb', line 119

def need_mixed_data_bem?
  bem? && mixins.entities.any?(&:need_data_bem?)
end

#tagObject



105
106
107
# File 'lib/bemer/entity_builder.rb', line 105

def tag
  super.nil? ? default_tag : @tag
end

#tag=(new_tag, save = true) ⇒ Object



109
110
111
112
113
# File 'lib/bemer/entity_builder.rb', line 109

def tag=(new_tag, save = true)
  new_tag = build_tag(new_tag)

  save ? @tag = new_tag : new_tag
end