Here's a quick hack to use ActiveRecord models in Goliath. With this approach you can use the model without using require, but you don't have the relationships on the model level. To get the has_many and belongs_to relationships (in this approach), I would load the model file and include the lines containing such words in the class definition loop below.
require 'goliath'
require 'active_record'
require 'active_support'
# The location of the Rails app to integrate
RAILS_APP ||= ENV['HOME']+"/dev/qtrack"
# Load the ActiveRecord database configuration, development settings
configpath = File.join(RAILS_APP, "config", "database.yml")
config = YAML::load_file(configpath)
ActiveRecord::Base.establish_connection config["development"]
# Set the names of all Rails models to a constant
MODELS ||= []
models_dir = File.join(RAILS_APP, "app", "models")
model_names = Dir[models_dir+"/*.rb"]
# Loop over each file name, define a class for each
model_names.each do |fname|
mname = File.basename(fname, '.rb').titleize.sub(/ /, '')
eval %Q{
class ::#{mname} < ActiveRecord::Base
end
}
m = mname.constantize
MODELS << m unless MODELS.include?(m)
end
class Hello < Goliath::API
# default to JSON output, allow Yaml as secondary
use Goliath::Rack::Render, ['json', 'yaml']
def response(env)
# Create a Hash with each model name and the object count
models = MODELS.inject({}) {|hsh,model| hsh[model] = model.count; hsh }
[200, {}, models.to_json ]
end
end
This is a hack based on your feedback.