Sha256: fe5519f0b48f3943bdf565fa87b2d410c14c9543f0875a0cdb367aa1c3aa72e2
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
# frozen_string_literal: true module Fatcow module Model extend ActiveSupport::Concern include ActionView::Helpers DEFAULT_SHOW_STATUSES = { add: -> { new_record? }, burn: -> { destroyed? } } DEFAULT_FORM_STATUSES = { edit: -> { persisted? }, add: -> { true } } included do def show_icon current_state = find_icon_status(:FATCOW_ICON_SHOW_STATUSES) return custom_icon(current_state) if current_state custom_icon(nil) if current_state.nil? end def form_icon current_state = find_icon_status(:FATCOW_ICON_FORM_STATUSES) return custom_icon(current_state) if current_state custom_icon(nil) if current_state.nil? end def find_icon_status(statuses_const_key) statuses = self.class.const_get statuses_const_key current_status = statuses.find { |status, proc| instance_exec(&proc) } return nil if current_status.nil? current_status[0] end def custom_icon(status) icon = self.class.const_get :FATCOW_ICON icon.app = self if icon.app.nil? icon.status = status if icon.status != status icon end end class_methods do def has_icon (icon_name, **statuses) const_set :FATCOW_ICON, Fatcow::Icon.new(nil, icon_name) const_set :FATCOW_ICON_SHOW_STATUSES, DEFAULT_SHOW_STATUSES.dup.merge(statuses[:show] || {}) const_set :FATCOW_ICON_FORM_STATUSES, DEFAULT_FORM_STATUSES.dup.merge(statuses[:form] || {}) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
fatcow-0.1.1 | lib/fatcow/model.rb |