benoit 0.1.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 (164) hide show
  1. data/.gitignore +4 -0
  2. data/.gitmodules +3 -0
  3. data/.rspec +1 -0
  4. data/.rspec-turnip +1 -0
  5. data/.ruby-version +1 -0
  6. data/Assetfile +44 -0
  7. data/Gemfile +5 -0
  8. data/Gemfile.lock +110 -0
  9. data/Rakefile +9 -0
  10. data/benoit.gemspec +50 -0
  11. data/bin/benoit +121 -0
  12. data/bin/bundle-development +1 -0
  13. data/bin/bundle-sandbox +1 -0
  14. data/lib/benoit.rb +36 -0
  15. data/lib/benoit/cadenza.rb +11 -0
  16. data/lib/benoit/cadenza/output_filters.rb +21 -0
  17. data/lib/benoit/cleaner.rb +10 -0
  18. data/lib/benoit/compiler_error.rb +49 -0
  19. data/lib/benoit/configuration.rb +24 -0
  20. data/lib/benoit/current_site.rb +12 -0
  21. data/lib/benoit/file_wrapper_extensions.rb +13 -0
  22. data/lib/benoit/filters.rb +15 -0
  23. data/lib/benoit/filters/base_filter.rb +44 -0
  24. data/lib/benoit/filters/blacklist_filter.rb +18 -0
  25. data/lib/benoit/filters/cadenza_filter.rb +75 -0
  26. data/lib/benoit/filters/content_page_filter.rb +45 -0
  27. data/lib/benoit/filters/markdown_filter.rb +19 -0
  28. data/lib/benoit/filters/metadata_cleaner.rb +30 -0
  29. data/lib/benoit/filters/move_to_root_filter.rb +22 -0
  30. data/lib/benoit/filters/pagination_filter.rb +23 -0
  31. data/lib/benoit/filters/pass_thru_filter.rb +22 -0
  32. data/lib/benoit/filters/sass_filter.rb +74 -0
  33. data/lib/benoit/filters/set_metadata_filter.rb +15 -0
  34. data/lib/benoit/logger.rb +69 -0
  35. data/lib/benoit/page.rb +88 -0
  36. data/lib/benoit/page_metadata.rb +8 -0
  37. data/lib/benoit/page_metadata/container.rb +74 -0
  38. data/lib/benoit/page_metadata/json_converter.rb +28 -0
  39. data/lib/benoit/page_metadata/parser.rb +38 -0
  40. data/lib/benoit/page_metadata/store.rb +75 -0
  41. data/lib/benoit/pipeline.rb +1 -0
  42. data/lib/benoit/pipeline/dsl_extensions.rb +8 -0
  43. data/lib/benoit/pipeline/pagination_matcher.rb +53 -0
  44. data/lib/benoit/pipeline_project.rb +81 -0
  45. data/lib/benoit/site_context.rb +123 -0
  46. data/lib/benoit/utils/finds_layouts_for_template.rb +77 -0
  47. data/lib/benoit/utils/normalizes_path_to_template.rb +43 -0
  48. data/lib/benoit/utils/paginated_list.rb +102 -0
  49. data/lib/benoit/version.rb +3 -0
  50. data/lib/build_notifiers/file_built_notifier.rb +20 -0
  51. data/lib/build_notifiers/progress_notifier.rb +57 -0
  52. data/lib/cli.rb +39 -0
  53. data/spec/.rbenv-gemsets +1 -0
  54. data/spec/Gemfile +9 -0
  55. data/spec/Gemfile.lock +57 -0
  56. data/spec/bin/autospec +16 -0
  57. data/spec/bin/cucumber +16 -0
  58. data/spec/bin/htmldiff +16 -0
  59. data/spec/bin/ldiff +16 -0
  60. data/spec/bin/rspec +16 -0
  61. data/spec/features/build_command.feature +46 -0
  62. data/spec/features/frontmatter_metadata.feature +99 -0
  63. data/spec/features/javascript_files.feature +35 -0
  64. data/spec/features/output_filters.feature +20 -0
  65. data/spec/features/page_layouts.feature +72 -0
  66. data/spec/features/pagination.feature +58 -0
  67. data/spec/features/sass_files.feature +30 -0
  68. data/spec/features/version.feature +5 -0
  69. data/spec/lib/filters/base_filter_spec.rb +141 -0
  70. data/spec/lib/filters/markdown_filter_spec.rb +65 -0
  71. data/spec/lib/filters/sass_filter_spec.rb +73 -0
  72. data/spec/lib/metadata_json_converter_spec.rb +65 -0
  73. data/spec/lib/metadata_store_spec.rb +148 -0
  74. data/spec/lib/page_spec.rb +19 -0
  75. data/spec/lib/site_context_spec.rb +106 -0
  76. data/spec/spec_helper.rb +16 -0
  77. data/spec/steps/output_file_steps.rb +45 -0
  78. data/spec/steps/run_steps.rb +71 -0
  79. data/spec/steps/staticly_steps.rb +194 -0
  80. data/spec/support/aruba/rspec.rb +66 -0
  81. data/spec/support/files/img.png +0 -0
  82. data/spec/support/files/input.css.scss +7 -0
  83. data/spec/support/files/input.scss +7 -0
  84. data/spec/support/spec_helpers/file_helpers.rb +8 -0
  85. data/spec/support/spec_helpers/memory_file_wrapper.rb +43 -0
  86. data/spec/support/spec_helpers/memory_manifest.rb +19 -0
  87. data/spec/turnip_helper.rb +19 -0
  88. data/vendor/frontmatter/frontmatter.gemspec +24 -0
  89. data/vendor/frontmatter/lib/frontmatter.rb +92 -0
  90. data/vendor/frontmatter/lib/frontmatter/version.rb +3 -0
  91. data/vendor/rake-pipeline/.gitignore +18 -0
  92. data/vendor/rake-pipeline/.rspec +1 -0
  93. data/vendor/rake-pipeline/.travis.yml +12 -0
  94. data/vendor/rake-pipeline/.yardopts +2 -0
  95. data/vendor/rake-pipeline/GETTING_STARTED.md +268 -0
  96. data/vendor/rake-pipeline/Gemfile +14 -0
  97. data/vendor/rake-pipeline/LICENSE +20 -0
  98. data/vendor/rake-pipeline/README.markdown +11 -0
  99. data/vendor/rake-pipeline/README.yard +178 -0
  100. data/vendor/rake-pipeline/Rakefile +21 -0
  101. data/vendor/rake-pipeline/bin/rakep +4 -0
  102. data/vendor/rake-pipeline/examples/copying_files.md +12 -0
  103. data/vendor/rake-pipeline/examples/minifying_files.md +37 -0
  104. data/vendor/rake-pipeline/examples/modifying_pipelines.md +67 -0
  105. data/vendor/rake-pipeline/examples/multiple_pipelines.md +77 -0
  106. data/vendor/rake-pipeline/lib/generators/rake/pipeline/install/install_generator.rb +70 -0
  107. data/vendor/rake-pipeline/lib/rake-pipeline.rb +509 -0
  108. data/vendor/rake-pipeline/lib/rake-pipeline/cli.rb +57 -0
  109. data/vendor/rake-pipeline/lib/rake-pipeline/dsl.rb +9 -0
  110. data/vendor/rake-pipeline/lib/rake-pipeline/dsl/pipeline_dsl.rb +246 -0
  111. data/vendor/rake-pipeline/lib/rake-pipeline/dsl/project_dsl.rb +108 -0
  112. data/vendor/rake-pipeline/lib/rake-pipeline/dynamic_file_task.rb +194 -0
  113. data/vendor/rake-pipeline/lib/rake-pipeline/error.rb +17 -0
  114. data/vendor/rake-pipeline/lib/rake-pipeline/file_wrapper.rb +195 -0
  115. data/vendor/rake-pipeline/lib/rake-pipeline/filter.rb +267 -0
  116. data/vendor/rake-pipeline/lib/rake-pipeline/filters.rb +4 -0
  117. data/vendor/rake-pipeline/lib/rake-pipeline/filters/concat_filter.rb +63 -0
  118. data/vendor/rake-pipeline/lib/rake-pipeline/filters/gsub_filter.rb +56 -0
  119. data/vendor/rake-pipeline/lib/rake-pipeline/filters/ordering_concat_filter.rb +38 -0
  120. data/vendor/rake-pipeline/lib/rake-pipeline/filters/pipeline_finalizing_filter.rb +21 -0
  121. data/vendor/rake-pipeline/lib/rake-pipeline/graph.rb +178 -0
  122. data/vendor/rake-pipeline/lib/rake-pipeline/manifest.rb +82 -0
  123. data/vendor/rake-pipeline/lib/rake-pipeline/manifest_entry.rb +34 -0
  124. data/vendor/rake-pipeline/lib/rake-pipeline/matcher.rb +141 -0
  125. data/vendor/rake-pipeline/lib/rake-pipeline/middleware.rb +73 -0
  126. data/vendor/rake-pipeline/lib/rake-pipeline/precompile.rake +8 -0
  127. data/vendor/rake-pipeline/lib/rake-pipeline/project.rb +338 -0
  128. data/vendor/rake-pipeline/lib/rake-pipeline/rails_plugin.rb +10 -0
  129. data/vendor/rake-pipeline/lib/rake-pipeline/railtie.rb +34 -0
  130. data/vendor/rake-pipeline/lib/rake-pipeline/reject_matcher.rb +29 -0
  131. data/vendor/rake-pipeline/lib/rake-pipeline/server.rb +15 -0
  132. data/vendor/rake-pipeline/lib/rake-pipeline/sorted_pipeline.rb +19 -0
  133. data/vendor/rake-pipeline/lib/rake-pipeline/version.rb +6 -0
  134. data/vendor/rake-pipeline/rails/init.rb +2 -0
  135. data/vendor/rake-pipeline/rake-pipeline.gemspec +24 -0
  136. data/vendor/rake-pipeline/spec/cli_spec.rb +73 -0
  137. data/vendor/rake-pipeline/spec/concat_filter_spec.rb +37 -0
  138. data/vendor/rake-pipeline/spec/dsl/pipeline_dsl_spec.rb +165 -0
  139. data/vendor/rake-pipeline/spec/dsl/project_dsl_spec.rb +41 -0
  140. data/vendor/rake-pipeline/spec/dynamic_file_task_spec.rb +119 -0
  141. data/vendor/rake-pipeline/spec/encoding_spec.rb +106 -0
  142. data/vendor/rake-pipeline/spec/file_wrapper_spec.rb +132 -0
  143. data/vendor/rake-pipeline/spec/filter_spec.rb +367 -0
  144. data/vendor/rake-pipeline/spec/graph_spec.rb +56 -0
  145. data/vendor/rake-pipeline/spec/gsub_filter_spec.rb +87 -0
  146. data/vendor/rake-pipeline/spec/manifest_entry_spec.rb +46 -0
  147. data/vendor/rake-pipeline/spec/manifest_spec.rb +67 -0
  148. data/vendor/rake-pipeline/spec/matcher_spec.rb +141 -0
  149. data/vendor/rake-pipeline/spec/middleware_spec.rb +199 -0
  150. data/vendor/rake-pipeline/spec/ordering_concat_filter_spec.rb +42 -0
  151. data/vendor/rake-pipeline/spec/pipeline_spec.rb +232 -0
  152. data/vendor/rake-pipeline/spec/project_spec.rb +295 -0
  153. data/vendor/rake-pipeline/spec/rake_acceptance_spec.rb +720 -0
  154. data/vendor/rake-pipeline/spec/rake_tasks_spec.rb +21 -0
  155. data/vendor/rake-pipeline/spec/reject_matcher_spec.rb +31 -0
  156. data/vendor/rake-pipeline/spec/sorted_pipeline_spec.rb +27 -0
  157. data/vendor/rake-pipeline/spec/spec_helper.rb +38 -0
  158. data/vendor/rake-pipeline/spec/support/spec_helpers/file_utils.rb +35 -0
  159. data/vendor/rake-pipeline/spec/support/spec_helpers/filters.rb +37 -0
  160. data/vendor/rake-pipeline/spec/support/spec_helpers/input_helpers.rb +23 -0
  161. data/vendor/rake-pipeline/spec/support/spec_helpers/memory_file_wrapper.rb +35 -0
  162. data/vendor/rake-pipeline/spec/support/spec_helpers/memory_manifest.rb +19 -0
  163. data/vendor/rake-pipeline/tools/perfs +101 -0
  164. metadata +497 -0
@@ -0,0 +1,72 @@
1
+ Feature: Page Layouts
2
+
3
+ Background:
4
+ Given a site
5
+
6
+ Scenario: Finds layouts in _layouts
7
+ Given a site named "test"
8
+ And a file named "index.html" with content:
9
+ """
10
+ {% extends "_layout.html" %}
11
+
12
+ {% block content %}boo{% endblock %}
13
+ """
14
+ And a file named "_layouts/_layout.html" with content:
15
+ """
16
+ <section id="main">
17
+ {% block content %}{% endblock %}
18
+ </section>
19
+ """
20
+ When I run `benoit build`
21
+ Then the output file "index.html" should have content:
22
+ """
23
+ <section id="main">
24
+ boo
25
+ </section>
26
+ """
27
+
28
+ Scenario: Reads layout from metadata in .html files
29
+ Given a file with an extension of ".html" containing metadata:
30
+ """
31
+ layout: _layout
32
+ """
33
+ And that file has content:
34
+ """
35
+ {% block content %}CONTENT{% endblock %}
36
+ """
37
+ And a layout named "_layout" with content:
38
+ """
39
+ !!!
40
+ {% block content %}{% endblock %}
41
+ !!!
42
+ """
43
+ When I build the site
44
+ Then the output file should have content:
45
+ """
46
+ !!!
47
+ CONTENT
48
+ !!!
49
+ """
50
+
51
+ Scenario: Doesn't require layouts prefixed with underscore
52
+ Given a file with an extension of ".html" containing metadata:
53
+ """
54
+ layout: layout
55
+ """
56
+ And that file has content:
57
+ """
58
+ {% block content %}CONTENT{% endblock %}
59
+ """
60
+ And a layout named "_layout" with content:
61
+ """
62
+ !!!
63
+ {% block content %}{% endblock %}
64
+ !!!
65
+ """
66
+ When I build the site
67
+ Then the output file should have content:
68
+ """
69
+ !!!
70
+ CONTENT
71
+ !!!
72
+ """
@@ -0,0 +1,58 @@
1
+ Feature: Content Pagination
2
+
3
+ Background:
4
+ Given a site
5
+ And 20 files containing metadata:
6
+ """
7
+ type: post
8
+ """
9
+
10
+ Scenario: Outputs one file per page
11
+ Given a file named "page.html" containing metadata:
12
+ """
13
+ posts_per_page: 10
14
+ """
15
+ When I build the site
16
+ Then the output file "page1.html" should exist
17
+ And the output file "page2.html" should exist
18
+
19
+ Scenario: Renders 10 posts per page
20
+ Given a file named "page.html" with content:
21
+ """
22
+ ---
23
+ posts_per_page: 10
24
+ ---
25
+
26
+ {% for post in site.paginated_posts | sort: "page_num" %}{{post.content}}
27
+ {% endfor %}
28
+ """
29
+ When I build the site
30
+ Then the output file "page1.html" should only contain the first 10 posts
31
+ And the output file "page2.html" should only contain the last 10 posts
32
+
33
+ Scenario: Renders 5 posts per page
34
+ Given a file named "page.html" with content:
35
+ """
36
+ ---
37
+ posts_per_page: 5
38
+ ---
39
+
40
+ {% for post in site.paginated_posts | sort: "page_num" %}{{post.content}}
41
+ {% endfor %}
42
+ """
43
+ When I build the site
44
+ Then the output file "page1.html" should only contain the first 5 posts
45
+ And the output file "page4.html" should only contain the last 5 posts
46
+
47
+ Scenario: Keeps path to paginated files
48
+ Given a file named "dir/page.html" with content:
49
+ """
50
+ ---
51
+ posts_per_page: 5
52
+ ---
53
+
54
+ {% for post in site.paginated_posts | sort: "page_num" %}{{post.content}}
55
+ {% endfor %}
56
+ """
57
+ When I build the site
58
+ Then the output file "dir/page1.html" should exist
@@ -0,0 +1,30 @@
1
+ Feature: Compiling Sass Files
2
+
3
+ Background:
4
+ Given a site
5
+
6
+ Scenario: Converts SCSS files to CSS
7
+ Given a file named "styles.scss" with content:
8
+ """
9
+ $variable: value;
10
+
11
+ .test {
12
+ .nested {
13
+ attribute: $variable;
14
+ }
15
+ }
16
+ """
17
+ When I build the site
18
+ Then the output file "styles.css" should have content:
19
+ """
20
+ .test .nested {
21
+ attribute: value; }
22
+ """
23
+
24
+ Scenario: Makes Compass available
25
+ Given a file named "styles.scss" with content:
26
+ """
27
+ @import "compass/css3";
28
+ """
29
+ When I build the site
30
+ Then the output file "styles.css" should exist
@@ -0,0 +1,5 @@
1
+ Feature: Version Flag
2
+
3
+ Scenario: --version flag
4
+ When I run `benoit --version`
5
+ Then I see the current Benoit version
@@ -0,0 +1,141 @@
1
+ require 'spec_helper'
2
+ require 'rake-pipeline'
3
+ require 'benoit/filters/base_filter'
4
+ require 'benoit/page'
5
+
6
+ describe Benoit::Filters::BaseFilter do
7
+ MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper
8
+ MemoryManifest ||= Rake::Pipeline::SpecHelpers::MemoryManifest
9
+
10
+ let(:basic_filter) do
11
+ Class.new(described_class)
12
+ end
13
+
14
+ let(:html_input) { "<html><head></head><body><h1>TESTING</h1></body></html>" }
15
+
16
+ def input_file(name, content)
17
+ MemoryFileWrapper.new("/path/to/input", name, "UTF-8", Set.new([]), content)
18
+ end
19
+
20
+ def output_file(name)
21
+ MemoryFileWrapper.new("/path/to/output", name, "UTF-8", Set.new([]))
22
+ end
23
+
24
+ def setup_filter(filter, input_filename='index.html')
25
+ filter.file_wrapper_class = MemoryFileWrapper
26
+ filter.manifest = MemoryManifest.new
27
+ filter.last_manifest = MemoryManifest.new
28
+ filter.input_files = [input_file(input_filename, html_input)]
29
+ filter.output_root= "/path/to/output"
30
+ filter.rake_application = Rake::Application.new
31
+ filter.current_site = {}
32
+ filter
33
+ end
34
+
35
+ def setup_final_outputs(filter)
36
+ filter.input_files.each_with_index do |input,i|
37
+ output = filter.output_files[i]
38
+ filter.current_site.merge!(input.path => { "content" => input.read })
39
+ filter.current_site.merge!(output.path => { "content" => input.read })
40
+ end
41
+ end
42
+
43
+ it "generates output directly from the input" do
44
+ filter = setup_filter basic_filter.new
45
+
46
+ expect(filter.output_files).to eq([output_file("index.html")])
47
+
48
+ setup_final_outputs(filter)
49
+
50
+ tasks = filter.generate_rake_tasks
51
+ tasks.each(&:invoke)
52
+
53
+ file = MemoryFileWrapper.files["/path/to/output/index.html"]
54
+ expect(file.body).to eq(html_input)
55
+ end
56
+
57
+ describe "building output" do
58
+
59
+ let(:builder_filter) do
60
+ Class.new(described_class) do
61
+ build_output do
62
+ "blah"
63
+ end
64
+ end
65
+ end
66
+
67
+ let(:page_filter) do
68
+ Class.new(described_class) do
69
+ build_output do |page|
70
+ page["content"]
71
+ end
72
+ end
73
+ end
74
+
75
+ let(:path_writer) do
76
+ Class.new(described_class) do
77
+ build_output do |page,input|
78
+ input.path
79
+ end
80
+ end
81
+ end
82
+
83
+ it "gets output from calling builder" do
84
+ filter = setup_filter builder_filter.new
85
+
86
+ setup_final_outputs(filter)
87
+
88
+ tasks = filter.generate_rake_tasks
89
+ tasks.each(&:invoke)
90
+
91
+ file = MemoryFileWrapper.files["/path/to/output/index.html"]
92
+ expect(file.body).to eq("blah")
93
+ end
94
+
95
+ it "passes page object to builder" do
96
+ filter = setup_filter page_filter.new
97
+
98
+ setup_final_outputs(filter)
99
+
100
+ page = filter.current_site[filter.output_files.first.path]
101
+
102
+ tasks = filter.generate_rake_tasks
103
+ tasks.each(&:invoke)
104
+
105
+ file = MemoryFileWrapper.files["/path/to/output/index.html"]
106
+ expect(file.body).to eq(page["content"])
107
+ end
108
+
109
+ it "passes input to builder when needed" do
110
+ filter = setup_filter path_writer.new
111
+ input = filter.input_files.first
112
+
113
+ setup_final_outputs(filter)
114
+
115
+ tasks = filter.generate_rake_tasks
116
+ tasks.each(&:invoke)
117
+
118
+ file = MemoryFileWrapper.files["/path/to/output/index.html"]
119
+ expect(file.body).to eq(input.path)
120
+ end
121
+
122
+ end
123
+
124
+ describe "generating output filename" do
125
+
126
+ let(:output_name) do
127
+ Class.new(described_class) do
128
+ output_name do
129
+ "blah.diddy"
130
+ end
131
+ end
132
+ end
133
+
134
+ it "gets output filename from calling generator" do
135
+ filter = setup_filter output_name.new
136
+
137
+ expect(filter.output_files).to eq([output_file("blah.diddy")])
138
+ end
139
+ end
140
+
141
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+ require 'rake-pipeline'
3
+ require 'benoit/filters'
4
+ require 'benoit/page'
5
+
6
+ describe Benoit::Filters::MarkdownFilter do
7
+ MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper
8
+ MemoryManifest ||= Rake::Pipeline::SpecHelpers::MemoryManifest
9
+
10
+ let(:markdown_input) {
11
+ <<-EOS.unindent
12
+ [some link](http://www.example.com)
13
+
14
+ **strong**
15
+ _em_
16
+ EOS
17
+ }
18
+
19
+ let(:expected_output) {
20
+ <<-EOS.unindent
21
+ <p><a href="http://www.example.com">some link</a></p>
22
+
23
+ <p><strong>strong</strong>
24
+ <em>em</em></p>
25
+ EOS
26
+ }
27
+
28
+ def input_file(name, content)
29
+ MemoryFileWrapper.new("/path/to/input", name, "UTF-8", Set.new([]), content)
30
+ end
31
+
32
+ def output_file(name)
33
+ MemoryFileWrapper.new("/path/to/output", name, "UTF-8", Set.new([]))
34
+ end
35
+
36
+ def setup_filter(filter, input_filename='page.markdown')
37
+ filter.file_wrapper_class = MemoryFileWrapper
38
+ filter.manifest = MemoryManifest.new
39
+ filter.last_manifest = MemoryManifest.new
40
+ filter.input_files = [input_file(input_filename, markdown_input)]
41
+ filter.output_root= "/path/to/output"
42
+ filter.rake_application = Rake::Application.new
43
+ filter
44
+ end
45
+
46
+ it "generates the correct output" do
47
+ filter = setup_filter described_class.new
48
+
49
+ input_file = filter.input_files.first
50
+ output_file = output_file("page.html")
51
+
52
+ page = { "content" => markdown_input }
53
+ filter.current_site = { input_file.path => page, output_file.path => page }
54
+
55
+ expect(filter.output_files).to eq([output_file])
56
+
57
+ tasks = filter.generate_rake_tasks
58
+ tasks.each(&:invoke)
59
+
60
+ file = MemoryFileWrapper.files["/path/to/output/page.html"]
61
+ expect(file.body).to eq(expected_output)
62
+
63
+ expect(page["content"]).to eq(expected_output)
64
+ end
65
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+ require 'rake-pipeline'
3
+ require 'benoit/filters'
4
+ require 'benoit/page'
5
+ require 'benoit/compiler_error'
6
+
7
+ describe Benoit::Filters::SassFilter do
8
+ MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper
9
+ MemoryManifest ||= Rake::Pipeline::SpecHelpers::MemoryManifest
10
+ FileWrapper ||= Rake::Pipeline::FileWrapper
11
+
12
+ let(:scss_input_path) {
13
+ File.expand_path("spec/support/files/input.scss")
14
+ }
15
+
16
+ let(:expected_output) {
17
+ str =
18
+ <<-EOS
19
+ .test .nested {
20
+ attribute: value; }
21
+ EOS
22
+ str.unindent
23
+ }
24
+
25
+ def input_file
26
+ path = scss_input_path
27
+ FileWrapper.new(File.dirname(path), File.basename(path), "UTF-8", Set.new([]))
28
+ end
29
+
30
+ def output_file(name)
31
+ MemoryFileWrapper.new("/path/to/output", name, "UTF-8", Set.new([]))
32
+ end
33
+
34
+ def setup_filter(filter)
35
+ filter.file_wrapper_class = MemoryFileWrapper
36
+ filter.manifest = MemoryManifest.new
37
+ filter.last_manifest = MemoryManifest.new
38
+ filter.input_files = [input_file]
39
+ filter.output_root= "/path/to/output"
40
+ filter.rake_application = Rake::Application.new
41
+ filter
42
+ end
43
+
44
+ it "generates the correct output" do
45
+ filter = setup_filter described_class.new
46
+
47
+ input_file = filter.input_files.first
48
+ output_file = output_file("input.css")
49
+
50
+ expect(filter.output_files).to eq([output_file])
51
+
52
+ tasks = filter.generate_rake_tasks
53
+ tasks.each(&:invoke)
54
+
55
+ file = MemoryFileWrapper.files["/path/to/output/input.css"]
56
+ expect(file.body).to eq(expected_output)
57
+ end
58
+
59
+ describe "files ending in .css.scss" do
60
+
61
+ let(:scss_input_path) {
62
+ File.expand_path("spec/support/files/input.css.scss")
63
+ }
64
+
65
+ it "do not end in .css.css" do
66
+ filter = setup_filter described_class.new
67
+
68
+ output_file = output_file("input.css")
69
+ expect(filter.output_files).to eq([output_file])
70
+ end
71
+
72
+ end
73
+ end