Sha256: aeb7ad6becbffb2f9f31325b4080ae6b2cdfaa8ab809059228b99a1ad751d828

Contents?: true

Size: 1.68 KB

Versions: 4

Compression:

Stored size: 1.68 KB

Contents

module Rhosync
  class App < Model
    field :name, :string
    set   :users, :string
    set   :sources, :string
    attr_reader :delegate
    validates_presence_of :name
    
    class << self
      def create(fields={})
        fields[:id] = fields[:name]
        begin
          require under_score(fields[:name])
        rescue Exception; end
        super(fields)
      end
    end
    
    def can_authenticate?
      self.delegate && self.delegate.singleton_methods.include?("authenticate")
    end

    def authenticate(login, password, session)
      if self.delegate && self.delegate.authenticate(login, password, session)
        user = User.load(login) if User.is_exist?(login)
        if not user
          user = User.create(:login => login)
          users << user.id
        end
        return user
      end
    end
    
    # TODO: Do we need this anymore?
    # def delete
    #   sources.members.each do |source_name|
    #     Source.load(source_name,{:app_id => self.name,
    #       :user_id => '*'}).delete
    #   end
    #   users.members.each do |user_name|
    #     User.load(user_name).delete
    #   end
    #   ReadState.delete(self.name)
    #   super
    # end
    
    def delegate
      @delegate.nil? ? Object.const_get(camelize(self.name)) : @delegate
    end
    
    def partition_sources(partition,user_id)
      names = []
      sources.members.each do |source|
        s = Source.load(source,{:app_id => self.name,
          :user_id => user_id})
        if s.partition == partition
          names << s.name
        end
      end
      names
    end
    
    def store_blob(obj,field_name,blob)
      self.delegate.send :store_blob, obj,field_name,blob
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rhosync-2.0.0.beta7 lib/rhosync/app.rb
rhosync-2.0.0.beta6 lib/rhosync/app.rb
rhosync-2.0.0.beta4 lib/rhosync/app.rb
rhosync-2.0.0.beta3 lib/rhosync/app.rb