Sha256: 2a6c560561bf399973d14aaca59092c9e5015e51930f350952364eeff1fd77fb

Contents?: true

Size: 989 Bytes

Versions: 2

Compression:

Stored size: 989 Bytes

Contents

module Connections
  module Connectable
    extend ActiveSupport::Concern

    module ClassMethods
      def connectable_with(*types)
        has_many :incoming_connections, :as => :connectable, :dependent => :delete_all, :class_name => 'Connections::Connection'
        types.each do |t|
          class_eval do

            # user.followers(:user)
            define_method :"#{t.to_s.sub(/e$/,'')}ers" do |*args|
              class_name = args.first
              if class_name
                klass = class_name.to_s.classify.constantize
                klass.joins(:connections).where("connections_connections.type = ? AND connectable_type = ? AND connectable_id = ?", t.to_s.classify, self.class.base_class.to_s, self)
              else
                incoming_connections.where('connections_connections.type = ?', t.to_s.classify)
              end
            end
          end
        end
      end
    end
  end
end

ActiveRecord::Base.send :include, Connections::Connectable

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
connections-0.2.1 lib/connections/connectable.rb
connections-0.1.2 lib/connections/connectable.rb