module Card::View::Options::Visibility

manages showing and hiding optional view renders

Constants

VIZ_SETTING

advanced write method

Public Instance Methods

explicit_show?(view) click to toggle source
# File lib/card/view/options/visibility.rb, line 22
def explicit_show? view
  viz_hash[view&.to_sym] == :show
end
hide(*views) click to toggle source
# File lib/card/view/options/visibility.rb, line 32
def hide *views
  viz views, :hide
end
hide!(*views) click to toggle source
# File lib/card/view/options/visibility.rb, line 42
def hide! *views
  viz views, :hide, true
end
hide?(view) click to toggle source

test methods

# File lib/card/view/options/visibility.rb, line 14
def hide? view
  viz_hash[view&.to_sym] == :hide
end
optional?() click to toggle source

test whether view is optional (@optional is set in normalize_options @return [true/false]

# File lib/card/view/options/visibility.rb, line 67
def optional?
  @optional
end
process_visibility() click to toggle source

translate raw hide, show options (which can be strings, symbols, arrays, etc)

# File lib/card/view/options/visibility.rb, line 73
def process_visibility
  viz_hash.reverse_merge! parent.viz_hash if parent
  process_visibility_options live_options
  viz requested_view, @optional if @optional && !viz_hash[requested_view]
end
show(*views) click to toggle source

write methods

# File lib/card/view/options/visibility.rb, line 28
def show *views
  viz views, :show
end
show!(*views) click to toggle source

force write methods

# File lib/card/view/options/visibility.rb, line 38
def show! *views
  viz views, :show, true
end
show?(view) click to toggle source
# File lib/card/view/options/visibility.rb, line 18
def show? view
  !hide? view
end
visible?(view) { || ... } click to toggle source
# File lib/card/view/options/visibility.rb, line 59
def visible? view
  viz view, yield unless viz_hash[view]
  show? view
end
viz(views, setting, force=false) click to toggle source
# File lib/card/view/options/visibility.rb, line 50
def viz views, setting, force=false
  Array.wrap(views).flatten.each do |view|
    view = view.to_sym
    next if !force && viz_hash[view]

    viz_hash[view] = VIZ_SETTING[setting]
  end
end
viz_hash() click to toggle source

tracks show/hide value for each view with an explicit setting eg { toggle: :hide }

# File lib/card/view/options/visibility.rb, line 8
def viz_hash
  @viz_hash ||= {}
end

Private Instance Methods

hide_requested_view?() click to toggle source

if true, process returns nil

# File lib/card/view/options/visibility.rb, line 82
def hide_requested_view?
  optional? && hide?(requested_view)
end
normalized_visibility_options() click to toggle source
# File lib/card/view/options/visibility.rb, line 94
def normalized_visibility_options
  viz_hash.each_with_object({}) do |(key, val), hash|
    hash[val] ||= []
    hash[val] << key
  end
end
process_visibility_options(options_hash) click to toggle source

takes an options_hash and processes it to update viz_hash

# File lib/card/view/options/visibility.rb, line 87
def process_visibility_options options_hash
  %i[hide show].each do |setting|
    views = View.normalize_list(options_hash.delete(setting)).map(&:to_sym)
    viz views, setting, true
  end
end