Sha256: 787184b28144864134fbbc428dbcea036d461afbdea2cd9382ea93fae2bd6435

Contents?: true

Size: 1.69 KB

Versions: 4

Compression:

Stored size: 1.69 KB

Contents

module Remetric
  class Event
    include Mongoid::Document
    include Mongoid::Timestamps
    include Mongoid::Attributes::Dynamic

    field :description
    
    validates_presence_of :description
    
    before_create :attach_trackable_models
    
    def story
      Liquid::Template.parse(description).render(attributes)
    end
    
    def linked_story
      d = attributes
      
      Remetric.config.trackable_models.each do |model, cols|
        model = model.to_s

        if self.has_attribute? model
          key = d[model]["id"]
          
          # if Trackable.where(model: model, key: key.to_s).first
            linked_model_attributes = {}
            self.send(model).map { |k, v| linked_model_attributes[k] = "<a href=\"#{Engine.routes.url_helpers.trackable_path(model.pluralize, key)}\">#{v}</a>" }
            d.delete model
            d[model] = linked_model_attributes
          # end
        end
      end
      
      Liquid::Template.parse(description).render(d)
    end
    
    def attach_trackable_models
      Remetric.config.trackable_models.each do |model, cols|
        model = model.to_s
        
        if self.has_attribute? model
          args = self.send(model)
          args = args.attributes if args.class.ancestors.include? ActiveRecord::Base
          args = args.with_indifferent_access
          key_field = cols[:key]
          key_field = :id if key_field.blank?
          key = args[key_field].to_s.parameterize
          t = Trackable.where(key: key, model: model).first_or_initialize
          t.data ||= {}
          t.data = t.data.merge(args)
          
          if t.save
            self[model] = t.data
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
remetric-0.0.6 app/models/remetric/event.rb
remetric-0.0.5 app/models/remetric/event.rb
remetric-0.0.4 app/models/remetric/event.rb
remetric-0.0.3 app/models/remetric/event.rb