Sha256: 078d805906478c0866fb5e0bef67b696afe0f63a3053166347c496db7a9718dc

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

require 'moped'
require 'origin'

require_relative 'mongodb/origin'
require_relative 'mongodb/query'
require_relative 'mongodb/dataset'

module Locomotive::Steam

  class MongoDBAdapter < Struct.new(:options)

    def all(mapper, query)
      dataset(mapper, query)
    end

    def query(mapper, scope, &block)
      query = query_klass.new(scope, mapper.localized_attributes, &block)
      all(mapper, query)
    end

    def count(mapper, scope, &block)
      query = query_klass.new(scope, mapper.localized_attributes, &block)
      query.against(collection(mapper)).count
    end

    def find(mapper, scope, id)
      query(mapper, scope) { where(_id: BSON::ObjectId.from_string(id)) }.first
    end

    def key(name, operator)
      name.__send__(operator)
    end

    def base_url(mapper, scope, entity = nil)
      return nil if scope.site.nil?

      # Note: mimic Carrierwave behaviour
      base = "/sites/#{scope.site._id.to_s}"

      case mapper.name
      when :theme_assets      then "#{base}/theme"
      when :pages             then "#{base}/pages/#{entity._id}/files"
      when :content_entries   then "#{base}/content_entry#{scope.context[:content_type]._id}/#{entity._id}/files"
      end
    end

    private

    def query_klass
      Locomotive::Steam::Adapters::MongoDB::Query
    end

    def dataset(mapper, query)
      Locomotive::Steam::Adapters::MongoDB::Dataset.new do
        query.against(collection(mapper)).map do |attributes|
          entity = mapper.to_entity(attributes)
        end
      end
    end

    def collection(mapper)
      session["locomotive_#{mapper.name}"]
    end

    def session
      Moped::Session.new([*hosts]).tap do |session|
        session.use database
      end
    end

    def database
      options[:database]
    end

    def hosts
      options[:hosts]
    end

  end

end


Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
locomotivecms_steam-1.0.0.pre.alpha.1 lib/locomotive/steam/adapters/mongodb.rb
locomotivecms_steam-1.0.0.pre.alpha lib/locomotive/steam/adapters/mongodb.rb