Class: Warbler::Traits::Rails

Inherits:
Object
  • Object
show all
Includes:
Warbler::Trait
Defined in:
lib/warbler/traits/rails.rb

Overview

The Rails trait invokes the Rake environment task and sets up Rails for a war-based project.

Instance Attribute Summary

Attributes included from Warbler::Trait

#config

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Warbler::Trait

#add_init_load_path, #add_main_rb, included, #initialize, #jruby_jars, #update_archive, #update_gem_path

Class Method Details

.detect?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/warbler/traits/rails.rb', line 14

def self.detect?
  File.exist?('config/environment.rb')
end

.requirementsObject



18
19
20
# File 'lib/warbler/traits/rails.rb', line 18

def self.requirements
  [ Traits::War ]
end

Instance Method Details

#after_configureObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/warbler/traits/rails.rb', line 45

def after_configure
  config.init_contents << "#{config.warbler_templates}/rails.erb"

  if config.webxml.jruby.min.runtimes.is_a?(OpenStruct) &&
     config.webxml.jruby.max.runtimes.is_a?(OpenStruct) # not set
     if rails_major_version(0) >= 4 || threadsafe_enabled?
       config.webxml.jruby.min.runtimes = 1
       config.webxml.jruby.max.runtimes = 1
     end
  end

  config.includes += FileList["public/assets/.sprockets-manifest-*.json"].existing
  config.includes += FileList["public/assets/manifest-*.json"].existing
  config.includes += FileList["public/assets/manifest.yml"].existing
end

#before_configureObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/warbler/traits/rails.rb', line 22

def before_configure
  config.jar_name = default_app_name
  config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'

  return unless Warbler.framework_detection
  return false unless task = Warbler.project_application.lookup('environment')

  task.invoke rescue nil
  return false unless defined?(::Rails)

  config.dirs << 'tmp' if File.directory?('tmp')
  config.webxml.booter = :rails
  unless (defined?(::Rails.vendor_rails?) && ::Rails.vendor_rails?) || File.directory?('vendor/rails')
    config.gems['rails'] = ::Rails::VERSION::STRING unless Bundler.detect?
  end
  if defined?(::Rails.configuration.gems)
    ::Rails.configuration.gems.each do |g|
      config.gems << Gem::Dependency.new(g.name, g.requirement) if Dir["vendor/gems/#{g.name}*"].empty?
    end
  end
  config.script_files << "#{config.warbler_scripts}/rails.rb"
end

#default_app_nameObject



61
62
63
# File 'lib/warbler/traits/rails.rb', line 61

def default_app_name
  File.basename(File.expand_path(defined?(::Rails.root) ? ::Rails.root : (defined?(RAILS_ROOT) ? RAILS_ROOT : Dir.getwd)))
end

#rails_major_version(default = 0) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/warbler/traits/rails.rb', line 76

def rails_major_version(default = 0)
  begin
    File.open("#{ENV['BUNDLE_GEMFILE'] || 'Gemfile'}.lock") do |file|
      file.each_line do |line|
        match = line.match /^\s*rails\s\(\s*(\d)\.\d+\.\d+.*\)$/
        return match[1].to_i if match
      end
    end
  rescue
  end
  default
end

#threadsafe_enabled?Boolean

Returns:

  • (Boolean)


65
66
67
68
69
70
71
72
73
74
# File 'lib/warbler/traits/rails.rb', line 65

def threadsafe_enabled?
  rails_env = config.webxml.rails.env
  begin
    unless IO.readlines("config/environments/#{rails_env}.rb").grep(/^\s*config\.threadsafe!/).empty? &&
        IO.readlines("config/environment.rb").grep(/^\s*config\.threadsafe!/).empty?
      return true
    end
  rescue
  end
end