lib/ruboss4ruby.rb in ruboss4ruby-1.0.5 vs lib/ruboss4ruby.rb in ruboss4ruby-1.1.0
- old
+ new
@@ -1,56 +1,89 @@
-# Merb specific handling
+# Sets up all the relevant configuration options and brings together
+# patches for Rails, Merb, ActiveRecord and Data Mapper.
+#
+# Loads Ruboss specific rake tasks if appropriate.
+module Ruboss4Ruby
+
+ # :stopdoc:
+ VERSION = '1.1.0'
+ RUBOSS_FRAMEWORK_VERSION = '1.1.0'
+ LIB_DIR = File.join(File.dirname(__FILE__), 'ruboss4ruby/')
+ # :startdoc:
+
+ # Returns the version string for the library.
+ #
+ def self.version
+ VERSION
+ end
+
+ # Utility method used to require all files ending in .rb that lie in the
+ # directory below this file that has the same name as the filename passed
+ # in. Optionally, a specific _directory_ name can be passed in such that
+ # the _filename_ does not have to be equivalent to the directory.
+ #
+ def self.require_all_libs_relative_to( fname, dir = nil )
+ dir ||= ::File.basename(fname, '.*')
+ search_me = ::File.expand_path(
+ ::File.join(::File.dirname(fname), dir, '*', '*.rb'))
+
+ Dir.glob(search_me).sort.each {|rb| require rb}
+ end
+
+end
+
+require Ruboss4Ruby::LIB_DIR + 'configuration'
+
# make sure we're running inside Merb
if defined?(Merb::Plugins)
- Merb::BootLoader.before_app_loads do
- Merb.add_mime_type(:fxml, :to_fxml, %w[application/xml text/xml application/x-xml], :charset => "utf-8")
+ Merb::Plugins.add_rakefiles 'ruboss4ruby/tasks'
- # generators = File.join(File.dirname(__FILE__), '..', 'merb_generators')
- # Merb.add_generators generators / :ruboss_config
- # Merb.add_generators generators / :ruboss_flex_app
- # Merb.add_generators generators / :ruboss_controller
- # Merb.add_generators generators / :ruboss_scaffold
- # Merb.add_generators generators / :ruboss_resource_controller
+ Merb::BootLoader.before_app_loads do
- require 'ruboss4ruby/version'
- require 'ruboss4ruby/configuration'
- require 'ruboss4ruby/active_foo' if defined?(ActiveRecord::Base)
- end
-
- # TODO: can we find out if use_orm :activerecord is on and only then load active record specific tasks?
- Merb::Plugins.add_rakefiles "ruboss4ruby/tasks", "ruboss4ruby/active_record_tasks"
+ if defined?(ActiveRecord::Base)
+ Merb.add_mime_type(:fxml, :to_fxml, %w[application/xml text/xml application/x-xml], :charset => "utf-8")
+ ['active_foo', 'active_record_default_methods'].each { |lib| require Ruboss4Ruby::LIB_DIR + lib }
+ Merb::Plugins.add_rakefiles 'ruboss4ruby/active_record_tasks'
+ else
+ Merb.add_mime_type(:fxml, :to_xml, %w[application/xml text/xml application/x-xml], :charset => "utf-8")
+ if defined?(Merb::Orms::DataMapper)
+ require Ruboss4Ruby::LIB_DIR + 'datamapper_foo'
+ end
+ end
+ end
elsif defined?(ActionController::Base)
- # if we are not running in Merb, we've got to be running in Rails
+ # if we are not running in Merb, try to hook up Rails
Mime::Type.register_alias "application/xml", :fxml
+
+ ['active_foo', 'active_record_default_methods', 'rails/swf_helper'].each { |lib| require Ruboss4Ruby::LIB_DIR + lib }
- require File.join(File.dirname(__FILE__),'ruboss4ruby', 'version')
- require File.join(File.dirname(__FILE__),'ruboss4ruby', 'configuration')
- require File.join(File.dirname(__FILE__),'ruboss4ruby', 'active_foo')
- require File.join(File.dirname(__FILE__), 'ruboss4ruby', 'ruboss_helper')
- ActionView::Base.send :include, RubossHelper unless ActionView::Base.included_modules.include?(RubossHelper)
- require File.join(File.dirname(__FILE__), 'ruboss4ruby', 'ruboss_test_helpers')
- Test::Unit::TestCase.send :include, RubossTestHelpers unless Test::Unit::TestCase.included_modules.include?(RubossTestHelpers)
+ ActionView::Base.send :include, SWFHelper unless ActionView::Base.included_modules.include?(SWFHelper)
+ # We mess with default +render+ implementation a bit to add support for expressions
+ # such as format.fxml { render :fxml => @foo }
module ActionController
+ # Override render to add support for render :fxml
class Base
alias_method :old_render, :render unless method_defined?(:old_render)
# so that we can have handling for :fxml option and write code like
# format.fxml { render :fxml => @projects }
def render(options = nil, extra_options = {}, &block)
- if options && options[:fxml]
+ if options.is_a?(Hash) && options[:fxml]
xml = options[:fxml]
response.content_type ||= Mime::XML
render_for_text(xml.respond_to?(:to_fxml) ? xml.to_fxml : xml, options[:status])
else
old_render(options, extra_options, &block)
end
end
end
end
- module RubossController
+ # It is possible to pass metadata with any Ruboss model. This module adds support for
+ # extracting that metadata into the standard params hash.
+ module Ruboss4RubyController
private
# Extract any keys named _metadata from the models in the params hash
# and put them in the root of the params hash.
def extract_metadata_from_params
@@ -61,11 +94,23 @@
metadata.merge!(v.delete('_metadata'))
end
params.merge!(metadata) unless metadata.empty?
end
end
+
+ module ActiveRecord
+ # ActiveRecord named scopes are computed *before* ruboss4ruby gem gets loaded
+ # this patch addresses that and makes sure +to_fxml+ calls are properly
+ # delegated
+ module NamedScope
+ # make sure we properly delegate +to_fxml+ calls to the proxy
+ class Scope
+ delegate :to_fxml, :to => :proxy_found
+ end
+ end
+ end
- ActionController::Base.send :include, RubossController
+ ActionController::Base.send :include, Ruboss4RubyController
ActionController::Base.send :prepend_before_filter, :extract_metadata_from_params
# temporarily disable forgery protection site-wise
ActionController::Base.allow_forgery_protection = false
end
\ No newline at end of file