Module: MegaBar::BlockProcessing

Included in:
LayoutEngine
Defined in:
lib/mega_bar/block_processing.rb

Instance Method Summary collapse

Instance Method Details

#build_block_info(blck, page_info, rout, orig_query_hash, pagination, env) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/mega_bar/block_processing.rb', line 17

def build_block_info(blck, page_info, rout, orig_query_hash, pagination, env)
  {
    id: blck.id,
    header: blck.model_displays.where(action: "index").first&.header,
    actions: blck.actions,
    action: rout[:action],
    html: process_block(blck, page_info, rout, orig_query_hash, pagination, env)
  }
end

#build_params_hash(mega_env, orig_query_hash, env) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/mega_bar/block_processing.rb', line 66

def build_params_hash(mega_env, orig_query_hash, env)
  params_hash = {}
  params_hash_arr = mega_env.params_hash_arr + [
    { action: mega_env.block_action },
    { controller: mega_env.kontroller_path }
  ]
  
  params_hash_arr.each { |param| params_hash.merge!(param) }
  params_hash.merge!(orig_query_hash)
  params_hash.merge!(env["rack.request.form_hash"]) if env["rack.request.form_hash"].present?
  
  params_hash
end

#first_tab(env, blck) ⇒ Object



96
97
98
99
100
# File 'lib/mega_bar/block_processing.rb', line 96

def first_tab(env, blck)
  return false if env[:mega_layout_section]&.rules != "tabs"

  blck.id == MegaBar::Block.by_layout_section(blck.layout_section_id).where(actions: "show").first&.id
end

#get_filtered_blocks(layout_section, rout, page_info) ⇒ Object



3
4
5
# File 'lib/mega_bar/block_processing.rb', line 3

def get_filtered_blocks(layout_section, rout, page_info)
  MegaBar::BlockFilter.new(layout_section, rout, page_info).filter
end

#has_html_content?(blck) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/mega_bar/block_processing.rb', line 44

def has_html_content?(blck)
  blck.html.present? && !blck.html.empty?
end

#mega_filtered(obj, site) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/mega_bar/block_processing.rb', line 102

def mega_filtered(obj, site)
  if obj.sites.present?
    has_zero_site = obj.sites.pluck(:id).include?(0)
    has_site = obj.sites.pluck(:id).include?(site.id)
    return true if has_zero_site and has_site
    return true if !has_site
  end
  if obj.themes.present?
    has_zero_theme = obj.themes.pluck(:id).include?(0)
    has_theme = obj.themes.pluck(:id).include?(site.theme_id)
    return true if has_zero_theme and has_theme
    return true if !has_theme
  end
  false
end

#process_block(blck, page_info, rout, orig_query_hash, pagination, env) ⇒ Object



37
38
39
40
41
42
# File 'lib/mega_bar/block_processing.rb', line 37

def process_block(blck, page_info, rout, orig_query_hash, pagination, env)
  return render_html_block(blck) if has_html_content?(blck)
  return "" if blck.model_displays.empty?
  
  process_model_display_block(blck, page_info, rout, orig_query_hash, pagination, env)
end

#process_blocks(blocks, page_info, rout, orig_query_hash, pagination, site, env, final_layout_sections, template_section) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/mega_bar/block_processing.rb', line 7

def process_blocks(blocks, page_info, rout, orig_query_hash, pagination, site, env, final_layout_sections, template_section)
  final_blocks = blocks.map do |blck|
    next if mega_filtered(blck, site)
    build_block_info(blck, page_info, rout, orig_query_hash, pagination, env)
  end.compact

  env["mega_final_blocks"] = final_blocks
  render_layout_section(env, final_layout_sections, template_section)
end

#process_model_display_block(blck, page_info, rout, orig_query_hash, pagination, env) ⇒ Object



52
53
54
55
56
# File 'lib/mega_bar/block_processing.rb', line 52

def process_model_display_block(blck, page_info, rout, orig_query_hash, pagination, env)
  mega_env = MegaBar::MegaEnv.new(blck, rout, page_info, pagination, @user)
  setup_environment(mega_env, orig_query_hash, env)
  render_block_content(mega_env, blck, env)
end

#render_block_content(mega_env, blck, env) ⇒ Object



87
88
89
90
91
92
93
94
# File 'lib/mega_bar/block_processing.rb', line 87

def render_block_content(mega_env, blck, env)
  @status, @headers, @disp_body = mega_env.kontroller_klass.constantize
    .action(mega_env.block_action)
    .call(env)
  
  @redirect = [@status, @headers, @disp_body] if @status == 302
  @disp_body.blank? ? "" : @disp_body.body.html_safe
end

#render_html_block(blck) ⇒ Object



48
49
50
# File 'lib/mega_bar/block_processing.rb', line 48

def render_html_block(blck)
  blck.html.html_safe
end

#render_layout_section(env, final_layout_sections, template_section) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/mega_bar/block_processing.rb', line 27

def render_layout_section(env, final_layout_sections, template_section)
  @status, @headers, @layout_sections = MegaBar::MasterLayoutSectionsController
    .action(:render_layout_section_with_blocks)
    .call(env)
  
  final_layout_sections[template_section] << (
    @layout_sections.blank? ? "" : @layout_sections.body.html_safe
  )
end

#setup_block_classes(env, blck) ⇒ Object



80
81
82
83
84
85
# File 'lib/mega_bar/block_processing.rb', line 80

def setup_block_classes(env, blck)
  env["block_classes"] = [
    blck.name.downcase.parameterize.underscore,
    ("active" if first_tab(env, blck))
  ].compact
end

#setup_environment(mega_env, orig_query_hash, env) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/mega_bar/block_processing.rb', line 58

def setup_environment(mega_env, orig_query_hash, env)
  params_hash = build_params_hash(mega_env, orig_query_hash, env)
  env[:mega_env] = mega_env.to_hash
  env["QUERY_STRING"] = params_hash.to_param
  env["action_dispatch.request.parameters"] = params_hash
  setup_block_classes(env, mega_env.block)
end