class GV::Bedrock::Service

Base class of distributed services

Public Class Methods

find(name) click to toggle source

Finds previously provided service, blocks if there isn’t any

# File lib/gv/bedrock/service.rb, line 59
def find name
  space.read([:name,name,nil,nil])[3] rescue nil
end
provide() click to toggle source

advertises service into primary tuple space

# File lib/gv/bedrock/service.rb, line 21
def provide
  DRb.start_service
  provider.provide
  info "Service #{self.name} started on #{DRb.uri}"
  DRb.thread.join
end
provider() click to toggle source

Default Service Provider

# File lib/gv/bedrock/service.rb, line 31
def provider
  @@provider ||= Rinda::RingProvider.new(self.name.underscore,self,self.new,nil)
end
random_service() click to toggle source

Retrives random service instance

# File lib/gv/bedrock/service.rb, line 45
def random_service
  services.sample
end
service() click to toggle source

Retrives service instance

# File lib/gv/bedrock/service.rb, line 38
def service
  self.find self.name.underscore
end
services() click to toggle source

Retrives all service instances

# File lib/gv/bedrock/service.rb, line 52
def services
  space.read_all([:name,self.name.underscore,nil,nil]).map{|s| s[3]} rescue []
end
space() click to toggle source

Primary remote tuple space

# File lib/gv/bedrock/service.rb, line 66
def space
  @@space ||= Rinda::TupleSpaceProxy.new(Rinda::RingFinger.primary)
end

Public Instance Methods

method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/gv/bedrock/service.rb, line 72
def method_missing name, *args, &block
  if @api.respond_to? name
    @api.public_send name, *args, &block
  else
    super name, *args, &block
  end
end