rake-pipeline 0.5.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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