module VulgataMethods extend ActiveSupport::Concern included do class_attribute :vlg_priority, :vlg_strategy, :vlg_context_path, :vlg_context_path_param, :vlg_skip_pendify, :vlg_after_translated, :vlg_after_approved, :vlg_preprocess_setter, :vlg_preprocess_getter, :vlg_skip_init has_many :translation_states, class_name: "Vulgata::TranslationState", as: :item end module ClassMethods def vulgata_priority vlg_priority end def vulgata_after_translated vlg_after_translated end def vulgata_name @vlg_name ||= self.to_s.underscore.humanize end def vulgata_source_scope items self.vlg_strategy.scope_by_source_items items end # returns array of the translated attributes names def vulgata_translated_attribute_names self.vlg_strategy.translated_attribute_names self end # returns all the translation that contains a given string def vulgata_where_like query_string, collection = nil query = self.vulgata_translated_attribute_names.map{|key| "%{table_name}.#{key} LIKE :q"}.join(" OR ") query_params = { q: "%#{query_string}%" } self.vlg_strategy.where_like_query self, query, query_params, collection end end def vulgata_after_approved self.vlg_after_approved.blank? ? nil : self.send(self.vlg_after_approved) end def vulgata_preprocess_setter data self.vlg_preprocess_setter.blank? ? data : self.send(self.vlg_preprocess_setter, data) end def vulgata_preprocess_getter data self.vlg_preprocess_getter.blank? ? data : self.send(self.vlg_preprocess_getter, data) end # returns array of the translated attributes names def vulgata_translated_attribute_names self.class.vulgata_translated_attribute_names end # returns hash of the translated data def vulgata_translation_data translation_state self.vlg_strategy.translation_data translation_state end def vulgata_save_translation translation_state self.vlg_strategy.save_translation translation_state end def vulgata_item_type self.class.base_class.name end def vulgata_name self[:name] || self[:title]|| self[:subject] || self[:description] || self[:body] || self[:text] || self.to_s end def vulgata_priority @vlg_priority || vlg_priority end def vulgata_priority= value @vlg_priority = value end # name of path helper for the object's context - i.e :blog_post_path (for a Comment object) def vulgata_context_path vlg_context_path end # name of param to send to path helper - property of associated object - i.e :post (for a Comment object) def vulgata_context_path_param vlg_context_path_param end end