Plug it on!... with
     Railties
Edgar J. Suárez
['twitter.com','github.com', 'rails.mx'].each do |host|
  link_to "#{host}/edgarjs"
end

mail_to "edgar.js@gmail.com"
Rail-tie
           Rail (HDR) @ sadi-junior / flickr.com
.init!




         Endeavour launch @ msimdottv / flickr.com
rails server
script/server
require ‘config/application’
   require ‘config/boot’
config/boot.rb
   Bundler.setup
config/application.rb
      require ‘rails/all’
rails/all.rb
  require ‘rails’
rails.rb
   require ‘pathname’
require ‘active_support’
             ...
require ‘rails/application’
             ...
rails/application.rb
   require ‘rails/railties_path’
      require ‘rails/plugin’
      require ‘rails/engine’
rails/engine.rb
   require ‘rails/railtie’
rails/railtie.rb
  require ‘rails/initializable’
 require ‘rails/configuration’
rails/configuration.rb
      require ‘rails/paths’
       require ‘rails/rack’
rails/all.rb
require 'rails'

%w(
  active_record
  action_controller
  action_mailer
  active_resource
  rails/test_unit
).each do |framework|
  begin
    require "#{framework}/railtie"
  rescue LoadError
  end
end
rails new your_app -O
      config/application.rb

       require 'rails/all'
rails new your_app -O
              config/application.rb
  require 'rails'

  # require 'active_record/railtie'
  require 'action_controller/railtie'
  require 'action_mailer/railtie'
  require 'active_resource/railtie'
  require 'rails/test_unit/railtie'
Modular origami : the collection so far @ fdecomite / flickr.com
Lego Trains @ psd / flickr.com
Railtie + Engine +
Application + Plugin
          =
     MODULAR RAILS
Railtie
Railtie
  Initializers
 Configuration
  Rake tasks
  Generators
Initializers

initializer "my_railtie.initialize" do |app|
  app.middleware.use MyRailtie::Middleware
end
Configuration
config.generators.orm :my_railtie_orm

# Add a to_prepare block which is executed once in
production
# and before which request in development
config.to_prepare do
  MyRailtie.setup!
end
Rake tasks

rake_tasks do
  load "path/to/my_railtie.tasks"
end
Generators

generators do
  require "path/to/my_railtie_generator"
end
Engine < Railtie
          Initializers
          Configuration
 Paths
          Rake tasks
          Generators
Paths
paths.app                 =   "app"
paths.app.controllers     =   "app/controllers"
paths.app.helpers         =   "app/helpers"
paths.app.models          =   "app/models"
paths.app.views           =   "app/views"
paths.lib                 =   "lib"
paths.lib.tasks           =   "lib/tasks"
paths.config              =   "config"
paths.config.initializers =   "config/initializers"
paths.config.locales      =   "config/locales"
paths.config.routes       =   "config/routes.rb"
Application < Engine

                          Initializers
                          Configuration
Holds routes
                          Rake tasks
Builds middleware stack
                          Generators
                          Paths
config/application.rb
 module YourRailsApp
   class Application < Rails::Application
   end
 end
Plugin < Engine
Plugin


To be continued...




                     It's so damn Sexy @ picsaremine / flickr.com
.init!




         Endeavour launch @ msimdottv / flickr.com
config/environment.rb

   YourApp::Application.initialize!
YourApp::Application.initialize!


  initializers.each do |initializer|
    initializer.run(*args)
  end

  def initializers
    railties.all { |r| initializers += r.initializers }
  end

  def all(&block)
    @all ||= railties +          engines + plugins
    @all.each(&block) if block
    @all
  end
railties + engines +
              plugins

def railties
  @railties ||= ::Rails::Railtie.subclasses.map(&:new)
end

def engines
  @engines ||= ::Rails::Engine.subclasses.map(&:new)
end

def plugins
  @plugins ||= begin
    plugin_names = (@config.plugins || [:all]).map { |p| p.to_sym }
    Plugin.all(plugin_names, @config.paths.vendor.plugins)
  end
end
Plugin.all
def self.all(list, paths)
  plugins = []
  paths.each do |path|
    Dir["#{path}/*"].each do |plugin_path|
      plugin = new(plugin_path)
      next unless list.include?(plugin.name) || list.include?(:all)
      plugins << plugin
    end
  end

  plugins.sort_by do |p|
    [list.index(p.name) || list.index(:all), p.name.to_s]
  end
end
Plugin.new
def initialize(root)
  @name = File.basename(root).to_sym
  config.root = root
end

initializer :load_init_rb, :before => :load_application_initializers do |app|
  file   = Dir["#{root}/{rails/init,init}.rb"].first
  config = app.config
  eval(File.read(file), binding, file) if file && File.file?(file)
end
How to make your
     Railtie
# railtie_name/lib/railtie_name/railtie.rb
require 'rails'

module RailtieName
  class Railtie < Rails::Railtie
    config.some_config = true

    initializer "railtie_name.initializating" do |app|
      # your initialization here
    end
  end
end
require 'railtie_name/railtie'
Demo
Thanks!

http://twitter.com/edgarjs
http://github.com/edgarjs
  http://rails.mx/edgarjs
    http://freshout.us
   edgar.js@gmail.com

Plug it on!... with railties