Sha256: 3e2942c0445de9f31d5d7825f15d1b6c1810f7b3561e512b96a3dfd8056030dd

Contents?: true

Size: 1016 Bytes

Versions: 8

Compression:

Stored size: 1016 Bytes

Contents

module Mobility
  module Backend
=begin

Adds {#for} method to backend to return ORM-specific backend.

@example KeyValue backend for AR model
  class Post < ActiveRecord::Base
    # ...
  end
  Mobility::Backend::KeyValue.for(Post)
  #=> Mobility::Backend::ActiveRecord::KeyValue

=end
    module OrmDelegator
      # @param [Class] model_class Class of model
      # @return [Class] Class of backend to use for model
      def for(model_class)
        if Loaded::ActiveRecord && model_class < ::ActiveRecord::Base
          const_get(name.split("::".freeze).insert(-2, "ActiveRecord".freeze).join("::".freeze))
        elsif Loaded::Sequel && model_class < ::Sequel::Model
          const_get(name.split("::".freeze).insert(-2, "Sequel".freeze).join("::".freeze))
        else
          raise ArgumentError, "#{name.split('::'.freeze).last} backend can only be used by ActiveRecord or Sequel models".freeze
        end
      end

      def self.included(base)
        base.extend(self)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
mobility-0.1.20 lib/mobility/backend/orm_delegator.rb
mobility-0.1.19 lib/mobility/backend/orm_delegator.rb
mobility-0.1.18 lib/mobility/backend/orm_delegator.rb
mobility-0.1.17 lib/mobility/backend/orm_delegator.rb
mobility-0.1.16 lib/mobility/backend/orm_delegator.rb
mobility-0.1.15 lib/mobility/backend/orm_delegator.rb
mobility-0.1.14 lib/mobility/backend/orm_delegator.rb
mobility-0.1.13 lib/mobility/backend/orm_delegator.rb