machinist_callbacks 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +50 -0
- data/Rakefile +37 -0
- data/VERSION +1 -0
- data/lib/machinist_callbacks.rb +49 -0
- data/machinist_callbacks.gemspec +87 -0
- data/spec/app_root/app/controllers/application_controller.rb +2 -0
- data/spec/app_root/app/models/director.rb +7 -0
- data/spec/app_root/app/models/movie.rb +9 -0
- data/spec/app_root/app/models/producer.rb +5 -0
- data/spec/app_root/config/boot.rb +114 -0
- data/spec/app_root/config/database.yml +21 -0
- data/spec/app_root/config/environment.rb +14 -0
- data/spec/app_root/config/environments/in_memory.rb +0 -0
- data/spec/app_root/config/environments/mysql.rb +0 -0
- data/spec/app_root/config/environments/postgresql.rb +0 -0
- data/spec/app_root/config/environments/sqlite.rb +0 -0
- data/spec/app_root/config/environments/sqlite3.rb +0 -0
- data/spec/app_root/config/routes.rb +4 -0
- data/spec/app_root/db/migrate/001_create_movies.rb +17 -0
- data/spec/app_root/db/migrate/002_create_directors.rb +13 -0
- data/spec/app_root/db/migrate/003_create_producers.rb +13 -0
- data/spec/app_root/lib/console_with_fixtures.rb +4 -0
- data/spec/app_root/log/.gitignore +1 -0
- data/spec/app_root/script/console +7 -0
- data/spec/callbacks_spec.rb +113 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/blueprints.rb +3 -0
- data/spec/support/rcov.opts +2 -0
- data/spec/support/spec.opts +4 -0
- metadata +110 -0
    
        data/MIT-LICENSE
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            Copyright (c) 2009 Henning Koch
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 4 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 5 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 6 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 7 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 8 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 9 | 
            +
            the following conditions:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 12 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 15 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 16 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 17 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 18 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 19 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 20 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.rdoc
    ADDED
    
    | @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            = machinist_callbacks
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Some record construction rules cannot be expressed with a {machinist}[http://github.com/notahat/machinist] blueprint, for instance:
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Creating a record with a has_many association already filled in.
         | 
| 6 | 
            +
            * Creating a record with interdependencies between associated object, such as having to belong to the same container.
         | 
| 7 | 
            +
            * Needing to process a {delayed_job}[http://github.com/tobi/delayed_job] queue after record construction.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            This gem provides <tt>before_make</tt> and <tt>after_make</tt> callbacks for machinist blueprints,
         | 
| 10 | 
            +
            enabling more freedom in your construction rules.
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            == Example
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                Movie.blueprint do
         | 
| 15 | 
            +
                  title
         | 
| 16 | 
            +
                  year 2001
         | 
| 17 | 
            +
                  before_make do
         | 
| 18 | 
            +
                    self.producer = Producer.make(:name => director.name)
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                Director.blueprint do
         | 
| 23 | 
            +
                  name
         | 
| 24 | 
            +
                  after_make do
         | 
| 25 | 
            +
                    movies << Movie.make
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            == Does it work with make_unsaved?
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            Yes. Machinist is built in a way that every <tt>make</tt> in your callback implicitely becomes a <tt>make_unsaved</tt>
         | 
| 32 | 
            +
            when an object graph is created with <tt>make_unsaved</tt>. Just do not <tt>save</tt> records manually in your callbacks
         | 
| 33 | 
            +
            because that would be crazy.
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            == Installation
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            Install the gem:
         | 
| 38 | 
            +
                sudo gem install machinist_callbacks
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            Require the gem after requiring machinist in your <tt>environment.rb</tt>:
         | 
| 41 | 
            +
                config.gem 'machinist'
         | 
| 42 | 
            +
                config.gem 'machinist_callbacks'
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            === Credits
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            Henning Koch
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            {gem-session.com}[http://gem-session.com/]
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            {www.makandra.de}[http://www.makandra.de/]
         | 
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            require 'rake'
         | 
| 2 | 
            +
            # require 'rake/testtask'
         | 
| 3 | 
            +
            require 'rake/rdoctask'
         | 
| 4 | 
            +
            require 'spec/rake/spectask'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            desc 'Default: Run all specs.'
         | 
| 7 | 
            +
            task :default => :spec
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            desc "Run all specs"
         | 
| 10 | 
            +
            Spec::Rake::SpecTask.new() do |t|
         | 
| 11 | 
            +
              t.spec_opts = ['--options', "\"spec/support/spec.opts\""]
         | 
| 12 | 
            +
              t.spec_files = FileList['spec/**/*_spec.rb']
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            desc 'Generate documentation for the machinist_callbacks plugin.'
         | 
| 16 | 
            +
            Rake::RDocTask.new(:rdoc) do |rdoc|
         | 
| 17 | 
            +
              rdoc.rdoc_dir = 'rdoc'
         | 
| 18 | 
            +
              rdoc.title    = 'machinist_callbacks'
         | 
| 19 | 
            +
              rdoc.options << '--line-numbers' << '--inline-source'
         | 
| 20 | 
            +
              rdoc.rdoc_files.include('README')
         | 
| 21 | 
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            begin
         | 
| 25 | 
            +
              require 'jeweler'
         | 
| 26 | 
            +
              Jeweler::Tasks.new do |gemspec|
         | 
| 27 | 
            +
                gemspec.name = "machinist_callbacks"
         | 
| 28 | 
            +
                gemspec.summary = "Callback hooks for machinist blueprints"
         | 
| 29 | 
            +
                gemspec.email = "github@makandra.de"
         | 
| 30 | 
            +
                gemspec.homepage = "http://github.com/makandra/machinist_callbacks"
         | 
| 31 | 
            +
                gemspec.description = "Callback hooks for machinist blueprints"
         | 
| 32 | 
            +
                gemspec.authors = ["Henning Koch"]
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            rescue LoadError
         | 
| 35 | 
            +
              puts "Jeweler not available. Install it with: sudo gem install jeweler"
         | 
| 36 | 
            +
            end
         | 
| 37 | 
            +
             | 
    
        data/VERSION
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            0.1.0
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            require 'machinist'
         | 
| 2 | 
            +
            require 'machinist/active_record'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Machinist
         | 
| 6 | 
            +
              class Lathe
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                attr_reader :before_make_callback, :after_make_callback
         | 
| 9 | 
            +
                
         | 
| 10 | 
            +
                def before_make(&callback)
         | 
| 11 | 
            +
                  object.instance_variable_set(:@before_make_callback, callback)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def after_make(&callback)
         | 
| 15 | 
            +
                  object.instance_variable_set(:@after_make_callback, callback)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                class << self
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def run_with_before_make(*args)
         | 
| 21 | 
            +
                    lathe = run_without_before_make(*args)
         | 
| 22 | 
            +
                    if callback = lathe.object.instance_variable_get(:@before_make_callback)
         | 
| 23 | 
            +
                      lathe.object.instance_eval(&callback)
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                    lathe
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  alias_method_chain :run, :before_make
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
             | 
| 36 | 
            +
            makers = []
         | 
| 37 | 
            +
            makers << ActiveRecord::Associations::HasManyAssociation
         | 
| 38 | 
            +
            makers << ActiveRecord::Base.send(ActiveRecord::Base.respond_to?(:metaclass) ? :metaclass : :singleton_class)
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            makers.each do |maker|
         | 
| 41 | 
            +
              maker.send :define_method, :make_with_after_make do |*args|
         | 
| 42 | 
            +
                object = make_without_after_make(*args)
         | 
| 43 | 
            +
                if callback = object.instance_variable_get(:@after_make_callback)
         | 
| 44 | 
            +
                  object.instance_eval(&callback)
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
                object
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
              maker.alias_method_chain :make, :after_make
         | 
| 49 | 
            +
            end
         | 
| @@ -0,0 +1,87 @@ | |
| 1 | 
            +
            # Generated by jeweler
         | 
| 2 | 
            +
            # DO NOT EDIT THIS FILE
         | 
| 3 | 
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
         | 
| 4 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |s|
         | 
| 7 | 
            +
              s.name = %q{machinist_callbacks}
         | 
| 8 | 
            +
              s.version = "0.1.0"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 | 
            +
              s.authors = ["Henning Koch"]
         | 
| 12 | 
            +
              s.date = %q{2010-06-20}
         | 
| 13 | 
            +
              s.description = %q{Callback hooks for machinist blueprints}
         | 
| 14 | 
            +
              s.email = %q{github@makandra.de}
         | 
| 15 | 
            +
              s.extra_rdoc_files = [
         | 
| 16 | 
            +
                "README.rdoc"
         | 
| 17 | 
            +
              ]
         | 
| 18 | 
            +
              s.files = [
         | 
| 19 | 
            +
                ".gitignore",
         | 
| 20 | 
            +
                 "MIT-LICENSE",
         | 
| 21 | 
            +
                 "README.rdoc",
         | 
| 22 | 
            +
                 "Rakefile",
         | 
| 23 | 
            +
                 "VERSION",
         | 
| 24 | 
            +
                 "lib/machinist_callbacks.rb",
         | 
| 25 | 
            +
                 "machinist_callbacks.gemspec",
         | 
| 26 | 
            +
                 "spec/app_root/app/controllers/application_controller.rb",
         | 
| 27 | 
            +
                 "spec/app_root/app/models/director.rb",
         | 
| 28 | 
            +
                 "spec/app_root/app/models/movie.rb",
         | 
| 29 | 
            +
                 "spec/app_root/app/models/producer.rb",
         | 
| 30 | 
            +
                 "spec/app_root/config/boot.rb",
         | 
| 31 | 
            +
                 "spec/app_root/config/database.yml",
         | 
| 32 | 
            +
                 "spec/app_root/config/environment.rb",
         | 
| 33 | 
            +
                 "spec/app_root/config/environments/in_memory.rb",
         | 
| 34 | 
            +
                 "spec/app_root/config/environments/mysql.rb",
         | 
| 35 | 
            +
                 "spec/app_root/config/environments/postgresql.rb",
         | 
| 36 | 
            +
                 "spec/app_root/config/environments/sqlite.rb",
         | 
| 37 | 
            +
                 "spec/app_root/config/environments/sqlite3.rb",
         | 
| 38 | 
            +
                 "spec/app_root/config/routes.rb",
         | 
| 39 | 
            +
                 "spec/app_root/db/migrate/001_create_movies.rb",
         | 
| 40 | 
            +
                 "spec/app_root/db/migrate/002_create_directors.rb",
         | 
| 41 | 
            +
                 "spec/app_root/db/migrate/003_create_producers.rb",
         | 
| 42 | 
            +
                 "spec/app_root/lib/console_with_fixtures.rb",
         | 
| 43 | 
            +
                 "spec/app_root/log/.gitignore",
         | 
| 44 | 
            +
                 "spec/app_root/script/console",
         | 
| 45 | 
            +
                 "spec/callbacks_spec.rb",
         | 
| 46 | 
            +
                 "spec/spec_helper.rb",
         | 
| 47 | 
            +
                 "spec/support/blueprints.rb",
         | 
| 48 | 
            +
                 "spec/support/rcov.opts",
         | 
| 49 | 
            +
                 "spec/support/spec.opts"
         | 
| 50 | 
            +
              ]
         | 
| 51 | 
            +
              s.homepage = %q{http://github.com/makandra/machinist_callbacks}
         | 
| 52 | 
            +
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 53 | 
            +
              s.require_paths = ["lib"]
         | 
| 54 | 
            +
              s.rubygems_version = %q{1.3.6}
         | 
| 55 | 
            +
              s.summary = %q{Callback hooks for machinist blueprints}
         | 
| 56 | 
            +
              s.test_files = [
         | 
| 57 | 
            +
                "spec/support/blueprints.rb",
         | 
| 58 | 
            +
                 "spec/app_root/db/migrate/001_create_movies.rb",
         | 
| 59 | 
            +
                 "spec/app_root/db/migrate/002_create_directors.rb",
         | 
| 60 | 
            +
                 "spec/app_root/db/migrate/003_create_producers.rb",
         | 
| 61 | 
            +
                 "spec/app_root/config/boot.rb",
         | 
| 62 | 
            +
                 "spec/app_root/config/environment.rb",
         | 
| 63 | 
            +
                 "spec/app_root/config/routes.rb",
         | 
| 64 | 
            +
                 "spec/app_root/config/environments/in_memory.rb",
         | 
| 65 | 
            +
                 "spec/app_root/config/environments/mysql.rb",
         | 
| 66 | 
            +
                 "spec/app_root/config/environments/postgresql.rb",
         | 
| 67 | 
            +
                 "spec/app_root/config/environments/sqlite.rb",
         | 
| 68 | 
            +
                 "spec/app_root/config/environments/sqlite3.rb",
         | 
| 69 | 
            +
                 "spec/app_root/lib/console_with_fixtures.rb",
         | 
| 70 | 
            +
                 "spec/app_root/app/controllers/application_controller.rb",
         | 
| 71 | 
            +
                 "spec/app_root/app/models/movie.rb",
         | 
| 72 | 
            +
                 "spec/app_root/app/models/director.rb",
         | 
| 73 | 
            +
                 "spec/app_root/app/models/producer.rb",
         | 
| 74 | 
            +
                 "spec/callbacks_spec.rb",
         | 
| 75 | 
            +
                 "spec/spec_helper.rb"
         | 
| 76 | 
            +
              ]
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              if s.respond_to? :specification_version then
         | 
| 79 | 
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         | 
| 80 | 
            +
                s.specification_version = 3
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         | 
| 83 | 
            +
                else
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
              else
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
            end
         | 
| @@ -0,0 +1,114 @@ | |
| 1 | 
            +
            # Allow customization of the rails framework path
         | 
| 2 | 
            +
            RAILS_FRAMEWORK_ROOT = (ENV['RAILS_FRAMEWORK_ROOT'] || "#{File.dirname(__FILE__)}/../../../../../../vendor/rails") unless defined?(RAILS_FRAMEWORK_ROOT) 
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            # Don't change this file!
         | 
| 5 | 
            +
            # Configure your app in config/environment.rb and config/environments/*.rb
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module Rails
         | 
| 10 | 
            +
              class << self
         | 
| 11 | 
            +
                def boot!
         | 
| 12 | 
            +
                  unless booted?
         | 
| 13 | 
            +
                    preinitialize
         | 
| 14 | 
            +
                    pick_boot.run
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def booted?
         | 
| 19 | 
            +
                  defined? Rails::Initializer
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def pick_boot
         | 
| 23 | 
            +
                  (vendor_rails? ? VendorBoot : GemBoot).new
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def vendor_rails?
         | 
| 27 | 
            +
                  File.exist?(RAILS_FRAMEWORK_ROOT)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def preinitialize
         | 
| 31 | 
            +
                  load(preinitializer_path) if File.exist?(preinitializer_path)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def preinitializer_path
         | 
| 35 | 
            +
                  "#{RAILS_ROOT}/config/preinitializer.rb"
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              class Boot
         | 
| 40 | 
            +
                def run
         | 
| 41 | 
            +
                  load_initializer
         | 
| 42 | 
            +
                  Rails::Initializer.run(:set_load_path)
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              class VendorBoot < Boot
         | 
| 47 | 
            +
                def load_initializer
         | 
| 48 | 
            +
                  require "#{RAILS_FRAMEWORK_ROOT}/railties/lib/initializer"
         | 
| 49 | 
            +
                  Rails::Initializer.run(:install_gem_spec_stubs)
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
              class GemBoot < Boot
         | 
| 54 | 
            +
                def load_initializer
         | 
| 55 | 
            +
                  self.class.load_rubygems
         | 
| 56 | 
            +
                  load_rails_gem
         | 
| 57 | 
            +
                  require 'initializer'
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                def load_rails_gem
         | 
| 61 | 
            +
                  if version = self.class.gem_version
         | 
| 62 | 
            +
                    gem 'rails', version
         | 
| 63 | 
            +
                  else
         | 
| 64 | 
            +
                    gem 'rails'
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                rescue Gem::LoadError => load_error
         | 
| 67 | 
            +
                  $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
         | 
| 68 | 
            +
                  exit 1
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                class << self
         | 
| 72 | 
            +
                  def rubygems_version
         | 
| 73 | 
            +
                    Gem::RubyGemsVersion rescue nil
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  def gem_version
         | 
| 77 | 
            +
                    if defined? RAILS_GEM_VERSION
         | 
| 78 | 
            +
                      RAILS_GEM_VERSION
         | 
| 79 | 
            +
                    elsif ENV.include?('RAILS_GEM_VERSION')
         | 
| 80 | 
            +
                      ENV['RAILS_GEM_VERSION']
         | 
| 81 | 
            +
                    else
         | 
| 82 | 
            +
                      parse_gem_version(read_environment_rb)
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  def load_rubygems
         | 
| 87 | 
            +
                    require 'rubygems'
         | 
| 88 | 
            +
                    min_version = '1.1.1'
         | 
| 89 | 
            +
                    unless rubygems_version >= min_version
         | 
| 90 | 
            +
                      $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
         | 
| 91 | 
            +
                      exit 1
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
             
         | 
| 94 | 
            +
                  rescue LoadError
         | 
| 95 | 
            +
                    $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
         | 
| 96 | 
            +
                    exit 1
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  def parse_gem_version(text)
         | 
| 100 | 
            +
                    $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
         | 
| 101 | 
            +
                  end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                  private
         | 
| 104 | 
            +
                    def read_environment_rb
         | 
| 105 | 
            +
                      environment_rb = "#{RAILS_ROOT}/config/environment.rb"
         | 
| 106 | 
            +
                      environment_rb = "#{HELPER_RAILS_ROOT}/config/environment.rb" unless File.exists?(environment_rb)
         | 
| 107 | 
            +
                      File.read(environment_rb)
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
              end
         | 
| 111 | 
            +
            end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            # All that for this:
         | 
| 114 | 
            +
            Rails.boot!
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            in_memory:
         | 
| 2 | 
            +
              adapter: sqlite3
         | 
| 3 | 
            +
              database: ":memory:"
         | 
| 4 | 
            +
              verbosity: quiet
         | 
| 5 | 
            +
            sqlite:
         | 
| 6 | 
            +
              adapter: sqlite
         | 
| 7 | 
            +
              dbfile: plugin_test.sqlite.db
         | 
| 8 | 
            +
            sqlite3:
         | 
| 9 | 
            +
              adapter: sqlite3
         | 
| 10 | 
            +
              dbfile: plugin_test.sqlite3.db
         | 
| 11 | 
            +
            postgresql:
         | 
| 12 | 
            +
              adapter: postgresql
         | 
| 13 | 
            +
              username: postgres
         | 
| 14 | 
            +
              password: postgres
         | 
| 15 | 
            +
              database: plugin_test
         | 
| 16 | 
            +
            mysql:
         | 
| 17 | 
            +
              adapter: mysql
         | 
| 18 | 
            +
              host: localhost
         | 
| 19 | 
            +
              username: root
         | 
| 20 | 
            +
              password:
         | 
| 21 | 
            +
              database: plugin_test
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            require File.join(File.dirname(__FILE__), 'boot')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Rails::Initializer.run do |config|
         | 
| 4 | 
            +
              config.cache_classes = false
         | 
| 5 | 
            +
              config.whiny_nils = true
         | 
| 6 | 
            +
              config.action_controller.session = { :key => "_myapp_session", :secret => "gwirofjweroijger8924rt2zfwehfuiwehb1378rifowenfoqwphf23" }
         | 
| 7 | 
            +
              config.plugin_locators.unshift(
         | 
| 8 | 
            +
                Class.new(Rails::Plugin::Locator) do
         | 
| 9 | 
            +
                  def plugins
         | 
| 10 | 
            +
                    [Rails::Plugin.new(File.expand_path('.'))]
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              ) unless defined?(PluginTestHelper::PluginLocator)
         | 
| 14 | 
            +
            end
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            class CreateMovies < ActiveRecord::Migration
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              def self.up
         | 
| 4 | 
            +
                create_table :movies do |t|
         | 
| 5 | 
            +
                  t.string :title
         | 
| 6 | 
            +
                  t.integer :year
         | 
| 7 | 
            +
                  t.integer :prequel_id
         | 
| 8 | 
            +
                  t.integer :director_id
         | 
| 9 | 
            +
                  t.integer :producer_id
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def self.down
         | 
| 14 | 
            +
                drop_table :movies
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,4 @@ | |
| 1 | 
            +
            # Loads fixtures into the database when running the test app via the console
         | 
| 2 | 
            +
            (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(Rails.root, '../fixtures/*.{yml,csv}'))).each do |fixture_file|
         | 
| 3 | 
            +
              Fixtures.create_fixtures(File.join(Rails.root, '../fixtures'), File.basename(fixture_file, '.*'))
         | 
| 4 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            *.log
         | 
| @@ -0,0 +1,113 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/spec_helper'
         | 
| 2 | 
            +
            require 'machinist/active_record'
         | 
| 3 | 
            +
            require 'ostruct'
         | 
| 4 | 
            +
            require 'sham'
         | 
| 5 | 
            +
            require 'faker'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            describe 'machinist blueprints' do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              before :all do
         | 
| 10 | 
            +
                Sham.name { Faker::Name.name }
         | 
| 11 | 
            +
                Sham.title { Faker::Lorem.sentence }
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              describe 'without callbacks' do
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                it "should not obstruct standard machinist behavior" do
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  Movie.blueprint do
         | 
| 19 | 
            +
                    title
         | 
| 20 | 
            +
                    year 2001
         | 
| 21 | 
            +
                    director
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  Director.blueprint do
         | 
| 25 | 
            +
                    name
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  movie = Movie.make
         | 
| 29 | 
            +
                  movie.title.should be_a(String)
         | 
| 30 | 
            +
                  movie.year.should == 2001
         | 
| 31 | 
            +
                  movie.director.should be_a(Director)
         | 
| 32 | 
            +
                  movie.director.name.should be_a(String)
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              describe "before_make" do
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                before :each do
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  Movie.blueprint do
         | 
| 43 | 
            +
                    title
         | 
| 44 | 
            +
                    year 2001
         | 
| 45 | 
            +
                    before_make do
         | 
| 46 | 
            +
                      if director
         | 
| 47 | 
            +
                        self.producer = Producer.make(:name => director.name)
         | 
| 48 | 
            +
                      end
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  Director.blueprint do
         | 
| 53 | 
            +
                    name
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  Producer.blueprint do
         | 
| 57 | 
            +
                    name
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                it "should allow to configure a freshly made record" do
         | 
| 63 | 
            +
                  movie = Movie.make(:director => Director.make(:name => "director name"))
         | 
| 64 | 
            +
                  movie.producer.name.should == 'director name'
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                it "should work with make_unsaved" do
         | 
| 68 | 
            +
                  movie = Movie.make_unsaved(:director => Director.make_unsaved(:name => "director name"))
         | 
| 69 | 
            +
                  movie.should be_new_record
         | 
| 70 | 
            +
                  movie.producer.name.should == 'director name'
         | 
| 71 | 
            +
                  movie.producer.should be_new_record
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              describe "after_make" do
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                before :each do
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  Movie.blueprint do
         | 
| 81 | 
            +
                    title
         | 
| 82 | 
            +
                    year 2001
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  Director.blueprint do
         | 
| 86 | 
            +
                    name
         | 
| 87 | 
            +
                    after_make do
         | 
| 88 | 
            +
                      movies << Movie.make(:director => self)
         | 
| 89 | 
            +
                    end
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                it "should run the callback after saving" do
         | 
| 95 | 
            +
                  director = Director.make
         | 
| 96 | 
            +
                  director.should_not be_new_record
         | 
| 97 | 
            +
                  director.movies.size.should == 1
         | 
| 98 | 
            +
                  director.movies[0].director.should == director
         | 
| 99 | 
            +
                  director.movies[0].should_not be_new_record
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                it "should work with make_unsaved" do
         | 
| 103 | 
            +
                  director = Director.make_unsaved
         | 
| 104 | 
            +
                  director.should be_new_record
         | 
| 105 | 
            +
                  director.movies.size.should == 1
         | 
| 106 | 
            +
                  director.movies[0].director.should == director
         | 
| 107 | 
            +
                  director.movies[0].should be_new_record
         | 
| 108 | 
            +
                end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
              end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            end
         | 
| 113 | 
            +
             | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            $: << File.join(File.dirname(__FILE__), "/../lib" )
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Set the default environment to sqlite3's in_memory database
         | 
| 4 | 
            +
            ENV['RAILS_ENV'] ||= 'in_memory'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            # Load the Rails environment and testing framework
         | 
| 8 | 
            +
            require "#{File.dirname(__FILE__)}/app_root/config/environment"
         | 
| 9 | 
            +
            require 'rubygems'
         | 
| 10 | 
            +
            require 'machinist'
         | 
| 11 | 
            +
            require 'spec/rails'
         | 
| 12 | 
            +
            require "#{File.dirname(__FILE__)}/../lib/machinist_callbacks"
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # Undo changes to RAILS_ENV
         | 
| 15 | 
            +
            silence_warnings {RAILS_ENV = ENV['RAILS_ENV']}
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            # Run the migrations
         | 
| 18 | 
            +
            ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            Spec::Runner.configure do |config|
         | 
| 21 | 
            +
              config.use_transactional_fixtures = true
         | 
| 22 | 
            +
              config.use_instantiated_fixtures  = false
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,110 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: machinist_callbacks
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              prerelease: false
         | 
| 5 | 
            +
              segments: 
         | 
| 6 | 
            +
              - 0
         | 
| 7 | 
            +
              - 1
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              version: 0.1.0
         | 
| 10 | 
            +
            platform: ruby
         | 
| 11 | 
            +
            authors: 
         | 
| 12 | 
            +
            - Henning Koch
         | 
| 13 | 
            +
            autorequire: 
         | 
| 14 | 
            +
            bindir: bin
         | 
| 15 | 
            +
            cert_chain: []
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            date: 2010-06-20 00:00:00 +02:00
         | 
| 18 | 
            +
            default_executable: 
         | 
| 19 | 
            +
            dependencies: []
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            description: Callback hooks for machinist blueprints
         | 
| 22 | 
            +
            email: github@makandra.de
         | 
| 23 | 
            +
            executables: []
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            extensions: []
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            extra_rdoc_files: 
         | 
| 28 | 
            +
            - README.rdoc
         | 
| 29 | 
            +
            files: 
         | 
| 30 | 
            +
            - .gitignore
         | 
| 31 | 
            +
            - MIT-LICENSE
         | 
| 32 | 
            +
            - README.rdoc
         | 
| 33 | 
            +
            - Rakefile
         | 
| 34 | 
            +
            - VERSION
         | 
| 35 | 
            +
            - lib/machinist_callbacks.rb
         | 
| 36 | 
            +
            - machinist_callbacks.gemspec
         | 
| 37 | 
            +
            - spec/app_root/app/controllers/application_controller.rb
         | 
| 38 | 
            +
            - spec/app_root/app/models/director.rb
         | 
| 39 | 
            +
            - spec/app_root/app/models/movie.rb
         | 
| 40 | 
            +
            - spec/app_root/app/models/producer.rb
         | 
| 41 | 
            +
            - spec/app_root/config/boot.rb
         | 
| 42 | 
            +
            - spec/app_root/config/database.yml
         | 
| 43 | 
            +
            - spec/app_root/config/environment.rb
         | 
| 44 | 
            +
            - spec/app_root/config/environments/in_memory.rb
         | 
| 45 | 
            +
            - spec/app_root/config/environments/mysql.rb
         | 
| 46 | 
            +
            - spec/app_root/config/environments/postgresql.rb
         | 
| 47 | 
            +
            - spec/app_root/config/environments/sqlite.rb
         | 
| 48 | 
            +
            - spec/app_root/config/environments/sqlite3.rb
         | 
| 49 | 
            +
            - spec/app_root/config/routes.rb
         | 
| 50 | 
            +
            - spec/app_root/db/migrate/001_create_movies.rb
         | 
| 51 | 
            +
            - spec/app_root/db/migrate/002_create_directors.rb
         | 
| 52 | 
            +
            - spec/app_root/db/migrate/003_create_producers.rb
         | 
| 53 | 
            +
            - spec/app_root/lib/console_with_fixtures.rb
         | 
| 54 | 
            +
            - spec/app_root/log/.gitignore
         | 
| 55 | 
            +
            - spec/app_root/script/console
         | 
| 56 | 
            +
            - spec/callbacks_spec.rb
         | 
| 57 | 
            +
            - spec/spec_helper.rb
         | 
| 58 | 
            +
            - spec/support/blueprints.rb
         | 
| 59 | 
            +
            - spec/support/rcov.opts
         | 
| 60 | 
            +
            - spec/support/spec.opts
         | 
| 61 | 
            +
            has_rdoc: true
         | 
| 62 | 
            +
            homepage: http://github.com/makandra/machinist_callbacks
         | 
| 63 | 
            +
            licenses: []
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            post_install_message: 
         | 
| 66 | 
            +
            rdoc_options: 
         | 
| 67 | 
            +
            - --charset=UTF-8
         | 
| 68 | 
            +
            require_paths: 
         | 
| 69 | 
            +
            - lib
         | 
| 70 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 71 | 
            +
              requirements: 
         | 
| 72 | 
            +
              - - ">="
         | 
| 73 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 74 | 
            +
                  segments: 
         | 
| 75 | 
            +
                  - 0
         | 
| 76 | 
            +
                  version: "0"
         | 
| 77 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 78 | 
            +
              requirements: 
         | 
| 79 | 
            +
              - - ">="
         | 
| 80 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 81 | 
            +
                  segments: 
         | 
| 82 | 
            +
                  - 0
         | 
| 83 | 
            +
                  version: "0"
         | 
| 84 | 
            +
            requirements: []
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            rubyforge_project: 
         | 
| 87 | 
            +
            rubygems_version: 1.3.6
         | 
| 88 | 
            +
            signing_key: 
         | 
| 89 | 
            +
            specification_version: 3
         | 
| 90 | 
            +
            summary: Callback hooks for machinist blueprints
         | 
| 91 | 
            +
            test_files: 
         | 
| 92 | 
            +
            - spec/support/blueprints.rb
         | 
| 93 | 
            +
            - spec/app_root/db/migrate/001_create_movies.rb
         | 
| 94 | 
            +
            - spec/app_root/db/migrate/002_create_directors.rb
         | 
| 95 | 
            +
            - spec/app_root/db/migrate/003_create_producers.rb
         | 
| 96 | 
            +
            - spec/app_root/config/boot.rb
         | 
| 97 | 
            +
            - spec/app_root/config/environment.rb
         | 
| 98 | 
            +
            - spec/app_root/config/routes.rb
         | 
| 99 | 
            +
            - spec/app_root/config/environments/in_memory.rb
         | 
| 100 | 
            +
            - spec/app_root/config/environments/mysql.rb
         | 
| 101 | 
            +
            - spec/app_root/config/environments/postgresql.rb
         | 
| 102 | 
            +
            - spec/app_root/config/environments/sqlite.rb
         | 
| 103 | 
            +
            - spec/app_root/config/environments/sqlite3.rb
         | 
| 104 | 
            +
            - spec/app_root/lib/console_with_fixtures.rb
         | 
| 105 | 
            +
            - spec/app_root/app/controllers/application_controller.rb
         | 
| 106 | 
            +
            - spec/app_root/app/models/movie.rb
         | 
| 107 | 
            +
            - spec/app_root/app/models/director.rb
         | 
| 108 | 
            +
            - spec/app_root/app/models/producer.rb
         | 
| 109 | 
            +
            - spec/callbacks_spec.rb
         | 
| 110 | 
            +
            - spec/spec_helper.rb
         |