rake-pipeline 0.5.0 → 0.7.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 (55) hide show
  1. data/.travis.yml +12 -0
  2. data/Gemfile +1 -0
  3. data/README.markdown +1 -1
  4. data/README.yard +61 -32
  5. data/Rakefile +9 -0
  6. data/bin/rakep +1 -24
  7. data/lib/generators/rake/pipeline/install/install_generator.rb +70 -0
  8. data/lib/rake-pipeline.rb +117 -53
  9. data/lib/rake-pipeline/cli.rb +56 -0
  10. data/lib/rake-pipeline/dsl.rb +3 -140
  11. data/lib/rake-pipeline/dsl/pipeline_dsl.rb +168 -0
  12. data/lib/rake-pipeline/dsl/project_dsl.rb +108 -0
  13. data/lib/rake-pipeline/dynamic_file_task.rb +188 -0
  14. data/lib/rake-pipeline/file_wrapper.rb +1 -1
  15. data/lib/rake-pipeline/filter.rb +45 -15
  16. data/lib/rake-pipeline/filters.rb +3 -1
  17. data/lib/rake-pipeline/filters/{concat.rb → concat_filter.rb} +0 -0
  18. data/lib/rake-pipeline/filters/ordering_concat_filter.rb +38 -0
  19. data/lib/rake-pipeline/filters/pipeline_finalizing_filter.rb +19 -0
  20. data/lib/rake-pipeline/graph.rb +178 -0
  21. data/lib/rake-pipeline/manifest.rb +63 -0
  22. data/lib/rake-pipeline/manifest_entry.rb +34 -0
  23. data/lib/rake-pipeline/matcher.rb +65 -30
  24. data/lib/rake-pipeline/middleware.rb +15 -12
  25. data/lib/rake-pipeline/precompile.rake +8 -0
  26. data/lib/rake-pipeline/project.rb +280 -0
  27. data/lib/rake-pipeline/railtie.rb +16 -1
  28. data/lib/rake-pipeline/server.rb +15 -0
  29. data/lib/rake-pipeline/version.rb +2 -2
  30. data/rake-pipeline.gemspec +2 -0
  31. data/spec/cli_spec.rb +71 -0
  32. data/spec/concat_filter_spec.rb +1 -27
  33. data/spec/{dsl_spec.rb → dsl/pipeline_dsl_spec.rb} +32 -18
  34. data/spec/dsl/project_dsl_spec.rb +41 -0
  35. data/spec/dynamic_file_task_spec.rb +111 -0
  36. data/spec/encoding_spec.rb +6 -8
  37. data/spec/file_wrapper_spec.rb +19 -2
  38. data/spec/filter_spec.rb +120 -22
  39. data/spec/graph_spec.rb +56 -0
  40. data/spec/manifest_entry_spec.rb +51 -0
  41. data/spec/manifest_spec.rb +67 -0
  42. data/spec/matcher_spec.rb +35 -2
  43. data/spec/middleware_spec.rb +123 -75
  44. data/spec/ordering_concat_filter_spec.rb +39 -0
  45. data/spec/pipeline_spec.rb +95 -34
  46. data/spec/project_spec.rb +293 -0
  47. data/spec/rake_acceptance_spec.rb +307 -67
  48. data/spec/rake_tasks_spec.rb +21 -0
  49. data/spec/spec_helper.rb +11 -48
  50. data/spec/support/spec_helpers/file_utils.rb +35 -0
  51. data/spec/support/spec_helpers/filters.rb +16 -0
  52. data/spec/support/spec_helpers/input_helpers.rb +23 -0
  53. data/spec/support/spec_helpers/memory_file_wrapper.rb +31 -0
  54. data/tools/perfs +107 -0
  55. metadata +100 -12
@@ -0,0 +1,21 @@
1
+ describe "Rake tasks" do
2
+ before do
3
+ @rake = Rake::Application.new
4
+ Rake.application = @rake
5
+ end
6
+
7
+ describe "assets:precompile" do
8
+ before do
9
+ load File.expand_path("../../lib/rake-pipeline/precompile.rake", __FILE__)
10
+ Rails = double("Rails")
11
+ Rails.stub_chain(:application, :config, :rake_pipeline_assetfile).and_return("Assetfile")
12
+ end
13
+
14
+ it "creates and invokes a new Project" do
15
+ project = double("Project")
16
+ project.should_receive(:invoke)
17
+ Rake::Pipeline::Project.should_receive(:new).with("Assetfile").and_return(project)
18
+ @rake["assets:precompile"].invoke
19
+ end
20
+ end
21
+ end
@@ -1,57 +1,20 @@
1
- require 'simplecov'
2
- SimpleCov.start do
3
- add_group "lib", "lib"
4
- add_group "spec", "spec"
1
+ unless ENV["TRAVIS"]
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_group "lib", "lib"
5
+ add_group "spec", "spec"
6
+ end
5
7
  end
6
8
 
9
+ require 'pry'
7
10
 
8
11
  require "rake-pipeline"
9
12
  require "rake-pipeline/filters"
10
13
 
11
- class Rake::Pipeline
12
- module SpecHelpers
13
-
14
- # TODO: OS agnostic modules
15
- module FileUtils
16
- def mkdir_p(dir)
17
- system "mkdir", "-p", dir
18
- end
19
-
20
- def touch(file)
21
- system "touch", file
22
- end
23
-
24
- def rm_rf(dir)
25
- system "rm", "-rf", dir
26
- end
27
-
28
- def touch_p(file)
29
- dir = File.dirname(file)
30
- mkdir_p dir
31
- touch file
32
- end
33
-
34
- def age_existing_files
35
- old_time = Time.now - 10
36
- Dir[File.join(tmp, "**/*.js")].each do |file|
37
- File.utime(old_time, old_time, file)
38
- end
39
- end
40
- end
41
-
42
- module Filters
43
- ConcatFilter = Rake::Pipeline::ConcatFilter
44
-
45
- class StripAssertsFilter < Rake::Pipeline::Filter
46
- def generate_output(inputs, output)
47
- inputs.each do |input|
48
- output.write input.read.gsub(%r{^\s*assert\(.*\)\s*;?\s*$}m, '')
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
14
+ require "support/spec_helpers/file_utils"
15
+ require "support/spec_helpers/filters"
16
+ require "support/spec_helpers/input_helpers"
17
+ require "support/spec_helpers/memory_file_wrapper"
55
18
 
56
19
  RSpec.configure do |config|
57
20
  original = Dir.pwd
@@ -0,0 +1,35 @@
1
+ class Rake::Pipeline
2
+ module SpecHelpers
3
+
4
+ # TODO: OS agnostic modules
5
+ module FileUtils
6
+ def mkdir_p(dir)
7
+ system "mkdir", "-p", dir
8
+ end
9
+
10
+ def touch(file)
11
+ system "touch", file
12
+ end
13
+
14
+ def rm_rf(dir)
15
+ system "rm", "-rf", dir
16
+ end
17
+
18
+ def touch_p(file)
19
+ dir = File.dirname(file)
20
+ mkdir_p dir
21
+ touch file
22
+ end
23
+
24
+ def age_existing_files
25
+ old_time = Time.now - 10
26
+ Dir[File.join(tmp, "**/*.js")].each do |file|
27
+ File.utime(old_time, old_time, file)
28
+ end
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+
35
+
@@ -0,0 +1,16 @@
1
+ class Rake::Pipeline
2
+ module SpecHelpers
3
+
4
+ module Filters
5
+ ConcatFilter = Rake::Pipeline::ConcatFilter
6
+
7
+ class StripAssertsFilter < Rake::Pipeline::Filter
8
+ def generate_output(inputs, output)
9
+ inputs.each do |input|
10
+ output.write input.read.gsub(%r{^\s*assert\(.*\)\s*;?\s*$}m, '')
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ class Rake::Pipeline
2
+ module SpecHelpers
3
+ module InputHelpers
4
+ def input_file(path, root=File.join(tmp, "app/assets"))
5
+ Rake::Pipeline::FileWrapper.new root, path
6
+ end
7
+
8
+ def output_file(path, root=File.join(tmp, "public"))
9
+ input_file(path, root)
10
+ end
11
+
12
+ def create_files(files)
13
+ Array(files).each do |file|
14
+ mkdir_p File.dirname(file.fullpath)
15
+
16
+ File.open(file.fullpath, "w") do |file|
17
+ file.write "// This is #{file.path}\n"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,31 @@
1
+ class Rake::Pipeline
2
+ module SpecHelpers
3
+ class MemoryFileWrapper < Struct.new(:root, :path, :encoding, :body)
4
+ @@files = {}
5
+
6
+ def self.files
7
+ @@files
8
+ end
9
+
10
+ def with_encoding(new_encoding)
11
+ self.class.new(root, path, new_encoding, body)
12
+ end
13
+
14
+ def fullpath
15
+ File.join(root, path)
16
+ end
17
+
18
+ def create
19
+ @@files[fullpath] = self
20
+ self.body = ""
21
+ yield
22
+ end
23
+
24
+ alias read body
25
+
26
+ def write(contents)
27
+ self.body << contents
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path('../../lib', __FILE__)
4
+ require 'rake-pipeline'
5
+ require 'rake-pipeline/middleware'
6
+
7
+ require 'fileutils'
8
+ require 'benchmark'
9
+ require 'ruby-prof'
10
+ require 'thor'
11
+ require 'rack/test'
12
+
13
+ class FakeServer
14
+ include Rack::Test::Methods
15
+
16
+ def app
17
+ Rake::Pipeline::Middleware.new(Rack::Directory.new('.'), 'Assetfile')
18
+ end
19
+ end
20
+
21
+ class Perfs < Thor
22
+ include FileUtils
23
+
24
+ class_option :clean, :type => :boolean, :default => true
25
+
26
+ desc "bench PROJECT_DIR", "Benchmark building, rebuilding, and cleaning the given project"
27
+ def bench(project_dir)
28
+ setup(project_dir)
29
+
30
+ invoke_time = Benchmark.realtime do
31
+ project.invoke
32
+ end
33
+
34
+ reinvoke_time = Benchmark.realtime do
35
+ project.invoke_clean
36
+ end
37
+
38
+ clean_time = Benchmark.realtime do
39
+ project.clean
40
+ end
41
+
42
+ puts "build: #{invoke_time}"
43
+ puts "rebuild: #{reinvoke_time}"
44
+ puts "clean: #{clean_time}"
45
+ end
46
+
47
+ desc "profile PROJECT_DIR", "Profile a clean build of the given project"
48
+ method_option :rebuild, :type => :boolean, :aliases => "-r", :default => false
49
+ def profile(project_dir)
50
+ setup(project_dir)
51
+
52
+ if options[:rebuild]
53
+ project.invoke
54
+ result = RubyProf.profile do
55
+ project.invoke_clean
56
+ end
57
+ else
58
+ result = RubyProf.profile do
59
+ project.invoke
60
+ end
61
+ end
62
+
63
+ printer = RubyProf::GraphHtmlPrinter.new(result)
64
+ printer.print
65
+ end
66
+
67
+ desc "bench_server PROJECT_DIR URL",
68
+ "Benchmark a GET request against a rakep server for the given PROJECT_DIR"
69
+ def bench_server(project_dir, url)
70
+ setup(project_dir)
71
+
72
+ server = FakeServer.new
73
+ result = Benchmark.realtime do
74
+ server.get url
75
+ end
76
+
77
+ puts result
78
+ end
79
+
80
+ desc "profile_server PROJECT_DIR URL",
81
+ "Profile a GET request against a rakep server for the given PROJECT_DIR"
82
+ def profile_server(project_dir, url)
83
+ setup(project_dir)
84
+
85
+ server = FakeServer.new
86
+ result = RubyProf.profile do
87
+ server.get url
88
+ end
89
+
90
+ printer = RubyProf::GraphHtmlPrinter.new(result)
91
+ printer.print
92
+ end
93
+
94
+ private
95
+
96
+ def setup(project_dir)
97
+ cd project_dir
98
+ project.clean
99
+ project.invoke unless options[:clean]
100
+ end
101
+
102
+ def project
103
+ @project ||= Rake::Pipeline::Project.new('Assetfile')
104
+ end
105
+ end
106
+
107
+ Perfs.start
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-pipeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-05 00:00:00.000000000 Z
13
+ date: 2012-10-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &70238259782180 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,47 @@ dependencies:
22
22
  version: 0.9.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70238259782180
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 0.9.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: thor
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: json
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
26
63
  - !ruby/object:Gem::Dependency
27
64
  name: rspec
28
- requirement: &70238259781760 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
29
66
  none: false
30
67
  requirements:
31
68
  - - ! '>='
@@ -33,10 +70,15 @@ dependencies:
33
70
  version: '0'
34
71
  type: :development
35
72
  prerelease: false
36
- version_requirements: *70238259781760
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
37
79
  - !ruby/object:Gem::Dependency
38
80
  name: rack-test
39
- requirement: &70238259781300 !ruby/object:Gem::Requirement
81
+ requirement: !ruby/object:Gem::Requirement
40
82
  none: false
41
83
  requirements:
42
84
  - - ! '>='
@@ -44,7 +86,12 @@ dependencies:
44
86
  version: '0'
45
87
  type: :development
46
88
  prerelease: false
47
- version_requirements: *70238259781300
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
48
95
  description: Simple Asset Management
49
96
  email:
50
97
  - wycats@gmail.com
@@ -55,6 +102,7 @@ extra_rdoc_files: []
55
102
  files:
56
103
  - .gitignore
57
104
  - .rspec
105
+ - .travis.yml
58
106
  - .yardopts
59
107
  - Gemfile
60
108
  - LICENSE
@@ -62,30 +110,57 @@ files:
62
110
  - README.yard
63
111
  - Rakefile
64
112
  - bin/rakep
113
+ - lib/generators/rake/pipeline/install/install_generator.rb
65
114
  - lib/rake-pipeline.rb
115
+ - lib/rake-pipeline/cli.rb
66
116
  - lib/rake-pipeline/dsl.rb
117
+ - lib/rake-pipeline/dsl/pipeline_dsl.rb
118
+ - lib/rake-pipeline/dsl/project_dsl.rb
119
+ - lib/rake-pipeline/dynamic_file_task.rb
67
120
  - lib/rake-pipeline/error.rb
68
121
  - lib/rake-pipeline/file_wrapper.rb
69
122
  - lib/rake-pipeline/filter.rb
70
123
  - lib/rake-pipeline/filters.rb
71
- - lib/rake-pipeline/filters/concat.rb
124
+ - lib/rake-pipeline/filters/concat_filter.rb
125
+ - lib/rake-pipeline/filters/ordering_concat_filter.rb
126
+ - lib/rake-pipeline/filters/pipeline_finalizing_filter.rb
127
+ - lib/rake-pipeline/graph.rb
128
+ - lib/rake-pipeline/manifest.rb
129
+ - lib/rake-pipeline/manifest_entry.rb
72
130
  - lib/rake-pipeline/matcher.rb
73
131
  - lib/rake-pipeline/middleware.rb
132
+ - lib/rake-pipeline/precompile.rake
133
+ - lib/rake-pipeline/project.rb
74
134
  - lib/rake-pipeline/rails_plugin.rb
75
135
  - lib/rake-pipeline/railtie.rb
136
+ - lib/rake-pipeline/server.rb
76
137
  - lib/rake-pipeline/version.rb
77
138
  - rails/init.rb
78
139
  - rake-pipeline.gemspec
140
+ - spec/cli_spec.rb
79
141
  - spec/concat_filter_spec.rb
80
- - spec/dsl_spec.rb
142
+ - spec/dsl/pipeline_dsl_spec.rb
143
+ - spec/dsl/project_dsl_spec.rb
144
+ - spec/dynamic_file_task_spec.rb
81
145
  - spec/encoding_spec.rb
82
146
  - spec/file_wrapper_spec.rb
83
147
  - spec/filter_spec.rb
148
+ - spec/graph_spec.rb
149
+ - spec/manifest_entry_spec.rb
150
+ - spec/manifest_spec.rb
84
151
  - spec/matcher_spec.rb
85
152
  - spec/middleware_spec.rb
153
+ - spec/ordering_concat_filter_spec.rb
86
154
  - spec/pipeline_spec.rb
155
+ - spec/project_spec.rb
87
156
  - spec/rake_acceptance_spec.rb
157
+ - spec/rake_tasks_spec.rb
88
158
  - spec/spec_helper.rb
159
+ - spec/support/spec_helpers/file_utils.rb
160
+ - spec/support/spec_helpers/filters.rb
161
+ - spec/support/spec_helpers/input_helpers.rb
162
+ - spec/support/spec_helpers/memory_file_wrapper.rb
163
+ - tools/perfs
89
164
  homepage: ''
90
165
  licenses: []
91
166
  post_install_message:
@@ -106,18 +181,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
181
  version: '0'
107
182
  requirements: []
108
183
  rubyforge_project:
109
- rubygems_version: 1.8.10
184
+ rubygems_version: 1.8.24
110
185
  signing_key:
111
186
  specification_version: 3
112
187
  summary: Simple Asset Management
113
188
  test_files:
189
+ - spec/cli_spec.rb
114
190
  - spec/concat_filter_spec.rb
115
- - spec/dsl_spec.rb
191
+ - spec/dsl/pipeline_dsl_spec.rb
192
+ - spec/dsl/project_dsl_spec.rb
193
+ - spec/dynamic_file_task_spec.rb
116
194
  - spec/encoding_spec.rb
117
195
  - spec/file_wrapper_spec.rb
118
196
  - spec/filter_spec.rb
197
+ - spec/graph_spec.rb
198
+ - spec/manifest_entry_spec.rb
199
+ - spec/manifest_spec.rb
119
200
  - spec/matcher_spec.rb
120
201
  - spec/middleware_spec.rb
202
+ - spec/ordering_concat_filter_spec.rb
121
203
  - spec/pipeline_spec.rb
204
+ - spec/project_spec.rb
122
205
  - spec/rake_acceptance_spec.rb
206
+ - spec/rake_tasks_spec.rb
123
207
  - spec/spec_helper.rb
208
+ - spec/support/spec_helpers/file_utils.rb
209
+ - spec/support/spec_helpers/filters.rb
210
+ - spec/support/spec_helpers/input_helpers.rb
211
+ - spec/support/spec_helpers/memory_file_wrapper.rb