module Avo::Fields::FieldExtensions::VisibleInDifferentViews

def except_on(*where)

def except_on(*where)
  show_on_all
  normalize_views(where).flatten.each do |view|
    show_on_view view
  end
end

def except_on_view(view)

def except_on_view(view)
  show_on_all
  hide_on_view view
end

def hide_on(*where)

def hide_on(*where)
  return hide_on_all if where.include? :all
  normalize_views(where).flatten.each do |view|
    hide_on_view view
  end
end

def hide_on_all

def hide_on_all
  @show_on_index = false
  @show_on_show = false
  @show_on_edit = false
  @show_on_new = false
end

def hide_on_view(view)

def hide_on_view(view)
  send("show_on_#{view}=", false)
end

def initialize(id, **args, &block)

def initialize(id, **args, &block)
  @show_on_index = @show_on_index.nil? ? true : @show_on_index
  @show_on_show = @show_on_show.nil? ? true : @show_on_show
  @show_on_new = @show_on_new.nil? ? true : @show_on_new
  @show_on_edit = @show_on_edit.nil? ? true : @show_on_edit
end

def normalize_views(*views_and_groups)

def normalize_views(*views_and_groups)
  forms = views_and_groups.flatten! & [:forms]
  if forms.present?
    views_and_groups -= forms
    views_and_groups += [:new, :edit]
  end
  views_and_groups.flatten.uniq
end

def only_on(*where)

def only_on(*where)
  hide_on_all
  normalize_views(where).flatten.each do |view|
    show_on_view view
  end
end

def only_on_view(view)

def only_on_view(view)
  hide_on_all
  show_on_view view
end

def show_on(*where)

def show_on(*where)
  return show_on_all if where.include? :all
  normalize_views(where).flatten.each do |view|
    show_on_view view
  end
end

def show_on_all

def show_on_all
  @show_on_index = true
  @show_on_show = true
  @show_on_edit = true
  @show_on_new = true
end

def show_on_view(view)

def show_on_view(view)
  send("show_on_#{view}=", true)
end