Sha256: 1b3eaf3a912de185cd1c4ceec36f351da7f73617429159920f845878e44dfda2
Contents?: true
Size: 1.14 KB
Versions: 3
Compression:
Stored size: 1.14 KB
Contents
# frozen_string_literal: true module Cookbook module Mixins # ActsAsUseIn Mixin, for things like Tools, Supplies, or Ingredients module ActsAsUsedIn extend ActiveSupport::Concern def acts_as_used_in(*model_symbols) extend ClassMethods include InstanceMethods self.uses_of = model_symbols self.label_method = :name # Relationships has_many :uses, as: :use_of, class_name: 'Cookbook::Use' associate_uses_of end # Extended by acts_as_used_in mixin module ClassMethods attr_accessor :uses_of, :label_method def associate_uses_of uses_of.each do |table_sym| model = table_sym.to_s.classify.constantize name = model.model_name.to_s has_many "#{model.model_name.param_key}_uses".to_sym, lambda { where(use_in_type: name) }, as: :use_of, class_name: 'Cookbook::Use' has_many table_sym, through: :uses, source: :use_in, source_type: name end end end # Included by has_cookbook mixin module InstanceMethods end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
cookbook-0.1.2 | lib/cookbook/mixins/acts_as_used_in.rb |
cookbook-0.1.1 | lib/cookbook/mixins/acts_as_used_in.rb |
cookbook-0.1.0 | lib/cookbook/mixins/acts_as_used_in.rb |