require "active_record" require "activerecord/mlang/version" require "active_record/mlang/text" module ActiveRecord module Mlang def self.included(base) base.extend ClassMethods base.set_text_reflection end module ClassMethods def text_class_name(text_class_name=nil) if text_class_name self.text_class_name = text_class_name end @text_class_name || (self.name + "Text") end def text_class_name=(text_class_name) @text_class_name = text_class_name self.set_text_reflection end def text self.text_class_name.safe_constantize end def has_text? !!self.text end def text_attrs(*args) args.each do |arg| define_method(arg.to_sym){ self.text.__send__(arg) } end end def has_many_fkey if self.text self.text.parent_fkey else :parent_id end end def set_text_reflection has_many :texts, class_name: self.text_class_name, foreign_key: self.has_many_fkey end end def text(local_or_lang_id=nil) return nil if !self.persisted? local_or_lang_id ||= I18n.locale || I18n.default_locale lang_id = nil if local_or_lang_id.kind_of? Integer lang_id = local_or_lang_id if Lang.exists?(id: local_or_lang_id) else lang_id = Lang[local_or_lang_id].try(:id) end return nil if !lang_id texts.find_or_create_by(lang_id: lang_id) end end end require 'active_record/mlang/lang' require 'active_record/mlang/lang_text' require 'active_record/mlang/railtie' if defined?(Rails::Railtie)