ref: master
plugins/metadata/lib/metadata_plugin/base.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
class MetadataPlugin::Base < Noosfero::Plugin def self.plugin_name _('Export metadata') end def self.plugin_description _('Export metadata for models on meta tags') end def self.config @config ||= HashWithIndifferentAccess.new(YAML.load File.read("#{File.dirname __FILE__}/../config.yml")) rescue {} end def self.og_types @og_types ||= self.config[:open_graph][:types] rescue {} end class_attribute :controllers self.controllers = MetadataPlugin::Controllers.new def head_ending plugin = self lambda do variable = plugin.class.controllers.send controller.controller_path rescue nil variable ||= plugin.class.controllers.send :profile if controller.is_a? ProfileController variable ||= plugin.class.controllers.send :home return unless variable return unless object = case variable when Proc then instance_exec(&variable) else instance_variable_get variable end return if object.respond_to? :public? and not object.public? return unless specs = (object.class.metadata_specs rescue nil) r = [] specs.each do |namespace, spec| namespace = "#{namespace}:" if namespace.present? key_attr = spec[:key_attr] || :property value_attr = spec[:value_attr] || :content tags = spec[:tags] tags.each do |key, values| key = "#{namespace}#{key}" values = values.call(object, plugin) if values.is_a? Proc rescue nil next if values.blank? Array(values).each do |value| value = value.call(object, plugin) if value.is_a? Proc rescue nil next if value.blank? value = h value unless value.html_safe? r << tag(:meta, {key_attr => key, value_attr => value.to_s}, false, false) end end end safe_join(r) end end include MetadataPlugin::UrlHelper def helpers self.context.class.helpers end protected end ActiveSupport.run_load_hooks :metadata_plugin, MetadataPlugin ActiveSupport.on_load :active_record do ActiveRecord::Base.extend MetadataPlugin::Specs::ClassMethods end |