class PoiseRuby::Resources::RubyRuntimeTest::Provider

The default provider for `ruby_runtime_test`.

@see Resource @provides ruby_runtime_test

Public Instance Methods

action_run() click to toggle source

The `run` action for the `ruby_runtime_test` resource.

@return [void]

# File lib/poise_ruby/resources/ruby_runtime_test.rb, line 59
        def action_run
          notifying_block do
            # Top level directory for this test.
            directory new_resource.path

            # Install and log the version.
            ruby_runtime new_resource.name do
              provider new_resource.runtime_provider if new_resource.runtime_provider
              version new_resource.version
            end
            test_version

            # Test ruby_gem.
            ruby_gem 'thor remove before' do
              action :remove
              package_name 'thor'
              ruby new_resource.name
            end
            test_require('thor', 'thor_before')
            ruby_gem 'thor' do
              ruby new_resource.name
              notifies :create, sentinel_file('thor'), :immediately
            end
            test_require('thor', 'thor_mid')
            ruby_gem 'thor again' do
              package_name 'thor'
              ruby new_resource.name
              notifies :create, sentinel_file('thor2'), :immediately
            end
            ruby_gem 'thor remove after' do
              action :remove
              package_name 'thor'
              ruby new_resource.name
            end
            test_require('thor', 'thor_after')

            # Use bundler to test something that should always be installed.
            ruby_gem 'bundler' do
              ruby new_resource.name
              notifies :create, sentinel_file('bundler'), :immediately
            end

            # Create and install a Gemfile.
            bundle1_path = ::File.join(new_resource.path, 'bundle1')
            directory bundle1_path
            file ::File.join(bundle1_path, 'Gemfile') do
              content <<-EOH
source 'https://rubygems.org/'
gem 'hashie'
gem 'tomlrb', '1.1.0'
EOH
            end
            bundle1 = bundle_install bundle1_path do
              ruby new_resource.name
            end
            test_require('hashie', bundle: bundle1)
            test_require('tomlrb', bundle: bundle1)
            test_require('thor', 'thor_bundle', bundle: bundle1)

            # Test for bundle exec shebang issues.
            bundle2_path = ::File.join(new_resource.path, 'bundle2')
            directory bundle2_path
            file ::File.join(bundle2_path, 'Gemfile') do
              content <<-EOH
source 'https://rubygems.org/'
gem 'unicorn'
EOH
            end
            file ::File.join(bundle2_path, 'Gemfile.lock') do
              content <<-EOH
GEM
  remote: https://rubygems.org/
  specs:
    kgio (2.10.0)
    rack (1.6.4)
    raindrops (0.15.0)
    unicorn (4.9.0)
      kgio (~> 2.6)
      rack
      raindrops (~> 0.7)

PLATFORMS
  ruby

DEPENDENCIES
  unicorn

BUNDLED WITH
   1.10.6
EOH
            end
            bundle2 = bundle_install bundle2_path do
              ruby new_resource.name
              deployment true
            end
            # test_require('unicorn', bundle: bundle2)
            ruby_execute "unicorn --version > #{::File.join(new_resource.path, "unicorn_version")}" do
              ruby new_resource.name
              parent_bundle bundle2
            end
          end
        end
sentinel_file(name) click to toggle source
# File lib/poise_ruby/resources/ruby_runtime_test.rb, line 162
def sentinel_file(name)
  file ::File.join(new_resource.path, "sentinel_#{name}") do
    action :nothing
  end
end

Private Instance Methods

test_require(name, path=name, ruby: new_resource.name, bundle: nil, class_name: nil) click to toggle source
# File lib/poise_ruby/resources/ruby_runtime_test.rb, line 186
        def test_require(name, path=name, ruby: new_resource.name, bundle: nil, class_name: nil)
          # Only queue up this resource once, the ivar is just for tracking.
          @ruby_require_test ||= file ::File.join(new_resource.path, 'require_version.rb') do
            user 'root'
            group 'root'
            mode '644'
            content <<-EOH
require 'rubygems'
begin
  require "\#{ARGV[0]}/version"
  klass = ARGV[1].split('::').inject(Object) {|memo, name| memo.const_get(name) }
  File.new(ARGV[2], 'w').write(klass::VERSION)
rescue LoadError
end
EOH
          end

          class_name ||= Chef::Mixin::ConvertToClassName.convert_to_class_name(name)
          ruby_execute "#{@ruby_require_test.path} #{name} #{class_name} #{::File.join(new_resource.path, "require_#{path}")}" do
            ruby ruby if ruby
            parent_bundle bundle if bundle
          end
        end
test_version(ruby: new_resource.name) click to toggle source
# File lib/poise_ruby/resources/ruby_runtime_test.rb, line 170
        def test_version(ruby: new_resource.name)
          # Only queue up this resource once, the ivar is just for tracking.
          @ruby_version_test ||= file ::File.join(new_resource.path, 'ruby_version.rb') do
            user 'root'
            group 'root'
            mode '644'
            content <<-EOH
File.new(ARGV[0], 'w').write(RUBY_VERSION)
EOH
          end

          ruby_execute "#{@ruby_version_test.path} #{::File.join(new_resource.path, 'version')}" do
            ruby ruby if ruby
          end
        end