Sha256: f389fcdebec5a42972b3578c1cbc58a5326f562cd776b50ea1f31cd665a9b092

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

module CouchBlog
  class Post
    include SimplyStored::Couch

    attr_accessor :frontend

    property :title
    property :date, type: Date
    property :body

    validates :title, length: {minimum: 4}
    validates :date, presence: true


    # VIEWS
    view :by_date, key: :date
    view :by_keyword_id, type: :custom, map_function: %|function(doc){
      if(doc.ruby_class == 'CouchBlog::Post' && doc.keyword_ids && doc.keyword_ids.length){
        doc.keyword_ids.forEach(function(keyword_id){ emit([keyword_id, doc.date], 1)})
      }
    }|, reduce_function: :_sum

    # SCOPES
    def self.active(date = Date.today)
      database.view(by_date(startkey: date, reduce: false, include_docs: true, descending: true))
    end

    def self.find_all_by_keyword_id(keyword_id, options = {})
      date = options.delete(:date).presence || Date.today
      database.view(by_keyword_id(startkey: [keyword_id, date], endkey: [keyword_id, {}], reduce: false, include_docs: true))
    end

    def to_param
      title.present? && frontend.present? ? "#{id}/#{title.parameterize}" : id
    end

    def keywords
      []
    end

    # Allow usage like:
    #   link_to '...', [post.for_frontend]
    # to activate named routing
    def for_frontend
      @frontend = true
      self
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
couch_blog-0.6.0 app/models/couch_blog/post.rb