Sha256: 758bbeab96d82f7f869d8d49988077397f2175545d571e08e31b004d72a0f4d3

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

module Rhosync
  class App < Model
    field :name, :string
    set   :users, :string
    attr_reader :delegate
    validates_presence_of :name

    @@sources = []

    class << self
      def create(fields={})
        fields[:id] = fields[:name]
        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
    
    def delegate
      @delegate.nil? ? Object.const_get(camelize(self.name)) : @delegate
    end

    def delete
      @@sources = []
      super
    end

    def delete_sources
      @@sources = []
    end
    
    def partition_sources(partition,user_id)
      names = []
      @@sources.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

    def sources
      @@sources.uniq!
      # Sort sources array by priority
      @@sources = @@sources.sort_by { |s| Source.load(s, {:app_id => self.name, :user_id => '*'}).priority }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rhosync-2.1.18.beta2 lib/rhosync/app.rb
rhosync-2.1.18.beta1 lib/rhosync/app.rb
rhosync-2.1.17 lib/rhosync/app.rb