engine-assets 0.4.2 → 0.5.0

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.
Files changed (44) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +10 -0
  3. data/Gemfile.lock +38 -0
  4. data/LICENSE +18 -17
  5. data/RAILS_VERSIONS +5 -0
  6. data/README.md +55 -0
  7. data/Rakefile +253 -26
  8. data/VERSION +1 -1
  9. data/app/controllers/engine_assets/assets_controller.rb +7 -1
  10. data/config/routes.rb +12 -1
  11. data/engine-assets.gemspec +53 -20
  12. data/features/rails.feature +127 -0
  13. data/features/step_definitions/rails_steps.rb +112 -0
  14. data/features/support/env.rb +15 -0
  15. data/features/support/rails.rb +125 -0
  16. data/features/support/terminal.rb +83 -0
  17. data/init.rb +1 -0
  18. data/lib/engine-assets.rb +8 -2
  19. data/lib/engine_assets/engine.rb +3 -0
  20. data/lib/engine_assets/extensions/rails/assets.rb +6 -0
  21. data/lib/engine_assets/public_locator.rb +20 -5
  22. data/spec/{controllers → app/controllers/engine_assets}/javascripts_controller_spec.rb +2 -2
  23. data/spec/{controllers → app/controllers/engine_assets}/stylesheets_controller_spec.rb +2 -2
  24. data/spec/lib/engine-assets_spec.rb +7 -0
  25. data/spec/lib/engine_assets/public_locator_spec.rb +28 -4
  26. data/spec/shared/assets_controller_spec.rb +39 -0
  27. data/spec/shared/assets_routing_spec.rb +59 -0
  28. data/spec/spec.opts +2 -2
  29. data/spec/spec_helper.rb +61 -22
  30. data/spec/support/Gemfile-2.3.5 +7 -0
  31. data/spec/support/Gemfile-2.3.5.lock +38 -0
  32. data/spec/support/Gemfile-2.3.9 +7 -0
  33. data/spec/support/Gemfile-2.3.9.lock +38 -0
  34. data/spec/support/Gemfile-3.0.0 +16 -0
  35. data/spec/support/Gemfile-3.0.0.lock +90 -0
  36. data/spec/support/rails.rb +32 -0
  37. data/spec/support/terminal.rb +54 -0
  38. metadata +123 -25
  39. data/README.rdoc +0 -18
  40. data/TODO.md +0 -4
  41. data/rails/init.rb +0 -7
  42. data/spec/spec_suite.rb +0 -26
  43. data/spec/support/shared/assets_controller_spec.rb +0 -34
  44. data/spec/support/shared/assets_routing_spec.rb +0 -55
data/.gitignore CHANGED
@@ -19,3 +19,8 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+ .bundle/config
23
+ .rspec
24
+ .tmtags
25
+ scratch.*
26
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ group :development do
4
+ gem 'cucumber', '~> 0.8.5'
5
+ gem 'rake', '~> 0.8.7'
6
+ gem 'rr', '~> 1.0.0'
7
+ gem 'rspec', '~> 1.3.0'
8
+ gem 'jeweler', '~> 1.4.0'
9
+ gem 'term-ansicolor', '~> 1.0.5'
10
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ builder (2.1.2)
5
+ cucumber (0.8.5)
6
+ builder (~> 2.1.2)
7
+ diff-lcs (~> 1.1.2)
8
+ gherkin (~> 2.1.4)
9
+ json_pure (~> 1.4.3)
10
+ term-ansicolor (~> 1.0.4)
11
+ diff-lcs (1.1.2)
12
+ gemcutter (0.6.1)
13
+ gherkin (2.1.5)
14
+ trollop (~> 1.16.2)
15
+ git (1.2.5)
16
+ jeweler (1.4.0)
17
+ gemcutter (>= 0.1.0)
18
+ git (>= 1.2.5)
19
+ rubyforge (>= 2.0.0)
20
+ json_pure (1.4.6)
21
+ rake (0.8.7)
22
+ rr (1.0.0)
23
+ rspec (1.3.0)
24
+ rubyforge (2.0.4)
25
+ json_pure (>= 1.1.7)
26
+ term-ansicolor (1.0.5)
27
+ trollop (1.16.2)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ cucumber (~> 0.8.5)
34
+ jeweler (~> 1.4.0)
35
+ rake (~> 0.8.7)
36
+ rr (~> 1.0.0)
37
+ rspec (~> 1.3.0)
38
+ term-ansicolor (~> 1.0.5)
data/LICENSE CHANGED
@@ -1,20 +1,21 @@
1
- Copyright (c) 2009 Corey Innis
1
+ The MIT License
2
2
 
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
3
+ Copyright (c) 2009, 2010 Corey Innis
10
4
 
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
13
11
 
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/RAILS_VERSIONS ADDED
@@ -0,0 +1,5 @@
1
+ Rails Versions
2
+ ------------------------------------------------------------------------------
3
+ * 2.3.5 (supported)
4
+ * 2.3.9 (supported)
5
+ * 3.0.0 (almost... need to complete AssetTagHelper-related stuff)
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ engine-assets
2
+ ==============================================================================
3
+
4
+ *Rails Engines with assets*
5
+
6
+ engine-assets is a Rails Engine which enables other Rails Engines to provide
7
+ assets:
8
+
9
+ * javascript
10
+ * css
11
+ * images (TODO)
12
+
13
+
14
+ Requirements
15
+ ------------------------------------------------------------------------------
16
+
17
+ * Rails
18
+ supported versions:
19
+ * 2.3.5
20
+ * 2.3.9
21
+ * 3.0.0 (requires Ruby 1.8.7)
22
+
23
+ Installation
24
+ ------------------------------------------------------------------------------
25
+
26
+
27
+ Usage
28
+ ------------------------------------------------------------------------------
29
+
30
+ * Rake Tasks
31
+
32
+ Customization
33
+ ------------------------------------------------------------------------------
34
+
35
+
36
+ TODO
37
+ ------------------------------------------------------------------------------
38
+
39
+
40
+ Contributors
41
+ ------------------------------------------------------------------------------
42
+
43
+ * Corey Innis <http://github.com/coreyti>
44
+ Author
45
+
46
+ Acknowledgments
47
+ ------------------------------------------------------------------------------
48
+
49
+ * thoughtbot <http://thoughtbot.com/>
50
+ For insight regarding techniques for running Cucumber features against
51
+ multiple versions of Rails (in hoptoad_notifier).
52
+ * Michael Bleigh <http://mbleigh.com>
53
+ For insight regarding techniques for running RSpec specs against multiple
54
+ versions of Rails (in acts-as-taggable-on).
55
+
data/Rakefile CHANGED
@@ -1,49 +1,276 @@
1
+ # encoding: utf-8
1
2
  require 'rubygems'
3
+ require 'bundler'
4
+ # Bundler.setup
5
+
2
6
  require 'rake'
3
7
 
8
+
9
+ desc 'Default: run all specs and features'
10
+ task :default => ['spec:rails:all', 'cucumber:rails:all']
11
+
12
+
13
+ # shared
14
+ # ----------------------------------------------------------------------------
15
+ RAILS_VERSIONS = { :supported => [], :unsupported => [] }
16
+ File.readlines('RAILS_VERSIONS').each do |line|
17
+ line.strip!
18
+
19
+ if (m = /\* ([0-9.]+)/.match(line))
20
+ if line =~ /supported/
21
+ RAILS_VERSIONS[:supported] << m[1]
22
+ else
23
+ RAILS_VERSIONS[:unsupported] << m[1]
24
+ end
25
+ end
26
+ end
27
+ RAILS_VERSIONS[:all] = RAILS_VERSIONS[:supported] +
28
+ RAILS_VERSIONS[:unsupported]
29
+
30
+ GEM_ROOT = File.dirname(__FILE__).freeze
31
+ LOCAL_GEM_ROOT = File.join(GEM_ROOT, 'tmp', 'local_gems').freeze
32
+ RSPEC_1_VERSION = '1.3.0'
33
+ RSPEC_2_VERSION = '2.0.0.beta.22'
34
+ LOCAL_GEMS = [
35
+ ['builder', nil],
36
+ ['bundler', nil],
37
+ ['rake', nil],
38
+ ['rspec', RSPEC_1_VERSION],
39
+ ['rspec-rails', '1.3.2'],
40
+ ['rspec', RSPEC_2_VERSION],
41
+ ['rspec-rails', RSPEC_2_VERSION],
42
+ ['sqlite3-ruby', nil]
43
+ ] + RAILS_VERSIONS[:supported].collect { |version| ['rails', version] }
44
+
45
+ def banner
46
+ puts '-' * 80
47
+ puts yield.gsub(/^[ ]+/, '')
48
+ puts '-' * 80
49
+ end
50
+
51
+ def print_missing(pkg_name, gem_name)
52
+ banner {
53
+ <<-DOC
54
+ #{pkg_name} (or a dependency) not available.
55
+ Install it with one of:
56
+ \t* bundle install
57
+ \t* sudo gem install #{gem_name}
58
+ DOC
59
+ }
60
+ end
61
+
62
+ namespace :shared do
63
+ task :vendor_dependencies do
64
+ old_gem_path = ENV['GEM_PATH']
65
+ old_gem_home = ENV['GEM_HOME']
66
+ ENV['GEM_PATH'] = LOCAL_GEM_ROOT
67
+ ENV['GEM_HOME'] = LOCAL_GEM_ROOT
68
+
69
+ LOCAL_GEMS.each do |gem_name, version|
70
+ gem_file_pattern = [gem_name, version || '*'].compact.join('-')
71
+ version_option = version ? "-v #{version}" : ''
72
+ pattern = File.join(LOCAL_GEM_ROOT, 'gems', "#{gem_file_pattern}")
73
+ existing = Dir.glob(pattern).first
74
+
75
+ unless existing
76
+ command = "gem install -i #{LOCAL_GEM_ROOT} --no-ri --no-rdoc --backtrace #{version_option} #{gem_name}"
77
+ puts "Vendoring #{gem_file_pattern}..."
78
+
79
+ unless system("#{command} 2>&1")
80
+ puts "Command failed: #{command}"
81
+ exit(1)
82
+ end
83
+ end
84
+ end
85
+
86
+ ENV['GEM_PATH'] = old_gem_path
87
+ ENV['GEM_HOME'] = old_gem_home
88
+ end
89
+ end
90
+
91
+
92
+ # cucumber tasks
93
+ # ----------------------------------------------------------------------------
94
+ begin
95
+ require 'term/ansicolor'
96
+ require 'cucumber/rake/task'
97
+
98
+ # Thanks thoughtbot...
99
+ def define_cucumber_rails(options = '')
100
+ namespace :rails do
101
+ RAILS_VERSIONS[:supported].each do |version|
102
+ desc "Run features for this gem with Rails #{version}"
103
+ task version => [:gemspec, 'shared:vendor_dependencies'] do
104
+ line = ENV['line']
105
+
106
+ banner {
107
+ "Running scenarios against Rails #{version}" + (line ? " (at line #{line})" : '')
108
+ }
109
+ ENV['RAILS_VERSION'] = version
110
+
111
+ system("cucumber --format #{cucumber_format} #{options} features/rails.feature#{line ? ':' + line : ''}")
112
+ end
113
+ end
114
+
115
+ RAILS_VERSIONS[:unsupported].each do |version|
116
+ desc "Run features for this gem with Rails #{version}"
117
+ task version => [:gemspec] do
118
+ banner {
119
+ "Rails #{version} (unsupported -- see note in RAILS_VERSIONS)"
120
+ }
121
+ end
122
+ end
123
+
124
+ desc "Run features for this gem with all Rails versions"
125
+ task :all => RAILS_VERSIONS[:all]
126
+ end
127
+ end
128
+
129
+ def cucumber_format
130
+ ENV['CUCUMBER_FORMAT'] || 'progress'
131
+ end
132
+
133
+ namespace :cucumber do
134
+ define_cucumber_rails
135
+
136
+ namespace :wip do
137
+ define_cucumber_rails('--tags @wip')
138
+ end
139
+ end
140
+ rescue LoadError
141
+ print_missing('Cucumber', 'cucumber')
142
+ end
143
+
144
+
145
+ # jeweler tasks
146
+ # ----------------------------------------------------------------------------
4
147
  begin
5
148
  require 'jeweler'
149
+
6
150
  Jeweler::Tasks.new do |gem|
7
151
  gem.name = "engine-assets"
8
152
  gem.summary = "Rails Engines with assets."
9
- gem.description = "A Rails Engine, which enables Rails Engines to provide assets (javascript, css and images)"
153
+ gem.description = "A Rails Engine, which enables Rails Engines to " +
154
+ "provide assets (javascript, css and images)"
10
155
  gem.email = "support@coolerator.net"
11
156
  gem.homepage = "http://github.com/coreyti/engine-assets"
12
157
  gem.authors = ["Corey Innis"]
13
- gem.add_development_dependency "rspec", ">= 1.2.8"
14
- gem.files += Dir['app/**/*.rb']
15
- gem.files += Dir['lib/**/*.rb']
16
- gem.files.uniq! # TODO (CTI): figure out why I'm having to do this manipulation.
17
158
 
18
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
159
+ gem.add_bundler_dependencies
160
+ gem.files << 'INSTALL'
161
+ gem.files << 'LICENSE'
162
+ gem.files << 'README'
163
+ gem.files << 'VERSION'
164
+ gem.files << 'init.rb'
165
+ gem.files << 'install.rb'
166
+ gem.files += Dir['app/**/*.rb']
167
+ gem.files += Dir['config/**/*.rb']
168
+ gem.files += Dir['lib/**/*.rb']
19
169
  end
20
- Jeweler::GemcutterTasks.new
21
170
  rescue LoadError
22
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
171
+ print_missing('Jeweler', 'jeweler')
23
172
  end
24
173
 
25
- require 'spec/rake/spectask'
26
- Spec::Rake::SpecTask.new(:spec) do |spec|
27
- spec.libs << 'lib' << 'spec'
28
- spec.spec_files = FileList['spec/**/*_spec.rb']
29
- end
30
174
 
31
- Spec::Rake::SpecTask.new(:rcov) do |spec|
32
- spec.libs << 'lib' << 'spec'
33
- spec.pattern = 'spec/**/*_spec.rb'
34
- spec.rcov = true
175
+ # rdoc tasks
176
+ # ----------------------------------------------------------------------------
177
+ begin
178
+ require 'rake/rdoctask'
179
+
180
+ Rake::RDocTask.new do |rdoc|
181
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
182
+
183
+ rdoc.rdoc_dir = 'rdoc'
184
+ rdoc.title = "example-engine #{version}"
185
+ rdoc.rdoc_files.include('README*')
186
+ rdoc.rdoc_files.include('lib/**/*.rb')
187
+ end
188
+ rescue LoadError
189
+ print_missing('RDoc', 'rdoc')
35
190
  end
36
191
 
37
- task :spec => :check_dependencies
38
192
 
39
- task :default => :spec
193
+ # rspec tasks
194
+ # ----------------------------------------------------------------------------
195
+ def define_spec_rails
196
+ def spec_rails_2
197
+ $:.unshift("#{LOCAL_GEM_ROOT}/gems/rspec-#{RSPEC_1_VERSION}/lib")
198
+
199
+ require 'spec/rake/spectask'
200
+
201
+ Spec::Rake::SpecTask.new(:spec) do |task|
202
+ task.libs << 'lib' << 'spec'
203
+ task.spec_files = FileList['spec/**/*_spec.rb']
204
+ end
205
+ end
206
+
207
+ def spec_rails_3
208
+ $:.unshift("#{LOCAL_GEM_ROOT}/gems/rspec-core-#{RSPEC_2_VERSION}/lib")
40
209
 
41
- require 'rake/rdoctask'
42
- Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
210
+ require 'rspec/core/rake_task'
44
211
 
45
- rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "engine-assets #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
212
+ RSpec::Core::RakeTask.new(:spec) do |task|
213
+ task.pattern = "spec/**/*_spec.rb"
214
+ end
215
+ end
216
+
217
+ namespace :rails do
218
+ RAILS_VERSIONS[:supported].each do |version|
219
+ desc "Run specs for this gem with Rails #{version}"
220
+ task version => [:gemspec, 'shared:vendor_dependencies'] do
221
+ banner {
222
+ "Running specs against Rails #{version}"
223
+ }
224
+
225
+ major = version.split('.')[0]
226
+
227
+ # Thanks acts-as-taggable-on
228
+ gemfile = File.join(GEM_ROOT, 'spec', 'support', "Gemfile-#{version}")
229
+ ENV['RAILS_VERSION'] = version
230
+ ENV['BUNDLE_GEMFILE'] = gemfile
231
+ ENV['RAILS_VERSION_SPEC'] = 'true'
232
+
233
+ send("spec_rails_#{major}")
234
+
235
+ Rake::Task['spec'].execute # NOTE: #invoke only runs once
236
+ end
237
+ end
238
+
239
+ RAILS_VERSIONS[:unsupported].each do |version|
240
+ desc "Run specs for this gem with Rails #{version}"
241
+ task version => [:gemspec] do
242
+ banner {
243
+ "Rails #{version} (unsupported -- see note in RAILS_VERSIONS)"
244
+ }
245
+ end
246
+ end
247
+
248
+ desc "Run specs for this gem with all Rails versions"
249
+ task :all do
250
+ RAILS_VERSIONS[:all].each do |version|
251
+ system("rake spec:rails:#{version}")
252
+ end
253
+ end
254
+ end
49
255
  end
256
+
257
+ namespace :spec do
258
+ define_spec_rails
259
+
260
+ task :check_mode do
261
+ unless ENV['RAILS_VERSION_SPEC']
262
+ bullet = "\t* "
263
+ valid = Rake.application.tasks.select { |t| t.name =~ /spec:rails/ }
264
+
265
+ banner {
266
+ <<-DOC
267
+ Please use one of the following Rails-versioned spec tasks:
268
+ #{bullet}#{valid.join("\n" + bullet)}
269
+ DOC
270
+ }
271
+ raise RuntimeError
272
+ end
273
+ end
274
+ end
275
+
276
+ task :spec => 'spec:check_mode'