card 1.91 → 1.92

Sign up to get free protection for your applications and to get access to all the features.
Files changed (779) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +80 -0
  3. data/VERSION +1 -1
  4. data/card.gemspec +29 -22
  5. data/config/i18n-tasks.yml +8 -1
  6. data/config/initializers/01_core_extensions/module.rb +46 -4
  7. data/config/initializers/02_patches/action_dispatch.rb +16 -0
  8. data/config/initializers/02_patches/active_job.rb +35 -0
  9. data/config/initializers/patches.rb +12 -0
  10. data/config/initializers/recaptcha.rb +8 -2
  11. data/config/locales/de.yml +36 -23
  12. data/config/locales/en.yml +508 -15
  13. data/db/migrate/20110511221913_require_earlier_migrations.rb +1 -1
  14. data/db/migrate/20120105203350_require_1_8_migrations.rb +1 -1
  15. data/db/migrate/20121111025347_require_1_10_migrations.rb +1 -1
  16. data/db/migrate/20121118114000_split_link_type.rb +1 -1
  17. data/db/migrate/20121118115000_update_link_type.rb +2 -2
  18. data/db/migrate/20130106052640_table_cleanup.rb +1 -1
  19. data/db/migrate/20130109015336_trunk_left.rb +1 -1
  20. data/db/migrate/20130411210957_update_codenames.rb +1 -1
  21. data/db/migrate/20140822073704_create_new_revision_tables.rb +1 -1
  22. data/db/migrate/20141001105348_move_revisions_to_actions.rb +6 -6
  23. data/db/migrate/20141121172918_rename_card_migration_table.rb +1 -1
  24. data/db/migrate/20141208132159_remove_present_from_reference_table.rb +1 -1
  25. data/db/migrate/20141216053032_better_index_names.rb +1 -1
  26. data/db/migrate/20150724210803_add_comment_to_actions.rb +1 -1
  27. data/db/migrate/20151105225559_more_space_for_db_content.rb +1 -1
  28. data/db/migrate/20160122153608_new_indeces.rb +1 -1
  29. data/db/migrate/20170908114442_create_delayed_jobs.rb +22 -0
  30. data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +1 -1
  31. data/db/migrate_core_cards/20140512155840_add_script_cards.rb +2 -2
  32. data/db/migrate_core_cards/20140629222005_add_email_cards.rb +1 -1
  33. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +1 -1
  34. data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +1 -1
  35. data/db/migrate_core_cards/20150429090551_search_card_context.rb +1 -0
  36. data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +1 -1
  37. data/db/migrate_core_cards/20150824135418_update_file_history.rb +1 -0
  38. data/db/migrate_core_cards/20161103154836_update_keys.rb +1 -1
  39. data/db/migrate_core_cards/20170209132834_email_test_context.rb +1 -1
  40. data/db/migrate_core_cards/20170830210517_correct_signup_success_message.rb +10 -0
  41. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/bootstrap_default/_bootswatch.scss +0 -0
  42. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/bootstrap_default/_variables.scss +0 -0
  43. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cerulean/_bootswatch.scss +0 -0
  44. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cerulean/_variables.scss +0 -0
  45. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cerulean/thumbnail.png +0 -0
  46. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cosmo/_bootswatch.scss +0 -0
  47. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cosmo/_variables.scss +0 -0
  48. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cosmo/thumbnail.png +0 -0
  49. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cyborg/_bootswatch.scss +0 -0
  50. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cyborg/_variables.scss +0 -0
  51. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/cyborg/thumbnail.png +0 -0
  52. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/darkly/_bootswatch.scss +0 -0
  53. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/darkly/_variables.scss +0 -0
  54. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/darkly/thumbnail.png +0 -0
  55. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/flatly/_bootswatch.scss +0 -0
  56. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/flatly/_variables.scss +0 -0
  57. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/flatly/thumbnail.png +0 -0
  58. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/journal/_bootswatch.scss +0 -0
  59. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/journal/_variables.scss +0 -0
  60. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/journal/thumbnail.png +0 -0
  61. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/litera/_bootswatch.scss +0 -0
  62. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/litera/_variables.scss +0 -0
  63. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/litera/thumbnail.png +0 -0
  64. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lumen/_bootswatch.scss +0 -0
  65. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lumen/_variables.scss +0 -0
  66. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lumen/thumbnail.png +0 -0
  67. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lux/_bootswatch.scss +0 -0
  68. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lux/_variables.scss +0 -0
  69. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/lux/thumbnail.png +0 -0
  70. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/materia/_bootswatch.scss +0 -0
  71. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/materia/_variables.scss +0 -0
  72. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/materia/thumbnail.png +0 -0
  73. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/minty/_bootswatch.scss +0 -0
  74. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/minty/_variables.scss +0 -0
  75. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/minty/thumbnail.png +0 -0
  76. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/paper/_bootswatch.scss +0 -0
  77. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/paper/_variables.scss +0 -0
  78. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/pulse/_bootswatch.scss +0 -0
  79. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/pulse/_variables.scss +0 -0
  80. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/pulse/thumbnail.png +0 -0
  81. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/readable/_bootswatch.scss +0 -0
  82. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/readable/_variables.scss +0 -0
  83. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/sandstone/_bootswatch.scss +0 -0
  84. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/sandstone/_variables.scss +0 -0
  85. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/sandstone/thumbnail.png +0 -0
  86. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/simplex/_bootswatch.scss +0 -0
  87. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/simplex/_variables.scss +0 -0
  88. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/simplex/thumbnail.png +0 -0
  89. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/slate/_bootswatch.scss +0 -0
  90. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/slate/_variables.scss +0 -0
  91. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/slate/thumbnail.png +0 -0
  92. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/solar/_bootswatch.scss +0 -0
  93. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/solar/_variables.scss +0 -0
  94. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/solar/thumbnail.png +0 -0
  95. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/spacelab/_bootswatch.scss +0 -0
  96. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/spacelab/_variables.scss +0 -0
  97. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/spacelab/thumbnail.png +0 -0
  98. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/superhero/_bootswatch.scss +0 -0
  99. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/superhero/_variables.scss +0 -0
  100. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/superhero/thumbnail.png +0 -0
  101. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/united/_bootswatch.scss +0 -0
  102. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/united/_variables.scss +0 -0
  103. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/united/thumbnail.png +0 -0
  104. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/_bootswatch.scss +0 -0
  105. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/_full.scss +0 -0
  106. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/_variables.scss +0 -0
  107. data/db/migrate_core_cards/data/{b4_themes → b4_alpha_themes}/yeti/thumbnail.png +0 -0
  108. data/db/migrate_core_cards/data/b4_beta_themes/bootstrap_default/_bootswatch.scss +0 -0
  109. data/db/migrate_core_cards/data/b4_beta_themes/bootstrap_default/_variables.scss +961 -0
  110. data/db/migrate_core_cards/data/b4_beta_themes/cerulean/_bootswatch.scss +67 -0
  111. data/db/migrate_core_cards/data/b4_beta_themes/cerulean/_variables.scss +961 -0
  112. data/db/migrate_core_cards/data/b4_beta_themes/cerulean/thumbnail.png +0 -0
  113. data/db/migrate_core_cards/data/b4_beta_themes/cosmo/_bootswatch.scss +45 -0
  114. data/db/migrate_core_cards/data/b4_beta_themes/cosmo/_variables.scss +961 -0
  115. data/db/migrate_core_cards/data/b4_beta_themes/cosmo/thumbnail.png +0 -0
  116. data/db/migrate_core_cards/data/b4_beta_themes/cyborg/_bootswatch.scss +141 -0
  117. data/db/migrate_core_cards/data/b4_beta_themes/cyborg/_variables.scss +961 -0
  118. data/db/migrate_core_cards/data/b4_beta_themes/cyborg/thumbnail.png +0 -0
  119. data/db/migrate_core_cards/data/b4_beta_themes/darkly/_bootswatch.scss +142 -0
  120. data/db/migrate_core_cards/data/b4_beta_themes/darkly/_variables.scss +961 -0
  121. data/db/migrate_core_cards/data/b4_beta_themes/darkly/thumbnail.png +0 -0
  122. data/db/migrate_core_cards/data/b4_beta_themes/flatly/_bootswatch.scss +107 -0
  123. data/db/migrate_core_cards/data/b4_beta_themes/flatly/_variables.scss +961 -0
  124. data/db/migrate_core_cards/data/b4_beta_themes/flatly/thumbnail.png +0 -0
  125. data/db/migrate_core_cards/data/b4_beta_themes/journal/_bootswatch.scss +69 -0
  126. data/db/migrate_core_cards/data/b4_beta_themes/journal/_variables.scss +961 -0
  127. data/db/migrate_core_cards/data/b4_beta_themes/journal/thumbnail.png +0 -0
  128. data/db/migrate_core_cards/data/b4_beta_themes/litera/_bootswatch.scss +130 -0
  129. data/db/migrate_core_cards/data/b4_beta_themes/litera/_variables.scss +961 -0
  130. data/db/migrate_core_cards/data/b4_beta_themes/litera/thumbnail.png +0 -0
  131. data/db/migrate_core_cards/data/b4_beta_themes/lumen/_bootswatch.scss +294 -0
  132. data/db/migrate_core_cards/data/b4_beta_themes/lumen/_variables.scss +961 -0
  133. data/db/migrate_core_cards/data/b4_beta_themes/lumen/thumbnail.png +0 -0
  134. data/db/migrate_core_cards/data/b4_beta_themes/lux/_bootswatch.scss +111 -0
  135. data/db/migrate_core_cards/data/b4_beta_themes/lux/_variables.scss +961 -0
  136. data/db/migrate_core_cards/data/b4_beta_themes/lux/thumbnail.png +0 -0
  137. data/db/migrate_core_cards/data/b4_beta_themes/materia/_bootswatch.scss +610 -0
  138. data/db/migrate_core_cards/data/b4_beta_themes/materia/_variables.scss +961 -0
  139. data/db/migrate_core_cards/data/b4_beta_themes/materia/thumbnail.png +0 -0
  140. data/db/migrate_core_cards/data/b4_beta_themes/minty/_bootswatch.scss +85 -0
  141. data/db/migrate_core_cards/data/b4_beta_themes/minty/_variables.scss +961 -0
  142. data/db/migrate_core_cards/data/b4_beta_themes/minty/thumbnail.png +0 -0
  143. data/db/migrate_core_cards/data/b4_beta_themes/paper/_bootswatch.scss +607 -0
  144. data/db/migrate_core_cards/data/b4_beta_themes/paper/_variables.scss +861 -0
  145. data/db/migrate_core_cards/data/b4_beta_themes/pulse/_bootswatch.scss +122 -0
  146. data/db/migrate_core_cards/data/b4_beta_themes/pulse/_variables.scss +961 -0
  147. data/db/migrate_core_cards/data/b4_beta_themes/pulse/thumbnail.png +0 -0
  148. data/db/migrate_core_cards/data/b4_beta_themes/readable/_bootswatch.scss +174 -0
  149. data/db/migrate_core_cards/data/b4_beta_themes/readable/_variables.scss +861 -0
  150. data/db/migrate_core_cards/data/b4_beta_themes/sandstone/_bootswatch.scss +152 -0
  151. data/db/migrate_core_cards/data/b4_beta_themes/sandstone/_variables.scss +961 -0
  152. data/db/migrate_core_cards/data/b4_beta_themes/sandstone/thumbnail.png +0 -0
  153. data/db/migrate_core_cards/data/b4_beta_themes/simplex/_bootswatch.scss +103 -0
  154. data/db/migrate_core_cards/data/b4_beta_themes/simplex/_variables.scss +961 -0
  155. data/db/migrate_core_cards/data/b4_beta_themes/simplex/thumbnail.png +0 -0
  156. data/db/migrate_core_cards/data/b4_beta_themes/slate/_bootswatch.scss +274 -0
  157. data/db/migrate_core_cards/data/b4_beta_themes/slate/_variables.scss +961 -0
  158. data/db/migrate_core_cards/data/b4_beta_themes/slate/thumbnail.png +0 -0
  159. data/db/migrate_core_cards/data/b4_beta_themes/solar/_bootswatch.scss +45 -0
  160. data/db/migrate_core_cards/data/b4_beta_themes/solar/_variables.scss +961 -0
  161. data/db/migrate_core_cards/data/b4_beta_themes/solar/thumbnail.png +0 -0
  162. data/db/migrate_core_cards/data/b4_beta_themes/spacelab/_bootswatch.scss +125 -0
  163. data/db/migrate_core_cards/data/b4_beta_themes/spacelab/_variables.scss +961 -0
  164. data/db/migrate_core_cards/data/b4_beta_themes/spacelab/thumbnail.png +0 -0
  165. data/db/migrate_core_cards/data/b4_beta_themes/superhero/_bootswatch.scss +136 -0
  166. data/db/migrate_core_cards/data/b4_beta_themes/superhero/_variables.scss +961 -0
  167. data/db/migrate_core_cards/data/b4_beta_themes/superhero/thumbnail.png +0 -0
  168. data/db/migrate_core_cards/data/b4_beta_themes/united/_bootswatch.scss +32 -0
  169. data/db/migrate_core_cards/data/b4_beta_themes/united/_variables.scss +961 -0
  170. data/db/migrate_core_cards/data/b4_beta_themes/united/thumbnail.png +0 -0
  171. data/db/migrate_core_cards/data/b4_beta_themes/variables/_variables.scss +0 -0
  172. data/db/migrate_core_cards/data/b4_beta_themes/yeti/_bootswatch.scss +304 -0
  173. data/db/migrate_core_cards/data/b4_beta_themes/yeti/_full.scss +9921 -0
  174. data/db/migrate_core_cards/data/b4_beta_themes/yeti/_variables.scss +961 -0
  175. data/db/migrate_core_cards/data/b4_beta_themes/yeti/thumbnail.png +0 -0
  176. data/db/migrate_core_cards/data/cards.yml +2 -2
  177. data/db/migrate_core_cards/data/cards/*header +2 -2
  178. data/db/schema.rb +89 -106
  179. data/db/seed/new/card_actions.yml +2146 -1922
  180. data/db/seed/new/card_acts.yml +2 -248
  181. data/db/seed/new/card_changes.yml +1 -32341
  182. data/db/seed/new/card_references.yml +1162 -980
  183. data/db/seed/new/cards.yml +23244 -14385
  184. data/db/seed/test/fixtures/card_actions.yml +3459 -3011
  185. data/db/seed/test/fixtures/card_acts.yml +470 -608
  186. data/db/seed/test/fixtures/card_changes.yml +109 -37619
  187. data/db/seed/test/fixtures/card_references.yml +2264 -1865
  188. data/db/seed/test/fixtures/cards.yml +26422 -16915
  189. data/db/seed/test/seed.rb +247 -179
  190. data/db/seed_consts.rb +10 -0
  191. data/db/seeds.rb +1 -6
  192. data/db/version.txt +1 -1
  193. data/db/version_core_cards.txt +1 -1
  194. data/lib/active_record/connection_adapters_ext.rb +1 -1
  195. data/lib/application_job.rb +2 -0
  196. data/lib/application_record.rb +3 -0
  197. data/lib/card.rb +77 -13
  198. data/lib/card/act_manager.rb +3 -0
  199. data/lib/card/act_manager/stage_director.rb +3 -38
  200. data/lib/card/act_manager/stage_director/phases.rb +39 -0
  201. data/lib/card/codename.rb +15 -9
  202. data/lib/card/content.rb +4 -0
  203. data/lib/card/content/chunk.rb +4 -0
  204. data/lib/card/env.rb +6 -2
  205. data/lib/card/env/location_history.rb +1 -1
  206. data/lib/card/env/success.rb +5 -2
  207. data/lib/card/error.rb +3 -2
  208. data/lib/card/format.rb +13 -21
  209. data/lib/card/format/context_names.rb +40 -0
  210. data/lib/card/format/error.rb +8 -4
  211. data/lib/card/format/nest.rb +7 -7
  212. data/lib/card/format/nest/fetch.rb +1 -1
  213. data/lib/card/format/nest/mode.rb +75 -0
  214. data/lib/card/format/nest/subformat.rb +18 -5
  215. data/lib/card/format/permission.rb +1 -1
  216. data/lib/card/format/registration.rb +18 -12
  217. data/lib/card/format/render.rb +22 -11
  218. data/lib/card/migration.rb +1 -1
  219. data/lib/card/mod.rb +63 -0
  220. data/lib/card/mod/dirs.rb +73 -4
  221. data/lib/card/mod/load_strategy.rb +64 -0
  222. data/lib/card/mod/load_strategy/eval.rb +16 -0
  223. data/lib/card/mod/load_strategy/pattern_tmp_files.rb +29 -0
  224. data/lib/card/mod/load_strategy/set_binding_magic.rb +48 -0
  225. data/lib/card/mod/load_strategy/set_tmp_files.rb +33 -0
  226. data/lib/card/mod/load_strategy/tmp_files.rb +38 -0
  227. data/lib/card/mod/loader.rb +44 -129
  228. data/lib/card/mod/loader/set_loader.rb +85 -0
  229. data/lib/card/mod/loader/set_pattern_loader.rb +58 -0
  230. data/lib/card/mod/module_template.rb +67 -0
  231. data/lib/card/model/save_helper.rb +27 -4
  232. data/lib/card/name.rb +8 -10
  233. data/lib/card/name/fields_and_traits.rb +7 -5
  234. data/lib/card/name/view_name.rb +4 -4
  235. data/lib/card/query.rb +11 -5
  236. data/lib/card/query/attributes.rb +1 -1
  237. data/lib/card/query/interpretation.rb +3 -3
  238. data/lib/card/reference.rb +2 -2
  239. data/lib/card/set.rb +6 -28
  240. data/lib/card/set/advanced_api.rb +2 -2
  241. data/lib/card/set/event.rb +39 -14
  242. data/lib/card/set/helpers.rb +8 -7
  243. data/lib/card/set/i18n_scanner.rb +22 -0
  244. data/lib/card/set/i18n_scope.rb +41 -7
  245. data/lib/card/set/loader.rb +3 -52
  246. data/lib/card/set_pattern.rb +22 -38
  247. data/lib/card/subcards.rb +1 -1
  248. data/lib/card/tasks/card.rake +43 -3
  249. data/lib/card/tasks/card/migrate.rake +77 -0
  250. data/lib/card/view.rb +34 -5
  251. data/lib/card/view/cache.rb +69 -32
  252. data/lib/card/view/cache_action.rb +158 -0
  253. data/lib/card/view/options.rb +107 -57
  254. data/lib/card/view/stub.rb +46 -12
  255. data/lib/card/view/visibility.rb +3 -3
  256. data/lib/cardio.rb +9 -5
  257. data/mod/account/set/right/account.rb +2 -3
  258. data/mod/account/set/right/email.rb +4 -5
  259. data/mod/account/set/right/password.rb +2 -2
  260. data/mod/account/set/right/salt.rb +1 -1
  261. data/mod/account/set/right/status.rb +1 -1
  262. data/mod/account/set/right/token.rb +5 -5
  263. data/mod/account/set/self/account_links.rb +1 -1
  264. data/mod/account/set/self/signin.rb +7 -7
  265. data/mod/account/set/type/signup.rb +6 -4
  266. data/mod/account/set/type/user.rb +16 -15
  267. data/mod/account/spec/set/all/account_spec.rb +96 -103
  268. data/mod/account/spec/set/right/account_spec.rb +1 -1
  269. data/mod/account/spec/set/self/account_links_spec.rb +2 -2
  270. data/mod/account/spec/set/self/signin_spec.rb +1 -1
  271. data/mod/account/template/type/signup/core.haml +22 -0
  272. data/mod/admin/set/self/admin.rb +26 -4
  273. data/mod/admin/set/self/admin_info.rb +7 -2
  274. data/mod/admin/spec/set/self/admin_spec.rb +47 -30
  275. data/mod/admin/spec/set/self/version_spec.rb +2 -2
  276. data/mod/basic_formats/format/css_format.rb +9 -0
  277. data/mod/basic_formats/format/csv_format.rb +10 -0
  278. data/mod/basic_formats/format/js_format.rb +4 -0
  279. data/mod/basic_formats/format/json_format.rb +15 -0
  280. data/mod/basic_formats/format/xml_format.rb +4 -0
  281. data/mod/basic_formats/set/all/all_csv.rb +1 -1
  282. data/mod/basic_formats/set/all/base.rb +17 -9
  283. data/mod/basic_formats/set/all/json.rb +1 -1
  284. data/mod/basic_formats/set/self/01_head/javascript.rb +11 -7
  285. data/mod/basic_formats/set/self/head.rb +3 -2
  286. data/{db/migrate_core_cards/20170719163708_update_bootswatch_themes.rb → mod/bootstrap/db/migrate_cards/20170719163701_update_bootswatch_themes.rb} +1 -1
  287. data/{db/migrate_core_cards → mod/bootstrap/db/migrate_cards}/20170726111053_add_bootstrap_mixins.rb +0 -0
  288. data/{db/migrate_core_cards → mod/bootstrap/db/migrate_cards}/20170726145012_select2.rb +0 -0
  289. data/mod/bootstrap/file/cerulean_skin_image/image-icon.png +0 -0
  290. data/mod/bootstrap/file/cerulean_skin_image/image-large.png +0 -0
  291. data/mod/bootstrap/file/cerulean_skin_image/image-medium.png +0 -0
  292. data/mod/bootstrap/file/cerulean_skin_image/image-small.png +0 -0
  293. data/mod/bootstrap/file/cosmo_skin_image/image-icon.png +0 -0
  294. data/mod/bootstrap/file/cosmo_skin_image/image-large.png +0 -0
  295. data/mod/bootstrap/file/cosmo_skin_image/image-medium.png +0 -0
  296. data/mod/bootstrap/file/cosmo_skin_image/image-small.png +0 -0
  297. data/mod/bootstrap/file/cyborg_skin_image/image-icon.png +0 -0
  298. data/mod/bootstrap/file/cyborg_skin_image/image-large.png +0 -0
  299. data/mod/bootstrap/file/cyborg_skin_image/image-medium.png +0 -0
  300. data/mod/bootstrap/file/cyborg_skin_image/image-small.png +0 -0
  301. data/mod/bootstrap/file/darkly_skin_image/image-icon.png +0 -0
  302. data/mod/bootstrap/file/darkly_skin_image/image-large.png +0 -0
  303. data/mod/bootstrap/file/darkly_skin_image/image-medium.png +0 -0
  304. data/mod/bootstrap/file/darkly_skin_image/image-small.png +0 -0
  305. data/mod/bootstrap/file/flatly_skin_image/image-icon.png +0 -0
  306. data/mod/bootstrap/file/flatly_skin_image/image-large.png +0 -0
  307. data/mod/bootstrap/file/flatly_skin_image/image-medium.png +0 -0
  308. data/mod/bootstrap/file/flatly_skin_image/image-small.png +0 -0
  309. data/mod/bootstrap/file/journal_skin_image/image-icon.png +0 -0
  310. data/mod/bootstrap/file/journal_skin_image/image-large.png +0 -0
  311. data/mod/bootstrap/file/journal_skin_image/image-medium.png +0 -0
  312. data/mod/bootstrap/file/journal_skin_image/image-small.png +0 -0
  313. data/mod/bootstrap/file/litera_skin_image/image-icon.png +0 -0
  314. data/mod/bootstrap/file/litera_skin_image/image-large.png +0 -0
  315. data/mod/bootstrap/file/litera_skin_image/image-medium.png +0 -0
  316. data/mod/bootstrap/file/litera_skin_image/image-original.png +0 -0
  317. data/mod/bootstrap/file/litera_skin_image/image-small.png +0 -0
  318. data/mod/bootstrap/file/lumen_skin_image/image-icon.png +0 -0
  319. data/mod/bootstrap/file/lumen_skin_image/image-large.png +0 -0
  320. data/mod/bootstrap/file/lumen_skin_image/image-medium.png +0 -0
  321. data/mod/bootstrap/file/lumen_skin_image/image-small.png +0 -0
  322. data/mod/bootstrap/file/lux_skin_image/image-icon.png +0 -0
  323. data/mod/bootstrap/file/lux_skin_image/image-large.png +0 -0
  324. data/mod/bootstrap/file/lux_skin_image/image-medium.png +0 -0
  325. data/mod/bootstrap/file/lux_skin_image/image-original.png +0 -0
  326. data/mod/bootstrap/file/lux_skin_image/image-small.png +0 -0
  327. data/mod/bootstrap/file/materia_skin_image/image-icon.png +0 -0
  328. data/mod/bootstrap/file/materia_skin_image/image-large.png +0 -0
  329. data/mod/bootstrap/file/materia_skin_image/image-medium.png +0 -0
  330. data/mod/bootstrap/file/materia_skin_image/image-original.png +0 -0
  331. data/mod/bootstrap/file/materia_skin_image/image-small.png +0 -0
  332. data/mod/bootstrap/file/minty_skin_image/image-icon.png +0 -0
  333. data/mod/bootstrap/file/minty_skin_image/image-large.png +0 -0
  334. data/mod/bootstrap/file/minty_skin_image/image-medium.png +0 -0
  335. data/mod/bootstrap/file/minty_skin_image/image-original.png +0 -0
  336. data/mod/bootstrap/file/minty_skin_image/image-small.png +0 -0
  337. data/mod/bootstrap/file/pulse_skin_image/image-icon.png +0 -0
  338. data/mod/bootstrap/file/pulse_skin_image/image-large.png +0 -0
  339. data/mod/bootstrap/file/pulse_skin_image/image-medium.png +0 -0
  340. data/mod/bootstrap/file/pulse_skin_image/image-original.png +0 -0
  341. data/mod/bootstrap/file/pulse_skin_image/image-small.png +0 -0
  342. data/mod/bootstrap/file/sandstone_skin_image/image-icon.png +0 -0
  343. data/mod/bootstrap/file/sandstone_skin_image/image-large.png +0 -0
  344. data/mod/bootstrap/file/sandstone_skin_image/image-medium.png +0 -0
  345. data/mod/bootstrap/file/sandstone_skin_image/image-small.png +0 -0
  346. data/mod/bootstrap/file/simplex_skin_image/image-icon.png +0 -0
  347. data/mod/bootstrap/file/simplex_skin_image/image-large.png +0 -0
  348. data/mod/bootstrap/file/simplex_skin_image/image-medium.png +0 -0
  349. data/mod/bootstrap/file/simplex_skin_image/image-small.png +0 -0
  350. data/mod/bootstrap/file/slate_skin_image/image-icon.png +0 -0
  351. data/mod/bootstrap/file/slate_skin_image/image-large.png +0 -0
  352. data/mod/bootstrap/file/slate_skin_image/image-medium.png +0 -0
  353. data/mod/bootstrap/file/slate_skin_image/image-small.png +0 -0
  354. data/mod/bootstrap/file/solar_skin_image/image-icon.png +0 -0
  355. data/mod/bootstrap/file/solar_skin_image/image-large.png +0 -0
  356. data/mod/bootstrap/file/solar_skin_image/image-medium.png +0 -0
  357. data/mod/bootstrap/file/solar_skin_image/image-original.png +0 -0
  358. data/mod/bootstrap/file/solar_skin_image/image-small.png +0 -0
  359. data/mod/bootstrap/file/spacelab_skin_image/image-icon.png +0 -0
  360. data/mod/bootstrap/file/spacelab_skin_image/image-large.png +0 -0
  361. data/mod/bootstrap/file/spacelab_skin_image/image-medium.png +0 -0
  362. data/mod/bootstrap/file/spacelab_skin_image/image-small.png +0 -0
  363. data/mod/bootstrap/file/superhero_skin_image/image-icon.png +0 -0
  364. data/mod/bootstrap/file/superhero_skin_image/image-large.png +0 -0
  365. data/mod/bootstrap/file/superhero_skin_image/image-medium.png +0 -0
  366. data/mod/bootstrap/file/superhero_skin_image/image-small.png +0 -0
  367. data/mod/bootstrap/file/united_skin_image/image-icon.png +0 -0
  368. data/mod/bootstrap/file/united_skin_image/image-large.png +0 -0
  369. data/mod/bootstrap/file/united_skin_image/image-medium.png +0 -0
  370. data/mod/bootstrap/file/united_skin_image/image-small.png +0 -0
  371. data/mod/bootstrap/file/yeti_skin_image/image-icon.png +0 -0
  372. data/mod/bootstrap/file/yeti_skin_image/image-large.png +0 -0
  373. data/mod/bootstrap/file/yeti_skin_image/image-medium.png +0 -0
  374. data/mod/bootstrap/file/yeti_skin_image/image-small.png +0 -0
  375. data/mod/bootstrap/lib/bootstrap/basic_tags.rb +3 -3
  376. data/mod/bootstrap/lib/bootstrap/component.rb +124 -37
  377. data/mod/bootstrap/lib/bootstrap/component/carousel.rb +68 -0
  378. data/mod/bootstrap/lib/bootstrap/component/form.rb +49 -16
  379. data/mod/bootstrap/lib/bootstrap/component/horizontal_form.rb +35 -10
  380. data/mod/bootstrap/lib/bootstrap/component/layout.rb +10 -2
  381. data/mod/bootstrap/lib/bootstrap/component/panel.rb +4 -4
  382. data/mod/bootstrap/lib/bootstrap/old_component.rb +182 -0
  383. data/mod/bootstrap/lib/javascript/bootstrap_modal_wagn.js +1 -1
  384. data/mod/bootstrap/set/all/bootstrap/accordion.rb +10 -10
  385. data/mod/bootstrap/set/all/bootstrap/helper.rb +2 -0
  386. data/mod/bootstrap/set/all/bootstrap/tabs.rb +1 -1
  387. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_builder_spec.rb +24 -14
  388. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_spec.rb +2 -2
  389. data/mod/bootstrap/spec/set/all/bootstrap/carousel_spec.rb +65 -0
  390. data/mod/bootstrap/spec/set/all/bootstrap/form_spec.rb +4 -44
  391. data/mod/bootstrap/spec/set/all/bootstrap/horizontal_form_spec.rb +46 -0
  392. data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +85 -91
  393. data/mod/carrierwave/lib/carrier_wave/file_card_uploader.rb +7 -1
  394. data/mod/carrierwave/set/abstract/attachment/paths.rb +2 -2
  395. data/mod/carrierwave/set/abstract/attachment/upload_cache.rb +10 -3
  396. data/mod/carrierwave/set/type/file.rb +5 -5
  397. data/mod/carrierwave/set/type/image.rb +4 -4
  398. data/mod/carrierwave/spec/lib/carrier_wave/file_card_uploader_spec.rb +1 -0
  399. data/mod/carrierwave/spec/set/type/file/bucket_config_spec.rb +90 -0
  400. data/mod/carrierwave/spec/set/type/file_spec.rb +41 -99
  401. data/mod/core/chunk/link.rb +1 -2
  402. data/mod/core/chunk/nest.rb +1 -1
  403. data/mod/core/chunk/reference.rb +1 -1
  404. data/mod/core/chunk/view_stub.rb +8 -0
  405. data/mod/core/format/html_format.rb +9 -3
  406. data/mod/core/set/abstract/code_file.rb +1 -1
  407. data/mod/core/set/all/actify.rb +34 -0
  408. data/mod/core/set/all/assign_attributes.rb +13 -0
  409. data/mod/core/set/all/cache.rb +96 -0
  410. data/mod/core/set/all/collection.rb +16 -8
  411. data/mod/core/set/all/{event.rb → event_conditions.rb} +1 -1
  412. data/mod/core/set/all/fetch.rb +43 -315
  413. data/mod/core/set/all/fetch_helper.rb +130 -0
  414. data/mod/core/set/all/haml.rb +13 -0
  415. data/mod/core/set/all/i18n.rb +5 -4
  416. data/mod/core/set/all/mark.rb +66 -0
  417. data/mod/core/set/all/name.rb +35 -57
  418. data/mod/core/set/all/permissions.rb +6 -3
  419. data/mod/core/set/all/references.rb +5 -5
  420. data/mod/core/set/all/rename.rb +34 -0
  421. data/mod/core/set/all/rules.rb +1 -1
  422. data/mod/core/set/all/states.rb +12 -0
  423. data/mod/core/set/all/trash.rb +4 -3
  424. data/mod/core/set/all/type.rb +4 -0
  425. data/mod/core/set/all/update_read_rules.rb +1 -1
  426. data/mod/core/spec/set/all/actify_spec.rb +9 -8
  427. data/mod/core/spec/set/all/assign_attributes_spec.rb +33 -299
  428. data/mod/core/spec/set/all/collection_spec.rb +2 -2
  429. data/mod/core/spec/set/all/event_conditions_spec.rb +54 -0
  430. data/mod/core/spec/set/all/fetch_spec.rb +21 -29
  431. data/mod/core/spec/set/all/i18n_spec.rb +17 -0
  432. data/mod/core/spec/set/all/name_spec.rb +39 -3
  433. data/mod/core/spec/set/all/name_validations_spec.rb +21 -0
  434. data/mod/core/spec/set/all/permissions/reader_rules_spec.rb +166 -0
  435. data/mod/core/spec/set/all/permissions_spec.rb +25 -171
  436. data/mod/core/spec/set/all/rename_spec.rb +171 -0
  437. data/mod/core/spec/set/all/rules2_spec.rb +45 -49
  438. data/mod/core/spec/set/all/trash_spec.rb +84 -61
  439. data/mod/history/lib/card/act.rb +5 -4
  440. data/mod/history/lib/card/act/act_renderer.rb +55 -28
  441. data/mod/history/lib/card/act/act_renderer/absolute_act_renderer.rb +10 -2
  442. data/mod/history/lib/card/act/act_renderer/relative_act_renderer.rb +8 -1
  443. data/mod/history/lib/card/action.rb +35 -3
  444. data/mod/history/lib/card/action/action_renderer.rb +3 -3
  445. data/mod/history/lib/card/action/admin.rb +17 -0
  446. data/mod/history/lib/card/change.rb +1 -1
  447. data/mod/history/set/all/act_view.rb +16 -9
  448. data/mod/history/set/all/actions.rb +35 -9
  449. data/mod/history/set/all/content_history.rb +22 -14
  450. data/mod/history/set/all/history.rb +52 -19
  451. data/mod/machines/file/all_script_machine_output/file.js +34 -16
  452. data/mod/machines/file/script_html5shiv_printshiv_machine_output/file.js +2 -0
  453. data/mod/machines/lib/card/machine.rb +49 -0
  454. data/mod/machines/lib/javascript/decko.js.coffee +9 -0
  455. data/mod/machines/lib/javascript/decko_mod.js.coffee +3 -0
  456. data/mod/machines/lib/stylesheets/style_cards.scss +10 -14
  457. data/mod/machines/set/abstract/machine.rb +1 -1
  458. data/mod/machines/spec/set/abstract/machine_spec.rb +1 -1
  459. data/mod/machines/spec/set/type/scss_spec.rb +5 -7
  460. data/mod/machines/spec/shared_examples/machine.rb +3 -3
  461. data/mod/notifications/set/all/follow.rb +2 -2
  462. data/mod/notifications/set/all/send_notifications.rb +21 -15
  463. data/mod/notifications/set/right/bcc.rb +1 -1
  464. data/mod/notifications/set/right/follow.rb +1 -1
  465. data/mod/notifications/set/right/html_message.rb +6 -0
  466. data/mod/notifications/set/right/text_message.rb +6 -0
  467. data/mod/notifications/spec/set/all/notify_spec.rb +87 -166
  468. data/mod/notifications/spec/set/type/notification_template_spec.rb +3 -2
  469. data/mod/pointer/set/abstract/02_pointer.rb +4 -4
  470. data/mod/pointer/set/abstract/02_pointer/edit.rb +41 -14
  471. data/mod/pointer/spec/set/type/pointer_spec.rb +10 -9
  472. data/mod/prosemirror_editor/lib/javascript/script_prosemirror.js +305 -143
  473. data/mod/settings/set/abstract/permission.rb +1 -1
  474. data/mod/settings/set/right/structure.rb +0 -1
  475. data/mod/settings/set/self/recent_settings.rb +4 -0
  476. data/mod/standard/file/credit_image/image-icon.png +0 -0
  477. data/mod/standard/file/credit_image/image-large.png +0 -0
  478. data/mod/standard/file/credit_image/image-medium.png +0 -0
  479. data/mod/standard/file/credit_image/image-small.png +0 -0
  480. data/mod/standard/file/favicon/image-icon.png +0 -0
  481. data/mod/standard/file/favicon/image-large.png +0 -0
  482. data/mod/standard/file/favicon/image-medium.png +0 -0
  483. data/mod/standard/file/favicon/image-small.png +0 -0
  484. data/mod/standard/file/logo/image-icon.png +0 -0
  485. data/mod/standard/file/logo/image-large.png +0 -0
  486. data/mod/standard/file/logo/image-medium.png +0 -0
  487. data/mod/standard/file/logo/image-small.png +0 -0
  488. data/mod/standard/set/abstract/search.rb +1 -1
  489. data/mod/standard/set/all/error.rb +5 -5
  490. data/mod/standard/set/all/links.rb +1 -2
  491. data/mod/standard/set/all/list_changes.rb +1 -1
  492. data/mod/standard/set/all/rich_html/content.rb +20 -14
  493. data/mod/standard/set/all/rich_html/editing.rb +9 -7
  494. data/mod/standard/set/all/rich_html/form.rb +24 -27
  495. data/mod/standard/set/all/rich_html/header.rb +1 -1
  496. data/mod/standard/set/all/rich_html/new.rb +12 -10
  497. data/mod/standard/set/all/rich_html/toolbar.rb +2 -2
  498. data/mod/standard/set/all/rich_html/wrapper.rb +4 -4
  499. data/mod/standard/set/self/activity_toolbar_button.rb +1 -1
  500. data/mod/standard/set/self/recent.rb +4 -2
  501. data/mod/standard/set/type/basic.rb +2 -2
  502. data/mod/standard/set/type/cardtype.rb +11 -8
  503. data/mod/standard/set/type/list.rb +4 -4
  504. data/mod/standard/set/type/search_type.rb +4 -4
  505. data/mod/standard/set/type/session.rb +4 -0
  506. data/mod/standard/set/type/set.rb +1 -1
  507. data/mod/standard/set/type/toggle.rb +2 -2
  508. data/mod/standard/spec/chunk/link_spec.rb +1 -1
  509. data/mod/standard/spec/set/all/history_spec.rb +31 -12
  510. data/mod/standard/spec/set/all/rich_html/form_spec.rb +2 -2
  511. data/mod/standard/spec/set/all/rich_html/toolbar_spec.rb +1 -0
  512. data/mod/standard/spec/set/type/cardtype_spec.rb +44 -1
  513. data/mod/standard/spec/set/type/email_template/email_config_spec.rb +2 -1
  514. data/mod/standard/spec/set/type/list_spec.rb +8 -3
  515. data/mod/standard/spec/set/type/listed_by_spec.rb +0 -6
  516. data/spec/config/initializers/patches/active_job_spec.rb +7 -0
  517. data/spec/lib/card/action_spec.rb +3 -2
  518. data/spec/lib/card/codename_spec.rb +7 -2
  519. data/spec/lib/card/content_spec.rb +19 -1
  520. data/spec/lib/card/format/render_spec.rb +5 -5
  521. data/spec/lib/card/i18n_spec.rb +5 -20
  522. data/spec/lib/card/{loader → mod/loader}/mod_dirs.rb +0 -0
  523. data/spec/lib/card/mod/loader/set_loader_spec.rb +19 -0
  524. data/spec/lib/card/mod/loader/set_pattern_loader_spec.rb +19 -0
  525. data/spec/lib/card/name/fields_and_traits_spec.rb +18 -0
  526. data/spec/lib/card/name_spec.rb +3 -3
  527. data/spec/lib/card/query/sorting_spec.rb +1 -1
  528. data/spec/lib/card/query_spec.rb +16 -9
  529. data/spec/lib/card/reference_spec.rb +5 -6
  530. data/spec/lib/card/set_pattern_spec.rb +4 -0
  531. data/spec/lib/card/view_cache_spec.rb +17 -0
  532. data/spec/models/card/create_spec.rb +40 -22
  533. data/spec/models/card/trash_spec.rb +8 -70
  534. data/spec/models/card_spec.rb +16 -46
  535. data/spec/spec_helper.rb +1 -3
  536. data/spec/support/card_spec_helper.rb +5 -2
  537. data/spec/support/card_spec_loader.rb +34 -6
  538. data/spec/support/helper/event_helper.rb +1 -1
  539. data/spec/support/helper/save_helper.rb +4 -0
  540. data/spec/support/helper/set_helper.rb +1 -1
  541. data/spec/support/matchers/card_matchers.rb +136 -0
  542. data/spec/support/matchers/expectations.rb +5 -0
  543. data/spec/support/matchers/file_matchers.rb +71 -0
  544. data/spec/support/matchers/negated_matchers.rb +2 -0
  545. data/spec/support/test_mods/mod1/set/all/test_set.rb +3 -0
  546. data/spec/support/test_mods/mod2/set_pattern/test_pattern.rb +0 -0
  547. data/tmpsets/set/mod001-admin/self/admin.rb +130 -0
  548. data/tmpsets/set/mod001-admin/self/admin_info.rb +110 -0
  549. data/tmpsets/set/mod001-admin/self/version.rb +15 -0
  550. data/tmpsets/set/mod002-core/abstract/code_file.rb +79 -0
  551. data/tmpsets/set/mod002-core/all/actify.rb +101 -0
  552. data/tmpsets/set/mod002-core/all/active_card.rb +42 -0
  553. data/tmpsets/set/mod002-core/all/collection.rb +313 -0
  554. data/tmpsets/set/mod002-core/all/content.rb +69 -0
  555. data/tmpsets/set/mod002-core/all/debug.rb +30 -0
  556. data/tmpsets/set/mod002-core/all/erb.rb +18 -0
  557. data/tmpsets/set/mod002-core/all/event.rb +62 -0
  558. data/tmpsets/set/mod002-core/all/export.rb +49 -0
  559. data/tmpsets/set/mod002-core/all/fetch.rb +335 -0
  560. data/tmpsets/set/mod002-core/all/haml.rb +14 -0
  561. data/tmpsets/set/mod002-core/all/initialize.rb +42 -0
  562. data/tmpsets/set/mod002-core/all/location_history.rb +15 -0
  563. data/tmpsets/set/mod002-core/all/name.rb +282 -0
  564. data/tmpsets/set/mod002-core/all/name_validations.rb +65 -0
  565. data/tmpsets/set/mod002-core/all/pattern.rb +67 -0
  566. data/tmpsets/set/mod002-core/all/permissions.rb +319 -0
  567. data/tmpsets/set/mod002-core/all/phases.rb +23 -0
  568. data/tmpsets/set/mod002-core/all/references.rb +187 -0
  569. data/tmpsets/set/mod002-core/all/rules.rb +311 -0
  570. data/tmpsets/set/mod002-core/all/stages.rb +31 -0
  571. data/tmpsets/set/mod002-core/all/states.rb +31 -0
  572. data/tmpsets/set/mod002-core/all/subcards.rb +85 -0
  573. data/tmpsets/set/mod002-core/all/templating.rb +78 -0
  574. data/tmpsets/set/mod002-core/all/tracked_attributes.rb +78 -0
  575. data/tmpsets/set/mod002-core/all/trash.rb +113 -0
  576. data/tmpsets/set/mod002-core/all/type.rb +60 -0
  577. data/tmpsets/set/mod002-core/all/update_read_rules.rb +91 -0
  578. data/tmpsets/set/mod002-core/all/utils.rb +62 -0
  579. data/tmpsets/set/mod002-core/all/view_cache.rb +16 -0
  580. data/tmpsets/set/mod003-history/all/actions.rb +60 -0
  581. data/tmpsets/set/mod003-history/all/content_history.rb +168 -0
  582. data/tmpsets/set/mod003-history/all/history.rb +408 -0
  583. data/tmpsets/set/mod004-basic_formats/all/all_css.rb +45 -0
  584. data/tmpsets/set/mod004-basic_formats/all/all_csv.rb +56 -0
  585. data/tmpsets/set/mod004-basic_formats/all/all_js.rb +13 -0
  586. data/tmpsets/set/mod004-basic_formats/all/base.rb +155 -0
  587. data/tmpsets/set/mod004-basic_formats/all/file.rb +16 -0
  588. data/tmpsets/set/mod004-basic_formats/all/json.rb +76 -0
  589. data/tmpsets/set/mod004-basic_formats/all/rss.rb +77 -0
  590. data/tmpsets/set/mod004-basic_formats/all/text.rb +13 -0
  591. data/tmpsets/set/mod004-basic_formats/self/01_head/javascript.rb +79 -0
  592. data/tmpsets/set/mod004-basic_formats/self/head.rb +101 -0
  593. data/tmpsets/set/mod005-pointer/abstract/01_pointer.rb +193 -0
  594. data/tmpsets/set/mod005-pointer/abstract/01_pointer/edit.rb +224 -0
  595. data/tmpsets/set/mod005-pointer/abstract/code_pointer.rb +16 -0
  596. data/tmpsets/set/mod005-pointer/self/script_editors.rb +8 -0
  597. data/tmpsets/set/mod005-pointer/self/script_mods.rb +8 -0
  598. data/tmpsets/set/mod005-pointer/self/script_pointer_config.rb +10 -0
  599. data/tmpsets/set/mod005-pointer/type/pointer.rb +8 -0
  600. data/tmpsets/set/mod006-ace_editor/abstract/ace_editor.rb +18 -0
  601. data/tmpsets/set/mod006-ace_editor/self/script_ace.rb +10 -0
  602. data/tmpsets/set/mod006-ace_editor/self/script_ace_config.rb +12 -0
  603. data/tmpsets/set/mod007-prosemirror_editor/abstract/prosemirror_editor.rb +14 -0
  604. data/tmpsets/set/mod007-prosemirror_editor/self/script_prosemirror.rb +10 -0
  605. data/tmpsets/set/mod007-prosemirror_editor/self/script_prosemirror_config.rb +13 -0
  606. data/tmpsets/set/mod009-solid_cache/abstract/solid_cache.rb +106 -0
  607. data/tmpsets/set/mod009-solid_cache/all/solid_cache.rb +21 -0
  608. data/tmpsets/set/mod009-solid_cache/right/solid_cache.rb +39 -0
  609. data/tmpsets/set/mod010-basic_types/type/html.rb +26 -0
  610. data/tmpsets/set/mod010-basic_types/type/plain_text.rb +19 -0
  611. data/tmpsets/set/mod011-machines/abstract/machine.rb +277 -0
  612. data/tmpsets/set/mod011-machines/abstract/machine_input.rb +83 -0
  613. data/tmpsets/set/mod011-machines/abstract/script.rb +49 -0
  614. data/tmpsets/set/mod011-machines/all/reset_machines.rb +19 -0
  615. data/tmpsets/set/mod011-machines/right/machine_cache.rb +18 -0
  616. data/tmpsets/set/mod011-machines/right/machine_input.rb +10 -0
  617. data/tmpsets/set/mod011-machines/right/machine_output.rb +47 -0
  618. data/tmpsets/set/mod011-machines/self/script_card_menu.rb +8 -0
  619. data/tmpsets/set/mod011-machines/self/script_html5shiv_printshiv.rb +8 -0
  620. data/tmpsets/set/mod011-machines/self/script_jquery.rb +8 -0
  621. data/tmpsets/set/mod011-machines/self/script_jquery_helper.rb +16 -0
  622. data/tmpsets/set/mod011-machines/self/script_slot.rb +14 -0
  623. data/tmpsets/set/mod011-machines/self/style_bootstrap_compatible.rb +8 -0
  624. data/tmpsets/set/mod011-machines/self/style_cards.rb +8 -0
  625. data/tmpsets/set/mod011-machines/self/style_jquery_ui_smoothness.rb +8 -0
  626. data/tmpsets/set/mod011-machines/type/coffee_script.rb +43 -0
  627. data/tmpsets/set/mod011-machines/type/css.rb +67 -0
  628. data/tmpsets/set/mod011-machines/type/java_script.rb +36 -0
  629. data/tmpsets/set/mod011-machines/type/scss.rb +21 -0
  630. data/tmpsets/set/mod011-machines/type/skin.rb +13 -0
  631. data/tmpsets/set/mod012-settings/abstract/permission.rb +119 -0
  632. data/tmpsets/set/mod012-settings/right/add_help.rb +18 -0
  633. data/tmpsets/set/mod012-settings/right/comment.rb +8 -0
  634. data/tmpsets/set/mod012-settings/right/create.rb +8 -0
  635. data/tmpsets/set/mod012-settings/right/default.rb +14 -0
  636. data/tmpsets/set/mod012-settings/right/delete.rb +8 -0
  637. data/tmpsets/set/mod012-settings/right/help.rb +10 -0
  638. data/tmpsets/set/mod012-settings/right/read.rb +10 -0
  639. data/tmpsets/set/mod012-settings/right/script.rb +16 -0
  640. data/tmpsets/set/mod012-settings/right/structure.rb +68 -0
  641. data/tmpsets/set/mod012-settings/right/style.rb +17 -0
  642. data/tmpsets/set/mod012-settings/right/update.rb +8 -0
  643. data/tmpsets/set/mod012-settings/self/accountable.rb +10 -0
  644. data/tmpsets/set/mod012-settings/self/add_help.rb +9 -0
  645. data/tmpsets/set/mod012-settings/self/autoname.rb +9 -0
  646. data/tmpsets/set/mod012-settings/self/captcha.rb +9 -0
  647. data/tmpsets/set/mod012-settings/self/create.rb +9 -0
  648. data/tmpsets/set/mod012-settings/self/default.rb +9 -0
  649. data/tmpsets/set/mod012-settings/self/default_html_view.rb +9 -0
  650. data/tmpsets/set/mod012-settings/self/delete.rb +9 -0
  651. data/tmpsets/set/mod012-settings/self/follow_fields.rb +9 -0
  652. data/tmpsets/set/mod012-settings/self/help.rb +9 -0
  653. data/tmpsets/set/mod012-settings/self/input.rb +11 -0
  654. data/tmpsets/set/mod012-settings/self/layout.rb +9 -0
  655. data/tmpsets/set/mod012-settings/self/on_create.rb +9 -0
  656. data/tmpsets/set/mod012-settings/self/on_delete.rb +9 -0
  657. data/tmpsets/set/mod012-settings/self/on_update.rb +9 -0
  658. data/tmpsets/set/mod012-settings/self/options.rb +11 -0
  659. data/tmpsets/set/mod012-settings/self/options_label.rb +11 -0
  660. data/tmpsets/set/mod012-settings/self/read.rb +9 -0
  661. data/tmpsets/set/mod012-settings/self/recent_settings.rb +10 -0
  662. data/tmpsets/set/mod012-settings/self/script.rb +9 -0
  663. data/tmpsets/set/mod012-settings/self/structure.rb +9 -0
  664. data/tmpsets/set/mod012-settings/self/style.rb +9 -0
  665. data/tmpsets/set/mod012-settings/self/table_of_contents.rb +9 -0
  666. data/tmpsets/set/mod012-settings/self/thanks.rb +9 -0
  667. data/tmpsets/set/mod012-settings/self/update.rb +9 -0
  668. data/tmpsets/set/mod012-settings/type/setting.rb +111 -0
  669. data/tmpsets/set/mod013-email/all/email_html.rb +11 -0
  670. data/tmpsets/set/mod013-email/all/email_text.rb +12 -0
  671. data/tmpsets/set/mod013-email/all/follow.rb +253 -0
  672. data/tmpsets/set/mod013-email/all/notify.rb +271 -0
  673. data/tmpsets/set/mod013-email/all/observer.rb +33 -0
  674. data/tmpsets/set/mod013-email/right/bcc.rb +47 -0
  675. data/tmpsets/set/mod013-email/right/cc.rb +10 -0
  676. data/tmpsets/set/mod013-email/right/follow.rb +106 -0
  677. data/tmpsets/set/mod013-email/right/follow_fields.rb +10 -0
  678. data/tmpsets/set/mod013-email/right/followers.rb +41 -0
  679. data/tmpsets/set/mod013-email/right/following.rb +65 -0
  680. data/tmpsets/set/mod013-email/right/from.rb +10 -0
  681. data/tmpsets/set/mod013-email/right/html_message.rb +10 -0
  682. data/tmpsets/set/mod013-email/right/to.rb +10 -0
  683. data/tmpsets/set/mod013-email/self/always.rb +20 -0
  684. data/tmpsets/set/mod013-email/self/created.rb +26 -0
  685. data/tmpsets/set/mod013-email/self/edited.rb +27 -0
  686. data/tmpsets/set/mod013-email/self/follow.rb +9 -0
  687. data/tmpsets/set/mod013-email/self/follow_defaults.rb +75 -0
  688. data/tmpsets/set/mod013-email/self/never.rb +20 -0
  689. data/tmpsets/set/mod013-email/type/email_template.rb +133 -0
  690. data/tmpsets/set/mod013-email/type_plus_right/user/follow.rb +180 -0
  691. data/tmpsets/set/mod014-developer/all/event_viz.rb +59 -0
  692. data/tmpsets/set/mod014-developer/all/view_viz.rb +30 -0
  693. data/tmpsets/set/mod014-developer/right/debug.rb +96 -0
  694. data/tmpsets/set/mod015-carrierwave/abstract/attachment.rb +118 -0
  695. data/tmpsets/set/mod015-carrierwave/abstract/attachment/paths.rb +57 -0
  696. data/tmpsets/set/mod015-carrierwave/abstract/attachment/storage_type.rb +326 -0
  697. data/tmpsets/set/mod015-carrierwave/abstract/attachment/upload_cache.rb +84 -0
  698. data/tmpsets/set/mod015-carrierwave/all/file_utils.rb +35 -0
  699. data/tmpsets/set/mod015-carrierwave/self/admin.rb +30 -0
  700. data/tmpsets/set/mod015-carrierwave/type/file.rb +158 -0
  701. data/tmpsets/set/mod015-carrierwave/type/image.rb +97 -0
  702. data/tmpsets/set/mod016-standard/all/comment.rb +67 -0
  703. data/tmpsets/set/mod016-standard/all/error.rb +229 -0
  704. data/tmpsets/set/mod016-standard/all/links.rb +165 -0
  705. data/tmpsets/set/mod016-standard/all/list_changes.rb +53 -0
  706. data/tmpsets/set/mod016-standard/all/rich_html/content.rb +261 -0
  707. data/tmpsets/set/mod016-standard/all/rich_html/editing.rb +247 -0
  708. data/tmpsets/set/mod016-standard/all/rich_html/form.rb +298 -0
  709. data/tmpsets/set/mod016-standard/all/rich_html/header.rb +78 -0
  710. data/tmpsets/set/mod016-standard/all/rich_html/menu.rb +154 -0
  711. data/tmpsets/set/mod016-standard/all/rich_html/modal.rb +58 -0
  712. data/tmpsets/set/mod016-standard/all/rich_html/toolbar.rb +312 -0
  713. data/tmpsets/set/mod016-standard/all/rich_html/wrapper.rb +191 -0
  714. data/tmpsets/set/mod016-standard/right/discussion.rb +10 -0
  715. data/tmpsets/set/mod016-standard/right/when_created.rb +14 -0
  716. data/tmpsets/set/mod016-standard/right/when_last_edited.rb +14 -0
  717. data/tmpsets/set/mod016-standard/rstar/rules.rb +107 -0
  718. data/tmpsets/set/mod016-standard/rstar/rules_editor.rb +371 -0
  719. data/tmpsets/set/mod016-standard/self/alerts.rb +12 -0
  720. data/tmpsets/set/mod016-standard/self/codenames.rb +7 -0
  721. data/tmpsets/set/mod016-standard/self/foot.rb +15 -0
  722. data/tmpsets/set/mod016-standard/self/navbox.rb +36 -0
  723. data/tmpsets/set/mod016-standard/self/now.rb +14 -0
  724. data/tmpsets/set/mod016-standard/self/recent.rb +34 -0
  725. data/tmpsets/set/mod016-standard/self/search.rb +71 -0
  726. data/tmpsets/set/mod016-standard/type/basic.rb +59 -0
  727. data/tmpsets/set/mod016-standard/type/cardtype.rb +81 -0
  728. data/tmpsets/set/mod016-standard/type/date.rb +15 -0
  729. data/tmpsets/set/mod016-standard/type/layout_type.rb +17 -0
  730. data/tmpsets/set/mod016-standard/type/list.rb +120 -0
  731. data/tmpsets/set/mod016-standard/type/listed_by.rb +85 -0
  732. data/tmpsets/set/mod016-standard/type/number.rb +25 -0
  733. data/tmpsets/set/mod016-standard/type/phrase.rb +10 -0
  734. data/tmpsets/set/mod016-standard/type/search_type.rb +339 -0
  735. data/tmpsets/set/mod016-standard/type/session.rb +42 -0
  736. data/tmpsets/set/mod016-standard/type/set.rb +371 -0
  737. data/tmpsets/set/mod016-standard/type/toggle.rb +19 -0
  738. data/tmpsets/set/mod016-standard/type/uri.rb +18 -0
  739. data/tmpsets/set/mod017-account/all/account.rb +72 -0
  740. data/tmpsets/set/mod017-account/right/account.rb +196 -0
  741. data/tmpsets/set/mod017-account/right/email.rb +61 -0
  742. data/tmpsets/set/mod017-account/right/password.rb +54 -0
  743. data/tmpsets/set/mod017-account/right/salt.rb +12 -0
  744. data/tmpsets/set/mod017-account/right/status.rb +16 -0
  745. data/tmpsets/set/mod017-account/right/token.rb +57 -0
  746. data/tmpsets/set/mod017-account/self/account_links.rb +72 -0
  747. data/tmpsets/set/mod017-account/self/signin.rb +165 -0
  748. data/tmpsets/set/mod017-account/type/signup.rb +175 -0
  749. data/tmpsets/set/mod017-account/type/user.rb +88 -0
  750. data/tmpsets/set/mod018-bootstrap/all/bootstrap/form.rb +42 -0
  751. data/tmpsets/set/mod018-bootstrap/all/bootstrap/helper.rb +236 -0
  752. data/tmpsets/set/mod018-bootstrap/all/bootstrap/table.rb +68 -0
  753. data/tmpsets/set/mod018-bootstrap/all/bootstrap/tabs.rb +88 -0
  754. data/tmpsets/set/mod018-bootstrap/all/bootstrap/wrapper.rb +18 -0
  755. data/tmpsets/set/mod018-bootstrap/all/rich_bootstrap.rb +13 -0
  756. data/tmpsets/set/mod018-bootstrap/self/bootstrap_cards.rb +8 -0
  757. data/tmpsets/set/mod018-bootstrap/self/bootstrap_js.rb +12 -0
  758. data/tmpsets/set/mod018-bootstrap/self/bootswatch_shared.rb +47 -0
  759. data/tmpsets/set/mod018-bootstrap/self/script_mods.rb +7 -0
  760. data/tmpsets/set/mod018-bootstrap/self/smartmenu_css.rb +12 -0
  761. data/tmpsets/set/mod018-bootstrap/self/smartmenu_js.rb +12 -0
  762. data/tmpsets/set_pattern/100-all.rb +24 -0
  763. data/tmpsets/set_pattern/101-all_plus.rb +26 -0
  764. data/tmpsets/set_pattern/102-type.rb +36 -0
  765. data/tmpsets/set_pattern/103-star.rb +28 -0
  766. data/tmpsets/set_pattern/104-rstar.rb +30 -0
  767. data/tmpsets/set_pattern/105-right.rb +33 -0
  768. data/tmpsets/set_pattern/106-type_plus_right.rb +39 -0
  769. data/tmpsets/set_pattern/107-self.rb +32 -0
  770. metadata +494 -167
  771. data/README_Developers.rdoc +0 -100
  772. data/lib/card/format/names.rb +0 -43
  773. data/lib/card/format/nest/view.rb +0 -65
  774. data/lib/card/view/fetch.rb +0 -121
  775. data/mod/core/spec/set/all/attribute_tracking_spec.rb +0 -21
  776. data/spec/models/card/cardtype_spec.rb +0 -189
  777. data/spec/models/card/type_transition_spec.rb +0 -132
  778. data/spec/models/card/validation_spec.rb +0 -34
  779. data/spec/support/matchers.rb +0 -74
@@ -1,9 +1,58 @@
1
1
  class Card
2
+
3
+ class << self
4
+ def config
5
+ Cardio.config
6
+ end
7
+
8
+ def paths
9
+ Cardio.paths
10
+ end
11
+ end
12
+
2
13
  module Mod
14
+ # Dirs objects are used to manage the load paths for card mods.
15
+ # Mods can be loaded as gems and by using directories with mod subdirectories.
16
+ #
17
+ # 1. Gemfile
18
+ # A mod gem needs a metadata attribute with { "card-mod" => "the_mod_name" }
19
+ # or the name has to start with "card-mod-".
20
+ # Then you can just add it to your Gemfile. Otherwise it won't be recognized as mod.
21
+ #
22
+ # 2. mod directory
23
+ # Give a path to a directory with mods. The mods will be loaded in alphabetical order.
24
+ # To change the load order you can add number prefixes to the mod names
25
+ # (like "01_this_first") or add a Modfile.
26
+ # In the Modfile you list all the mods you want to be loaded from that directory
27
+ # in load order with a preceding "mod" command (similar to a Gemfile).
28
+ # The mods are expected in subdirectories with the mod names.
29
+ #
30
+ # Example for a mod directory:
31
+ # # my_mod/Modfile
32
+ # mod "twitter"
33
+ # mod "cache"
34
+ #
35
+ # # directory structure
36
+ # my_mods/
37
+ # Modfile
38
+ # cache/
39
+ # set/
40
+ # all/
41
+ # my_cache.rb
42
+ # twitter/
43
+ # set/
44
+ # type/
45
+ # basic.rb
46
+ # set_pattern/
47
+ # my_pattern.rb
48
+ #
49
+ # Dir checks always for gems. You can initialize an Dirs object with an additional
50
+ # array of paths to card mod directories.
3
51
  class Dirs < Array
4
52
  attr_reader :mods
5
53
 
6
- def initialize mod_paths
54
+ # @param mod_paths [String, Array<String>] paths to directories that contain mods
55
+ def initialize mod_paths=[]
7
56
  @mods = []
8
57
  @paths = {}
9
58
  mod_paths = Array(mod_paths)
@@ -11,28 +60,35 @@ class Card
11
60
  @current_path = mp
12
61
  load_from_modfile || load_from_dir
13
62
  end
63
+ load_from_gemfile
14
64
  super()
15
65
  @mods.each do |mod_name|
16
66
  self << @paths[mod_name]
17
67
  end
18
68
  end
19
69
 
20
- # add a new mod to mod load paths
21
- def add_path mod_name
70
+ # Add a mod to mod load paths
71
+ def add_path mod_name, path=nil
22
72
  if @mods.include? mod_name
23
73
  raise Error,
24
74
  "name conflict: mod with name \"#{mod_name}\" already loaded"
25
75
  end
26
76
  @mods << mod_name
27
- @paths[mod_name] = File.join @current_path, mod_name
77
+ path ||= File.join @current_path, mod_name
78
+ @paths[mod_name] = path
28
79
  end
29
80
 
30
81
  alias_method :mod, :add_path
31
82
 
83
+ # @param mod_name [String] the name of a mod
84
+ # @return the path to mod `mod_name`
32
85
  def path mod_name
33
86
  @paths[mod_name]
34
87
  end
35
88
 
89
+ # Iterate over each mod directory
90
+ # @param type [Symbol] the type of modification like set, set_pattern, or format.
91
+ # It is attached as subdirectory.
36
92
  def each type=nil
37
93
  super() do |path|
38
94
  dirname = type ? File.join(path, type.to_s) : path
@@ -72,6 +128,19 @@ class Card
72
128
  end.compact
73
129
  end
74
130
 
131
+ def load_from_gemfile
132
+ Bundler.definition.specs.map do |s|
133
+ mod_name =
134
+ if s.name =~ /^decko-mod-(.+)$/
135
+ $1
136
+ else
137
+ s.metadata["card-mod"]
138
+ end
139
+ next unless mod_name
140
+ add_path $1, s.full_gem_path
141
+ end.compact
142
+ end
143
+
75
144
  def tmp_dir modname, type
76
145
  index = @mods.index modname
77
146
  File.join Card.paths["tmp/#{type}"].first,
@@ -0,0 +1,64 @@
1
+ require_relative "load_strategy/eval"
2
+ require_relative "load_strategy/pattern_tmp_files"
3
+ require_relative "load_strategy/set_binding_magic"
4
+ require_relative "load_strategy/set_tmp_files"
5
+ require_relative "load_strategy/tmp_files"
6
+
7
+ class Card
8
+ module Mod
9
+ # Shared code for the three different load strategies: Eval, TmpFiles and BindingMagic
10
+ class LoadStrategy
11
+
12
+ def self.klass symbol
13
+ case symbol
14
+ when :tmp_files then TmpFiles
15
+ when :binding_magic then BindingMagic
16
+ else Eval
17
+ end
18
+ end
19
+
20
+ def initialize mod_dirs, loader
21
+ @mod_dirs = mod_dirs
22
+ @loader = loader
23
+ end
24
+
25
+ private
26
+
27
+ def module_type
28
+ @loader.class.module_type
29
+ end
30
+
31
+ def module_template
32
+ @loader.class.module_class_template
33
+ end
34
+
35
+ def each_file &block
36
+ @mod_dirs.each module_type do |base_dir|
37
+ if module_type == :set
38
+ # I'm not sure if we really need this ordering by pattern for sets -pk
39
+ Card::Set::Pattern.in_load_order.each do |pattern|
40
+ each_file_in_dir base_dir, pattern.to_s, &block
41
+ end
42
+ else
43
+ each_file_in_dir base_dir, &block
44
+ end
45
+ end
46
+ end
47
+
48
+ def each_file_in_dir base_dir, subdir=nil
49
+ pattern = File.join(*[base_dir, subdir, "**/*.rb"].compact)
50
+ Dir.glob(pattern).sort.each do |abs_path|
51
+ rel_path = abs_path.sub("#{base_dir}/", "")
52
+ const_parts = parts_from_path rel_path
53
+ yield abs_path, const_parts
54
+ end
55
+ end
56
+
57
+ def parts_from_path path
58
+ # remove file extension and number prefixes
59
+ parts = path.gsub(/\.rb/, "").gsub(%r{(?<=\A|/)\d+_}, "").split(File::SEPARATOR)
60
+ parts.map &:camelize
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,16 @@
1
+ class Card
2
+ module Mod
3
+ class LoadStrategy
4
+ # Put everything for the module definition in one string and the evaluate
5
+ # it immediately with ruby's eval method.
6
+ class Eval < LoadStrategy
7
+ def load_modules
8
+ each_file do |abs_path, module_names|
9
+ template = module_template.new module_names, abs_path
10
+ template.build
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ class Card
2
+ module Mod
3
+ class LoadStrategy
4
+ # The {TmpFiles} load strategy version for set pattern modules/
5
+ class PatternTmpFiles < TmpFiles
6
+ private
7
+
8
+ def load_tmp_files
9
+ load_dir tmp_dir
10
+ end
11
+
12
+ def generate_tmp_files
13
+ prepare_tmp_dir "tmp/set_pattern"
14
+ seq = 100
15
+ each_file do |abs_path, const_parts|
16
+ pattern = const_parts.first
17
+ to_file = "#{tmp_dir}/#{seq}-#{pattern}.rb"
18
+ write_tmp_file abs_path, to_file, const_parts
19
+ seq += 1
20
+ end
21
+ end
22
+
23
+ def tmp_dir
24
+ Card.paths["tmp/set_pattern"].first
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,48 @@
1
+ class Card
2
+ module Mod
3
+ # Tries to build the module with as little string evaluation as possible.
4
+ # The problem here is that in methods like `module_eval` the Module.nesting
5
+ # list gets lost so all references in mod files to constants in the
6
+ # Card::Set namespace don't work.
7
+ # The solution is to construct a binding with the right Module.nesting list.
8
+ class BindingMagic < LoadStrategy
9
+ def load_modules
10
+ each_file do |abs_path, const_parts|
11
+ sm = SetModule.new const_parts, abs_path
12
+
13
+ set_module = sm.to_const
14
+ set_module.extend Card::Set unless sm.helper_module?
15
+ set_module.module_eval do
16
+ def self.source_location
17
+ abs_path
18
+ end
19
+ end
20
+
21
+ # Since module_eval doesn't take a binding argument, we have to
22
+ # execute module_eval with eval.
23
+ eval "#{set_module}.module_eval ::File.read('#{abs_path}'), '#{abs_path}'",
24
+ module_path_binding(set_module)
25
+ end
26
+ end
27
+
28
+ # Get a binding with a Module.nesting list that contains the
29
+ # given module and all of its containing modules as described
30
+ # by its fully qualified name in inner-to-outer order.
31
+ def module_path_binding mod
32
+ raise ArgumentError.new(
33
+ "Can't determine path nesting for a module with a blank name"
34
+ ) if mod.name.to_s.empty?
35
+ m, b = nil, TOPLEVEL_BINDING
36
+ mod.name.split('::').each do |part|
37
+ m, b =
38
+ eval(
39
+ "[ #{part} , #{part}.module_eval('binding') ]",
40
+ b
41
+ )
42
+ end
43
+ raise "Module found at name path not same as specified module" unless m == mod
44
+ b
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,33 @@
1
+ class Card
2
+ module Mod
3
+ class LoadStrategy
4
+ # The {TmpFiles} load strategy version for set modules
5
+ class SetTmpFiles < LoadStrategy::TmpFiles
6
+
7
+ private
8
+
9
+ def generate_tmp_files
10
+ return unless prepare_tmp_dir "tmp/set"
11
+ @mod_dirs.each_with_tmp(:set) do |mod_dir, mod_tmp_dir|
12
+ Dir.mkdir mod_tmp_dir
13
+ Dir.glob("#{mod_dir}/**/*.rb").each do |abs_path|
14
+ rel_path = abs_path.sub "#{mod_dir}/", ""
15
+ tmp_filename = File.join mod_tmp_dir, rel_path
16
+ const_parts = parts_from_path rel_path
17
+ write_tmp_file abs_path, tmp_filename, const_parts
18
+ end
19
+ end
20
+ end
21
+
22
+ def load_tmp_files
23
+ @mod_dirs.each_tmp(:set) do |set_tmp_dir|
24
+ Card::Set::Pattern.in_load_order.each do |pattern|
25
+ pattern_dir = "#{set_tmp_dir}/#{pattern}"
26
+ Loader.load_dir "#{pattern_dir}/**" if Dir.exist? pattern_dir
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ class Card
2
+ module Mod
3
+ class LoadStrategy
4
+ # LoadStrategy for mod modules. It writes the code to tmp files
5
+ # and then loads the tmp files. (deprecated)
6
+ class TmpFiles < LoadStrategy
7
+ def load_modules
8
+ generate_tmp_files if rewrite_tmp_files?
9
+ load_temp_files
10
+ end
11
+
12
+ private
13
+
14
+ def prepare_tmp_dir path
15
+ return unless rewrite_tmp_files?
16
+ p = Card.paths[path]
17
+ FileUtils.rm_rf p.first, secure: true if p.existent.first
18
+ Dir.mkdir p.first
19
+ end
20
+
21
+ def rewrite_tmp_files?
22
+ if defined?(@rewrite)
23
+ @rewrite
24
+ else
25
+ @rewrite = !(Rails.env.production? &&
26
+ Card.paths["tmp/set"].existent.first)
27
+ end
28
+ end
29
+
30
+ def write_tmp_file from_file, to_file, const_parts
31
+ FileUtils.mkdir_p File.dirname(to_file)
32
+ mt = module_template.new const_parts, from_file
33
+ File.write to_file, mt.to_s
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -2,37 +2,59 @@
2
2
 
3
3
  require_dependency "card/set"
4
4
  require_dependency "card/set_pattern"
5
+ require_dependency "card/mod/loader/set_loader"
6
+ require_dependency "card/mod/loader/set_pattern_loader"
5
7
 
6
8
  class Card
7
- class << self
8
- def config
9
- Cardio.config
10
- end
9
+ module Mod
10
+ # Card::Mod::Loader is used to load all part of a mod,
11
+ # i.e. initializers, patterns, formats, chunks, layouts and sets
12
+
13
+ # A Loader object provides tools for generating and loading sets and set patterns,
14
+ # each of which are typically written using a Decko DSL.
15
+
16
+ # The mods are given by a Mod::Dirs object.
17
+ # SetLoader can use three different strategies to load the set modules.
18
+
19
+ class Loader
20
+ def initialize(load_strategy=:eval, mod_dirs=nil)
21
+ mod_dirs ||= Mod.dirs
22
+ klass = load_strategy_class load_strategy
23
+ @load_strategy = klass.new mod_dirs, self
24
+ end
25
+
26
+ def load_strategy_class load_strategy
27
+ case load_strategy
28
+ when :tmp_files then LoadStrategy::TmpFiles
29
+ when :binding_magic then LoadStrategy::BindingMagic
30
+ else LoadStrategy::Eval
31
+ end
32
+ end
33
+
34
+ def load
35
+ @load_strategy.load_modules
36
+ end
11
37
 
12
- def paths
13
- Cardio.paths
14
- end
15
- end
16
38
 
17
- module Mod
18
- module Loader
19
39
  class << self
40
+ attr_reader :module_type
41
+
20
42
  def load_mods
21
43
  load_initializers
22
- load_set_patterns
44
+ SetPatternLoader.new.load
23
45
  load_formats
24
- load_sets
46
+ SetLoader.new.load
25
47
  end
26
48
 
27
49
  def load_chunks
28
- mod_dirs.each(:chunk) do |dir|
50
+ Mod.dirs.each(:chunk) do |dir|
29
51
  load_dir dir
30
52
  end
31
53
  end
32
54
 
33
55
  def load_layouts
34
56
  hash = {}
35
- mod_dirs.each(:layout) do |dirname|
57
+ Mod.dirs.each(:layout) do |dirname|
36
58
  Dir.foreach(dirname) do |filename|
37
59
  next if filename =~ /^\./
38
60
  layout_name = filename.gsub(/\.html$/, "")
@@ -42,135 +64,28 @@ class Card
42
64
  hash
43
65
  end
44
66
 
45
- def mod_dirs
46
- @mod_dirs ||= Mod::Dirs.new(Card.paths["mod"].existent)
47
- end
48
-
49
- def refresh_script_and_style
50
- update_if_source_file_changed Card[:all, :script]
51
- update_if_source_file_changed Card[:all, :style]
67
+ def module_class_template
68
+ const_get :Template
52
69
  end
53
70
 
54
71
  private
55
72
 
56
- # regenerates the machine output if a source file of a input card
57
- # has been changed
58
- def update_if_source_file_changed machine_card
59
- return unless machine_card
60
- mtime_output = machine_card.machine_output_card.updated_at
61
- return unless mtime_output
62
- regenerate = false
63
- input_cards_with_source_files(machine_card) do |i_card, files|
64
- files.each do |path|
65
- next unless File.mtime(path) > mtime_output
66
- i_card.expire_machine_cache
67
- regenerate = true
68
- break
69
- end
70
- end
71
- return unless regenerate
72
- machine_card.regenerate_machine_output
73
- end
74
-
75
- def input_cards_with_source_files card
76
- card.machine_input_card.extended_item_cards.each do |i_card|
77
- next unless i_card.codename
78
- next unless i_card.respond_to?(:existing_source_paths)
79
- yield i_card, i_card.existing_source_paths
80
- end
81
- end
82
-
83
- def source_files card
84
- files = []
85
- card.machine_input_card.extended_item_cards.each do |i_card|
86
- next unless i_card.codename
87
- next unless i_card.respond_to?(:existing_source_paths)
88
- files << i_card.existing_source_paths
89
- end
90
- files.flatten
91
- end
92
-
93
73
  def load_initializers
94
- Card.config.paths["mod/config/initializers"].existent
95
- .sort.each do |initializer|
74
+ Card.config.paths["mod/config/initializers"].existent.sort.each do |initializer|
96
75
  load initializer
97
76
  end
98
77
  end
99
78
 
100
- def load_set_patterns
101
- generate_set_pattern_tmp_files if rewrite_tmp_files?
102
- load_dir Card.paths["tmp/set_pattern"].first
103
- end
104
-
105
- def generate_set_pattern_tmp_files
106
- prepare_tmp_dir "tmp/set_pattern"
107
- seq = 100
108
- mod_dirs.each(:set_pattern) do |dirname|
109
- Dir.entries(dirname).sort.each do |filename|
110
- m = filename.match(/^(\d+_)?([^\.]*).rb/)
111
- key = m && m[2]
112
- next unless key
113
- filename = [dirname, filename].join("/")
114
- Set::Pattern.write_tmp_file key, filename, seq
115
- seq += 1
116
- end
117
- end
118
- end
119
-
79
+ # {Card::Format}
120
80
  def load_formats
121
- # cheating on load issues now by putting all inherited-from formats in
122
- # core mod.
123
- mod_dirs.each(:format) do |dir|
81
+ # cheating on load issues now by putting all inherited-from formats in core mod.
82
+ Mod.dirs.each(:format) do |dir|
124
83
  load_dir dir
125
84
  end
126
85
  end
127
86
 
128
- def load_sets
129
- generate_tmp_set_modules
130
- load_tmp_set_modules
131
- Set.process_base_modules
132
- Set.clean_empty_modules
133
- end
134
-
135
- def generate_tmp_set_modules
136
- return unless prepare_tmp_dir "tmp/set"
137
- mod_dirs.each_with_tmp(:set) do |mod_dir, mod_tmp_dir|
138
- Dir.mkdir mod_tmp_dir
139
- Dir.glob("#{mod_dir}/**/*.rb").each do |abs_filename|
140
- rel_filename = abs_filename.gsub "#{mod_dir}/", ""
141
- tmp_filename = "#{mod_tmp_dir}/#{rel_filename}"
142
- Set.write_tmp_file abs_filename, tmp_filename, rel_filename
143
- end
144
- end
145
- end
146
-
147
- def load_tmp_set_modules
148
- patterns = Card.set_patterns.reverse.map(&:pattern_code)
149
- .unshift "abstract"
150
- mod_dirs.each_tmp(:set) do |set_tmp_dir|
151
- patterns.each do |pattern|
152
- pattern_dir = "#{set_tmp_dir}/#{pattern}"
153
- load_dir "#{pattern_dir}/**" if Dir.exist? pattern_dir
154
- end
155
- end
156
- end
157
-
158
- def prepare_tmp_dir path
159
- return unless rewrite_tmp_files?
160
- p = Card.paths[path]
161
- FileUtils.rm_rf p.first, secure: true if p.existent.first
162
- Dir.mkdir p.first
163
- end
164
-
165
- def rewrite_tmp_files?
166
- if defined?(@rewrite)
167
- @rewrite
168
- else
169
- @rewrite = !(Rails.env.production? &&
170
- Card.paths["tmp/set"].existent.first)
171
- end
172
- end
173
-
87
+ # load all files in directory
88
+ # @param dir [String] directory name
174
89
  def load_dir dir
175
90
  Dir["#{dir}/*.rb"].sort.each do |file|
176
91
  # puts Benchmark.measure("from #load_dir: rd: #{file}") {