Module: MegaBar::BlockProcessing
- Included in:
- LayoutEngine
- Defined in:
- lib/mega_bar/block_processing.rb
Instance Method Summary collapse
- #build_block_info(blck, page_info, rout, orig_query_hash, pagination, env) ⇒ Object
- #build_params_hash(mega_env, orig_query_hash, env) ⇒ Object
- #first_tab(env, blck) ⇒ Object
- #get_filtered_blocks(layout_section, rout, page_info) ⇒ Object
- #has_html_content?(blck) ⇒ Boolean
- #mega_filtered(obj, site) ⇒ Object
- #process_block(blck, page_info, rout, orig_query_hash, pagination, env) ⇒ Object
- #process_blocks(blocks, page_info, rout, orig_query_hash, pagination, site, env, final_layout_sections, template_section) ⇒ Object
- #process_model_display_block(blck, page_info, rout, orig_query_hash, pagination, env) ⇒ Object
- #render_block_content(mega_env, blck, env) ⇒ Object
- #render_html_block(blck) ⇒ Object
- #render_layout_section(env, final_layout_sections, template_section) ⇒ Object
- #setup_block_classes(env, blck) ⇒ Object
- #setup_environment(mega_env, orig_query_hash, env) ⇒ Object
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
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 |