graspi 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (350) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +3 -0
  4. data/Rakefile +31 -0
  5. data/lib/graspi.rb +64 -0
  6. data/lib/graspi/engine.rb +14 -0
  7. data/lib/graspi/helpers/assets_include_helper.rb +45 -0
  8. data/lib/graspi/version.rb +3 -0
  9. data/lib/grunt/graspi.coffee +87 -0
  10. data/lib/grunt/task_helpers/abstract.coffee +47 -0
  11. data/lib/grunt/task_helpers/bower/abstract.coffee +8 -0
  12. data/lib/grunt/task_helpers/bower/clean.coffee +6 -0
  13. data/lib/grunt/task_helpers/bower/clean_full.coffee +19 -0
  14. data/lib/grunt/task_helpers/bower/concat.coffee +37 -0
  15. data/lib/grunt/task_helpers/bower/concat_check.coffee +40 -0
  16. data/lib/grunt/task_helpers/browsersync/abstract.coffee +10 -0
  17. data/lib/grunt/task_helpers/browsersync/browsersync.coffee +25 -0
  18. data/lib/grunt/task_helpers/css/abstract.coffee +13 -0
  19. data/lib/grunt/task_helpers/css/clean.coffee +13 -0
  20. data/lib/grunt/task_helpers/css/clean_full.coffee +22 -0
  21. data/lib/grunt/task_helpers/css/concat.coffee +32 -0
  22. data/lib/grunt/task_helpers/css/copy.coffee +33 -0
  23. data/lib/grunt/task_helpers/css/minify.coffee +41 -0
  24. data/lib/grunt/task_helpers/css/replace_urls.coffee +58 -0
  25. data/lib/grunt/task_helpers/css/sass_compile.coffee +54 -0
  26. data/lib/grunt/task_helpers/filerev/abstract.coffee +13 -0
  27. data/lib/grunt/task_helpers/filerev/clean.coffee +9 -0
  28. data/lib/grunt/task_helpers/filerev/clean_full.coffee +14 -0
  29. data/lib/grunt/task_helpers/filerev/filerev.coffee +165 -0
  30. data/lib/grunt/task_helpers/image_min/abstract.coffee +8 -0
  31. data/lib/grunt/task_helpers/image_min/clean.coffee +6 -0
  32. data/lib/grunt/task_helpers/image_min/clean_full.coffee +14 -0
  33. data/lib/grunt/task_helpers/image_min/copy.coffee +35 -0
  34. data/lib/grunt/task_helpers/image_min/imagemin.coffee +67 -0
  35. data/lib/grunt/task_helpers/image_min/svgmin.coffee +30 -0
  36. data/lib/grunt/task_helpers/image_min/timestamps.coffee +5 -0
  37. data/lib/grunt/task_helpers/js/abstract.coffee +13 -0
  38. data/lib/grunt/task_helpers/js/clean.coffee +13 -0
  39. data/lib/grunt/task_helpers/js/clean_full.coffee +22 -0
  40. data/lib/grunt/task_helpers/js/coffee_compile.coffee +39 -0
  41. data/lib/grunt/task_helpers/js/concat.coffee +32 -0
  42. data/lib/grunt/task_helpers/js/copy.coffee +33 -0
  43. data/lib/grunt/task_helpers/js/uglify.coffee +44 -0
  44. data/lib/grunt/task_helpers/manifest/abstract.coffee +16 -0
  45. data/lib/grunt/task_helpers/manifest/clean.coffee +9 -0
  46. data/lib/grunt/task_helpers/manifest/clean_full.coffee +15 -0
  47. data/lib/grunt/task_helpers/manifest/manifest.coffee +125 -0
  48. data/lib/grunt/task_helpers/watch/abstract.coffee +10 -0
  49. data/lib/grunt/task_helpers/watch/watch.coffee +40 -0
  50. data/lib/grunt/tasks/bower.coffee +21 -0
  51. data/lib/grunt/tasks/browsersync.coffee +8 -0
  52. data/lib/grunt/tasks/css.coffee +31 -0
  53. data/lib/grunt/tasks/filerev.coffee +13 -0
  54. data/lib/grunt/tasks/image_min.coffee +28 -0
  55. data/lib/grunt/tasks/js.coffee +28 -0
  56. data/lib/grunt/tasks/manifest.coffee +13 -0
  57. data/lib/grunt/tasks/watch.coffee +8 -0
  58. data/lib/grunt/util/config.coffee +280 -0
  59. data/lib/grunt/util/config_app.coffee +31 -0
  60. data/lib/grunt/util/env_app_iterator.coffee +35 -0
  61. data/lib/grunt/util/file_change_tracker.coffee +79 -0
  62. data/lib/grunt/util/lodash_extensions.coffee +18 -0
  63. data/lib/grunt/util/task_runner.coffee +87 -0
  64. data/lib/tasks/graspi_tasks.rake +4 -0
  65. data/spec/dummy/Rakefile +6 -0
  66. data/spec/dummy/app/assets/images/base/kitten_1.jpg +0 -0
  67. data/spec/dummy/app/assets/images/base/kitten_2.jpg +0 -0
  68. data/spec/dummy/app/assets/images/base/kitten_3.jpg +0 -0
  69. data/spec/dummy/app/assets/images/base/kitten_4.jpg +0 -0
  70. data/spec/dummy/app/assets/images/base/kitten_5.jpg +0 -0
  71. data/spec/dummy/app/assets/images/base/kitten_6.jpg +0 -0
  72. data/spec/dummy/app/assets/images/base/kitten_7.jpg +0 -0
  73. data/spec/dummy/app/assets/images/base/kitten_8.jpg +0 -0
  74. data/spec/dummy/app/assets/images/base/logo.png +0 -0
  75. data/spec/dummy/app/assets/images/mixed/kitten_1.jpg +0 -0
  76. data/spec/dummy/app/assets/images/mixed/kitten_2.jpg +0 -0
  77. data/spec/dummy/app/assets/images/mixed/kitten_3.jpg +0 -0
  78. data/spec/dummy/app/assets/images/mixed/kitten_4.jpg +0 -0
  79. data/spec/dummy/app/assets/images/mixed/kitten_5.jpg +0 -0
  80. data/spec/dummy/app/assets/images/mixed/kitten_6.jpg +0 -0
  81. data/spec/dummy/app/assets/images/mixed/kitten_7.jpg +0 -0
  82. data/spec/dummy/app/assets/images/mixed/kitten_8.jpg +0 -0
  83. data/spec/dummy/app/assets/images/mixed/logo.png +0 -0
  84. data/spec/dummy/app/assets/images/plain/kitten_1.jpg +0 -0
  85. data/spec/dummy/app/assets/images/plain/kitten_2.jpg +0 -0
  86. data/spec/dummy/app/assets/images/plain/kitten_3.jpg +0 -0
  87. data/spec/dummy/app/assets/images/plain/kitten_4.jpg +0 -0
  88. data/spec/dummy/app/assets/images/plain/kitten_5.jpg +0 -0
  89. data/spec/dummy/app/assets/images/plain/kitten_6.jpg +0 -0
  90. data/spec/dummy/app/assets/images/plain/kitten_7.jpg +0 -0
  91. data/spec/dummy/app/assets/images/plain/kitten_8.jpg +0 -0
  92. data/spec/dummy/app/assets/images/plain/logo.png +0 -0
  93. data/spec/dummy/app/assets/javascripts/base/application.coffee +0 -0
  94. data/spec/dummy/app/assets/javascripts/mixed/application.coffee +0 -0
  95. data/spec/dummy/app/assets/javascripts/mixed/second.js +0 -0
  96. data/spec/dummy/app/assets/javascripts/plain/application.js +0 -0
  97. data/spec/dummy/app/assets/javascripts/plain/second.js +0 -0
  98. data/spec/dummy/app/assets/stylesheets/base/application.sass +6 -0
  99. data/spec/dummy/app/assets/stylesheets/base/layout/_footer.sass +9 -0
  100. data/spec/dummy/app/assets/stylesheets/base/layout/_grid.sass +3 -0
  101. data/spec/dummy/app/assets/stylesheets/base/layout/_layout.sass +22 -0
  102. data/spec/dummy/app/assets/stylesheets/base/layout/_typography.sass +7 -0
  103. data/spec/dummy/app/assets/stylesheets/mixed/application.sass +5 -0
  104. data/spec/dummy/app/assets/stylesheets/mixed/layout/_grid.sass +3 -0
  105. data/spec/dummy/app/assets/stylesheets/mixed/layout/_layout.sass +22 -0
  106. data/spec/dummy/app/assets/stylesheets/mixed/layout/_typography.sass +7 -0
  107. data/spec/dummy/app/assets/stylesheets/mixed/second.css +0 -0
  108. data/spec/dummy/app/assets/stylesheets/plain/application.css +0 -0
  109. data/spec/dummy/app/assets/stylesheets/plain/second.css +0 -0
  110. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  111. data/spec/dummy/app/controllers/pages_controller.rb +24 -0
  112. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  113. data/spec/dummy/app/views/layouts/application.html.haml +13 -0
  114. data/spec/dummy/app/views/layouts/base.html.haml +10 -0
  115. data/spec/dummy/app/views/layouts/mixed.html.haml +10 -0
  116. data/spec/dummy/app/views/layouts/plain.html.haml +10 -0
  117. data/spec/dummy/app/views/pages/_view.html.haml +19 -0
  118. data/spec/dummy/app/views/pages/base.html.haml +1 -0
  119. data/spec/dummy/app/views/pages/mixed.html.haml +1 -0
  120. data/spec/dummy/app/views/pages/plain.html.haml +1 -0
  121. data/spec/dummy/bin/bundle +3 -0
  122. data/spec/dummy/bin/rails +4 -0
  123. data/spec/dummy/bin/rake +4 -0
  124. data/spec/dummy/bin/setup +29 -0
  125. data/spec/dummy/config.ru +4 -0
  126. data/spec/dummy/config/application.rb +32 -0
  127. data/spec/dummy/config/boot.rb +5 -0
  128. data/spec/dummy/config/database.example.yml +25 -0
  129. data/spec/dummy/config/database.yml +25 -0
  130. data/spec/dummy/config/environment.rb +5 -0
  131. data/spec/dummy/config/environments/development.rb +41 -0
  132. data/spec/dummy/config/environments/production.rb +79 -0
  133. data/spec/dummy/config/environments/test.rb +42 -0
  134. data/spec/dummy/config/initializers/assets.rb +11 -0
  135. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  136. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  137. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  138. data/spec/dummy/config/initializers/graspi.rb +1 -0
  139. data/spec/dummy/config/initializers/inflections.rb +16 -0
  140. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  141. data/spec/dummy/config/initializers/session_store.rb +3 -0
  142. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  143. data/spec/dummy/config/locales/en.yml +23 -0
  144. data/spec/dummy/config/routes.rb +9 -0
  145. data/spec/dummy/config/secrets.example.yml +22 -0
  146. data/spec/dummy/config/secrets.yml +22 -0
  147. data/spec/dummy/db/development.sqlite3 +0 -0
  148. data/spec/dummy/db/schema.rb +16 -0
  149. data/spec/dummy/db/test.sqlite3 +0 -0
  150. data/spec/dummy/log/development.log +10490 -0
  151. data/spec/dummy/public/404.html +67 -0
  152. data/spec/dummy/public/422.html +67 -0
  153. data/spec/dummy/public/500.html +66 -0
  154. data/spec/dummy/public/assets/g-assets.json +43 -0
  155. data/spec/dummy/public/assets/g-development/base/application.css +589 -0
  156. data/spec/dummy/public/assets/g-development/base/application.css.map +11 -0
  157. data/spec/dummy/public/assets/g-development/base/application.js +18691 -0
  158. data/spec/dummy/public/assets/g-development/base/application.js.map +10 -0
  159. data/spec/dummy/public/assets/g-development/base/kitten_1.jpg +0 -0
  160. data/spec/dummy/public/assets/g-development/base/kitten_2.jpg +0 -0
  161. data/spec/dummy/public/assets/g-development/base/kitten_3.jpg +0 -0
  162. data/spec/dummy/public/assets/g-development/base/kitten_4.jpg +0 -0
  163. data/spec/dummy/public/assets/g-development/base/kitten_5.jpg +0 -0
  164. data/spec/dummy/public/assets/g-development/base/kitten_6.jpg +0 -0
  165. data/spec/dummy/public/assets/g-development/base/kitten_7.jpg +0 -0
  166. data/spec/dummy/public/assets/g-development/base/kitten_8.jpg +0 -0
  167. data/spec/dummy/public/assets/g-development/base/logo.png +0 -0
  168. data/spec/dummy/public/assets/g-development/mixed/application.32d9e45930c83e3769a9ff2f92adfe0cb5bb013c6c146f0eafb35ea3c1cb79a5.js +33 -0
  169. data/spec/dummy/public/assets/g-development/mixed/application.550e9eaa5b567604fd414ab0d5e9b7c1899ebae67d95f8191c5c273b8dcd34b7.js.map +1 -0
  170. data/spec/dummy/public/assets/g-development/mixed/application.7ef4ffe5ac778acc4c8195a6ce8a3b0ea47d3cd5bbf8479cec5b143b97dde82e.css +2 -0
  171. data/spec/dummy/public/assets/g-development/mixed/application.css +2 -0
  172. data/spec/dummy/public/assets/g-development/mixed/application.css.map +1 -0
  173. data/spec/dummy/public/assets/g-development/mixed/application.efc51097dff5d27e7434d8055f125e7ea85513534b986e00fc35a8aa2dd93f22.css.map +1 -0
  174. data/spec/dummy/public/assets/g-development/mixed/application.js +33 -0
  175. data/spec/dummy/public/assets/g-development/mixed/application.js.map +1 -0
  176. data/spec/dummy/public/assets/g-development/mixed/kitten_1.05e62b1fae8ff9ba745af7e9cf3a8f772a84e4e69689eebd88470fc236e17128.jpg +0 -0
  177. data/spec/dummy/public/assets/g-development/mixed/kitten_1.jpg +0 -0
  178. data/spec/dummy/public/assets/g-development/mixed/kitten_2.0e492e6a90094a6b0bb5f66037e9a612a1401e02ff1095d33e252fd4e110c825.jpg +0 -0
  179. data/spec/dummy/public/assets/g-development/mixed/kitten_2.jpg +0 -0
  180. data/spec/dummy/public/assets/g-development/mixed/kitten_3.e5e57ee0440b05005315aa1ce2beda938be16e00bc74ba093af5e475afa1a47f.jpg +0 -0
  181. data/spec/dummy/public/assets/g-development/mixed/kitten_3.jpg +0 -0
  182. data/spec/dummy/public/assets/g-development/mixed/kitten_4.1c0143065e348b79fe5c471b99cda7b99d6e7bda4663b5d82d21b5aeaed420e4.jpg +0 -0
  183. data/spec/dummy/public/assets/g-development/mixed/kitten_4.jpg +0 -0
  184. data/spec/dummy/public/assets/g-development/mixed/kitten_5.9f4b41712362b832ce672907f0221471aa0ca148c17350107b96f0d54ea2deda.jpg +0 -0
  185. data/spec/dummy/public/assets/g-development/mixed/kitten_5.jpg +0 -0
  186. data/spec/dummy/public/assets/g-development/mixed/kitten_6.d5d7ef1f783685e23ea39c07910073b832ec22872175d7061a9084ab7e4a074d.jpg +0 -0
  187. data/spec/dummy/public/assets/g-development/mixed/kitten_6.jpg +0 -0
  188. data/spec/dummy/public/assets/g-development/mixed/kitten_7.59681fdcfdba95f16db760e490fa04d0cb302b80a91c0f7f5d8e36211811f8d2.jpg +0 -0
  189. data/spec/dummy/public/assets/g-development/mixed/kitten_7.jpg +0 -0
  190. data/spec/dummy/public/assets/g-development/mixed/kitten_8.7225e60000a76c9273ead2e6d8d8c280223e1a5b58e99693f486b5d3cd02d755.jpg +0 -0
  191. data/spec/dummy/public/assets/g-development/mixed/kitten_8.jpg +0 -0
  192. data/spec/dummy/public/assets/g-development/mixed/logo.58a56028cf0d44791e113b8cdfd4d3ad704212ba765e7cb600899c19e0cb782c.png +0 -0
  193. data/spec/dummy/public/assets/g-development/mixed/logo.png +0 -0
  194. data/spec/dummy/public/assets/g-development/plain/application.css +430 -0
  195. data/spec/dummy/public/assets/g-development/plain/application.css.map +11 -0
  196. data/spec/dummy/public/assets/g-development/plain/application.js +11580 -0
  197. data/spec/dummy/public/assets/g-development/plain/application.js.map +11 -0
  198. data/spec/dummy/public/assets/g-development/plain/kitten_1.jpg +0 -0
  199. data/spec/dummy/public/assets/g-development/plain/kitten_2.jpg +0 -0
  200. data/spec/dummy/public/assets/g-development/plain/kitten_3.jpg +0 -0
  201. data/spec/dummy/public/assets/g-development/plain/kitten_4.jpg +0 -0
  202. data/spec/dummy/public/assets/g-development/plain/kitten_5.jpg +0 -0
  203. data/spec/dummy/public/assets/g-development/plain/kitten_6.jpg +0 -0
  204. data/spec/dummy/public/assets/g-development/plain/kitten_7.jpg +0 -0
  205. data/spec/dummy/public/assets/g-development/plain/kitten_8.jpg +0 -0
  206. data/spec/dummy/public/assets/g-development/plain/logo.png +0 -0
  207. data/spec/dummy/public/favicon.ico +0 -0
  208. data/spec/dummy/tmp/grunt/asset_timestamps.json +216 -0
  209. data/spec/dummy/tmp/grunt/css/base/application.css/1_bower.css +584 -0
  210. data/spec/dummy/tmp/grunt/css/base/application.css/base/application.css +2 -0
  211. data/spec/dummy/tmp/grunt/css/base/application.css/base/application.css.map +7 -0
  212. data/spec/dummy/tmp/grunt/css/mixed/application.css/1_bower.css +932 -0
  213. data/spec/dummy/tmp/grunt/css/mixed/application.css/mixed/application.css +2 -0
  214. data/spec/dummy/tmp/grunt/css/mixed/application.css/mixed/application.css.map +7 -0
  215. data/spec/dummy/tmp/grunt/css/mixed/application.css/mixed/second.css +2 -0
  216. data/spec/dummy/tmp/grunt/css/mixed/application.css/mixed/second.css.map +7 -0
  217. data/spec/dummy/tmp/grunt/css/plain/application.css/1_bower.css +424 -0
  218. data/spec/dummy/tmp/grunt/css/plain/application.css/plain/application.css +2 -0
  219. data/spec/dummy/tmp/grunt/css/plain/application.css/plain/application.css.map +7 -0
  220. data/spec/dummy/tmp/grunt/css/plain/application.css/plain/second.css +2 -0
  221. data/spec/dummy/tmp/grunt/css/plain/application.css/plain/second.css.map +7 -0
  222. data/spec/dummy/tmp/grunt/filerevision/development-base.json +15 -0
  223. data/spec/dummy/tmp/grunt/filerevision/development-mixed.json +15 -0
  224. data/spec/dummy/tmp/grunt/filerevision/development-plain.json +15 -0
  225. data/spec/dummy/tmp/grunt/js/base/application.js/1_bower.js +18682 -0
  226. data/spec/dummy/tmp/grunt/js/base/application.js/base/application.js +6 -0
  227. data/spec/dummy/tmp/grunt/js/base/application.js/base/application.js.map +10 -0
  228. data/spec/dummy/tmp/grunt/js/mixed/application.js/1_bower.js +13153 -0
  229. data/spec/dummy/tmp/grunt/js/mixed/application.js/mixed/application.js +6 -0
  230. data/spec/dummy/tmp/grunt/js/mixed/application.js/mixed/application.js.map +10 -0
  231. data/spec/dummy/tmp/grunt/js/mixed/application.js/mixed/second.js +2 -0
  232. data/spec/dummy/tmp/grunt/js/mixed/application.js/mixed/second.js.map +7 -0
  233. data/spec/dummy/tmp/grunt/js/plain/application.js/1_bower.js +11574 -0
  234. data/spec/dummy/tmp/grunt/js/plain/application.js/plain/application.js +2 -0
  235. data/spec/dummy/tmp/grunt/js/plain/application.js/plain/application.js.map +7 -0
  236. data/spec/dummy/tmp/grunt/js/plain/application.js/plain/second.js +2 -0
  237. data/spec/dummy/tmp/grunt/js/plain/application.js/plain/second.js.map +7 -0
  238. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_convert-units.scssc +0 -0
  239. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_directional-values.scssc +0 -0
  240. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_font-source-declaration.scssc +0 -0
  241. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_gradient-positions-parser.scssc +0 -0
  242. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_linear-angle-parser.scssc +0 -0
  243. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_linear-gradient-parser.scssc +0 -0
  244. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_linear-positions-parser.scssc +0 -0
  245. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_linear-side-corner-parser.scssc +0 -0
  246. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_radial-arg-parser.scssc +0 -0
  247. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_radial-gradient-parser.scssc +0 -0
  248. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_radial-positions-parser.scssc +0 -0
  249. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_render-gradients.scssc +0 -0
  250. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_shape-size-stripper.scssc +0 -0
  251. data/spec/dummy/tmp/grunt/sass_cache/08ad877409792dddd715faefc2a5ebd471969650/_str-to-num.scssc +0 -0
  252. data/spec/dummy/tmp/grunt/sass_cache/16d30df860db416a2481ad22d3ff1a747d6219db/application.sassc +0 -0
  253. data/spec/dummy/tmp/grunt/sass_cache/1e3c1dcafa0d8e91f21a327b193bb9bbc5522a0f/_grid.sassc +0 -0
  254. data/spec/dummy/tmp/grunt/sass_cache/1e3c1dcafa0d8e91f21a327b193bb9bbc5522a0f/_layout.sassc +0 -0
  255. data/spec/dummy/tmp/grunt/sass_cache/1e3c1dcafa0d8e91f21a327b193bb9bbc5522a0f/_typography.sassc +0 -0
  256. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_border-color.scssc +0 -0
  257. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_border-radius.scssc +0 -0
  258. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_border-style.scssc +0 -0
  259. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_border-width.scssc +0 -0
  260. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_buttons.scssc +0 -0
  261. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_clearfix.scssc +0 -0
  262. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_ellipsis.scssc +0 -0
  263. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_font-stacks.scssc +0 -0
  264. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_hide-text.scssc +0 -0
  265. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_margin.scssc +0 -0
  266. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_padding.scssc +0 -0
  267. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_position.scssc +0 -0
  268. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_prefixer.scssc +0 -0
  269. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_retina-image.scssc +0 -0
  270. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_size.scssc +0 -0
  271. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_text-inputs.scssc +0 -0
  272. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_timing-functions.scssc +0 -0
  273. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_triangle.scssc +0 -0
  274. data/spec/dummy/tmp/grunt/sass_cache/27de6c9bd1cc1e521ad09b2575de2ae77a566697/_word-wrap.scssc +0 -0
  275. data/spec/dummy/tmp/grunt/sass_cache/326439c8e594c1dca703b9ee873e90079d5f5cb5/_bourbon-deprecated-upcoming.scssc +0 -0
  276. data/spec/dummy/tmp/grunt/sass_cache/326439c8e594c1dca703b9ee873e90079d5f5cb5/_bourbon.scssc +0 -0
  277. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_box-sizing.scssc +0 -0
  278. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_direction-context.scssc +0 -0
  279. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_display-context.scssc +0 -0
  280. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_fill-parent.scssc +0 -0
  281. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_media.scssc +0 -0
  282. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_omega.scssc +0 -0
  283. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_outer-container.scssc +0 -0
  284. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_pad.scssc +0 -0
  285. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_private.scssc +0 -0
  286. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_row.scssc +0 -0
  287. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_shift.scssc +0 -0
  288. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_span-columns.scssc +0 -0
  289. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_to-deprecate.scssc +0 -0
  290. data/spec/dummy/tmp/grunt/sass_cache/3ec69ce433221720b130ca9e42300ea140e6d275/_visual-grid.scssc +0 -0
  291. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_animation.scssc +0 -0
  292. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_appearance.scssc +0 -0
  293. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_backface-visibility.scssc +0 -0
  294. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_background-image.scssc +0 -0
  295. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_background.scssc +0 -0
  296. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_border-image.scssc +0 -0
  297. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_calc.scssc +0 -0
  298. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_columns.scssc +0 -0
  299. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_filter.scssc +0 -0
  300. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_flex-box.scssc +0 -0
  301. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_font-face.scssc +0 -0
  302. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_font-feature-settings.scssc +0 -0
  303. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_hidpi-media-query.scssc +0 -0
  304. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_hyphens.scssc +0 -0
  305. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_image-rendering.scssc +0 -0
  306. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_keyframes.scssc +0 -0
  307. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_linear-gradient.scssc +0 -0
  308. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_perspective.scssc +0 -0
  309. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_placeholder.scssc +0 -0
  310. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_radial-gradient.scssc +0 -0
  311. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_selection.scssc +0 -0
  312. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_text-decoration.scssc +0 -0
  313. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_transform.scssc +0 -0
  314. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_transition.scssc +0 -0
  315. data/spec/dummy/tmp/grunt/sass_cache/4f625854e2c059b207d0b2f78574d69e284dd241/_user-select.scssc +0 -0
  316. data/spec/dummy/tmp/grunt/sass_cache/547e7d669634d2662355e40eb168a731b071c473/application.sassc +0 -0
  317. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_assign-inputs.scssc +0 -0
  318. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_contains-falsy.scssc +0 -0
  319. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_contains.scssc +0 -0
  320. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_is-length.scssc +0 -0
  321. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_is-light.scssc +0 -0
  322. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_is-number.scssc +0 -0
  323. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_is-size.scssc +0 -0
  324. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_modular-scale.scssc +0 -0
  325. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_px-to-em.scssc +0 -0
  326. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_px-to-rem.scssc +0 -0
  327. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_shade.scssc +0 -0
  328. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_strip-units.scssc +0 -0
  329. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_tint.scssc +0 -0
  330. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_transition-property-name.scssc +0 -0
  331. data/spec/dummy/tmp/grunt/sass_cache/5abd7e0c6f1f03692d8b3702912743f79fedc2f3/_unpack.scssc +0 -0
  332. data/spec/dummy/tmp/grunt/sass_cache/9734cd2400af9be4fa8b47bed719f07707107597/_neat-helpers.scssc +0 -0
  333. data/spec/dummy/tmp/grunt/sass_cache/9734cd2400af9be4fa8b47bed719f07707107597/_neat.scssc +0 -0
  334. data/spec/dummy/tmp/grunt/sass_cache/a53529989ccbf12725d42e2e8519a39a49a2ca52/_disable-warnings.scssc +0 -0
  335. data/spec/dummy/tmp/grunt/sass_cache/a53529989ccbf12725d42e2e8519a39a49a2ca52/_grid.scssc +0 -0
  336. data/spec/dummy/tmp/grunt/sass_cache/a53529989ccbf12725d42e2e8519a39a49a2ca52/_visual-grid.scssc +0 -0
  337. data/spec/dummy/tmp/grunt/sass_cache/ac58adafccab62210cad1ab751e37e487323cace/_new-breakpoint.scssc +0 -0
  338. data/spec/dummy/tmp/grunt/sass_cache/ac58adafccab62210cad1ab751e37e487323cace/_private.scssc +0 -0
  339. data/spec/dummy/tmp/grunt/sass_cache/c1fd3f393f01d5e51395ed159f6ce9ebd70b922c/_asset-pipeline.scssc +0 -0
  340. data/spec/dummy/tmp/grunt/sass_cache/c1fd3f393f01d5e51395ed159f6ce9ebd70b922c/_prefixer.scssc +0 -0
  341. data/spec/dummy/tmp/grunt/sass_cache/c1fd3f393f01d5e51395ed159f6ce9ebd70b922c/_px-to-em.scssc +0 -0
  342. data/spec/dummy/tmp/grunt/sass_cache/f99d6590ab65c8c8aa1da236ac0fecd5fcafa344/_footer.sassc +0 -0
  343. data/spec/dummy/tmp/grunt/sass_cache/f99d6590ab65c8c8aa1da236ac0fecd5fcafa344/_grid.sassc +0 -0
  344. data/spec/dummy/tmp/grunt/sass_cache/f99d6590ab65c8c8aa1da236ac0fecd5fcafa344/_layout.sassc +0 -0
  345. data/spec/dummy/tmp/grunt/sass_cache/f99d6590ab65c8c8aa1da236ac0fecd5fcafa344/_test1.sassc +0 -0
  346. data/spec/dummy/tmp/grunt/sass_cache/f99d6590ab65c8c8aa1da236ac0fecd5fcafa344/_typography.sassc +0 -0
  347. data/spec/dummy/tmp/pids/server.pid +1 -0
  348. data/spec/rails_helper.rb +1 -0
  349. data/spec/spec_helper.rb +58 -0
  350. metadata +679 -0
@@ -0,0 +1,10 @@
1
+ module.exports = class AbstractTaskHelper extends require('../abstract')
2
+
3
+ getCacheKey: ->
4
+ "browsersync-#{@eac.env_name}-#{@eac.app_name}"
5
+
6
+ isEnabled: ->
7
+ return false unless super() == true
8
+ return false unless @_.isObject(@getConfig().browserSync)
9
+
10
+ @getConfig().browserSync.enabled == true
@@ -0,0 +1,25 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ isEnabled: ->
4
+ return false unless super() == true
5
+ return false unless @_.isObject(@getConfig().browserSync.bsFiles)
6
+
7
+ @_.size(@getConfig().browserSync.bsFiles.src) > 0
8
+
9
+ run: ->
10
+ return unless @isEnabled()
11
+
12
+ cfg = @g.config.get('browserSync') || {}
13
+ cfg.options or= {}
14
+ cfg.bsFiles or= []
15
+
16
+ cfg.options = @_.merge {}, cfg.options, @buildBaseOptions()
17
+ cfg.bsFiles = @_.uniq(cfg.bsFiles.concat(@buildSrcArray()))
18
+
19
+ @g.config.merge({ browserSync: cfg })
20
+
21
+ buildBaseOptions: ->
22
+ @getConfig().browserSync.options || {}
23
+
24
+ buildSrcArray: ->
25
+ @getConfig().browserSync.bsFiles.src || []
@@ -0,0 +1,13 @@
1
+ module.exports = class AbstractTaskHelper extends require('../abstract')
2
+
3
+ getCacheKey: ->
4
+ "css-#{@eac.env_name}-#{@eac.app_name}"
5
+
6
+ isEnabled: ->
7
+ return false unless super() == true
8
+ return false unless @_.isObject(@getAppConfig().css)
9
+
10
+ true
11
+
12
+ getDestFilePath: ->
13
+ "#{@getAppConfig().css.destPath}/#{@getAppConfig().css.destFile}"
@@ -0,0 +1,13 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getCacheKey: ->
4
+ @_cacheKey
5
+
6
+ run: ->
7
+ @_cacheKey = "css-#{@eac.env_name}-#{@eac.app_name}"
8
+ @fileCacheClean()
9
+ @_cacheKey = "css-minify-#{@eac.env_name}-#{@eac.app_name}"
10
+ @fileCacheClean()
11
+
12
+ isEnabled: ->
13
+ true
@@ -0,0 +1,22 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getGruntTask: ->
4
+ 'clean'
5
+
6
+ getGruntTaskTarget: ->
7
+ "graspi-css-clean-#{super()}"
8
+
9
+ getTmpFilesUrl: ->
10
+ "#{@getConfig().tmp.css}/#{@getAppConfig().css.destFile}/{,*/}*.css"
11
+
12
+ buildConfig: ->
13
+ cfg = {}
14
+
15
+ cfg.src = [
16
+ @getTmpFilesUrl(),
17
+ "#{@getTmpFilesUrl()}.map",
18
+ @getDestFilePath(),
19
+ "#{@getDestFilePath()}.map"
20
+ ]
21
+
22
+ cfg
@@ -0,0 +1,32 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getGruntTask: ->
4
+ 'concat_sourcemap'
5
+
6
+ getGruntTaskTarget: ->
7
+ "graspi-css-concat-#{super()}"
8
+
9
+ getFilesUrl: ->
10
+ "#{@getConfig().tmp.css}/#{@getAppConfig().css.destFile}/{,*/}*.css"
11
+
12
+ buildConfig: ->
13
+ updateNecessary = false
14
+
15
+ files = @g.file.expand(@getFilesUrl())
16
+
17
+ @_.each files, (file) =>
18
+ return unless updateNecessary == false
19
+ return unless @fileCacheHasChanged(file)
20
+ updateNecessary = true
21
+
22
+ cfg = {}
23
+ cfg.options = {}
24
+ cfg.options.sourcesContent = false
25
+ cfg.files = {}
26
+
27
+ if updateNecessary == true
28
+ @_.each files, (file) => @fileCacheUpdate(file)
29
+
30
+ cfg.files[@getDestFilePath()] = [@getFilesUrl()]
31
+
32
+ cfg
@@ -0,0 +1,33 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getGruntTask: ->
4
+ 'concat_sourcemap'
5
+
6
+ getGruntTaskTarget: ->
7
+ "graspi-css-copy-#{super()}"
8
+
9
+ isEnabled: ->
10
+ return false unless super() == true
11
+ return false unless @_.isObject(@getAppConfig().css.files)
12
+
13
+ @_.isObject(@getAppConfig().css.files.cssFiles)
14
+
15
+ buildConfig: ->
16
+ cfg = {}
17
+ cfg.options = {}
18
+ cfg.options.sourcesContent = false
19
+ cfg.files = [{
20
+ expand: true
21
+ ext: '.css'
22
+ src: @getAppConfig().css.files.cssFiles || []
23
+ cwd: "#{@getAppConfig().css.basePath}"
24
+ dest: "#{@getConfig().tmp.css}/#{@getAppConfig().css.destFile}"
25
+ filter: (path) =>
26
+ changed = @fileCacheHasChanged(path)
27
+
28
+ @fileCacheUpdate(path) if changed == true
29
+
30
+ changed
31
+ }]
32
+
33
+ cfg
@@ -0,0 +1,41 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getGruntTask: ->
4
+ 'cssmin'
5
+
6
+ getGruntTaskTarget: ->
7
+ "graspi-css-minify-#{super()}"
8
+
9
+ getCacheKey: ->
10
+ "css-minify-#{@eac.env_name}-#{@eac.app_name}"
11
+
12
+ isEnabled: ->
13
+ return false unless super() == true
14
+ return false unless @getConfig().cssMinify.enabled == true
15
+
16
+ @fileCacheHasChanged(@getDestFilePath())
17
+
18
+ buildConfig: ->
19
+ cfg = {}
20
+ cfg.options = {}
21
+ cfg.options.report = @getConfig().cssMinify.report
22
+ cfg.options.sourceMap = @getConfig().cssMinify.sourceMap
23
+ cfg.options.advanced = @getConfig().cssMinify.cleanCss.advanced
24
+ cfg.options.aggressiveMerging = @getConfig().cssMinify.cleanCss.aggressiveMerging
25
+ cfg.options.compatibility = @getConfig().cssMinify.cleanCss.compatibility
26
+ cfg.options.keepBreaks = @getConfig().cssMinify.cleanCss.keepBreaks
27
+ cfg.options.keepSpecialComments = @getConfig().cssMinify.cleanCss.keepSpecialComments
28
+ cfg.options.mediaMerging = @getConfig().cssMinify.cleanCss.mediaMerging
29
+ cfg.options.rebase = @getConfig().cssMinify.cleanCss.rebase
30
+ cfg.options.restructuring = @getConfig().cssMinify.cleanCss.restructuring
31
+ cfg.options.roundingPrecision = @getConfig().cssMinify.cleanCss.roundingPrecision
32
+ cfg.options.semanticMerging = @getConfig().cssMinify.cleanCss.semanticMerging
33
+ cfg.options.shorthandCompacting = @getConfig().cssMinify.cleanCss.shorthandCompacting
34
+ cfg.options.sourceMapInlineSources = @getConfig().cssMinify.cleanCss.sourceMapInlineSources
35
+
36
+ cfg.files = {}
37
+ cfg.files[@getDestFilePath()] = [@getDestFilePath()]
38
+
39
+ @fileCacheUpdate(@getDestFilePath())
40
+
41
+ cfg
@@ -0,0 +1,58 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getCacheKey: ->
4
+ "css-replace_urls-#{@eac.env_name}-#{@eac.app_name}"
5
+
6
+ getGruntTask: ->
7
+ 'replace'
8
+
9
+ getGruntTaskTarget: ->
10
+ "graspi-css-replace_urls-#{super()}"
11
+
12
+ isEnabled: ->
13
+ return false unless super() == true
14
+ return false unless @getConfig().manifest.enabled == true
15
+ return false unless @fileCacheHasChanged(@getDestFilePath())
16
+
17
+ true
18
+
19
+ getManifestMapping: ->
20
+ try
21
+ mapping = @g.file.readJSON(@getConfig().manifest.path)
22
+ mapping or= {}
23
+
24
+ mapping[@eac.env_name] || {}
25
+
26
+ getAssetHost: ->
27
+ @getConfig().assetHost
28
+
29
+ buildConfig: ->
30
+ mapping = @getManifestMapping()
31
+
32
+ cfg = {}
33
+ cfg.options = {}
34
+ cfg.options.patterns = []
35
+ cfg.options.patterns.push {
36
+ match: /image\-url\((\'|\")(.*)(\'|\")\)/g
37
+ replacement: (match) =>
38
+ result = match.replace(/image\-url\((\'|\")/g, '')
39
+ result = result.replace(/(\'|\")\)/g, '')
40
+
41
+ return match if @_.isEmpty(mapping[result])
42
+
43
+ result = mapping[result]
44
+
45
+ unless @_.isEmpty(@getAssetHost())
46
+ host = @getAssetHost().replace(/\/$/, '')
47
+ result = "#{host}/#{result}"
48
+
49
+ "url('#{result}')"
50
+ }
51
+
52
+ cfg.files = []
53
+ cfg.files.push {
54
+ expand: true
55
+ src: [@getDestFilePath()]
56
+ }
57
+
58
+ cfg
@@ -0,0 +1,54 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getGruntTask: ->
4
+ 'sass'
5
+
6
+ getGruntTaskTarget: ->
7
+ "graspi-css-sass_compile-#{super()}"
8
+
9
+ isEnabled: ->
10
+ return false unless super() == true
11
+ return false unless @_.isObject(@getAppConfig().css.files)
12
+ return false unless @getConfig().cssSass.enabled == true
13
+
14
+ @_.isObject(@getAppConfig().css.files.sassFiles)
15
+
16
+ buildConfig: ->
17
+ sassConfig = @getConfig().cssSass
18
+
19
+ changed = false
20
+
21
+ @_.each @g.file.expand("#{@getAppConfig().css.basePath}/**/*.{sass,scss}"), (file) =>
22
+ return if changed == true
23
+ return if @fileCacheHasChanged(file) == false
24
+ changed = true
25
+
26
+ return {} unless changed == true
27
+
28
+ cfg = {}
29
+ cfg.options = {}
30
+ cfg.options.trace = sassConfig.trace
31
+ cfg.options.cacheLocation = sassConfig.cacheLocation
32
+ cfg.options.compass = sassConfig.compass
33
+ cfg.options.debugInfo = sassConfig.debugInfo
34
+ cfg.options.lineNumbers = sassConfig.lineNumbers
35
+ cfg.options.precision = sassConfig.precision
36
+ cfg.options.quiet = sassConfig.quiet
37
+ cfg.options.sourcemap = sassConfig.sourcemap
38
+ cfg.options.style = sassConfig.style
39
+ cfg.options.update = sassConfig.update
40
+ cfg.options.loadPath = @_.clone(sassConfig.loadPath)
41
+ cfg.files = [{
42
+ expand: true
43
+ ext: '.css'
44
+ src: @getAppConfig().css.files.sassFiles || []
45
+ cwd: "#{@getAppConfig().css.basePath}"
46
+ dest: "#{@getConfig().tmp.css}/#{@getAppConfig().css.destFile}"
47
+ }]
48
+
49
+ cfg.options.loadPath.push @getAppConfig().css.basePath
50
+
51
+ @_.each @g.file.expand("#{@getAppConfig().css.basePath}/**/*.{sass,scss}"), (file) =>
52
+ @fileCacheUpdate(file)
53
+
54
+ cfg
@@ -0,0 +1,13 @@
1
+ module.exports = class AbstractTaskHelper extends require('../abstract')
2
+
3
+ getCacheKey: ->
4
+ "filerev-#{@eac.env_name}-#{@eac.app_name}"
5
+
6
+ isEnabled: ->
7
+ return false unless super() == true
8
+ return false unless @_.isObject(@getConfig().filerevision)
9
+
10
+ true
11
+
12
+ getMappingFilePath: ->
13
+ "#{@getConfig().tmp.filerevision}/#{@eac.env_name}-#{@eac.app_name}.json"
@@ -0,0 +1,9 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ isEnabled: ->
4
+ true
5
+
6
+ run: ->
7
+ return unless @isEnabled()
8
+
9
+ @fileCacheClean()
@@ -0,0 +1,14 @@
1
+ module.exports = class TaskHelper extends require('./abstract')
2
+
3
+ getGruntTask: ->
4
+ 'clean'
5
+
6
+ getGruntTaskTarget: ->
7
+ "graspi-filerev-clean-#{super()}"
8
+
9
+ buildConfig: ->
10
+ cfg = {}
11
+
12
+ cfg.src = [@getMappingFilePath()]
13
+
14
+ cfg
@@ -0,0 +1,165 @@
1
+ Crypto = require('crypto')
2
+ Fs = require('fs')
3
+ File = require('path')
4
+ Convert = require('convert-source-map')
5
+
6
+ module.exports = class TaskHelper extends require('./abstract')
7
+
8
+ isEnabled: ->
9
+ return false unless super() == true
10
+
11
+ @getConfig().filerevision.enabled == true
12
+
13
+ run: ->
14
+ @mappingUpdatable = false
15
+
16
+ @_readMappingFile()
17
+
18
+ files = @collectFilesInBasePaths()
19
+ files = @filterRevisionedFiles(files)
20
+ files = @filterChangedFiles(files)
21
+
22
+ @dropOldRevisionFiles(files)
23
+ @createRevisionFiles(files)
24
+ @updateSourceMapLink(files)
25
+ @updateFileChangeTimestamps(files)
26
+
27
+ @_writeMappingFile()
28
+
29
+ # -----
30
+
31
+ getHashLength: ->
32
+ @_hashLength or= 64
33
+
34
+ getRevisionedFileRegex: ->
35
+ @_revisionedFileRegex or= new RegExp("\.[a-zA-Z0-9]{#{@getHashLength()}}\.")
36
+
37
+ getMapping: ->
38
+ @_mapping or= @_readMappingFile()
39
+
40
+ getMappingFilePrettyPrint: ->
41
+ @getConfig().filerevision.manifest.prettyPrint
42
+
43
+ getCssBasePaths: ->
44
+ return [] unless @_.isObject(@getAppConfig().css)
45
+
46
+ p = "#{@getAppConfig().css.destPath}/#{@getAppConfig().css.destFile}"
47
+ if @g.file.exists(p) then [File.dirname(p)] else []
48
+
49
+ getJsBasePaths: ->
50
+ return [] unless @_.isObject(@getAppConfig().js)
51
+
52
+ p = "#{@getAppConfig().js.destPath}/#{@getAppConfig().js.destFile}"
53
+ if @g.file.exists(p) then [File.dirname(p)] else []
54
+
55
+ getImagesBasePaths: ->
56
+ return [] unless @_.isObject(@getAppConfig().images)
57
+
58
+ [File.join(@getAppConfig().images.destPath, @getAppConfig().images.destFolder)]
59
+
60
+ getBasePaths: ->
61
+ return @_basePaths unless @_.isEmpty(@_basePaths)
62
+
63
+ @_basePaths = [
64
+ @getCssBasePaths(),
65
+ @getCssBasePaths(),
66
+ @getImagesBasePaths()
67
+ ]
68
+
69
+ @_basePaths = @_.uniq(@_.flatten(@_basePaths))
70
+ @_basePaths
71
+
72
+ # -----
73
+
74
+ collectFilesInBasePaths: ->
75
+ @_.inject @getBasePaths(), [], (memo, path) =>
76
+ memo = memo.concat(@g.file.expand(File.join(path, '{,*/}*')))
77
+ memo
78
+
79
+ filterRevisionedFiles: (files) ->
80
+ @_.filter files, (path) =>
81
+ @getRevisionedFileRegex().test(path) == false
82
+
83
+ filterChangedFiles: (files) ->
84
+ @_.filter files, (path) => @fileCacheHasChanged(path)
85
+
86
+ dropOldRevisionFiles: (files) ->
87
+ return unless @isEnabled() == true
88
+
89
+ @_.each files, (path) =>
90
+ f = @getMapping()[path]
91
+ @g.file.delete(f) if f && f != path && @g.file.exists(f)
92
+
93
+ createRevisionFiles: (files) ->
94
+ @_.each files, (path) =>
95
+ if @isEnabled() == true
96
+ newPath = @_digestPath(path)
97
+ @g.file.copy(path, newPath)
98
+ else
99
+ newPath = path
100
+
101
+ @getMapping()[path] = newPath
102
+
103
+ updateSourceMapLink: (files) ->
104
+ @_.each files, (path) =>
105
+ sourceMapPath = "#{path}.map"
106
+ resultFilePath = @getMapping()[path]
107
+
108
+ return unless @g.file.exists(resultFilePath)
109
+ return unless @g.file.exists(sourceMapPath)
110
+
111
+ fileContents = @g.file.read(resultFilePath, {encoding: 'utf8'})
112
+ matches = Convert.mapFileCommentRegex.exec(fileContents)
113
+
114
+ return unless matches
115
+
116
+ sourceMapFile = matches[1] || matches[2]
117
+ newSrcMap = fileContents.replace sourceMapFile, File.basename(sourceMapPath)
118
+
119
+ @g.file.write resultFilePath, newSrcMap, {encoding: 'utf8'}
120
+
121
+
122
+ updateFileChangeTimestamps: (files) ->
123
+ @_.each files, (path) => @fileCacheUpdate(path)
124
+
125
+
126
+ # ----------------------------------------------------------
127
+ # private
128
+
129
+ # @nodoc
130
+ _readMappingFile: ->
131
+ return {} unless @g.file.exists(@getMappingFilePath())
132
+
133
+ try
134
+ @_mapping = @g.file.readJSON(@getMappingFilePath())
135
+ catch e
136
+ @_mapping = {}
137
+
138
+ @_mapping or= {}
139
+ @_mapping
140
+
141
+ # @nodoc
142
+ _writeMappingFile: ->
143
+ spaces = if @getMappingFilePrettyPrint() == true then 4 else 0
144
+ mapping = JSON.stringify(@_mapping, null, spaces)
145
+
146
+ @g.file.write @getMappingFilePath(), mapping, { encoding: 'utf-8' }
147
+
148
+ # @nodoc
149
+ _digestPath: (path) ->
150
+ hash = Crypto.createHash('sha256').update(Fs.readFileSync(path)).digest('hex')
151
+ hash = hash.slice(0, 64)
152
+
153
+ fileData = File.parse(path)
154
+
155
+ if /(css\.map)$/.test(path)
156
+ newFileName = path.replace(/css\.map$/, '')
157
+ newFileName += "#{hash}.css.map"
158
+ return newFileName
159
+ else if /(js\.map)$/.test(path)
160
+ newFileName = path.replace(/js\.map$/, '')
161
+ newFileName += "#{hash}.js.map"
162
+ return newFileName
163
+ else
164
+ newFileName = "#{fileData.name}.#{hash}#{fileData.ext}"
165
+ return File.join(fileData.dir, newFileName)