Sha256: 327ee1a01ec45979b13587204651c05982d52c67d0a839bc7241ebec1bb24d3f

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

module Transit
  class Context
    include Mongoid::Document
    
    field :name,      :type => String
    field :meta,      :type => Hash, :default => {}
    field :body,      :type => String
    field :position,  :type => Integer
    
    before_save :ensure_context_position_value
    embedded_in :package, polymorphic: true
    
    scope :by_name, lambda{ |n| where(:name => n) }
    
    def ensure_context_position_value
      return true unless self.position.nil?
      self.position = _parent.send(:contexts).count + 1
    end

    # Sets up an "identifier" for the particular context
    def shortname
      self.class.to_s.underscore
    end

    # Sets up a default name field to be used in form helpers
    def field_name
      (self.name.to_s.blank? ? self.class.to_s : self.name)
    end    
    
    def file_ext
      File.extname(self.body.to_s).sub('.', '')
    end
    
    def package_type
      (self.package.nil? ? "post" : self.package.class.name.to_s.underscore)
    end
    
    def media_context?
      false
    end
    
    def to_js( attrs = {} )
      { 
        id: self.id.to_s,
        position: self.position.to_i, 
        package_id:   (self.package.nil? ? "" : self.package.id.to_s ),
        package_type: package_type,
        resource_url: package_type.pluralize,
      }.merge!( attrs )
    end
    
    def to_backbone( attrs = {} )
      ::Base64.encode64s(to_js(attrs).to_json)
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
transit-0.0.2 app/models/transit/context.rb