parcels 0.0.1

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 (158) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rspec-local +4 -0
  4. data/.travis.yml +54 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +29 -0
  8. data/Rakefile +6 -0
  9. data/lib/parcels/dependency_parcel_list.rb +50 -0
  10. data/lib/parcels/environment.rb +60 -0
  11. data/lib/parcels/fortitude/alongside_engine.rb +37 -0
  12. data/lib/parcels/fortitude/assets.rb +212 -0
  13. data/lib/parcels/fortitude/enabling.rb +72 -0
  14. data/lib/parcels/fortitude/fortitude_engine.rb +35 -0
  15. data/lib/parcels/fortitude/fortitude_loader.rb +27 -0
  16. data/lib/parcels/fortitude/widget_engine.rb +31 -0
  17. data/lib/parcels/fortitude_alongside_parcel.rb +38 -0
  18. data/lib/parcels/fortitude_inline_parcel.rb +31 -0
  19. data/lib/parcels/fortitude_parcel.rb +102 -0
  20. data/lib/parcels/fragments/css_fragment.rb +107 -0
  21. data/lib/parcels/index.rb +16 -0
  22. data/lib/parcels/rails/rails_loader.rb +23 -0
  23. data/lib/parcels/rails/railtie.rb +16 -0
  24. data/lib/parcels/sprockets.rb +153 -0
  25. data/lib/parcels/utils/path_utils.rb +32 -0
  26. data/lib/parcels/version.rb +3 -0
  27. data/lib/parcels/widget_tree.rb +158 -0
  28. data/lib/parcels.rb +21 -0
  29. data/parcels.gemspec +48 -0
  30. data/spec/helpers/content_in_helpers.rb +21 -0
  31. data/spec/helpers/file_structure_helpers.rb +79 -0
  32. data/spec/helpers/global_helper.rb +34 -0
  33. data/spec/helpers/new_asset_helpers.rb +31 -0
  34. data/spec/helpers/new_rails_helpers.rb +31 -0
  35. data/spec/helpers/parcels_rails_helpers.rb +20 -0
  36. data/spec/helpers/per_example_helpers.rb +15 -0
  37. data/spec/helpers/sprockets_helpers.rb +23 -0
  38. data/spec/lib/spec/expected/base_expected_asset.rb +35 -0
  39. data/spec/lib/spec/expected/expected_asset.rb +135 -0
  40. data/spec/lib/spec/expected/expected_asset_set.rb +45 -0
  41. data/spec/lib/spec/expected/must_not_be_present_asset.rb +17 -0
  42. data/spec/lib/spec/fixtures/file_set.rb +80 -0
  43. data/spec/lib/spec/fixtures/widget_base.rb +13 -0
  44. data/spec/lib/spec/fixtures/widget_file.rb +108 -0
  45. data/spec/lib/spec/parsing/compiled_asset.rb +94 -0
  46. data/spec/lib/spec/parsing/compiled_asset_fragment.rb +38 -0
  47. data/spec/lib/spec/parsing/parsed_css_asset.rb +34 -0
  48. data/spec/lib/spec/parsing/precompiled_rails_asset.rb +52 -0
  49. data/spec/lib/spec/parsing/rails_asset.rb +30 -0
  50. data/spec/lib/spec/parsing/sprockets_asset.rb +40 -0
  51. data/spec/rails/basic_rails_spec.rb +102 -0
  52. data/spec/rails/compression_rails_spec.rb +11 -0
  53. data/spec/rails/development_mode_rails_spec.rb +321 -0
  54. data/spec/rails/sass_rails_spec.rb +125 -0
  55. data/spec/rails/sets_rails_spec.rb +85 -0
  56. data/spec/rails/templates/base/app/assets/stylesheets/application.css +16 -0
  57. data/spec/rails/templates/base/app/views/widgets/base.rb +4 -0
  58. data/spec/rails/templates/base/config/environments/production.rb +92 -0
  59. data/spec/rails/templates/base/lib/null_compressor.rb +5 -0
  60. data/spec/rails/templates/basic_rails_spec/app/controllers/basic_rails_spec_controller.rb +21 -0
  61. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/alongside_and_inline.pcss +1 -0
  62. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/alongside_and_inline.rb +9 -0
  63. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/alongside_and_inline_html.html.pcss +1 -0
  64. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/alongside_and_inline_html.html.rb +9 -0
  65. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/alongside_erb.pcss +1 -0
  66. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/alongside_erb.rb +7 -0
  67. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/inline_erb.rb +9 -0
  68. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/multiple_engines.pcss +1 -0
  69. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/multiple_engines.rb +9 -0
  70. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/no_corresponding_widget.pcss +1 -0
  71. data/spec/rails/templates/basic_rails_spec/app/views/basic_rails_spec/simple_css.rb +9 -0
  72. data/spec/rails/templates/compression_rails_spec/app/controllers/compression_rails_spec_controller.rb +5 -0
  73. data/spec/rails/templates/compression_rails_spec/app/views/compression_rails_spec/inline_and_alongside_css.pcss +1 -0
  74. data/spec/rails/templates/compression_rails_spec/app/views/compression_rails_spec/inline_and_alongside_css.rb +9 -0
  75. data/spec/rails/templates/compression_rails_spec/config/environments/production.rb +91 -0
  76. data/spec/rails/templates/development_mode_rails_spec/app/assets/stylesheets/changingone.scss +1 -0
  77. data/spec/rails/templates/development_mode_rails_spec/app/assets/stylesheets/changingtwo.scss +1 -0
  78. data/spec/rails/templates/development_mode_rails_spec/app/assets/stylesheets/import_dir/import_dir_ss_1.scss +1 -0
  79. data/spec/rails/templates/development_mode_rails_spec/app/controllers/development_mode_rails_spec_controller.rb +45 -0
  80. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/adding_alongside_css.rb +5 -0
  81. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/adding_inline_css.rb +7 -0
  82. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/adding_widget.rb +5 -0
  83. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/basic_widget_with_inline_and_alongside_parcels.pcss +3 -0
  84. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/basic_widget_with_inline_and_alongside_parcels.rb +9 -0
  85. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_alongside_css.pcss +1 -0
  86. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_alongside_css.rb +5 -0
  87. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_import_file.pcss +2 -0
  88. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_import_file.rb +10 -0
  89. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_inline_css.rb +9 -0
  90. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_prefix_imported_file.pcss +1 -0
  91. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/changing_prefix_imported_file.rb +7 -0
  92. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/removing_alongside_css.pcss +1 -0
  93. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/removing_alongside_css.rb +5 -0
  94. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/removing_inline_css.rb +7 -0
  95. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/removing_widget.pcss +1 -0
  96. data/spec/rails/templates/development_mode_rails_spec/app/views/development_mode_rails_spec/removing_widget.rb +9 -0
  97. data/spec/rails/templates/development_mode_rails_spec/app/views/import_base.rb +5 -0
  98. data/spec/rails/templates/development_mode_rails_spec/config/environments/development.rb +37 -0
  99. data/spec/rails/templates/development_mode_rails_spec/vendor/assets/stylesheets/one.scss +1 -0
  100. data/spec/rails/templates/development_mode_rails_spec/vendor/assets/stylesheets/two.scss +1 -0
  101. data/spec/rails/templates/sass_rails_spec/app/assets/foobar/the_import_dir_2/id2ss1.scss +1 -0
  102. data/spec/rails/templates/sass_rails_spec/app/assets/foobar/the_import_dir_2/id2ss2.scss +1 -0
  103. data/spec/rails/templates/sass_rails_spec/app/assets/foobar/twelve.scss +1 -0
  104. data/spec/rails/templates/sass_rails_spec/app/assets/foobar/two.scss +1 -0
  105. data/spec/rails/templates/sass_rails_spec/app/assets/images/quux/foo.png +0 -0
  106. data/spec/rails/templates/sass_rails_spec/app/assets/stylesheets/eleven.scss +1 -0
  107. data/spec/rails/templates/sass_rails_spec/app/assets/stylesheets/one.scss +1 -0
  108. data/spec/rails/templates/sass_rails_spec/app/assets/stylesheets/shared_import_dir/sid1ss1.scss +1 -0
  109. data/spec/rails/templates/sass_rails_spec/app/assets/stylesheets/shared_import_dir/sid1ss2.scss +1 -0
  110. data/spec/rails/templates/sass_rails_spec/app/assets/stylesheets/the_import_dir_1/id1ss1.scss +1 -0
  111. data/spec/rails/templates/sass_rails_spec/app/assets/stylesheets/the_import_dir_1/id1ss2.scss +1 -0
  112. data/spec/rails/templates/sass_rails_spec/app/controllers/sass_rails_spec_controller.rb +29 -0
  113. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/added_asset_path.pcss +2 -0
  114. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/added_asset_path.rb +10 -0
  115. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/asset_url.pcss +2 -0
  116. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/asset_url.rb +17 -0
  117. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/default_sass_import.pcss +6 -0
  118. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/default_sass_import.rb +14 -0
  119. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/import_directory.pcss +3 -0
  120. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/import_directory.rb +11 -0
  121. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/import_view_relative_directory.pcss +3 -0
  122. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/import_view_relative_directory.rb +11 -0
  123. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/other_features.pcss +1 -0
  124. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/other_features.rb +9 -0
  125. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/shared_imports.rb +10 -0
  126. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/vr_import_dir_1/vr1ss1.scss +1 -0
  127. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/vr_import_dir_1/vr1ss2.scss +1 -0
  128. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/vr_import_dir_2/vr2ss1.scss +1 -0
  129. data/spec/rails/templates/sass_rails_spec/app/views/sass_rails_spec/vr_import_dir_2/vr2ss2.scss +1 -0
  130. data/spec/rails/templates/sass_rails_spec/app/views/widgets/import_base.rb +5 -0
  131. data/spec/rails/templates/sass_rails_spec/config/application.rb +25 -0
  132. data/spec/rails/templates/sass_rails_spec/lib/more_assets/twenty.scss +1 -0
  133. data/spec/rails/templates/sass_rails_spec/vendor/assets/stylesheets/thirteen.scss +1 -0
  134. data/spec/rails/templates/sass_rails_spec/vendor/assets/stylesheets/three.scss +1 -0
  135. data/spec/rails/templates/sets_rails_spec/app/assets/stylesheets/admin.css.scss +1 -0
  136. data/spec/rails/templates/sets_rails_spec/app/assets/stylesheets/all.css.scss +1 -0
  137. data/spec/rails/templates/sets_rails_spec/app/assets/stylesheets/normal.css.scss +1 -0
  138. data/spec/rails/templates/sets_rails_spec/app/controllers/sets_rails_spec_controller.rb +3 -0
  139. data/spec/rails/templates/sets_rails_spec/app/views/admin/admin_one.pcss +1 -0
  140. data/spec/rails/templates/sets_rails_spec/app/views/admin/admin_one.rb +3 -0
  141. data/spec/rails/templates/sets_rails_spec/app/views/admin/admin_two.pcss +1 -0
  142. data/spec/rails/templates/sets_rails_spec/app/views/admin/admin_two.rb +3 -0
  143. data/spec/rails/templates/sets_rails_spec/app/views/admin/base.rb +3 -0
  144. data/spec/rails/templates/sets_rails_spec/app/views/root.rb +9 -0
  145. data/spec/rails/templates/sets_rails_spec/app/views/sets_base.rb +3 -0
  146. data/spec/rails/templates/sets_rails_spec/app/views/sets_rails_spec/normal_one.pcss +1 -0
  147. data/spec/rails/templates/sets_rails_spec/app/views/sets_rails_spec/normal_one.rb +3 -0
  148. data/spec/rails/templates/sets_rails_spec/app/views/sets_rails_spec/normal_two.pcss +1 -0
  149. data/spec/rails/templates/sets_rails_spec/app/views/sets_rails_spec/normal_two.rb +3 -0
  150. data/spec/system/alongside_file_spec.rb +193 -0
  151. data/spec/system/autogenerated_class_application_spec.rb +240 -0
  152. data/spec/system/basic_system_spec.rb +75 -0
  153. data/spec/system/dependency_sorting_spec.rb +48 -0
  154. data/spec/system/engines_spec.rb +245 -0
  155. data/spec/system/prefix_spec.rb +108 -0
  156. data/spec/system/sass_features_spec.rb +109 -0
  157. data/spec/system/sets_spec.rb +405 -0
  158. metadata +477 -0
@@ -0,0 +1,321 @@
1
+ require 'fileutils'
2
+
3
+ describe "Parcels Rails development-mode support", :type => :rails do
4
+ uses_rails_with_template :development_mode_rails_spec, :rails_env => :development
5
+
6
+ it "should include all parcels in application.css if you ask it to" do
7
+ compiled_rails_asset('application.css').should_match(rails_assets do
8
+ asset 'views/development_mode_rails_spec/basic_widget_with_inline_and_alongside_parcels.pcss' do
9
+ expect_wrapped_rule :div, 'color: blue'
10
+ end
11
+
12
+ asset 'views/development_mode_rails_spec/basic_widget_with_inline_and_alongside_parcels.rb' do
13
+ expect_wrapped_rule :p, 'color: green'
14
+ end
15
+
16
+ allow_additional_assets!
17
+ end)
18
+ end
19
+
20
+ def wait_until_passes(options = { }, &block)
21
+ timeout = options[:timeout] || 3.seconds
22
+ interval = options[:interval] || 0.5.seconds
23
+
24
+ timeout_time = Time.now + timeout
25
+ passed = false
26
+ attempt_count = 0
27
+ last_exception = nil
28
+
29
+ while (! passed) && (Time.now < timeout_time)
30
+ begin
31
+ block.call
32
+ passed = true
33
+ rescue Interrupt => i
34
+ raise
35
+ rescue => e
36
+ attempt_count += 1
37
+ last_exception = e
38
+ sleep interval.to_f
39
+ end
40
+ end
41
+
42
+ unless passed
43
+ raise "Block failed, even after #{attempt_count} tries and #{timeout} seconds! Last exception was:\n#{e.message} (#{e.class.name}):\n #{e.backtrace.join("\n ")}"
44
+ end
45
+ end
46
+
47
+ def sleep_before_change
48
+ start_time = Time.now.to_i
49
+ while Time.now.to_i == start_time
50
+ sleep 0.05
51
+ end
52
+ end
53
+
54
+ def substitute_at_path(subpath, from_what, to_what)
55
+ path = File.join(rails_server.rails_root, subpath)
56
+ contents = File.read(path)
57
+ if contents =~ %r{\A(.*)#{Regexp.escape(from_what)}(.*)\Z}mi
58
+ new_contents = "#{$1}#{to_what}#{$2}"
59
+ else
60
+ raise "This spec is broken; we were looking for #{from_what.inspect}, but contents are:\n#{contents}"
61
+ end
62
+
63
+ sleep_before_change
64
+
65
+ File.open(path, 'w') { |f| f << new_contents }
66
+ end
67
+
68
+ def add_at_path(subpath, what)
69
+ path = File.join(rails_server.rails_root, subpath)
70
+ raise "Path should not exist, but does: #{path.inspect}" if File.exist?(path)
71
+
72
+ sleep_before_change
73
+
74
+ FileUtils.mkdir_p(File.dirname(path))
75
+ File.open(path, 'w') { |f| f << what }
76
+ end
77
+
78
+ def remove_at_path(subpath)
79
+ path = File.join(rails_server.rails_root, subpath)
80
+ raise "Path should exist, but doesn't: #{path.inspect}" unless File.exist?(path)
81
+
82
+ sleep_before_change
83
+
84
+ File.delete(path)
85
+ end
86
+
87
+ it "should allow changing inline CSS for a widget" do
88
+ compiled_rails_asset('application.css').should_match(rails_assets do
89
+ asset 'views/development_mode_rails_spec/changing_inline_css.rb' do
90
+ expect_wrapped_rule :p, 'color: green'
91
+ end
92
+ allow_additional_assets!
93
+ end)
94
+
95
+ substitute_at_path('app/views/development_mode_rails_spec/changing_inline_css.rb', 'color: green', 'color: red')
96
+
97
+ wait_until_passes do
98
+ compiled_rails_asset('application.css').should_match(rails_assets do
99
+ asset 'views/development_mode_rails_spec/changing_inline_css.rb' do
100
+ expect_wrapped_rule :p, 'color: red'
101
+ end
102
+ allow_additional_assets!
103
+ end)
104
+ end
105
+ end
106
+
107
+ it "should allow changing alongside CSS for a widget" do
108
+ compiled_rails_asset('application.css').should_match(rails_assets do
109
+ asset 'views/development_mode_rails_spec/changing_alongside_css.pcss' do
110
+ expect_wrapped_rule :p, 'color: blue'
111
+ end
112
+ allow_additional_assets!
113
+ end)
114
+
115
+ substitute_at_path('app/views/development_mode_rails_spec/changing_alongside_css.pcss', 'color: blue', 'color: purple')
116
+
117
+ wait_until_passes do
118
+ compiled_rails_asset('application.css').should_match(rails_assets do
119
+ asset 'views/development_mode_rails_spec/changing_alongside_css.pcss' do
120
+ expect_wrapped_rule :p, 'color: purple'
121
+ end
122
+ allow_additional_assets!
123
+ end)
124
+ end
125
+ end
126
+
127
+ it "should allow adding inline CSS for a widget" do
128
+ compiled_rails_asset('application.css').should_match(rails_assets do
129
+ asset_must_not_be_present('views/development_mode_rails_spec/adding_inline_css.rb')
130
+ allow_additional_assets!
131
+ end)
132
+
133
+ substitute_at_path('app/views/development_mode_rails_spec/adding_inline_css.rb', '# CSS_WILL_GO_HERE', "css %{p { color: yellow } }")
134
+
135
+ wait_until_passes do
136
+ compiled_rails_asset('application.css').should_match(rails_assets do
137
+ asset 'views/development_mode_rails_spec/adding_inline_css.rb' do
138
+ expect_wrapped_rule :p, 'color: yellow'
139
+ end
140
+ allow_additional_assets!
141
+ end)
142
+ end
143
+ end
144
+
145
+ it "should allow removing inline CSS for a widget" do
146
+ compiled_rails_asset('application.css').should_match(rails_assets do
147
+ asset 'views/development_mode_rails_spec/removing_inline_css.rb' do
148
+ expect_wrapped_rule :p, 'color: magenta'
149
+ end
150
+ allow_additional_assets!
151
+ end)
152
+
153
+ substitute_at_path('app/views/development_mode_rails_spec/removing_inline_css.rb', 'css %{p { color: magenta; }}', '# NO MORE CSS!')
154
+
155
+ wait_until_passes do
156
+ compiled_rails_asset('application.css').should_match(rails_assets do
157
+ asset_must_not_be_present('views/development_mode_rails_spec/removing_inline_css.rb')
158
+ allow_additional_assets!
159
+ end)
160
+ end
161
+ end
162
+
163
+ it "should allow adding alongside CSS for a widget" do
164
+ compiled_rails_asset('application.css').should_match(rails_assets do
165
+ asset_must_not_be_present('views/development_mode_rails_spec/adding_alongside_css.pcss')
166
+ allow_additional_assets!
167
+ end)
168
+
169
+ add_at_path('app/views/development_mode_rails_spec/adding_alongside_css.pcss', "p { color: cyan; }")
170
+
171
+ wait_until_passes do
172
+ compiled_rails_asset('application.css').should_match(rails_assets do
173
+ asset 'views/development_mode_rails_spec/adding_alongside_css.pcss' do
174
+ expect_wrapped_rule :p, 'color: cyan'
175
+ end
176
+ allow_additional_assets!
177
+ end)
178
+ end
179
+ end
180
+
181
+ it "should allow removing alongside CSS for a widget" do
182
+ compiled_rails_asset('application.css').should_match(rails_assets do
183
+ asset 'views/development_mode_rails_spec/removing_alongside_css.pcss' do
184
+ expect_wrapped_rule :p, 'color: yellow'
185
+ end
186
+ allow_additional_assets!
187
+ end)
188
+
189
+ remove_at_path('app/views/development_mode_rails_spec/removing_alongside_css.pcss')
190
+
191
+ wait_until_passes do
192
+ compiled_rails_asset('application.css').should_match(rails_assets do
193
+ asset_must_not_be_present('views/development_mode_rails_spec/removing_alongside_css.pcss')
194
+ allow_additional_assets!
195
+ end)
196
+ end
197
+ end
198
+
199
+ it "should allow changing a file used by @import" do
200
+ compiled_rails_asset('application.css').should_match(rails_assets do
201
+ asset 'views/development_mode_rails_spec/changing_import_file.rb' do
202
+ expect_wrapped_rule :p, 'color: #123456'
203
+ end
204
+
205
+ asset 'views/development_mode_rails_spec/changing_import_file.pcss' do
206
+ expect_wrapped_rule :div, 'color: #234567'
207
+ end
208
+
209
+ allow_additional_assets!
210
+ end)
211
+
212
+ substitute_at_path('app/assets/stylesheets/changingone.scss', '123456', '456789')
213
+ substitute_at_path('app/assets/stylesheets/changingtwo.scss', '234567', '567890')
214
+
215
+ wait_until_passes do
216
+ compiled_rails_asset('application.css').should_match(rails_assets do
217
+ asset 'views/development_mode_rails_spec/changing_import_file.rb' do
218
+ expect_wrapped_rule :p, 'color: #456789'
219
+ end
220
+
221
+ asset 'views/development_mode_rails_spec/changing_import_file.pcss' do
222
+ expect_wrapped_rule :div, 'color: #567890'
223
+ end
224
+
225
+ allow_additional_assets!
226
+ end)
227
+ end
228
+ end
229
+
230
+ it "should allow changing a file imported via the CSS prefix, and respect that change" do
231
+ compiled_rails_asset('application.css').should_match(rails_assets do
232
+ asset 'views/development_mode_rails_spec/changing_prefix_imported_file.rb' do
233
+ expect_wrapped_rule :p, 'color: #abcdef'
234
+ end
235
+
236
+ asset 'views/development_mode_rails_spec/changing_prefix_imported_file.pcss' do
237
+ expect_wrapped_rule :div, 'color: #abcdef'
238
+ end
239
+
240
+ allow_additional_assets!
241
+ end)
242
+
243
+ substitute_at_path('app/assets/stylesheets/import_dir/import_dir_ss_1.scss', 'abcdef', 'fedcba')
244
+
245
+ wait_until_passes do
246
+ compiled_rails_asset('application.css').should_match(rails_assets do
247
+ asset 'views/development_mode_rails_spec/changing_prefix_imported_file.rb' do
248
+ expect_wrapped_rule :p, 'color: #fedcba'
249
+ end
250
+
251
+ asset 'views/development_mode_rails_spec/changing_prefix_imported_file.pcss' do
252
+ expect_wrapped_rule :div, 'color: #fedcba'
253
+ end
254
+
255
+ allow_additional_assets!
256
+ end)
257
+ end
258
+ end
259
+
260
+ it "should allow adding a widget, along with an alongside file" do
261
+ compiled_rails_asset('application.css').should_match(rails_assets do
262
+ asset_must_not_be_present('views/development_mode_rails_spec/added_widget.rb')
263
+ asset_must_not_be_present('views/development_mode_rails_spec/added_widget.pcss')
264
+ allow_additional_assets!
265
+ end)
266
+
267
+ add_at_path('app/views/development_mode_rails_spec/added_widget.rb', <<-EOS)
268
+ class Views::DevelopmentModeRailsSpec::AddedWidget < Views::Widgets::Base
269
+ css %{
270
+ p { color: blue; }
271
+ }
272
+
273
+ def content
274
+ p "nothing here"
275
+ end
276
+ end
277
+ EOS
278
+ add_at_path('app/views/development_mode_rails_spec/added_widget.pcss', <<-EOS)
279
+ div { color: purple; }
280
+ EOS
281
+
282
+ wait_until_passes do
283
+ compiled_rails_asset('application.css').should_match(rails_assets do
284
+ asset 'views/development_mode_rails_spec/added_widget.rb' do
285
+ expect_wrapped_rule :p, 'color: blue'
286
+ end
287
+
288
+ asset 'views/development_mode_rails_spec/added_widget.pcss' do
289
+ expect_wrapped_rule :div, 'color: purple'
290
+ end
291
+
292
+ allow_additional_assets!
293
+ end)
294
+ end
295
+ end
296
+
297
+ it "should allow removing a widget, along with an alongside file" do
298
+ compiled_rails_asset('application.css').should_match(rails_assets do
299
+ asset 'views/development_mode_rails_spec/removing_widget.rb' do
300
+ expect_wrapped_rule :p, 'color: cyan'
301
+ end
302
+
303
+ asset 'views/development_mode_rails_spec/removing_widget.pcss' do
304
+ expect_wrapped_rule :div, 'color: green'
305
+ end
306
+
307
+ allow_additional_assets!
308
+ end)
309
+
310
+ remove_at_path('app/views/development_mode_rails_spec/removing_widget.rb')
311
+ remove_at_path('app/views/development_mode_rails_spec/removing_widget.pcss')
312
+
313
+ wait_until_passes do
314
+ compiled_rails_asset('application.css').should_match(rails_assets do
315
+ asset_must_not_be_present('views/development_mode_rails_spec/removing_widget.rb')
316
+ asset_must_not_be_present('views/development_mode_rails_spec/removing_widget.pcss')
317
+ allow_additional_assets!
318
+ end)
319
+ end
320
+ end
321
+ end
@@ -0,0 +1,125 @@
1
+ describe "Parcels Rails SASS support", :type => :rails do
2
+ uses_rails_with_template :sass_rails_spec
3
+
4
+ it "should use Rails' asset search path for Sass @import in inline CSS and alongside CSS" do
5
+ asset = compiled_rails_asset('application.css')
6
+
7
+ asset.should_match(rails_assets do
8
+ asset 'views/sass_rails_spec/default_sass_import.rb' do
9
+ expect_wrapped_rule :p, 'color: #afedcb'
10
+ expect_wrapped_rule :div, 'color: #0b1c2d'
11
+ expect_wrapped_rule :span, 'color: #9a8b7c'
12
+ end
13
+
14
+ asset 'views/sass_rails_spec/default_sass_import.pcss' do
15
+ expect_wrapped_rule :h1, 'color: #11abcd'
16
+ expect_wrapped_rule :h2, 'color: #12abcd'
17
+ expect_wrapped_rule :h3, 'color: #13abcd'
18
+ end
19
+
20
+ allow_additional_assets!
21
+ end)
22
+ end
23
+
24
+ it "should let you change Rails' asset search path, and use that for Sass @import" do
25
+ asset = compiled_rails_asset('application.css')
26
+
27
+ asset.should_match(rails_assets do
28
+ asset 'views/sass_rails_spec/added_asset_path.rb' do
29
+ expect_wrapped_rule :p, 'color: #a0b1c2'
30
+ end
31
+
32
+ asset 'views/sass_rails_spec/added_asset_path.pcss' do
33
+ expect_wrapped_rule :div, 'color: #a0b1c2'
34
+ end
35
+
36
+ allow_additional_assets!
37
+ end)
38
+ end
39
+
40
+ it "should support other features of sass-rails" do
41
+ asset = compiled_rails_asset('application.css')
42
+
43
+ asset.should_match(rails_assets do
44
+ asset 'views/sass_rails_spec/other_features.rb' do
45
+ expect_wrapped_rule :p, 'color: #050709'
46
+ end
47
+
48
+ asset 'views/sass_rails_spec/other_features.pcss' do
49
+ expect_wrapped_rule :div, 'color: #040608'
50
+ end
51
+
52
+ allow_additional_assets!
53
+ end)
54
+ end
55
+
56
+ it "should allow you to import entire directories of files, relative to app/assets/, using 'import \"foo/*\"" do
57
+ asset = compiled_rails_asset('application.css')
58
+
59
+ asset.should_match(rails_assets do
60
+ asset 'views/sass_rails_spec/import_directory.rb' do
61
+ expect_wrapped_rule :p, 'color: #a1a1a1'
62
+ expect_wrapped_rule :div, 'color: #a2a2a2'
63
+ end
64
+
65
+ asset 'views/sass_rails_spec/import_directory.pcss' do
66
+ expect_wrapped_rule :span, 'color: #b1b1b1'
67
+ expect_wrapped_rule :section, 'color: #b2b2b2'
68
+ end
69
+
70
+ allow_additional_assets!
71
+ end)
72
+ end
73
+
74
+ it "should also allow you to import entire directories of files, relative to the view itself, using 'import \"foo/*\"" do
75
+ asset = compiled_rails_asset('application.css')
76
+
77
+ asset.should_match(rails_assets do
78
+ asset 'views/sass_rails_spec/import_view_relative_directory.rb' do
79
+ expect_wrapped_rule :p, 'color: #1a1a1a'
80
+ expect_wrapped_rule :div, 'color: #2a2a2a'
81
+ end
82
+
83
+ asset 'views/sass_rails_spec/import_view_relative_directory.pcss' do
84
+ expect_wrapped_rule :span, 'color: #1b1b1b'
85
+ expect_wrapped_rule :section, 'color: #2b2b2b'
86
+ end
87
+
88
+ allow_additional_assets!
89
+ end)
90
+ end
91
+
92
+ it "should support 'asset-path', 'asset-url', 'image-url', 'asset-data-url', etc." do
93
+ asset = compiled_rails_asset('application.css')
94
+
95
+ asset_prefix = if rails_server.rails_version =~ /^3/ then "/assets" else "" end
96
+ image_prefix = if rails_server.rails_version =~ /^3/ then "/assets" else "/images" end
97
+
98
+ asset.should_match(rails_assets do
99
+ asset 'views/sass_rails_spec/asset_url.rb' do
100
+ expect_wrapped_rule :p, "background: url(\"#{asset_prefix}/foo/bar.jpg\")"
101
+ expect_wrapped_rule :div, "background: url(#{asset_prefix}/bar/baz.png)"
102
+ end
103
+
104
+ asset 'views/sass_rails_spec/asset_url.pcss' do
105
+ expect_wrapped_rule :span, "background: url(#{image_prefix}/baz/quux.jpg)"
106
+ expect_wrapped_rule :section, /^background:\s+url\(data:image\/png;base64,/
107
+ end
108
+
109
+ allow_additional_assets!
110
+ end)
111
+ end
112
+
113
+ it "should let you add SASS imports in a sane, shared location, and make them available wherever" do
114
+ asset = compiled_rails_asset('application.css')
115
+
116
+ asset.should_match(rails_assets do
117
+ asset 'views/sass_rails_spec/shared_imports.rb' do
118
+ expect_wrapped_rule :p, 'color: #a1a1a1'
119
+ expect_wrapped_rule :div, 'color: #b2b2b2'
120
+ end
121
+
122
+ allow_additional_assets!
123
+ end)
124
+ end
125
+ end
@@ -0,0 +1,85 @@
1
+ describe "Parcels Rails sets support", :type => :rails do
2
+ uses_rails_with_template :sets_rails_spec
3
+
4
+ it "should put all normal assets into normal.css, whether explicitly inherited or via block" do
5
+ normal = compiled_rails_asset('normal.css')
6
+
7
+ normal.should_match(rails_assets do
8
+ asset 'views/sets_rails_spec/normal_one.rb' do
9
+ expect_wrapped_rule :span, 'color: blue'
10
+ end
11
+
12
+ asset 'views/sets_rails_spec/normal_one.pcss' do
13
+ expect_wrapped_rule :'span.a', 'color: blue'
14
+ end
15
+
16
+ asset 'views/sets_rails_spec/normal_two.rb' do
17
+ expect_wrapped_rule :em, 'color: yellow'
18
+ end
19
+
20
+ asset 'views/sets_rails_spec/normal_two.pcss' do
21
+ expect_wrapped_rule :'em.a', 'color: yellow'
22
+ end
23
+ end)
24
+ end
25
+
26
+ it "should put all admin assets into admin.css, whether explicitly inherited or via block" do
27
+ admin = compiled_rails_asset('admin.css')
28
+
29
+ admin.should_match(rails_assets do
30
+ asset 'views/admin/admin_one.rb' do
31
+ expect_wrapped_rule :p, 'color: red'
32
+ end
33
+
34
+ asset 'views/admin/admin_one.pcss' do
35
+ expect_wrapped_rule :'p.a', 'color: red'
36
+ end
37
+
38
+ asset 'views/admin/admin_two.rb' do
39
+ expect_wrapped_rule :div, 'color: green'
40
+ end
41
+
42
+ asset 'views/admin/admin_two.pcss' do
43
+ expect_wrapped_rule :'div.a', 'color: green'
44
+ end
45
+ end)
46
+ end
47
+
48
+ it "should put everything into all.css, whether explicitly inherited or via block" do
49
+ all = compiled_rails_asset('all.css')
50
+
51
+ all.should_match(rails_assets do
52
+ asset 'views/sets_rails_spec/normal_one.rb' do
53
+ expect_wrapped_rule :span, 'color: blue'
54
+ end
55
+
56
+ asset 'views/sets_rails_spec/normal_one.pcss' do
57
+ expect_wrapped_rule :'span.a', 'color: blue'
58
+ end
59
+
60
+ asset 'views/sets_rails_spec/normal_two.rb' do
61
+ expect_wrapped_rule :em, 'color: yellow'
62
+ end
63
+
64
+ asset 'views/sets_rails_spec/normal_two.pcss' do
65
+ expect_wrapped_rule :'em.a', 'color: yellow'
66
+ end
67
+
68
+ asset 'views/admin/admin_one.rb' do
69
+ expect_wrapped_rule :p, 'color: red'
70
+ end
71
+
72
+ asset 'views/admin/admin_one.pcss' do
73
+ expect_wrapped_rule :'p.a', 'color: red'
74
+ end
75
+
76
+ asset 'views/admin/admin_two.rb' do
77
+ expect_wrapped_rule :div, 'color: green'
78
+ end
79
+
80
+ asset 'views/admin/admin_two.pcss' do
81
+ expect_wrapped_rule :'div.a', 'color: green'
82
+ end
83
+ end)
84
+ end
85
+ end
@@ -0,0 +1,16 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any styles
10
+ * defined in the other CSS/SCSS files in this directory. It is generally better to create a new
11
+ * file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ *= require_parcels
16
+ */
@@ -0,0 +1,4 @@
1
+ class Views::Widgets::Base < Fortitude::Widget
2
+ doctype :html5
3
+ enable_parcels!
4
+ end
@@ -0,0 +1,92 @@
1
+ root_dir = File.basename(File.dirname(File.dirname(File.dirname(__FILE__))))
2
+ module_name = root_dir.camelize
3
+ app_outer_module = module_name.constantize
4
+ app_class = app_outer_module.const_get(:Application)
5
+
6
+ app_class.configure do
7
+ # Settings specified here will take precedence over those in config/application.rb.
8
+
9
+ # Code is not reloaded between requests.
10
+ config.cache_classes = true
11
+
12
+ # Eager load code on boot. This eager loads most of Rails and
13
+ # your application in memory, allowing both threaded web servers
14
+ # and those relying on copy on write to perform better.
15
+ # Rake tasks automatically ignore this option for performance.
16
+ config.eager_load = true
17
+
18
+ config.assets.enabled = true
19
+
20
+ # Full error reports are disabled and caching is turned on.
21
+ config.consider_all_requests_local = false
22
+ config.action_controller.perform_caching = true
23
+
24
+ # Enable Rack::Cache to put a simple HTTP cache in front of your application
25
+ # Add `rack-cache` to your Gemfile before enabling this.
26
+ # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
27
+ # config.action_dispatch.rack_cache = true
28
+
29
+ # Disable Rails's static asset server (Apache or nginx will already do this).
30
+ config.serve_static_assets = true
31
+
32
+ # Compress JavaScripts and CSS.
33
+ config.assets.js_compressor = :uglifier
34
+ # config.assets.css_compressor = :sass
35
+
36
+ require 'null_compressor'
37
+ config.assets.css_compressor = NullCompressor.new
38
+
39
+ # Do not fallback to assets pipeline if a precompiled asset is missed.
40
+ config.assets.compile = true
41
+
42
+ # Generate digests for assets URLs.
43
+ config.assets.digest = true
44
+
45
+ # `config.assets.precompile` has moved to config/initializers/assets.rb
46
+
47
+ # Specifies the header that your server uses for sending files.
48
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
49
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
50
+
51
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
52
+ # config.force_ssl = true
53
+
54
+ # Set to :debug to see everything in the log.
55
+ config.log_level = :info
56
+
57
+ # Prepend all log lines with the following tags.
58
+ # config.log_tags = [ :subdomain, :uuid ]
59
+
60
+ # Use a different logger for distributed setups.
61
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
62
+
63
+ # Use a different cache store in production.
64
+ # config.cache_store = :mem_cache_store
65
+
66
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server.
67
+ # config.action_controller.asset_host = "http://assets.example.com"
68
+
69
+ # Precompile additional assets.
70
+ # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
71
+ # config.assets.precompile += %w( search.js )
72
+
73
+ # Ignore bad email addresses and do not raise email delivery errors.
74
+ # Set this to true and configure the email server for immediate delivery to raise delivery errors.
75
+ # config.action_mailer.raise_delivery_errors = false
76
+
77
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
78
+ # the I18n.default_locale when a translation cannot be found).
79
+ config.i18n.fallbacks = true
80
+
81
+ # Send deprecation notices to registered listeners.
82
+ config.active_support.deprecation = :notify
83
+
84
+ # Disable automatic flushing of the log to improve performance.
85
+ # config.autoflush_log = false
86
+
87
+ # Use default logging formatter so that PID and timestamp are not suppressed.
88
+ config.log_formatter = ::Logger::Formatter.new
89
+
90
+ # Do not dump schema after migrations.
91
+ # config.active_record.dump_schema_after_migration = false
92
+ end
@@ -0,0 +1,5 @@
1
+ class NullCompressor
2
+ def compress(s)
3
+ s
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ class BasicRailsSpecController < ApplicationController
2
+ def simple_css
3
+ # nothing here
4
+ end
5
+
6
+ def alongside_and_inline
7
+ # nothing here
8
+ end
9
+
10
+ def inline_erb
11
+ # nothing here
12
+ end
13
+
14
+ def alongside_erb
15
+ # nothing here
16
+ end
17
+
18
+ def multiple_engines
19
+ # nothing here
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ class Views::BasicRailsSpec::AlongsideAndInline < Views::Widgets::Base
2
+ css %{
3
+ p { color: green; }
4
+ }
5
+
6
+ def content
7
+ p "hello, world"
8
+ end
9
+ end