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(locale_or_lang_id=nil) return nil if !self.persisted? locale_or_lang_id ||= I18n.locale || I18n.default_locale return nil if !(lang = Lang[locale_or_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)