class RackDwsRegistry

Public Class Methods

new(host: 'localhost', port: '59500') click to toggle source
Calls superclass method
# File lib/rack_dwsregistry.rb, line 16
def initialize(host: 'localhost', port: '59500')
  
  super() # required for app-routes initialize method to exectue
  DRb.start_service

  # attach to the DRb server via a URI given on the command line
  @reg = DRbObject.new nil, "druby://#{host}:#{port}"
end

Public Instance Methods

call(env) click to toggle source
# File lib/rack_dwsregistry.rb, line 25
def call(env)
  
  @env = env
  request = env['REQUEST_URI'][/https?:\/\/[^\/]+(.*)/,1]

  req = Rack::Request.new(env)

  default_routes(env, req.params)
  content, content_type = run_route(request, env['REQUEST_METHOD'])

  error = $!

  page_content, status_code = if error then
    [error, 500]
  elsif content.nil? then
    ["404: page not found", 404]
  else
    [content, 200]
  end
  
  content_type ||= 'text/html'
  
  [status_code, {"Content-Type" => content_type}, [page_content]]

end

Protected Instance Methods

default_routes(env, params={}) click to toggle source
# File lib/rack_dwsregistry.rb, line 54
def default_routes(env, params={})
  
  # xpath
  #
  get /\/\?xpath=/ do

    xpath = params['xpath']
    
    r = @reg.xpath(xpath)

    return [{xpath: 'empty'}.to_json, 'application/json'] if r.empty?
    
    [r, 'application/xml'] 
    
  end         
      
  # e.g. register?gem=dynarex
  #
  #get /\/register?gem=/ do
  get /\/register/ do      
    
    gem_register(params['gem'])
    #'foo'
    #params['gem'].inspect
  end   
  
  # get_key('.')
  #
  get '/' do |key|

    reg_get '.'
    
  end
  
  # import
  #
  post '/import' do
    
    reg_import params['s'].gsub(/\r/,'')
    
  end    
  
  get '/refresh' do

    refresh()
    'refreshed'
    
  end       
  
  # set_key
  #
  post /^\/(.*)$/ do |key|
    
    reg_set key, params      
    
  end
  
  # delete_key
  #
  get /^\/(.*)\?action=delete_key$/ do |key|

    msg = @reg.delete_key(key)
    [{delete_key: msg}.to_json, 'application/json']

  end
  
  # get_keys
  #
  get /^\/(.*)\?action=get_keys$/ do |key|

    begin
      
      r = @reg.get_keys(key)
      return [{get_keys: 'empty'}.to_json, 'application/json'] unless r
      
      [r, 'application/xml']         
    
    rescue
      
      return [{get_keys: 'key not found'}.to_json, 'application/json'] unless r
      
    end

  end        
  
  # set_key
  #
  get /^\/(.*)\?v=/ do |key|

    reg_set key, params

  end    
  
  
  # get_key
  #
  get /^\/(.*)$/ do |key|

    reg_get key
    
  end    

end

Private Instance Methods

gem_register(gemfile) click to toggle source
# File lib/rack_dwsregistry.rb, line 160
def gem_register(gemfile)
  
  registered = @reg.gem_register(gemfile)
  
  if not registered then
    return [{gem_register: 'failed'}.to_json, 'application/json'] 
  end
  
  ['<gem_register>success</gem_register>', 'application/xml']
  
end
refresh() click to toggle source
# File lib/rack_dwsregistry.rb, line 172
def refresh()
  @reg.refresh
end
reg_get(key) click to toggle source
# File lib/rack_dwsregistry.rb, line 176
def reg_get(key)
  
  begin
    
    r = @reg.get_key(key)          
    return [{get_key: 'key not found'}.to_json, 'application/json'] if r.empty?
    
    [r, 'application/xml']       
    
  rescue
    
    return [{get_key: 'key not found'}.to_json, 'application/json']
    
  end
  
end
reg_import(s) click to toggle source
# File lib/rack_dwsregistry.rb, line 193
def reg_import(s)
  
  imported = @reg.import(s)
  return [{import_key: 'failed'}.to_json, 'application/json'] unless imported
  
  ['<import>success</import>', 'application/xml']
  
end
reg_set(key, params) click to toggle source
# File lib/rack_dwsregistry.rb, line 202
def reg_set(key, params)
  
  val = params['v']
  
  r, status = @reg.set_key(key, val)    
  return [{set_key: (status)}.to_json, 'application/json'] unless r
  
  [r, 'application/xml']
  
end