Tworzę serwis, gdzie część będzie działać jako serwis www a część jako aplikacja konsolowa. Ponieważ obie części mają jednakowe metody to chciałbym je umieścić w osobnym module i później includować. Niby prosta sprawa ale rzecz w tym, że w momencie pisania aplikacji nie wiem gdzie ten moduł będzie się znajdował w systemie plikow.
Moduł obecnie wygląda tak
[code]require ‘rubygems’
require ‘ipaddress’
require ‘spamikaze_options’
require ‘spamikaze_config’
module Spamikaze
def search(ip)
(…)
end
(…)
end[/code]
W aplikacji/klasie wykonywana jest metoda setup, która miałaby do tej klasy dodać metody z modułu (tutaj WWW, w aplikacji konsolowej wygląda to nieco inaczej i klasa również nazywa się inaczej)
[code]require ‘rubygems’
require ‘ipaddress’
require ‘sinatra/base’
require ‘erb’
class Controler < Sinatra::Base
ROOT_DIR = File.join(File.dirname(FILE),’…’)
APP_DIR = File.join(ROOT_DIR,‘app’)
set :environment, (ENV[‘RACK_ENV’] ? ENV[‘RACK_ENV’].to_sym : :development)
set :root, ROOT_DIR
set :views, Proc.new {File.join(APP_DIR, ‘views’)}
disable :run
before { setup }
(…)
def setup
env = ENV[‘RACK_ENV’] || ‘development’
case env
when 'development'
lib = File.expand_path(File.join(ROOT_DIR,'lib'))
config = File.expand_path(File.join(ROOT_DIR,'config'))
when 'production'
lib = '/usr/local/spamikaze/lib'
config = '/usr/local/spamikaze/etc'
end
$LOAD_PATH << lib
require 'spamikaze_config'
require 'spamikaze'
include Spamikaze
(...)
end
end[/code]
Powyższe oczywiście nie działa. Podpowiedzcie jak to rozwiązać a jeszcze lepiej jakiś link, gdzie mógłbym o tym poczytać i zrozumieć. Niestety http://www.apohllo.pl/dydaktyka/ruby/intro/metaprogramowanie nie pomogło