merb-gen 1.0.15 → 1.1.0.pre
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/Rakefile +59 -69
- data/bin/merb-gen +14 -2
- data/lib/generators/fcgi.rb +16 -0
- data/lib/generators/merb/merb_core.rb +14 -12
- data/lib/generators/merb/merb_flat.rb +11 -6
- data/lib/generators/merb/merb_stack.rb +14 -22
- data/lib/generators/merb/merb_very_flat.rb +32 -11
- data/lib/generators/passenger.rb +15 -0
- data/lib/generators/resource_controller.rb +1 -1
- data/lib/generators/templates/application/common/Gemfile +12 -0
- data/lib/generators/templates/application/common/Rakefile +10 -1
- data/lib/generators/templates/application/common/dotgitignore +3 -3
- data/lib/generators/templates/application/common/merb +20 -0
- data/lib/generators/templates/application/merb_core/autotest/merb_rspec.rb +9 -9
- data/lib/generators/templates/application/merb_core/config/init.rb +3 -5
- data/lib/generators/templates/application/merb_core/spec/spec.opts +1 -1
- data/lib/generators/templates/application/merb_core/spec/spec_helper.rb +9 -7
- data/lib/generators/templates/application/merb_core/test/test_helper.rb +9 -7
- data/lib/generators/templates/application/merb_flat/application.rbt +3 -0
- data/lib/generators/templates/application/merb_flat/config/init.rb +23 -19
- data/lib/generators/templates/application/merb_flat/spec/spec_helper.rb +8 -6
- data/lib/generators/templates/application/merb_flat/test/test_helper.rb +9 -7
- data/lib/generators/templates/application/merb_plugin/Rakefile +35 -4
- data/lib/generators/templates/application/merb_stack/Gemfile +48 -0
- data/lib/generators/templates/application/merb_stack/autotest/merb_rspec.rb +7 -7
- data/lib/generators/templates/application/merb_stack/config/init.rb +2 -2
- data/lib/generators/templates/application/merb_stack/config.ru +23 -0
- data/lib/generators/templates/application/merb_stack/spec/spec.opts +1 -1
- data/lib/generators/templates/application/merb_stack/spec/spec_helper.rb +9 -7
- data/lib/generators/templates/application/merb_stack/test/test_helper.rb +9 -7
- data/lib/generators/templates/application/merb_very_flat/application.rbt +1 -8
- data/lib/generators/templates/application/merb_very_flat/spec/spec_helper.rb +8 -6
- data/lib/generators/templates/application/merb_very_flat/test/test_helper.rb +9 -7
- data/lib/generators/templates/{application/common → component/fcgi}/dothtaccess +1 -2
- data/lib/generators/templates/{application/merb_stack/public → component/fcgi}/merb.fcgi +10 -4
- data/lib/generators/templates/component/model/spec/models/%file_name%_spec.rb +1 -1
- data/lib/merb-gen/app_generator.rb +58 -0
- data/lib/merb-gen/generator.rb +1 -1
- data/lib/merb-gen/version.rb +17 -0
- data/lib/merb-gen.rb +27 -25
- data/spec/controller_spec.rb +1 -1
- data/spec/fcgi_spec.rb +24 -0
- data/spec/generator_spec.rb +1 -1
- data/spec/layout_spec.rb +1 -1
- data/spec/merb_core_spec.rb +17 -5
- data/spec/merb_flat_spec.rb +10 -1
- data/spec/merb_plugin_spec.rb +3 -3
- data/spec/merb_stack_spec.rb +23 -10
- data/spec/merb_very_flat_spec.rb +13 -2
- data/spec/migration_spec.rb +1 -1
- data/spec/model_spec.rb +1 -1
- data/spec/named_generator_spec.rb +1 -1
- data/spec/namespaced_generator_spec.rb +1 -1
- data/spec/part_controller_spec.rb +1 -1
- data/spec/passenger_spec.rb +20 -0
- data/spec/resource_controller_spec.rb +1 -1
- data/spec/resource_spec.rb +1 -1
- data/spec/session_migration_spec.rb +1 -1
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +53 -4
- metadata +78 -45
- data/lib/generators/templates/application/common/doc.thor +0 -149
- data/lib/generators/templates/application/common/merb_thor/app_script.rb +0 -31
- data/lib/generators/templates/application/common/merb_thor/common.rb +0 -68
- data/lib/generators/templates/application/common/merb_thor/gem_ext.rb +0 -125
- data/lib/generators/templates/application/common/merb_thor/main.thor +0 -151
- data/lib/generators/templates/application/common/merb_thor/ops.rb +0 -93
- data/lib/generators/templates/application/common/merb_thor/utils.rb +0 -40
- data/lib/generators/templates/application/merb_core/public/merb.fcgi +0 -22
- data/lib/generators/templates/application/merb_stack/config/dependencies.rb +0 -34
- data/lib/generators/thor.rb +0 -33
| @@ -1,149 +0,0 @@ | |
| 1 | 
            -
            $: << File.join("doc")
         | 
| 2 | 
            -
            require 'rubygems'
         | 
| 3 | 
            -
            require 'rdoc/rdoc'
         | 
| 4 | 
            -
            require 'fileutils'
         | 
| 5 | 
            -
            require 'erb'
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            module Merb
         | 
| 8 | 
            -
              
         | 
| 9 | 
            -
              class GemNotFoundException < Exception
         | 
| 10 | 
            -
              end
         | 
| 11 | 
            -
              
         | 
| 12 | 
            -
              module DocMethods
         | 
| 13 | 
            -
                def setup_gem_path
         | 
| 14 | 
            -
                  if File.directory?(gems_dir = File.join(File.dirname(__FILE__), 'gems'))
         | 
| 15 | 
            -
                    $BUNDLE = true; Gem.clear_paths; Gem.path.unshift(gems_dir)
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
                
         | 
| 19 | 
            -
                def get_more
         | 
| 20 | 
            -
                  libs = []
         | 
| 21 | 
            -
                  more_library = find_library("merb-more")
         | 
| 22 | 
            -
                  File.open("#{more_library}/lib/merb-more.rb").read.each_line do |line|
         | 
| 23 | 
            -
                    if line['require']
         | 
| 24 | 
            -
                      libs << line.gsub("require '", '').gsub("'\n", '')
         | 
| 25 | 
            -
                    end
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
                  return libs
         | 
| 28 | 
            -
                end
         | 
| 29 | 
            -
                
         | 
| 30 | 
            -
                def generate_documentation(file_list, destination, arguments = [])
         | 
| 31 | 
            -
                  output_dir = File.join("/../doc", "rdoc", destination)
         | 
| 32 | 
            -
                  FileUtils.rm_rf(output_dir)
         | 
| 33 | 
            -
                  
         | 
| 34 | 
            -
                  arguments += [
         | 
| 35 | 
            -
                    "--fmt", "merb",
         | 
| 36 | 
            -
                    "--op", output_dir
         | 
| 37 | 
            -
                  ]
         | 
| 38 | 
            -
                  RDoc::RDoc.new.document(arguments + file_list)
         | 
| 39 | 
            -
                  AdvancedDoc.new.index
         | 
| 40 | 
            -
                end
         | 
| 41 | 
            -
                
         | 
| 42 | 
            -
                def find_library(directory_snippet)
         | 
| 43 | 
            -
                  gem_dir = nil
         | 
| 44 | 
            -
                  Gem.path.find do |path|
         | 
| 45 | 
            -
                    dir = Dir.glob("#{path}/gems/#{directory_snippet}*") 
         | 
| 46 | 
            -
                    dir.empty? ? false : gem_dir = dir.last
         | 
| 47 | 
            -
                  end
         | 
| 48 | 
            -
                  raise GemNotFoundException if gem_dir.nil?
         | 
| 49 | 
            -
                  return gem_dir
         | 
| 50 | 
            -
                end
         | 
| 51 | 
            -
                
         | 
| 52 | 
            -
                def get_file_list(directory_snippet)
         | 
| 53 | 
            -
                  gem_dir = find_library(directory_snippet)
         | 
| 54 | 
            -
                  files = Dir.glob("#{gem_dir}/**/lib/**/*.rb")
         | 
| 55 | 
            -
                  files += ["#{gem_dir}/README"] if File.exists?("#{gem_dir}/README")
         | 
| 56 | 
            -
                  return  files
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
              end
         | 
| 59 | 
            -
              
         | 
| 60 | 
            -
              class AdvancedDoc < Thor
         | 
| 61 | 
            -
                
         | 
| 62 | 
            -
                group 'core'
         | 
| 63 | 
            -
                include DocMethods
         | 
| 64 | 
            -
                
         | 
| 65 | 
            -
                def initialize
         | 
| 66 | 
            -
                  super
         | 
| 67 | 
            -
                  setup_gem_path
         | 
| 68 | 
            -
                end
         | 
| 69 | 
            -
                
         | 
| 70 | 
            -
                desc 'index', "Regenerate the index file for your framework documentation"
         | 
| 71 | 
            -
                def index
         | 
| 72 | 
            -
                  @directories = Dir.entries(File.join(File.dirname(__FILE__) + "/../", "doc", "rdoc"))
         | 
| 73 | 
            -
                  @directories.delete(".")
         | 
| 74 | 
            -
                  @directories.delete("..")
         | 
| 75 | 
            -
                  @directories.delete("generators")
         | 
| 76 | 
            -
                  @directories.delete("index.html")
         | 
| 77 | 
            -
                  index_template = File.read(File.join("doc", "rdoc", "generators", "template", "merb", "index.html.erb"))
         | 
| 78 | 
            -
                  
         | 
| 79 | 
            -
                  File.open(File.join("doc", "rdoc", "index.html"), "w") do |file|
         | 
| 80 | 
            -
                    file.write(ERB.new(index_template).result(binding))
         | 
| 81 | 
            -
                  end
         | 
| 82 | 
            -
                end
         | 
| 83 | 
            -
                
         | 
| 84 | 
            -
                desc 'plugins', 'Generate the rdoc for each merb-plugins seperatly'
         | 
| 85 | 
            -
                def plugins
         | 
| 86 | 
            -
                  libs = ["merb_activerecord", "merb_builder", "merb_jquery", "merb_laszlo", "merb_parts", "merb_screw_unit", "merb_sequel", "merb_stories", "merb_test_unit"]
         | 
| 87 | 
            -
                  
         | 
| 88 | 
            -
                  libs.each do |lib|
         | 
| 89 | 
            -
                    options[:gem] = lib
         | 
| 90 | 
            -
                    gem
         | 
| 91 | 
            -
                  end
         | 
| 92 | 
            -
                end
         | 
| 93 | 
            -
                
         | 
| 94 | 
            -
                desc 'more', 'Generate the rdoc for each merb-more gem seperatly'
         | 
| 95 | 
            -
                def more
         | 
| 96 | 
            -
                  libs = get_more
         | 
| 97 | 
            -
                  libs.each do |lib|
         | 
| 98 | 
            -
                    options[:gem] = lib
         | 
| 99 | 
            -
                    gem
         | 
| 100 | 
            -
                  end
         | 
| 101 | 
            -
                end
         | 
| 102 | 
            -
                
         | 
| 103 | 
            -
                desc 'core', 'Generate the rdoc for merb-core'
         | 
| 104 | 
            -
                def core
         | 
| 105 | 
            -
                  options[:gem] = "merb-core"
         | 
| 106 | 
            -
                  gem
         | 
| 107 | 
            -
                end
         | 
| 108 | 
            -
                
         | 
| 109 | 
            -
                desc 'gem', 'Generate the rdoc for a specific gem'
         | 
| 110 | 
            -
                method_options "--gem" => :required
         | 
| 111 | 
            -
                def gem
         | 
| 112 | 
            -
                  file_list = get_file_list(options[:gem])
         | 
| 113 | 
            -
                  readme = File.join(find_library("merb-core"), "README")
         | 
| 114 | 
            -
                  generate_documentation(file_list, options[:gem], ["-m", readme])
         | 
| 115 | 
            -
                rescue GemNotFoundException
         | 
| 116 | 
            -
                  puts "Can not find the gem in the gem path #{options[:gem]}"
         | 
| 117 | 
            -
                end
         | 
| 118 | 
            -
                
         | 
| 119 | 
            -
              end
         | 
| 120 | 
            -
              
         | 
| 121 | 
            -
              class Doc < Thor
         | 
| 122 | 
            -
                
         | 
| 123 | 
            -
                include DocMethods
         | 
| 124 | 
            -
                
         | 
| 125 | 
            -
                def initialize
         | 
| 126 | 
            -
                  super
         | 
| 127 | 
            -
                  setup_gem_path
         | 
| 128 | 
            -
                  
         | 
| 129 | 
            -
                end
         | 
| 130 | 
            -
                
         | 
| 131 | 
            -
                desc 'stack', 'Generate the rdoc for merb-core, merb-more merged together'
         | 
| 132 | 
            -
                def stack
         | 
| 133 | 
            -
                  libs = ["merb"]
         | 
| 134 | 
            -
                        
         | 
| 135 | 
            -
                  file_list = []
         | 
| 136 | 
            -
                  libs.each do |gem_name|
         | 
| 137 | 
            -
                    begin
         | 
| 138 | 
            -
                      file_list += get_file_list(gem_name)
         | 
| 139 | 
            -
                    rescue GemNotFoundException
         | 
| 140 | 
            -
                      puts "Could not find #{gem_name} in #{Gem.path}.  Continuing with out it."
         | 
| 141 | 
            -
                    end
         | 
| 142 | 
            -
                  end
         | 
| 143 | 
            -
                  readme = File.join(find_library("merb"), "README")
         | 
| 144 | 
            -
                  generate_documentation(file_list, "stack", ["-m", readme])
         | 
| 145 | 
            -
                end
         | 
| 146 | 
            -
                
         | 
| 147 | 
            -
              end
         | 
| 148 | 
            -
              
         | 
| 149 | 
            -
            end
         | 
| @@ -1,31 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # This was added by Merb's bundler
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            require "rubygems"
         | 
| 6 | 
            -
            require File.join(File.dirname(__FILE__), "common")
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            gems_dir = File.join(File.dirname(__FILE__), '..', 'gems')
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            if File.directory?(gems_dir)
         | 
| 11 | 
            -
              $BUNDLE = true
         | 
| 12 | 
            -
              Gem.clear_paths
         | 
| 13 | 
            -
              Gem.path.replace([File.expand_path(gems_dir)])
         | 
| 14 | 
            -
              ENV["PATH"] = "#{File.dirname(__FILE__)}:#{ENV["PATH"]}"
         | 
| 15 | 
            -
              
         | 
| 16 | 
            -
              gem_file = File.join(gems_dir, "specifications", "<%= spec.name %>-*.gemspec")
         | 
| 17 | 
            -
              
         | 
| 18 | 
            -
              if local_gem = Dir[gem_file].last
         | 
| 19 | 
            -
                version = File.basename(local_gem)[/-([\.\d]+)\.gemspec$/, 1]
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
            end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
            version ||= "<%= Gem::Requirement.default %>"
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
         | 
| 26 | 
            -
              version = $1
         | 
| 27 | 
            -
              ARGV.shift
         | 
| 28 | 
            -
            end
         | 
| 29 | 
            -
             | 
| 30 | 
            -
            gem '<%= @spec.name %>', version
         | 
| 31 | 
            -
            load '<%= bin_file_name %>'
         | 
| @@ -1,68 +0,0 @@ | |
| 1 | 
            -
            # This was added via Merb's bundler
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require "rubygems"
         | 
| 4 | 
            -
            require "rubygems/source_index"
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            module Gem
         | 
| 7 | 
            -
              BUNDLED_SPECS = File.join(Dir.pwd, "gems", "specifications")
         | 
| 8 | 
            -
              MAIN_INDEX = Gem::SourceIndex.from_gems_in(BUNDLED_SPECS)
         | 
| 9 | 
            -
              FALLBACK_INDEX = Gem::SourceIndex.from_installed_gems
         | 
| 10 | 
            -
              
         | 
| 11 | 
            -
              def self.source_index
         | 
| 12 | 
            -
                MultiSourceIndex.new
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
              
         | 
| 15 | 
            -
              def self.searcher
         | 
| 16 | 
            -
                MultiPathSearcher.new
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
              
         | 
| 19 | 
            -
              class ArbitrarySearcher < GemPathSearcher
         | 
| 20 | 
            -
                def initialize(source_index)
         | 
| 21 | 
            -
                  @source_index = source_index
         | 
| 22 | 
            -
                  super()
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
                
         | 
| 25 | 
            -
                def init_gemspecs
         | 
| 26 | 
            -
                  @source_index.map { |_, spec| spec }.sort { |a,b|
         | 
| 27 | 
            -
                    (a.name <=> b.name).nonzero? || (b.version <=> a.version)
         | 
| 28 | 
            -
                  }
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
              end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
              class MultiPathSearcher
         | 
| 33 | 
            -
                def initialize
         | 
| 34 | 
            -
                  @main_searcher = ArbitrarySearcher.new(MAIN_INDEX)
         | 
| 35 | 
            -
                  @fallback_searcher = ArbitrarySearcher.new(FALLBACK_INDEX)
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
                
         | 
| 38 | 
            -
                def find(path)
         | 
| 39 | 
            -
                  try = @main_searcher.find(path)
         | 
| 40 | 
            -
                  return try if try
         | 
| 41 | 
            -
                  @fallback_searcher.find(path)
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
                
         | 
| 44 | 
            -
                def find_all(path)
         | 
| 45 | 
            -
                  try = @main_searcher.find_all(path)
         | 
| 46 | 
            -
                  return try unless try.empty?
         | 
| 47 | 
            -
                  @fallback_searcher.find_all(path)
         | 
| 48 | 
            -
                end
         | 
| 49 | 
            -
              end
         | 
| 50 | 
            -
              
         | 
| 51 | 
            -
              class MultiSourceIndex
         | 
| 52 | 
            -
                # Used by merb.thor to confirm; not needed when MSI is in use
         | 
| 53 | 
            -
                def load_gems_in(*args)
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
                
         | 
| 56 | 
            -
                def search(*args)
         | 
| 57 | 
            -
                  try = MAIN_INDEX.search(*args)
         | 
| 58 | 
            -
                  return try unless try.empty?
         | 
| 59 | 
            -
                  FALLBACK_INDEX.search(*args)
         | 
| 60 | 
            -
                end
         | 
| 61 | 
            -
                
         | 
| 62 | 
            -
                def find_name(*args)
         | 
| 63 | 
            -
                  try = MAIN_INDEX.find_name(*args)
         | 
| 64 | 
            -
                  return try unless try.empty?
         | 
| 65 | 
            -
                  FALLBACK_INDEX.find_name(*args)
         | 
| 66 | 
            -
                end
         | 
| 67 | 
            -
              end
         | 
| 68 | 
            -
            end
         | 
| @@ -1,125 +0,0 @@ | |
| 1 | 
            -
            require "erb"
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            Gem.pre_install_hooks.push(proc do |installer|
         | 
| 4 | 
            -
              unless File.file?(installer.bin_dir / "common.rb")
         | 
| 5 | 
            -
                FileUtils.mkdir_p(installer.bin_dir)
         | 
| 6 | 
            -
                FileUtils.cp(File.dirname(__FILE__) / "common.rb", installer.bin_dir / "common.rb")
         | 
| 7 | 
            -
              end
         | 
| 8 | 
            -
              
         | 
| 9 | 
            -
              include ColorfulMessages
         | 
| 10 | 
            -
              name = installer.spec.name
         | 
| 11 | 
            -
              if $GEMS && versions = ($GEMS.assoc(name) || [])[1]
         | 
| 12 | 
            -
                dep = Gem::Dependency.new(name, versions)
         | 
| 13 | 
            -
                unless dep.version_requirements.satisfied_by?(installer.spec.version)
         | 
| 14 | 
            -
                  error "Cannot install #{installer.spec.full_name} " \
         | 
| 15 | 
            -
                        "for #{$INSTALLING}; " \
         | 
| 16 | 
            -
                        "you required #{dep}"
         | 
| 17 | 
            -
                  ::Thor::Tasks::Merb::Gem.rollback_trans
         | 
| 18 | 
            -
                  exit!
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 21 | 
            -
              success "Installing #{installer.spec.full_name}"
         | 
| 22 | 
            -
            end)
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            class ::Gem::Uninstaller
         | 
| 25 | 
            -
              def self._with_silent_ui
         | 
| 26 | 
            -
                
         | 
| 27 | 
            -
                ui = Gem::DefaultUserInteraction.ui 
         | 
| 28 | 
            -
                def ui.say(str)
         | 
| 29 | 
            -
                  puts "- #{str}"
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
                
         | 
| 32 | 
            -
                yield
         | 
| 33 | 
            -
                
         | 
| 34 | 
            -
                class << Gem::DefaultUserInteraction.ui
         | 
| 35 | 
            -
                  remove_method :say
         | 
| 36 | 
            -
                end 
         | 
| 37 | 
            -
              end
         | 
| 38 | 
            -
              
         | 
| 39 | 
            -
              def self._uninstall(source_index, name, op, version)
         | 
| 40 | 
            -
                unless source_index.find_name(name, "#{op} #{version}").empty?
         | 
| 41 | 
            -
                  uninstaller = Gem::Uninstaller.new(
         | 
| 42 | 
            -
                    name,
         | 
| 43 | 
            -
                    :version => "#{op} #{version}",
         | 
| 44 | 
            -
                    :install_dir => Dir.pwd / "gems",
         | 
| 45 | 
            -
                    :all => true,
         | 
| 46 | 
            -
                    :ignore => true
         | 
| 47 | 
            -
                  )
         | 
| 48 | 
            -
                  _with_silent_ui { uninstaller.uninstall }
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
              end
         | 
| 51 | 
            -
              
         | 
| 52 | 
            -
              def self._uninstall_others(source_index, name, version)
         | 
| 53 | 
            -
                _uninstall(source_index, name, "<", version)
         | 
| 54 | 
            -
                _uninstall(source_index, name, ">", version)
         | 
| 55 | 
            -
              end
         | 
| 56 | 
            -
            end
         | 
| 57 | 
            -
             | 
| 58 | 
            -
            Gem.post_install_hooks.push(proc do |installer|
         | 
| 59 | 
            -
              source_index = installer.instance_variable_get("@source_index")
         | 
| 60 | 
            -
              ::Gem::Uninstaller._uninstall_others(
         | 
| 61 | 
            -
                source_index, installer.spec.name, installer.spec.version
         | 
| 62 | 
            -
              )
         | 
| 63 | 
            -
            end)
         | 
| 64 | 
            -
             | 
| 65 | 
            -
            class ::Gem::DependencyInstaller
         | 
| 66 | 
            -
              alias old_fg find_gems_with_sources
         | 
| 67 | 
            -
              
         | 
| 68 | 
            -
              def find_gems_with_sources(dep)
         | 
| 69 | 
            -
                if @source_index.any? { |_, installed_spec|
         | 
| 70 | 
            -
                  installed_spec.satisfies_requirement?(dep)
         | 
| 71 | 
            -
                }
         | 
| 72 | 
            -
                  return []
         | 
| 73 | 
            -
                end
         | 
| 74 | 
            -
                
         | 
| 75 | 
            -
                old_fg(dep)
         | 
| 76 | 
            -
              end
         | 
| 77 | 
            -
            end
         | 
| 78 | 
            -
             | 
| 79 | 
            -
            class ::Gem::SpecFetcher
         | 
| 80 | 
            -
              alias old_fetch fetch
         | 
| 81 | 
            -
              def fetch(dependency, all = false, matching_platform = true, prerelease = false)
         | 
| 82 | 
            -
                idx = Gem::SourceIndex.from_installed_gems
         | 
| 83 | 
            -
                
         | 
| 84 | 
            -
                reqs = dependency.version_requirements.requirements
         | 
| 85 | 
            -
                
         | 
| 86 | 
            -
                if reqs.size == 1 && reqs[0][0] == "="
         | 
| 87 | 
            -
                  dep = idx.search(dependency).sort.last
         | 
| 88 | 
            -
                end
         | 
| 89 | 
            -
                
         | 
| 90 | 
            -
                if dep
         | 
| 91 | 
            -
                  file = dep.loaded_from.dup
         | 
| 92 | 
            -
                  file.gsub!(/specifications/, "cache")
         | 
| 93 | 
            -
                  file.gsub!(/gemspec$/, "gem")
         | 
| 94 | 
            -
                  spec = ::Gem::Format.from_file_by_path(file).spec
         | 
| 95 | 
            -
                  [[spec, file]]
         | 
| 96 | 
            -
                else
         | 
| 97 | 
            -
                  old_fetch(dependency, all, matching_platform)
         | 
| 98 | 
            -
                end
         | 
| 99 | 
            -
              end
         | 
| 100 | 
            -
            end
         | 
| 101 | 
            -
             | 
| 102 | 
            -
            class ::Gem::Installer
         | 
| 103 | 
            -
              def app_script_text(bin_file_name)
         | 
| 104 | 
            -
                template = File.read(File.dirname(__FILE__) / "app_script.rb")
         | 
| 105 | 
            -
                erb = ERB.new(template)
         | 
| 106 | 
            -
                erb.result(binding)
         | 
| 107 | 
            -
              end
         | 
| 108 | 
            -
            end
         | 
| 109 | 
            -
             | 
| 110 | 
            -
            class ::Gem::Specification
         | 
| 111 | 
            -
              def recursive_dependencies(from, index = Gem.source_index)
         | 
| 112 | 
            -
                specs = self.runtime_dependencies.map do |dep|
         | 
| 113 | 
            -
                  spec = index.search(dep).last
         | 
| 114 | 
            -
                  unless spec
         | 
| 115 | 
            -
                    from_name = from.is_a?(::Gem::Specification) ? from.full_name : from.to_s
         | 
| 116 | 
            -
                    wider_net = index.find_name(dep.name).last
         | 
| 117 | 
            -
                    ThorUI.error "Needed #{dep} for #{from_name}, but could not find it"
         | 
| 118 | 
            -
                    ThorUI.error "Found #{wider_net.full_name}" if wider_net
         | 
| 119 | 
            -
                    ::Thor::Tasks::Merb::Gem.rollback_trans
         | 
| 120 | 
            -
                  end
         | 
| 121 | 
            -
                  spec
         | 
| 122 | 
            -
                end
         | 
| 123 | 
            -
                specs + specs.map {|s| s.recursive_dependencies(self, index)}.flatten.uniq
         | 
| 124 | 
            -
              end
         | 
| 125 | 
            -
            end
         | 
| @@ -1,151 +0,0 @@ | |
| 1 | 
            -
            require "rubygems"
         | 
| 2 | 
            -
            require "rubygems/source_index"
         | 
| 3 | 
            -
            require "rubygems/dependency_installer"
         | 
| 4 | 
            -
            require "rubygems/uninstaller"
         | 
| 5 | 
            -
            require "fileutils"
         | 
| 6 | 
            -
            require File.join(File.dirname(__FILE__), "utils")
         | 
| 7 | 
            -
            require File.join(File.dirname(__FILE__), "gem_ext")
         | 
| 8 | 
            -
            require File.join(File.dirname(__FILE__), "ops")
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            $INSTALLING = []
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            module Merb
         | 
| 13 | 
            -
              
         | 
| 14 | 
            -
              class Gem < Thor
         | 
| 15 | 
            -
                extend ColorfulMessages
         | 
| 16 | 
            -
                
         | 
| 17 | 
            -
                def initialize
         | 
| 18 | 
            -
                  dirs = [Dir.pwd, File.dirname(__FILE__) / ".."]
         | 
| 19 | 
            -
                  root = dirs.find {|d| File.file?(d / "config" / "dependencies.rb")}
         | 
| 20 | 
            -
                  
         | 
| 21 | 
            -
                  if root
         | 
| 22 | 
            -
                    @depsrb = root / "config" / "dependencies.rb"
         | 
| 23 | 
            -
                  else
         | 
| 24 | 
            -
                    self.class.error "dependencies.rb was not found"
         | 
| 25 | 
            -
                    exit!
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
                  
         | 
| 28 | 
            -
                  FileUtils.mkdir_p(Dir.pwd / "gems")
         | 
| 29 | 
            -
                  
         | 
| 30 | 
            -
                  @list = Collector.collect(File.read(@depsrb))
         | 
| 31 | 
            -
                  @idx = ::Gem::SourceIndex.new.load_gems_in("gems/specifications")
         | 
| 32 | 
            -
                end
         | 
| 33 | 
            -
                
         | 
| 34 | 
            -
                def list
         | 
| 35 | 
            -
                  require "pp"
         | 
| 36 | 
            -
                  pp @list
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
                
         | 
| 39 | 
            -
                desc "redeploy", "Syncs up gems/cache with gems/gems. All gems in the cache " \
         | 
| 40 | 
            -
                                 "that are not already installed will be installed from the " \
         | 
| 41 | 
            -
                                 "cache. All installed gems that are not in the cache will " \
         | 
| 42 | 
            -
                                 "be uninstalled."
         | 
| 43 | 
            -
                def redeploy
         | 
| 44 | 
            -
                  gem_dir = Dir.pwd / "gems" / "gems"
         | 
| 45 | 
            -
                  cache_dir = Dir.pwd / "gems" / "cache"
         | 
| 46 | 
            -
                  
         | 
| 47 | 
            -
                  gems  = Dir[gem_dir / "*"].map!  {|n| File.basename(n)}
         | 
| 48 | 
            -
                  cache = Dir[cache_dir / "*.gem"].map! {|n| File.basename(n, ".gem")}
         | 
| 49 | 
            -
                  new_gems = cache - gems
         | 
| 50 | 
            -
                  outdated = gems - cache
         | 
| 51 | 
            -
                  idx = ::Gem::SourceIndex.new
         | 
| 52 | 
            -
                  idx.load_gems_in(Dir.pwd / "gems" / "specifications")
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                  new_gems.each do |g|
         | 
| 55 | 
            -
                    installer = ::Gem::Installer.new(cache_dir / "#{g}.gem",
         | 
| 56 | 
            -
                      :bin_dir => Dir.pwd / "bin",
         | 
| 57 | 
            -
                      :install_dir => Dir.pwd / "gems",
         | 
| 58 | 
            -
                      :ignore_dependencies => true,
         | 
| 59 | 
            -
                      :user_install => false,
         | 
| 60 | 
            -
                      :wrappers => true,
         | 
| 61 | 
            -
                      :source_index => idx)
         | 
| 62 | 
            -
                        
         | 
| 63 | 
            -
                    installer.install
         | 
| 64 | 
            -
                  end
         | 
| 65 | 
            -
                  
         | 
| 66 | 
            -
                  outdated.each do |g|
         | 
| 67 | 
            -
                    /(.*)\-(.*)/ =~ g
         | 
| 68 | 
            -
                    name, version = $1, $2
         | 
| 69 | 
            -
                    uninstaller = ::Gem::Uninstaller.new(name,
         | 
| 70 | 
            -
                      :version => version,
         | 
| 71 | 
            -
                      :bin_dir => Dir.pwd / "bin",
         | 
| 72 | 
            -
                      :install_dir => Dir.pwd / "gems",
         | 
| 73 | 
            -
                      :ignore => true,
         | 
| 74 | 
            -
                      :executables => true
         | 
| 75 | 
            -
                    )
         | 
| 76 | 
            -
                    uninstaller.uninstall
         | 
| 77 | 
            -
                  end
         | 
| 78 | 
            -
                end
         | 
| 79 | 
            -
                
         | 
| 80 | 
            -
                desc "confirm", "Confirm the current setup. merb:gem:install will " \
         | 
| 81 | 
            -
                                "automatically run this task before committing the " \
         | 
| 82 | 
            -
                                "changes it makes."
         | 
| 83 | 
            -
                def confirm(gems = @list)
         | 
| 84 | 
            -
                  ::Gem.path.replace([Dir.pwd / "gems"])
         | 
| 85 | 
            -
                  ::Gem.source_index.load_gems_in(Dir.pwd / "gems" / "specifications")
         | 
| 86 | 
            -
                  
         | 
| 87 | 
            -
                  self.class.info "Confirming configuration..."
         | 
| 88 | 
            -
                  
         | 
| 89 | 
            -
                  ::Gem.loaded_specs.clear
         | 
| 90 | 
            -
                  
         | 
| 91 | 
            -
                  begin
         | 
| 92 | 
            -
                    gems.each do |name, versions|
         | 
| 93 | 
            -
                      versions ||= []
         | 
| 94 | 
            -
                      ::Gem.activate name, *versions
         | 
| 95 | 
            -
                    end
         | 
| 96 | 
            -
                  rescue ::Gem::LoadError => e
         | 
| 97 | 
            -
                    self.class.error "Configuration could not be confirmed: #{e.message}"
         | 
| 98 | 
            -
                    # Don't rollback since its possibly the confirmation is just broken
         | 
| 99 | 
            -
                    # self.class.rollback_trans
         | 
| 100 | 
            -
                  end
         | 
| 101 | 
            -
                  self.class.info "Confirmed"
         | 
| 102 | 
            -
                end
         | 
| 103 | 
            -
                
         | 
| 104 | 
            -
                desc 'install', 'Sync up your bundled gems with the list in config/dependencies.rb'
         | 
| 105 | 
            -
                def install(*gems)
         | 
| 106 | 
            -
                  if gems.empty?
         | 
| 107 | 
            -
                    gems = @list
         | 
| 108 | 
            -
                  else
         | 
| 109 | 
            -
                    gems = gems.map {|desc| name, *versions = desc.split(" ") }
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
                  
         | 
| 112 | 
            -
                  $GEMS = gems
         | 
| 113 | 
            -
                  
         | 
| 114 | 
            -
                  self.class.begin_trans
         | 
| 115 | 
            -
                  
         | 
| 116 | 
            -
                  gems.each do |name, versions|
         | 
| 117 | 
            -
                    dep = ::Gem::Dependency.new(name, versions || [])
         | 
| 118 | 
            -
                    unless @idx.search(dep).empty?
         | 
| 119 | 
            -
                      next
         | 
| 120 | 
            -
                    end
         | 
| 121 | 
            -
                    
         | 
| 122 | 
            -
                    rescue_failures do
         | 
| 123 | 
            -
                      $INSTALLING = dep
         | 
| 124 | 
            -
                      _install(dep)
         | 
| 125 | 
            -
                    end
         | 
| 126 | 
            -
                  end
         | 
| 127 | 
            -
             | 
| 128 | 
            -
                  gem_dir = Dir.pwd / "gems" / "gems"
         | 
| 129 | 
            -
                  installed_gems  = Dir[gem_dir / "*"].map!  {|n| File.basename(n)}
         | 
| 130 | 
            -
                  
         | 
| 131 | 
            -
                  list = full_list.map {|x| x.full_name}.compact
         | 
| 132 | 
            -
                  
         | 
| 133 | 
            -
                  (installed_gems - list).each do |g|
         | 
| 134 | 
            -
                    /^(.*)\-(.*)$/ =~ g
         | 
| 135 | 
            -
                    name, version = $1, $2
         | 
| 136 | 
            -
                    uninstaller = ::Gem::Uninstaller.new(name,
         | 
| 137 | 
            -
                      :version => version,
         | 
| 138 | 
            -
                      :bin_dir => (Dir.pwd / "bin").to_s,
         | 
| 139 | 
            -
                      :install_dir => (Dir.pwd / "gems").to_s,
         | 
| 140 | 
            -
                      :ignore => true,
         | 
| 141 | 
            -
                      :executables => true
         | 
| 142 | 
            -
                    )
         | 
| 143 | 
            -
                    uninstaller.uninstall
         | 
| 144 | 
            -
                  end
         | 
| 145 | 
            -
                  
         | 
| 146 | 
            -
                  confirm(gems)
         | 
| 147 | 
            -
                  
         | 
| 148 | 
            -
                  self.class.commit_trans
         | 
| 149 | 
            -
                end
         | 
| 150 | 
            -
              end
         | 
| 151 | 
            -
            end
         | 
| @@ -1,93 +0,0 @@ | |
| 1 | 
            -
            module Thor::Tasks
         | 
| 2 | 
            -
              module Merb
         | 
| 3 | 
            -
                class Collector
         | 
| 4 | 
            -
                  attr_reader :dependencies
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                  def self.collect(str)
         | 
| 7 | 
            -
                    collector = new
         | 
| 8 | 
            -
                    collector.instance_eval(str)
         | 
| 9 | 
            -
                    collector.dependencies
         | 
| 10 | 
            -
                  end
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  def initialize
         | 
| 13 | 
            -
                    @dependencies = []
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  def dependency(name, *versions)
         | 
| 17 | 
            -
                    versions.pop if versions.last.is_a?(Hash)
         | 
| 18 | 
            -
                    @dependencies << [name, versions]
         | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
                
         | 
| 22 | 
            -
                class Gem < Thor
         | 
| 23 | 
            -
                  def full_list
         | 
| 24 | 
            -
                    @idx.load_gems_in("gems/specifications")
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                    @list.map do |name, versions|
         | 
| 27 | 
            -
                      dep = ::Gem::Dependency.new(name, versions)
         | 
| 28 | 
            -
                      spec = @idx.search(dep).last
         | 
| 29 | 
            -
                      unless spec
         | 
| 30 | 
            -
                        self.class.error "A required dependency #{dep} was not found"
         | 
| 31 | 
            -
                        self.class.rollback_trans
         | 
| 32 | 
            -
                      end
         | 
| 33 | 
            -
                      deps = spec.recursive_dependencies(dep, @idx)
         | 
| 34 | 
            -
                      [spec] + deps
         | 
| 35 | 
            -
                    end.flatten.uniq
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                  
         | 
| 38 | 
            -
                  def rescue_failures(error = StandardError, prc = nil)
         | 
| 39 | 
            -
                    begin
         | 
| 40 | 
            -
                      yield
         | 
| 41 | 
            -
                    rescue error => e
         | 
| 42 | 
            -
                      if prc
         | 
| 43 | 
            -
                        prc.call(e)
         | 
| 44 | 
            -
                      else
         | 
| 45 | 
            -
                        puts e.message
         | 
| 46 | 
            -
                        puts e.backtrace
         | 
| 47 | 
            -
                      end
         | 
| 48 | 
            -
                      self.class.rollback_trans
         | 
| 49 | 
            -
                    end
         | 
| 50 | 
            -
                  end
         | 
| 51 | 
            -
             | 
| 52 | 
            -
                  def self.begin_trans
         | 
| 53 | 
            -
                    note "Beginning transaction"
         | 
| 54 | 
            -
                    FileUtils.cp_r(Dir.pwd / "gems", Dir.pwd / ".original_gems")
         | 
| 55 | 
            -
                  end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                  def self.commit_trans
         | 
| 58 | 
            -
                    note "Committing transaction"
         | 
| 59 | 
            -
                    FileUtils.rm_rf(Dir.pwd / ".original_gems")
         | 
| 60 | 
            -
                  end
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                  def self.rollback_trans
         | 
| 63 | 
            -
                    if File.exist?(Dir.pwd / ".original_gems")
         | 
| 64 | 
            -
                      note "Rolling back transaction"
         | 
| 65 | 
            -
                      FileUtils.rm_rf(Dir.pwd / "gems")
         | 
| 66 | 
            -
                      FileUtils.mv(Dir.pwd / ".original_gems", Dir.pwd / "gems")
         | 
| 67 | 
            -
                    end
         | 
| 68 | 
            -
                    exit!
         | 
| 69 | 
            -
                  end
         | 
| 70 | 
            -
                  
         | 
| 71 | 
            -
                  private
         | 
| 72 | 
            -
                  def _install(dep)
         | 
| 73 | 
            -
                    @idx.load_gems_in("gems/specifications")
         | 
| 74 | 
            -
                    return if @idx.search(dep).last
         | 
| 75 | 
            -
                    
         | 
| 76 | 
            -
                    installer = ::Gem::DependencyInstaller.new(
         | 
| 77 | 
            -
                      :bin_dir => Dir.pwd / "bin",
         | 
| 78 | 
            -
                      :install_dir => Dir.pwd / "gems",
         | 
| 79 | 
            -
                      :user_install => false)
         | 
| 80 | 
            -
             | 
| 81 | 
            -
                    begin
         | 
| 82 | 
            -
                      installer.install dep.name, dep.version_requirements
         | 
| 83 | 
            -
                    rescue ::Gem::GemNotFoundException => e
         | 
| 84 | 
            -
                      puts "Cannot find #{dep}"
         | 
| 85 | 
            -
                    rescue ::Gem::RemoteFetcher::FetchError => e
         | 
| 86 | 
            -
                      puts e.message
         | 
| 87 | 
            -
                      puts "Retrying..."
         | 
| 88 | 
            -
                      retry
         | 
| 89 | 
            -
                    end
         | 
| 90 | 
            -
                  end
         | 
| 91 | 
            -
                end
         | 
| 92 | 
            -
              end
         | 
| 93 | 
            -
            end
         | 
| @@ -1,40 +0,0 @@ | |
| 1 | 
            -
            class String
         | 
| 2 | 
            -
              def /(other)
         | 
| 3 | 
            -
                (Pathname.new(self) + other).to_s
         | 
| 4 | 
            -
              end
         | 
| 5 | 
            -
            end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            module ColorfulMessages
         | 
| 8 | 
            -
              
         | 
| 9 | 
            -
              # red
         | 
| 10 | 
            -
              def error(*messages)
         | 
| 11 | 
            -
                puts messages.map { |msg| "\033[1;31m#{msg}\033[0m" }
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
              
         | 
| 14 | 
            -
              # yellow
         | 
| 15 | 
            -
              def warning(*messages)
         | 
| 16 | 
            -
                puts messages.map { |msg| "\033[1;33m#{msg}\033[0m" }
         | 
| 17 | 
            -
              end
         | 
| 18 | 
            -
              
         | 
| 19 | 
            -
              # green
         | 
| 20 | 
            -
              def success(*messages)
         | 
| 21 | 
            -
                puts messages.map { |msg| "\033[1;32m#{msg}\033[0m" }
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
              
         | 
| 24 | 
            -
              alias_method :message, :success
         | 
| 25 | 
            -
              
         | 
| 26 | 
            -
              # magenta
         | 
| 27 | 
            -
              def note(*messages)
         | 
| 28 | 
            -
                puts messages.map { |msg| "\033[1;35m#{msg}\033[0m" }
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
              
         | 
| 31 | 
            -
              # blue
         | 
| 32 | 
            -
              def info(*messages)
         | 
| 33 | 
            -
                puts messages.map { |msg| "\033[1;34m#{msg}\033[0m" }
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
              
         | 
| 36 | 
            -
            end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            module ThorUI
         | 
| 39 | 
            -
              extend ColorfulMessages
         | 
| 40 | 
            -
            end
         | 
| @@ -1,22 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 | 
            -
                                                                           
         | 
| 3 | 
            -
            require 'rubygems'
         | 
| 4 | 
            -
            require 'merb-core'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            # this is Merb.root, change this if you have some funky setup.
         | 
| 7 | 
            -
            merb_root = File.expand_path(File.dirname(__FILE__) / '../')
         | 
| 8 | 
            -
                    
         | 
| 9 | 
            -
            # If the fcgi process runs as apache, make sure
         | 
| 10 | 
            -
            # we have an inlinedir set for Rubyinline action-args to work
         | 
| 11 | 
            -
            unless ENV["INLINEDIR"] || ENV["HOME"]
         | 
| 12 | 
            -
              tmpdir = merb_root / "tmp"
         | 
| 13 | 
            -
              unless File.directory?(tmpdir)
         | 
| 14 | 
            -
                Dir.mkdir(tmpdir)
         | 
| 15 | 
            -
              end                
         | 
| 16 | 
            -
              ENV["INLINEDIR"] = tmpdir
         | 
| 17 | 
            -
            end
         | 
| 18 | 
            -
               
         | 
| 19 | 
            -
            # start merb with the fcgi adapter, add options or change the log dir here
         | 
| 20 | 
            -
            Merb.start(:adapter => 'fcgi',
         | 
| 21 | 
            -
                       :merb_root => merb_root,
         | 
| 22 | 
            -
                       :log_file => merb_root /'log'/'merb.log')
         |