Skip to content

Commit c52e326

Browse files
committed
Asset generators can now register themselves
closes DavyJonesLocker#256
1 parent 5201c75 commit c52e326

File tree

9 files changed

+111
-86
lines changed

9 files changed

+111
-86
lines changed

lib/client_side_validations.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class << self
1111
require 'client_side_validations/active_record' if defined?(::ActiveRecord)
1212
require 'client_side_validations/action_view' if defined?(::ActionView)
1313
if defined?(::Rails)
14+
require 'client_side_validations/generators'
1415
require 'client_side_validations/middleware'
1516
require 'client_side_validations/engine'
1617
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module ClientSideValidations
2+
module Generators
3+
Assets = []
4+
5+
def self.register_assets(klass)
6+
Assets.push(*klass.assets)
7+
end
8+
end
9+
end
10+
11+
require 'client_side_validations/generators/rails_validations'
12+
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module ClientSideValidations
2+
module Generators
3+
class RailsValidations
4+
def self.assets
5+
[{
6+
:path => File.expand_path('../../../../vendor/assets/javascripts', __FILE__),
7+
:file => 'rails.validations.js'
8+
}]
9+
end
10+
11+
Generators.register_assets(self)
12+
end
13+
end
14+
end
15+

lib/generators/client_side_validations/copy_asset_generator.rb

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
module ClientSideValidations
2+
module Generators
3+
class CopyAssetsGenerator < Rails::Generators::Base
4+
5+
def copy_javascript_asset
6+
if self.class == CopyAssetsGenerator || !asset_pipeline_enabled?
7+
assets.each do |asset|
8+
source_paths << asset[:path]
9+
copy_file asset[:file], "#{asset_directory}/#{asset[:file]}"
10+
end
11+
end
12+
end
13+
14+
private
15+
16+
def self.asset_directory
17+
if asset_pipeline_enabled?
18+
"app#{Rails.configuration.assets.prefix}/javascripts"
19+
else
20+
'public/javascripts'
21+
end
22+
end
23+
24+
def asset_directory
25+
CopyAssetsGenerator.asset_directory
26+
end
27+
28+
def self.assets
29+
Assets
30+
end
31+
32+
def assets
33+
CopyAssetsGenerator.assets
34+
end
35+
36+
def self.asset_file_names
37+
assets.map { |asset| asset[:file] }.join(', ')
38+
end
39+
40+
def self.asset_pipeline_enabled?
41+
(Rails.configuration.respond_to?(:assets) ? (Rails.configuration.assets || {}) : {})[:enabled]
42+
end
43+
44+
def asset_pipeline_enabled?
45+
self.class.asset_pipeline_enabled?
46+
end
47+
48+
def self.installation_message
49+
"Copies #{asset_file_names} to #{asset_directory}"
50+
end
51+
52+
desc installation_message
53+
end
54+
end
55+
end
56+

lib/generators/client_side_validations/install_generator.rb

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,21 @@
1+
require 'generators/client_side_validations/copy_assets_generator'
2+
13
module ClientSideValidations
24
module Generators
3-
class InstallGenerator < Rails::Generators::Base
4-
source_root File.expand_path('../../templates/client_side_validations', __FILE__)
5-
6-
private
7-
8-
def self.asset_pipeline_enabled?
9-
(Rails.configuration.respond_to?(:assets) ? (Rails.configuration.assets || {}) : {})[:enabled]
10-
end
11-
12-
def asset_pipeline_enabled?
13-
self.class.asset_pipeline_enabled?
14-
end
15-
16-
public
17-
18-
if asset_pipeline_enabled?
19-
desc 'Creates a ClientSideValidations initializer.'
20-
else
21-
desc 'Creates a ClientSideValidations initializer and copies rails.validations.js to public/javascripts.'
22-
end
5+
class InstallGenerator < CopyAssetsGenerator
236

247
def copy_initializer
8+
source_paths << File.expand_path('../../templates/client_side_validations', __FILE__)
259
copy_file 'initializer.rb', 'config/initializers/client_side_validations.rb'
2610
end
2711

28-
def copy_javascript_asset
29-
unless asset_pipeline_enabled?
30-
copy_file '../../../../vendor/assets/javascripts/rails.validations.js', 'public/javascripts/rails.validations.js'
31-
end
32-
end
12+
private
3313

34-
def show_readme
35-
if Rails.version >= '3.1'
36-
readme 'README.rails.3.1' if behavior == :invoke
37-
else
38-
readme 'README.rails.3.0' if behavior == :invoke
39-
end
14+
def self.installation_message
15+
"Copies initializer into config/initializers and #{super.downcase}"
4016
end
4117

18+
desc installation_message
4219
end
4320
end
4421
end

lib/generators/templates/client_side_validations/README.rails.3.1

Lines changed: 0 additions & 7 deletions
This file was deleted.

test/base_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require 'rubygems'
22
require 'bundler/setup'
33
require 'test/unit'
4+
require 'ruby-debug'
45

56
module ClientSideValidations; end

test/generators/cases/test_generators.rb

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require 'rails/generators/test_case'
2+
require 'client_side_validations'
3+
require 'generators/client_side_validations/copy_assets_generator'
24
require 'generators/client_side_validations/install_generator'
3-
require 'generators/client_side_validations/copy_asset_generator'
45

56
class InstallGeneratorTest < Rails::Generators::TestCase
67
tests ClientSideValidations::Generators::InstallGenerator
@@ -16,28 +17,31 @@ class InstallGeneratorTest < Rails::Generators::TestCase
1617

1718
test 'Assert all files are properly created when asset pipeline present and disabled' do
1819
stub_configuration
19-
Rails.configuration.stubs(:assets).returns({})
20-
Rails.configuration.assets[:enabled] = false
20+
configuration = {:enabled => false}
21+
configuration.stubs(:prefix).returns('/assets')
22+
Rails.configuration.stubs(:assets).returns(configuration)
2123
run_generator
2224
assert_file 'config/initializers/client_side_validations.rb'
2325
assert_file 'public/javascripts/rails.validations.js'
2426
end
2527

2628
test 'Assert all files are properly created when asset pipeline present and enabled' do
2729
stub_configuration
28-
Rails.configuration.stubs(:assets).returns({})
29-
Rails.configuration.assets[:enabled] = true
30+
configuration = {:enabled => true}
31+
configuration.stubs(:prefix).returns('/assets')
32+
Rails.configuration.stubs(:assets).returns(configuration)
3033
run_generator
31-
assert_file 'config/initializers/client_side_validations.rb'
34+
assert_file 'config/initializers/client_side_validations.rb'
35+
assert_no_file 'app/assets/javascripts/rails.validations.js'
3236
end
3337

3438
def stub_configuration
3539
Rails.stubs(:configuration).returns(mock('Configuration'))
3640
end
3741
end
3842

39-
class CopyAssetGeneratorTest < Rails::Generators::TestCase
40-
tests ClientSideValidations::Generators::CopyAssetGenerator
43+
class CopyAssetsGeneratorTest < Rails::Generators::TestCase
44+
tests ClientSideValidations::Generators::CopyAssetsGenerator
4145
destination File.expand_path('../../tmp', __FILE__)
4246
setup :prepare_destination
4347

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

5054
test 'Assert file is properly created when asset pipeline present and disabled' do
5155
stub_configuration
52-
Rails.configuration.stubs(:assets).returns({})
53-
Rails.configuration.assets[:enabled] = false
56+
configuration = {:enabled => false}
57+
configuration.stubs(:prefix).returns('/assets')
58+
Rails.configuration.stubs(:assets).returns(configuration)
5459
run_generator
5560
assert_file 'public/javascripts/rails.validations.js'
5661
end
5762

5863
test 'Assert file is properly created when asset pipeline present and enabled' do
5964
stub_configuration
60-
Rails.configuration.stubs(:assets).returns({})
61-
Rails.configuration.assets[:enabled] = true
65+
configuration = {:enabled => true}
66+
configuration.stubs(:prefix).returns('/assets')
67+
Rails.configuration.stubs(:assets).returns(configuration)
6268
run_generator
6369
assert_file 'app/assets/javascripts/rails.validations.js'
6470
end

0 commit comments

Comments
 (0)