Skip to content

Commit

Permalink
Asset generators can now register themselves
Browse files Browse the repository at this point in the history
  • Loading branch information
bcardarella committed Jan 24, 2012
1 parent 5201c75 commit c52e326
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 86 deletions.
1 change: 1 addition & 0 deletions lib/client_side_validations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class << self
require 'client_side_validations/active_record' if defined?(::ActiveRecord)
require 'client_side_validations/action_view' if defined?(::ActionView)
if defined?(::Rails)
require 'client_side_validations/generators'
require 'client_side_validations/middleware'
require 'client_side_validations/engine'
end
Expand Down
12 changes: 12 additions & 0 deletions lib/client_side_validations/generators.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module ClientSideValidations
module Generators
Assets = []

def self.register_assets(klass)
Assets.push(*klass.assets)
end
end
end

require 'client_side_validations/generators/rails_validations'

15 changes: 15 additions & 0 deletions lib/client_side_validations/generators/rails_validations.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module ClientSideValidations
module Generators
class RailsValidations
def self.assets
[{
:path => File.expand_path('../../../../vendor/assets/javascripts', __FILE__),
:file => 'rails.validations.js'
}]
end

Generators.register_assets(self)
end
end
end

36 changes: 0 additions & 36 deletions lib/generators/client_side_validations/copy_asset_generator.rb

This file was deleted.

56 changes: 56 additions & 0 deletions lib/generators/client_side_validations/copy_assets_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
module ClientSideValidations
module Generators
class CopyAssetsGenerator < Rails::Generators::Base

def copy_javascript_asset
if self.class == CopyAssetsGenerator || !asset_pipeline_enabled?
assets.each do |asset|
source_paths << asset[:path]
copy_file asset[:file], "#{asset_directory}/#{asset[:file]}"
end
end
end

private

def self.asset_directory
if asset_pipeline_enabled?
"app#{Rails.configuration.assets.prefix}/javascripts"
else
'public/javascripts'
end
end

def asset_directory
CopyAssetsGenerator.asset_directory
end

def self.assets
Assets
end

def assets
CopyAssetsGenerator.assets
end

def self.asset_file_names
assets.map { |asset| asset[:file] }.join(', ')
end

def self.asset_pipeline_enabled?
(Rails.configuration.respond_to?(:assets) ? (Rails.configuration.assets || {}) : {})[:enabled]
end

def asset_pipeline_enabled?
self.class.asset_pipeline_enabled?
end

def self.installation_message
"Copies #{asset_file_names} to #{asset_directory}"
end

desc installation_message
end
end
end

39 changes: 8 additions & 31 deletions lib/generators/client_side_validations/install_generator.rb
Original file line number Diff line number Diff line change
@@ -1,44 +1,21 @@
require 'generators/client_side_validations/copy_assets_generator'

module ClientSideValidations
module Generators
class InstallGenerator < Rails::Generators::Base
source_root File.expand_path('../../templates/client_side_validations', __FILE__)

private

def self.asset_pipeline_enabled?
(Rails.configuration.respond_to?(:assets) ? (Rails.configuration.assets || {}) : {})[:enabled]
end

def asset_pipeline_enabled?
self.class.asset_pipeline_enabled?
end

public

if asset_pipeline_enabled?
desc 'Creates a ClientSideValidations initializer.'
else
desc 'Creates a ClientSideValidations initializer and copies rails.validations.js to public/javascripts.'
end
class InstallGenerator < CopyAssetsGenerator

def copy_initializer
source_paths << File.expand_path('../../templates/client_side_validations', __FILE__)
copy_file 'initializer.rb', 'config/initializers/client_side_validations.rb'
end

def copy_javascript_asset
unless asset_pipeline_enabled?
copy_file '../../../../vendor/assets/javascripts/rails.validations.js', 'public/javascripts/rails.validations.js'
end
end
private

def show_readme
if Rails.version >= '3.1'
readme 'README.rails.3.1' if behavior == :invoke
else
readme 'README.rails.3.0' if behavior == :invoke
end
def self.installation_message
"Copies initializer into config/initializers and #{super.downcase}"
end

desc installation_message
end
end
end
Expand Down

This file was deleted.

1 change: 1 addition & 0 deletions test/base_helper.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'rubygems'
require 'bundler/setup'
require 'test/unit'
require 'ruby-debug'

module ClientSideValidations; end
30 changes: 18 additions & 12 deletions test/generators/cases/test_generators.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
require 'rails/generators/test_case'
require 'client_side_validations'
require 'generators/client_side_validations/copy_assets_generator'
require 'generators/client_side_validations/install_generator'
require 'generators/client_side_validations/copy_asset_generator'

class InstallGeneratorTest < Rails::Generators::TestCase
tests ClientSideValidations::Generators::InstallGenerator
Expand All @@ -16,28 +17,31 @@ class InstallGeneratorTest < Rails::Generators::TestCase

test 'Assert all files are properly created when asset pipeline present and disabled' do
stub_configuration
Rails.configuration.stubs(:assets).returns({})
Rails.configuration.assets[:enabled] = false
configuration = {:enabled => false}
configuration.stubs(:prefix).returns('/assets')
Rails.configuration.stubs(:assets).returns(configuration)
run_generator
assert_file 'config/initializers/client_side_validations.rb'
assert_file 'public/javascripts/rails.validations.js'
end

test 'Assert all files are properly created when asset pipeline present and enabled' do
stub_configuration
Rails.configuration.stubs(:assets).returns({})
Rails.configuration.assets[:enabled] = true
configuration = {:enabled => true}
configuration.stubs(:prefix).returns('/assets')
Rails.configuration.stubs(:assets).returns(configuration)
run_generator
assert_file 'config/initializers/client_side_validations.rb'
assert_file 'config/initializers/client_side_validations.rb'
assert_no_file 'app/assets/javascripts/rails.validations.js'
end

def stub_configuration
Rails.stubs(:configuration).returns(mock('Configuration'))
end
end

class CopyAssetGeneratorTest < Rails::Generators::TestCase
tests ClientSideValidations::Generators::CopyAssetGenerator
class CopyAssetsGeneratorTest < Rails::Generators::TestCase
tests ClientSideValidations::Generators::CopyAssetsGenerator
destination File.expand_path('../../tmp', __FILE__)
setup :prepare_destination

Expand All @@ -49,16 +53,18 @@ class CopyAssetGeneratorTest < Rails::Generators::TestCase

test 'Assert file is properly created when asset pipeline present and disabled' do
stub_configuration
Rails.configuration.stubs(:assets).returns({})
Rails.configuration.assets[:enabled] = false
configuration = {:enabled => false}
configuration.stubs(:prefix).returns('/assets')
Rails.configuration.stubs(:assets).returns(configuration)
run_generator
assert_file 'public/javascripts/rails.validations.js'
end

test 'Assert file is properly created when asset pipeline present and enabled' do
stub_configuration
Rails.configuration.stubs(:assets).returns({})
Rails.configuration.assets[:enabled] = true
configuration = {:enabled => true}
configuration.stubs(:prefix).returns('/assets')
Rails.configuration.stubs(:assets).returns(configuration)
run_generator
assert_file 'app/assets/javascripts/rails.validations.js'
end
Expand Down

0 comments on commit c52e326

Please sign in to comment.