card 1.16.6 → 1.16.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (440) hide show
  1. checksums.yaml +4 -4
  2. data/.yardoc/checksums +234 -49
  3. data/.yardoc/object_types +0 -0
  4. data/.yardoc/objects/root.dat +0 -0
  5. data/VERSION +1 -1
  6. data/config/initializers/mime_types.rb +3 -3
  7. data/config/initializers/notification.rb +1 -1
  8. data/db/migrate/20121118115000_update_link_type.rb +8 -8
  9. data/db/migrate/20130411210957_update_codenames.rb +2 -2
  10. data/db/migrate/20140822073704_create_new_revision_tables.rb +12 -13
  11. data/db/migrate/20141001105348_move_revisions_to_actions.rb +16 -16
  12. data/db/migrate/20141121172918_rename_card_migration_table.rb +4 -4
  13. data/db/migrate_core_cards/20130419215612_import_help_text.rb +3 -3
  14. data/db/migrate_core_cards/20130823192433_add_style_cards.rb +45 -47
  15. data/db/migrate_core_cards/20130910183318_move_styles_to_content.rb +1 -1
  16. data/db/migrate_core_cards/20130920214038_jsonize_tinymce.rb +3 -3
  17. data/db/migrate_core_cards/20130920291703_update_stylesheets.rb +3 -3
  18. data/db/migrate_core_cards/20130927191728_account_events.rb +6 -6
  19. data/db/migrate_core_cards/20131016172445_common_css_patch.rb +1 -1
  20. data/db/migrate_core_cards/20140110193325_reset_account_request_type.rb +1 -1
  21. data/db/migrate_core_cards/20140307231621_user_data_to_cards.rb +19 -19
  22. data/db/migrate_core_cards/20140317035504_account_requests_to_signups.rb +11 -12
  23. data/db/migrate_core_cards/20140512155840_add_script_cards.rb +35 -36
  24. data/db/migrate_core_cards/20140629222005_add_email_cards.rb +55 -55
  25. data/db/migrate_core_cards/20140725180118_config_card_updates.rb +1 -1
  26. data/db/migrate_core_cards/20141111083921_delete_machine_output.rb +2 -2
  27. data/db/migrate_core_cards/20141115034214_config_descriptions_etc.rb +3 -3
  28. data/db/migrate_core_cards/20141120120605_fix_notification_html_message.rb +2 -2
  29. data/db/migrate_core_cards/20141204061304_watchers_to_following.rb +8 -8
  30. data/db/migrate_core_cards/20141208162106_add_ace_script.rb +2 -2
  31. data/db/migrate_core_cards/20141216155251_add_more_following_cards.rb +16 -16
  32. data/db/migrate_core_cards/20141230204340_uri_codename.rb +1 -1
  33. data/db/migrate_core_cards/20150202143810_import_bootstrap_layout.rb +19 -19
  34. data/db/migrate_core_cards/20150220134731_following_to_follow_rule.rb +3 -3
  35. data/db/migrate_core_cards/20150317162412_bootstrap_themes.rb +15 -15
  36. data/db/migrate_core_cards/20150326205655_bootswatch_themes.rb +11 -11
  37. data/db/migrate_core_cards/20150331135745_new_card_menu.rb +1 -1
  38. data/db/migrate_core_cards/20150429090551_search_card_context.rb +1 -1
  39. data/db/migrate_core_cards/20150508212032_menu_compatibility.rb +3 -3
  40. data/db/migrate_core_cards/20150510031118_fix_skin_images.rb +1 -1
  41. data/db/migrate_core_cards/20150528084659_add_session_cardtype.rb +4 -4
  42. data/db/migrate_core_cards/20150601133433_add_recent_setting_session_card.rb +5 -5
  43. data/db/migrate_core_cards/20150605115802_add_performance_log_card.rb +1 -1
  44. data/db/migrate_core_cards/20150610171702_add_debugger_session_card.rb +2 -2
  45. data/db/migrate_core_cards/20150611203506_rails_inflection_updates.rb +5 -5
  46. data/db/migrate_core_cards/20150627205133_fix_script_bootstrap_card_type.rb +1 -1
  47. data/db/migrate_core_cards/20150702130543_remove_edit_toolbar_pinned.rb +1 -1
  48. data/db/migrate_core_cards/20150724123438_update_file_and_image_cards.rb +5 -5
  49. data/db/migrate_core_cards/20150807205221_create_references_for_search_cards.rb +1 -1
  50. data/db/migrate_core_cards/20150824135418_update_file_history.rb +3 -3
  51. data/db/migrate_core_cards/20150903130006_attachment_upload_cards.rb +2 -2
  52. data/db/migrate_core_cards/20150910085603_remove_performance_log_card.rb +1 -1
  53. data/lib/card.rb +4 -4
  54. data/lib/card/active_record_ext.rb +8 -8
  55. data/lib/card/auth.rb +6 -6
  56. data/lib/card/cache.rb +1 -1
  57. data/lib/card/chunk.rb +1 -1
  58. data/lib/card/content.rb +1 -1
  59. data/lib/card/diff.rb +10 -10
  60. data/lib/card/env.rb +1 -1
  61. data/lib/card/format.rb +12 -12
  62. data/lib/card/loader.rb +1 -1
  63. data/lib/card/migration.rb +1 -1
  64. data/lib/card/name.rb +4 -4
  65. data/lib/card/query.rb +255 -61
  66. data/lib/card/query/attributes.rb +310 -0
  67. data/lib/card/query/clause.rb +12 -15
  68. data/lib/card/query/join.rb +73 -0
  69. data/lib/card/query/reference.rb +51 -0
  70. data/lib/card/query/sql_statement.rb +228 -0
  71. data/lib/card/query/value.rb +66 -0
  72. data/lib/card/reference.rb +6 -6
  73. data/lib/card/set.rb +12 -12
  74. data/lib/card/set_pattern.rb +9 -9
  75. data/lib/card/spec_helper.rb +5 -5
  76. data/lib/card/success.rb +1 -1
  77. data/lib/cardio.rb +7 -7
  78. data/lib/generators/card/format/format_generator.rb +3 -3
  79. data/lib/generators/card/migration/migration_generator.rb +5 -5
  80. data/lib/generators/card/set/set_generator.rb +4 -4
  81. data/mod/01_core/chunk/include.rb +4 -4
  82. data/mod/01_core/chunk/link.rb +5 -5
  83. data/mod/01_core/chunk/literal.rb +2 -2
  84. data/mod/01_core/chunk/query_reference.rb +8 -8
  85. data/mod/01_core/chunk/uri.rb +18 -18
  86. data/mod/01_core/format/html_format.rb +4 -4
  87. data/mod/01_core/set/all/active_card.rb +2 -2
  88. data/mod/01_core/set/all/collection.rb +21 -26
  89. data/mod/01_core/set/all/content.rb +2 -2
  90. data/mod/01_core/set/all/fetch.rb +6 -6
  91. data/mod/01_core/set/all/initialize.rb +4 -4
  92. data/mod/01_core/set/all/location_history.rb +2 -2
  93. data/mod/01_core/set/all/name.rb +14 -14
  94. data/mod/01_core/set/all/pattern.rb +1 -1
  95. data/mod/01_core/set/all/permissions.rb +12 -12
  96. data/mod/01_core/set/all/phases.rb +29 -12
  97. data/mod/01_core/set/all/references.rb +14 -14
  98. data/mod/01_core/set/all/rules.rb +8 -8
  99. data/mod/01_core/set/all/templating.rb +10 -9
  100. data/mod/01_core/set/all/tracked_attributes.rb +7 -7
  101. data/mod/01_core/set/all/trash.rb +6 -6
  102. data/mod/01_core/set/all/type.rb +7 -7
  103. data/mod/01_core/set/all/utils.rb +4 -4
  104. data/mod/01_core/set/all/view_cache.rb +1 -1
  105. data/mod/01_core/set_pattern/02_all_plus.rb +2 -2
  106. data/mod/01_core/set_pattern/03_type.rb +1 -1
  107. data/mod/01_core/set_pattern/04_star.rb +1 -1
  108. data/mod/01_core/set_pattern/05_rstar.rb +2 -2
  109. data/mod/01_core/set_pattern/06_right.rb +4 -4
  110. data/mod/01_core/set_pattern/07_type_plus_right.rb +4 -4
  111. data/mod/01_core/set_pattern/08_self.rb +1 -1
  112. data/mod/01_core/spec/chunk/uri_spec.rb +73 -73
  113. data/mod/01_core/spec/format/html_format_spec.rb +5 -5
  114. data/mod/01_core/spec/set/all/attribute_tracking_spec.rb +1 -1
  115. data/mod/01_core/spec/set/all/collection_spec.rb +22 -22
  116. data/mod/01_core/spec/set/all/content_spec.rb +1 -1
  117. data/mod/01_core/spec/set/all/fetch_spec.rb +24 -24
  118. data/mod/01_core/spec/set/all/initialize_spec.rb +9 -9
  119. data/mod/01_core/spec/set/all/name_spec.rb +8 -8
  120. data/mod/01_core/spec/set/all/pattern_spec.rb +10 -10
  121. data/mod/01_core/spec/set/all/permissions_spec.rb +45 -45
  122. data/mod/01_core/spec/set/all/references_spec.rb +1 -1
  123. data/mod/01_core/spec/set/all/rules2_spec.rb +15 -15
  124. data/mod/01_core/spec/set/all/rules_spec.rb +37 -37
  125. data/mod/01_core/spec/set/all/templating_spec.rb +21 -21
  126. data/mod/01_core/spec/set/all/tracked_attributes_spec.rb +55 -55
  127. data/mod/01_core/spec/set/all/trash_spec.rb +4 -4
  128. data/mod/01_core/spec/set/all/type_spec.rb +15 -15
  129. data/mod/01_history/lib/card/act.rb +2 -2
  130. data/mod/01_history/lib/card/action.rb +22 -22
  131. data/mod/01_history/lib/card/change.rb +1 -1
  132. data/mod/01_history/set/all/actions.rb +2 -2
  133. data/mod/01_history/set/all/content_history.rb +4 -4
  134. data/mod/01_history/set/all/history.rb +46 -46
  135. data/mod/02_basic_types/set/all/all_css.rb +10 -10
  136. data/mod/02_basic_types/set/all/all_csv.rb +7 -7
  137. data/mod/02_basic_types/set/all/base.rb +25 -25
  138. data/mod/02_basic_types/set/all/json.rb +16 -16
  139. data/mod/02_basic_types/set/all/rss.rb +7 -7
  140. data/mod/02_basic_types/set/type/html.rb +2 -2
  141. data/mod/02_basic_types/set/type/plain_text.rb +1 -1
  142. data/mod/02_basic_types/set/type/pointer.rb +39 -31
  143. data/mod/02_basic_types/spec/set/all/all_css_spec.rb +1 -1
  144. data/mod/02_basic_types/spec/set/all/all_csv_spec.rb +1 -1
  145. data/mod/02_basic_types/spec/set/all/base_spec.rb +18 -18
  146. data/mod/02_basic_types/spec/set/all/json_spec.rb +4 -4
  147. data/mod/02_basic_types/spec/set/all/rss_spec.rb +8 -2
  148. data/mod/02_basic_types/spec/set/type/plain_text_spec.rb +1 -1
  149. data/mod/02_basic_types/spec/set/type/pointer_spec.rb +54 -44
  150. data/mod/03_machines/lib/card/machine.rb +46 -29
  151. data/mod/03_machines/lib/card/machine_input.rb +34 -10
  152. data/mod/03_machines/set/type/coffee_script.rb +3 -3
  153. data/mod/03_machines/set/type/css.rb +8 -8
  154. data/mod/03_machines/set/type/java_script.rb +4 -4
  155. data/mod/03_machines/set/type/scss.rb +2 -2
  156. data/mod/03_machines/set/type/skin.rb +1 -1
  157. data/mod/03_machines/spec/lib/shared_machine_examples.rb +27 -27
  158. data/mod/03_machines/spec/lib/shared_machine_input_examples.rb +8 -8
  159. data/mod/03_machines/spec/set/type/coffeescript_spec.rb +6 -6
  160. data/mod/03_machines/spec/set/type/css_spec.rb +9 -9
  161. data/mod/03_machines/spec/set/type/javascript_spec.rb +6 -6
  162. data/mod/03_machines/spec/set/type/scss_spec.rb +5 -5
  163. data/mod/03_machines/spec/set/type/skin_spec.rb +25 -25
  164. data/mod/04_settings/lib/card/setting.rb +11 -11
  165. data/mod/04_settings/set/abstract/permission.rb +9 -9
  166. data/mod/04_settings/set/right/script.rb +1 -1
  167. data/mod/04_settings/set/right/structure.rb +0 -5
  168. data/mod/04_settings/set/right/style.rb +2 -2
  169. data/mod/04_settings/set/self/accountable.rb +1 -1
  170. data/mod/04_settings/set/self/add_help.rb +1 -1
  171. data/mod/04_settings/set/self/autoname.rb +1 -1
  172. data/mod/04_settings/set/self/captcha.rb +1 -1
  173. data/mod/04_settings/set/self/create.rb +1 -1
  174. data/mod/04_settings/set/self/default.rb +1 -1
  175. data/mod/04_settings/set/self/delete.rb +1 -1
  176. data/mod/04_settings/set/self/help.rb +1 -1
  177. data/mod/04_settings/set/self/input.rb +1 -1
  178. data/mod/04_settings/set/self/layout.rb +1 -1
  179. data/mod/04_settings/set/self/on_create.rb +1 -1
  180. data/mod/04_settings/set/self/on_delete.rb +1 -1
  181. data/mod/04_settings/set/self/on_update.rb +1 -1
  182. data/mod/04_settings/set/self/options.rb +1 -1
  183. data/mod/04_settings/set/self/options_label.rb +1 -1
  184. data/mod/04_settings/set/self/read.rb +1 -1
  185. data/mod/04_settings/set/self/script.rb +1 -1
  186. data/mod/04_settings/set/self/structure.rb +1 -1
  187. data/mod/04_settings/set/self/style.rb +1 -1
  188. data/mod/04_settings/set/self/table_of_contents.rb +1 -1
  189. data/mod/04_settings/set/self/thanks.rb +1 -1
  190. data/mod/04_settings/set/self/update.rb +1 -1
  191. data/mod/04_settings/set/type/setting.rb +14 -14
  192. data/mod/04_settings/spec/set/right/comment_spec.rb +5 -5
  193. data/mod/04_settings/spec/set/right/create_spec.rb +1 -1
  194. data/mod/04_settings/spec/set/right/script_spec.rb +5 -5
  195. data/mod/04_settings/spec/set/right/structure_spec.rb +4 -2
  196. data/mod/04_settings/spec/set/right/style_spec.rb +7 -7
  197. data/mod/04_settings/spec/set/type/setting_spec.rb +2 -2
  198. data/mod/05_email/lib/card/follow_option.rb +24 -24
  199. data/mod/05_email/set/all/follow.rb +24 -16
  200. data/mod/05_email/set/all/notify.rb +25 -23
  201. data/mod/05_email/set/all/observer.rb +5 -5
  202. data/mod/05_email/set/right/bcc.rb +8 -8
  203. data/mod/05_email/set/right/follow.rb +44 -17
  204. data/mod/05_email/set/right/follow_fields.rb +1 -1
  205. data/mod/05_email/set/right/following.rb +49 -40
  206. data/mod/05_email/set/self/always.rb +2 -2
  207. data/mod/05_email/set/self/created.rb +1 -1
  208. data/mod/05_email/set/self/edited.rb +4 -4
  209. data/mod/05_email/set/self/follow.rb +1 -1
  210. data/mod/05_email/set/self/follow_defaults.rb +9 -9
  211. data/mod/05_email/set/self/never.rb +1 -1
  212. data/mod/05_email/set/type/email_template.rb +9 -9
  213. data/mod/05_email/set/type_plus_right/user/follow.rb +16 -16
  214. data/mod/05_email/spec/set/all/follow_spec.rb +10 -10
  215. data/mod/05_email/spec/set/all/notify_spec.rb +82 -82
  216. data/mod/05_email/spec/set/all/observer_spec.rb +16 -16
  217. data/mod/05_email/spec/set/right/followers_spec.rb +6 -6
  218. data/mod/05_email/spec/set/self/follow_defaults_spec.rb +2 -2
  219. data/mod/05_standard/lib/carrier_wave/cardmount.rb +5 -5
  220. data/mod/05_standard/lib/image_uploader.rb +8 -8
  221. data/mod/05_standard/set/abstract/attachment.rb +18 -18
  222. data/mod/05_standard/set/all/account.rb +5 -5
  223. data/mod/05_standard/set/all/comment.rb +7 -7
  224. data/mod/05_standard/set/all/error.rb +25 -25
  225. data/mod/05_standard/set/all/event_viz.rb +1 -1
  226. data/mod/05_standard/set/all/links.rb +9 -9
  227. data/mod/05_standard/set/all/rich_html/content.rb +34 -34
  228. data/mod/05_standard/set/all/rich_html/editing.rb +35 -35
  229. data/mod/05_standard/set/all/rich_html/form.rb +20 -20
  230. data/mod/05_standard/set/all/rich_html/header.rb +8 -8
  231. data/mod/05_standard/set/all/rich_html/menu.rb +33 -33
  232. data/mod/05_standard/set/all/rich_html/modal.rb +16 -16
  233. data/mod/05_standard/set/all/rich_html/toolbar.rb +63 -63
  234. data/mod/05_standard/set/all/rich_html/wrapper.rb +8 -8
  235. data/mod/05_standard/set/right/account.rb +27 -27
  236. data/mod/05_standard/set/right/email.rb +5 -5
  237. data/mod/05_standard/set/right/password.rb +5 -5
  238. data/mod/05_standard/set/rstar/rules.rb +52 -52
  239. data/mod/05_standard/set/self/account_links.rb +27 -27
  240. data/mod/05_standard/set/self/all.rb +1 -1
  241. data/mod/05_standard/set/self/head.rb +5 -5
  242. data/mod/05_standard/set/self/navbox.rb +11 -11
  243. data/mod/05_standard/set/self/recent.rb +2 -2
  244. data/mod/05_standard/set/self/search.rb +13 -13
  245. data/mod/05_standard/set/self/signin.rb +19 -19
  246. data/mod/05_standard/set/self/stats.rb +2 -2
  247. data/mod/05_standard/set/type/basic.rb +1 -1
  248. data/mod/05_standard/set/type/cardtype.rb +5 -5
  249. data/mod/05_standard/set/type/date.rb +1 -1
  250. data/mod/05_standard/set/type/file.rb +7 -7
  251. data/mod/05_standard/set/type/image.rb +8 -8
  252. data/mod/05_standard/set/type/number.rb +2 -2
  253. data/mod/05_standard/set/type/phrase.rb +1 -1
  254. data/mod/05_standard/set/type/search_type.rb +27 -21
  255. data/mod/05_standard/set/type/session.rb +2 -2
  256. data/mod/05_standard/set/type/set.rb +37 -37
  257. data/mod/05_standard/set/type/signup.rb +25 -25
  258. data/mod/05_standard/set/type/uri.rb +1 -1
  259. data/mod/05_standard/set/type/user.rb +21 -21
  260. data/mod/05_standard/spec/chunk/include_spec.rb +16 -16
  261. data/mod/05_standard/spec/chunk/link_spec.rb +18 -18
  262. data/mod/05_standard/spec/chunk/query_reference_spec.rb +1 -1
  263. data/mod/05_standard/spec/set/all/account_spec.rb +7 -7
  264. data/mod/05_standard/spec/set/all/email_html_spec.rb +3 -3
  265. data/mod/05_standard/spec/set/all/history_spec.rb +14 -14
  266. data/mod/05_standard/spec/set/all/rich_html/editing_spec.rb +1 -1
  267. data/mod/05_standard/spec/set/all/rich_html/form_spec.rb +2 -2
  268. data/mod/05_standard/spec/set/right/account_spec.rb +9 -9
  269. data/mod/05_standard/spec/set/right/email_spec.rb +8 -8
  270. data/mod/05_standard/spec/set/right/password_spec.rb +9 -9
  271. data/mod/05_standard/spec/set/right/stats_spec.rb +1 -1
  272. data/mod/05_standard/spec/set/right/when_created_spec.rb +1 -1
  273. data/mod/05_standard/spec/set/right/when_last_edited_spec.rb +1 -1
  274. data/mod/05_standard/spec/set/rstar/rules_spec.rb +2 -2
  275. data/mod/05_standard/spec/set/self/account_links_spec.rb +2 -2
  276. data/mod/05_standard/spec/set/self/all_spec.rb +8 -11
  277. data/mod/05_standard/spec/set/self/head_spec.rb +1 -1
  278. data/mod/05_standard/spec/set/self/navbox_spec.rb +1 -1
  279. data/mod/05_standard/spec/set/self/now_spec.rb +1 -1
  280. data/mod/05_standard/spec/set/self/stats_spec.rb +1 -1
  281. data/mod/05_standard/spec/set/self/version_spec.rb +1 -1
  282. data/mod/05_standard/spec/set/type/email_template_spec.rb +25 -25
  283. data/mod/05_standard/spec/set/type/file_spec.rb +4 -4
  284. data/mod/05_standard/spec/set/type/html_spec.rb +3 -3
  285. data/mod/05_standard/spec/set/type/image_spec.rb +6 -6
  286. data/mod/05_standard/spec/set/type/layout_type_spec.rb +1 -1
  287. data/mod/05_standard/spec/set/type/search_type_spec.rb +10 -10
  288. data/mod/05_standard/spec/set/type/signup_spec.rb +11 -11
  289. data/mod/05_standard/spec/set/type/toggle_spec.rb +2 -2
  290. data/mod/05_standard/spec/set/type/uri_spec.rb +9 -9
  291. data/mod/06_bootstrap/set/all/bootstrap/helper.rb +10 -10
  292. data/mod/06_bootstrap/set/all/bootstrap/wrapper.rb +4 -4
  293. data/mod/06_bootstrap/set/all/rich_bootstrap.rb +1 -1
  294. data/spec/lib/card/action_spec.rb +2 -2
  295. data/spec/lib/card/cache_spec.rb +7 -7
  296. data/spec/lib/card/content_spec.rb +31 -37
  297. data/spec/lib/card/diff_spec.rb +56 -56
  298. data/spec/lib/card/format_spec.rb +11 -11
  299. data/spec/lib/card/query_spec.rb +382 -265
  300. data/spec/lib/card/reference_spec.rb +133 -140
  301. data/spec/lib/card/set_pattern_spec.rb +10 -9
  302. data/spec/lib/card/set_spec.rb +11 -11
  303. data/spec/lib/card/success_spec.rb +16 -8
  304. data/spec/mailers/mailer_spec.rb +5 -5
  305. data/spec/models/card/cardtype_spec.rb +20 -20
  306. data/spec/models/card/create_spec.rb +6 -6
  307. data/spec/models/card/trash_spec.rb +20 -20
  308. data/spec/models/card/type_transition_spec.rb +3 -3
  309. data/spec/models/card/validation_spec.rb +5 -5
  310. data/spec/models/card_spec.rb +24 -24
  311. data/spec/spec_helper.rb +5 -5
  312. data/tmpsets/set/mod001-01_core/all/active_card.rb +2 -2
  313. data/tmpsets/set/mod001-01_core/all/collection.rb +23 -26
  314. data/tmpsets/set/mod001-01_core/all/content.rb +2 -2
  315. data/tmpsets/set/mod001-01_core/all/fetch.rb +6 -6
  316. data/tmpsets/set/mod001-01_core/all/initialize.rb +8 -4
  317. data/tmpsets/set/mod001-01_core/all/name.rb +14 -14
  318. data/tmpsets/set/mod001-01_core/all/pattern.rb +1 -1
  319. data/tmpsets/set/mod001-01_core/all/permissions.rb +12 -12
  320. data/tmpsets/set/mod001-01_core/all/phases.rb +31 -13
  321. data/tmpsets/set/mod001-01_core/all/references.rb +14 -14
  322. data/tmpsets/set/mod001-01_core/all/rules.rb +8 -10
  323. data/tmpsets/set/mod001-01_core/all/templating.rb +10 -9
  324. data/tmpsets/set/mod001-01_core/all/tracked_attributes.rb +7 -7
  325. data/tmpsets/set/mod001-01_core/all/trash.rb +9 -8
  326. data/tmpsets/set/mod001-01_core/all/type.rb +7 -7
  327. data/tmpsets/set/mod001-01_core/all/utils.rb +16 -4
  328. data/tmpsets/set/mod001-01_core/all/view_cache.rb +1 -1
  329. data/tmpsets/set/mod002-01_history/all/actions.rb +2 -2
  330. data/tmpsets/set/mod002-01_history/all/content_history.rb +11 -7
  331. data/tmpsets/set/mod002-01_history/all/history.rb +46 -46
  332. data/tmpsets/set/mod003-02_basic_types/all/all_css.rb +10 -10
  333. data/tmpsets/set/mod003-02_basic_types/all/all_csv.rb +7 -7
  334. data/tmpsets/set/mod003-02_basic_types/all/base.rb +25 -25
  335. data/tmpsets/set/mod003-02_basic_types/all/json.rb +16 -16
  336. data/tmpsets/set/mod003-02_basic_types/all/rss.rb +7 -7
  337. data/tmpsets/set/mod003-02_basic_types/type/html.rb +2 -2
  338. data/tmpsets/set/mod003-02_basic_types/type/plain_text.rb +1 -1
  339. data/tmpsets/set/mod003-02_basic_types/type/pointer.rb +38 -31
  340. data/tmpsets/set/mod004-03_machines/right/machine_output.rb +4 -0
  341. data/tmpsets/set/mod004-03_machines/type/coffee_script.rb +3 -3
  342. data/tmpsets/set/mod004-03_machines/type/css.rb +8 -8
  343. data/tmpsets/set/mod004-03_machines/type/java_script.rb +4 -4
  344. data/tmpsets/set/mod004-03_machines/type/scss.rb +2 -2
  345. data/tmpsets/set/mod004-03_machines/type/skin.rb +1 -1
  346. data/tmpsets/set/mod005-04_settings/abstract/permission.rb +9 -9
  347. data/tmpsets/set/mod005-04_settings/right/script.rb +1 -1
  348. data/tmpsets/set/mod005-04_settings/right/structure.rb +0 -5
  349. data/tmpsets/set/mod005-04_settings/right/style.rb +2 -2
  350. data/tmpsets/set/mod005-04_settings/self/accountable.rb +1 -1
  351. data/tmpsets/set/mod005-04_settings/self/add_help.rb +1 -1
  352. data/tmpsets/set/mod005-04_settings/self/autoname.rb +1 -1
  353. data/tmpsets/set/mod005-04_settings/self/captcha.rb +1 -1
  354. data/tmpsets/set/mod005-04_settings/self/create.rb +1 -1
  355. data/tmpsets/set/mod005-04_settings/self/default.rb +1 -1
  356. data/tmpsets/set/mod005-04_settings/self/delete.rb +1 -1
  357. data/tmpsets/set/mod005-04_settings/self/help.rb +1 -1
  358. data/tmpsets/set/mod005-04_settings/self/input.rb +1 -1
  359. data/tmpsets/set/mod005-04_settings/self/layout.rb +1 -1
  360. data/tmpsets/set/mod005-04_settings/self/on_create.rb +1 -1
  361. data/tmpsets/set/mod005-04_settings/self/on_delete.rb +1 -1
  362. data/tmpsets/set/mod005-04_settings/self/on_update.rb +1 -1
  363. data/tmpsets/set/mod005-04_settings/self/options.rb +1 -1
  364. data/tmpsets/set/mod005-04_settings/self/options_label.rb +1 -1
  365. data/tmpsets/set/mod005-04_settings/self/read.rb +1 -1
  366. data/tmpsets/set/mod005-04_settings/self/script.rb +1 -1
  367. data/tmpsets/set/mod005-04_settings/self/structure.rb +1 -1
  368. data/tmpsets/set/mod005-04_settings/self/style.rb +1 -1
  369. data/tmpsets/set/mod005-04_settings/self/table_of_contents.rb +1 -1
  370. data/tmpsets/set/mod005-04_settings/self/thanks.rb +1 -1
  371. data/tmpsets/set/mod005-04_settings/self/update.rb +1 -1
  372. data/tmpsets/set/mod005-04_settings/type/setting.rb +14 -14
  373. data/tmpsets/set/mod006-05_email/all/follow.rb +24 -16
  374. data/tmpsets/set/mod006-05_email/all/notify.rb +25 -23
  375. data/tmpsets/set/mod006-05_email/all/observer.rb +8 -8
  376. data/tmpsets/set/mod006-05_email/right/bcc.rb +8 -8
  377. data/tmpsets/set/mod006-05_email/right/follow.rb +44 -17
  378. data/tmpsets/set/mod006-05_email/right/follow_fields.rb +1 -1
  379. data/tmpsets/set/mod006-05_email/right/following.rb +49 -40
  380. data/tmpsets/set/mod006-05_email/self/always.rb +2 -2
  381. data/tmpsets/set/mod006-05_email/self/created.rb +1 -1
  382. data/tmpsets/set/mod006-05_email/self/edited.rb +4 -4
  383. data/tmpsets/set/mod006-05_email/self/follow.rb +1 -1
  384. data/tmpsets/set/mod006-05_email/self/follow_defaults.rb +9 -9
  385. data/tmpsets/set/mod006-05_email/self/never.rb +1 -1
  386. data/tmpsets/set/mod006-05_email/type/email_template.rb +9 -9
  387. data/tmpsets/set/mod006-05_email/type_plus_right/user/follow.rb +17 -17
  388. data/tmpsets/set/mod007-05_standard/abstract/attachment.rb +98 -46
  389. data/tmpsets/set/mod007-05_standard/all/account.rb +5 -5
  390. data/tmpsets/set/mod007-05_standard/all/comment.rb +7 -7
  391. data/tmpsets/set/mod007-05_standard/all/error.rb +26 -26
  392. data/tmpsets/set/mod007-05_standard/all/event_viz.rb +1 -1
  393. data/tmpsets/set/mod007-05_standard/all/links.rb +10 -9
  394. data/tmpsets/set/mod007-05_standard/all/rich_html/content.rb +34 -34
  395. data/tmpsets/set/mod007-05_standard/all/rich_html/editing.rb +35 -35
  396. data/tmpsets/set/mod007-05_standard/all/rich_html/form.rb +20 -20
  397. data/tmpsets/set/mod007-05_standard/all/rich_html/header.rb +8 -8
  398. data/tmpsets/set/mod007-05_standard/all/rich_html/menu.rb +33 -33
  399. data/tmpsets/set/mod007-05_standard/all/rich_html/modal.rb +16 -16
  400. data/tmpsets/set/mod007-05_standard/all/rich_html/toolbar.rb +63 -63
  401. data/tmpsets/set/mod007-05_standard/all/rich_html/wrapper.rb +8 -8
  402. data/tmpsets/set/mod007-05_standard/right/account.rb +27 -27
  403. data/tmpsets/set/mod007-05_standard/right/email.rb +5 -5
  404. data/tmpsets/set/mod007-05_standard/right/password.rb +5 -5
  405. data/tmpsets/set/mod007-05_standard/rstar/rules.rb +52 -52
  406. data/tmpsets/set/mod007-05_standard/self/account_links.rb +27 -27
  407. data/tmpsets/set/mod007-05_standard/self/all.rb +1 -1
  408. data/tmpsets/set/mod007-05_standard/self/head.rb +5 -5
  409. data/tmpsets/set/mod007-05_standard/self/navbox.rb +11 -11
  410. data/tmpsets/set/mod007-05_standard/self/recent.rb +2 -2
  411. data/tmpsets/set/mod007-05_standard/self/search.rb +13 -13
  412. data/tmpsets/set/mod007-05_standard/self/signin.rb +19 -19
  413. data/tmpsets/set/mod007-05_standard/self/stats.rb +2 -2
  414. data/tmpsets/set/mod007-05_standard/type/basic.rb +1 -1
  415. data/tmpsets/set/mod007-05_standard/type/cardtype.rb +5 -5
  416. data/tmpsets/set/mod007-05_standard/type/date.rb +1 -1
  417. data/tmpsets/set/mod007-05_standard/type/file.rb +23 -8
  418. data/tmpsets/set/mod007-05_standard/type/image.rb +10 -8
  419. data/tmpsets/set/mod007-05_standard/type/number.rb +2 -2
  420. data/tmpsets/set/mod007-05_standard/type/phrase.rb +1 -1
  421. data/tmpsets/set/mod007-05_standard/type/search_type.rb +21 -19
  422. data/tmpsets/set/mod007-05_standard/type/session.rb +2 -2
  423. data/tmpsets/set/mod007-05_standard/type/set.rb +37 -37
  424. data/tmpsets/set/mod007-05_standard/type/signup.rb +25 -25
  425. data/tmpsets/set/mod007-05_standard/type/uri.rb +1 -1
  426. data/tmpsets/set/mod007-05_standard/type/user.rb +21 -21
  427. data/tmpsets/set/mod008-06_bootstrap/all/bootstrap/helper.rb +10 -10
  428. data/tmpsets/set/mod008-06_bootstrap/all/bootstrap/wrapper.rb +4 -4
  429. data/tmpsets/set/mod008-06_bootstrap/all/rich_bootstrap.rb +1 -1
  430. data/tmpsets/set_pattern/101-all_plus.rb +2 -2
  431. data/tmpsets/set_pattern/102-type.rb +1 -1
  432. data/tmpsets/set_pattern/103-star.rb +1 -1
  433. data/tmpsets/set_pattern/104-rstar.rb +2 -2
  434. data/tmpsets/set_pattern/105-right.rb +4 -4
  435. data/tmpsets/set_pattern/106-type_plus_right.rb +4 -4
  436. data/tmpsets/set_pattern/107-self.rb +1 -1
  437. metadata +7 -5
  438. data/lib/card/query/card_clause.rb +0 -528
  439. data/lib/card/query/ref_clause.rb +0 -47
  440. data/lib/card/query/value_clause.rb +0 -65
@@ -3,7 +3,7 @@
3
3
  describe Card::Set::All::AllCsv, "CSV mod" do
4
4
  context "csv_row view" do
5
5
  it "should handle inclusions" do
6
- expect(render_card( :csv_row, { :content=>'{{A+B}} {{T}}' }, :format => :csv )).to eq("AlphaBeta,Theta")
6
+ expect(render_card( :csv_row, { content: '{{A+B}} {{T}}' }, format: :csv )).to eq("AlphaBeta,Theta")
7
7
  end
8
8
  end
9
9
  end
@@ -3,7 +3,7 @@
3
3
  describe Card::Set::All::Base do
4
4
 
5
5
  describe 'handles view' do
6
-
6
+
7
7
  it("name" ) { expect(render_card(:name)).to eq('Tempo Rary') }
8
8
  it("key" ) { expect(render_card(:key)).to eq('tempo_rary') }
9
9
  it("linkname") { expect(render_card(:linkname)).to eq('Tempo_Rary') }
@@ -15,43 +15,43 @@ describe Card::Set::All::Base do
15
15
  end
16
16
 
17
17
  it :raw do
18
- @a = Card.new :content=>"{{A}}"
18
+ @a = Card.new content: "{{A}}"
19
19
  expect(@a.format._render(:raw)).to eq("{{A}}")
20
20
  end
21
21
 
22
22
  it "core" do
23
- expect(render_card(:core, :name=>'A+B')).to eq("AlphaBeta")
23
+ expect(render_card(:core, name: 'A+B')).to eq("AlphaBeta")
24
24
  end
25
-
25
+
26
26
  it 'core for new card' do
27
27
  expect(Card.new.format._render_core).to eq('')
28
28
  end
29
-
29
+
30
30
  describe 'array' do
31
31
  it "of search items" do
32
- Card.create! :name => "n+a", :type=>"Number", :content=>"10"
32
+ Card.create! name: "n+a", type: "Number", content: "10"
33
33
  sleep 1
34
- Card.create! :name => "n+b", :type=>"Phrase", :content=>"say:\"what\""
34
+ Card.create! name: "n+b", type: "Phrase", content: "say:\"what\""
35
35
  sleep 1
36
- Card.create! :name => "n+c", :type=>"Number", :content=>"30"
37
- c = Card.new :name => 'nplusarray', :content => "{{n+*children+by create|array}}"
36
+ Card.create! name: "n+c", type: "Number", content: "30"
37
+ c = Card.new name: 'nplusarray', content: "{{n+*children+by create|array}}"
38
38
  expect(c.format._render( :core )).to eq(%{["10", "say:\\"what\\"", "30"]})
39
39
  end
40
40
 
41
41
  it "of pointer items" do
42
- Card.create! :name => "n+a", :type=>"Number", :content=>"10"
43
- Card.create! :name => "n+b", :type=>"Number", :content=>"20"
44
- Card.create! :name => "n+c", :type=>"Number", :content=>"30"
45
- Card.create! :name => "npoint", :type=>"Pointer", :content => "[[n+a]]\n[[n+b]]\n[[n+c]]"
46
- c = Card.new :name => 'npointArray', :content => "{{npoint|array}}"
42
+ Card.create! name: "n+a", type: "Number", content: "10"
43
+ Card.create! name: "n+b", type: "Number", content: "20"
44
+ Card.create! name: "n+c", type: "Number", content: "30"
45
+ Card.create! name: "npoint", type: "Pointer", content: "[[n+a]]\n[[n+b]]\n[[n+c]]"
46
+ c = Card.new name: 'npointArray', content: "{{npoint|array}}"
47
47
  expect(c.format._render( :core )).to eq(%q{["10", "20", "30"]})
48
48
  end
49
-
49
+
50
50
  it "of basic items" do
51
- expect(render_card(:array, :content=>'yoing')).to eq(%{["yoing"]})
51
+ expect(render_card(:array, content: 'yoing')).to eq(%{["yoing"]})
52
52
  end
53
53
  end
54
-
55
- end
54
+
55
+ end
56
56
  end
57
57
 
@@ -9,13 +9,13 @@ describe Card::Set::All::Json, "JSON mod" do
9
9
  virtual_json = jf.new(Card.fetch('T+*self')).show :status, {}
10
10
  expect(JSON[virtual_json]).to eq({"key"=>"t+*self","status"=>"virtual",'url_key'=>'T+*self'})
11
11
  end
12
-
12
+
13
13
  it "should treat both unknown and unreadable cards as unknown" do
14
14
  Card::Auth.as Card::AnonymousID do
15
15
  jf = Card::JsonFormat
16
-
17
- unknown = Card.new :name=>'sump'
18
- unreadable = Card.new :name=>'kumq', :type=>'Fruit'
16
+
17
+ unknown = Card.new name: 'sump'
18
+ unreadable = Card.new name: 'kumq', type: 'Fruit'
19
19
  unknown_json = jf.new(unknown).show :status, {}
20
20
  expect(JSON[unknown_json]).to eq({"key"=>"sump","status"=>"unknown", 'url_key'=>'sump'})
21
21
  unreadable_json = jf.new(unreadable).show :status, {}
@@ -7,9 +7,15 @@ describe Card::Set::All::Rss do
7
7
  end
8
8
 
9
9
  it 'should handle faulty search queries' do
10
- bad_search = Card.create! :name=>'Bad Search', :type=>'Search', :content=>'not no search'
10
+ bad_search = Card.create! name: 'Bad Search', type: 'Search', content: 'not no search'
11
11
  rendered = bad_search.format(:rss).render_feed_body
12
- expect(rendered).to match(/item/)
12
+ expect(rendered).to have_tag("item",:text => /JSON::ParserError/)
13
+ end
14
+
15
+ it 'should handle bad queries' do
16
+ bad_search = Card.create! :name=>'Bad Search', :type=>'Search', :content=>'{"found_by":"home"}'
17
+ rendered = bad_search.format(:rss).render_feed_body
18
+ expect(rendered).to have_tag("item",:text => /Card::BadQuery/)
13
19
  end
14
20
 
15
21
  end
@@ -6,6 +6,6 @@ describe Card::Set::Type::PlainText do
6
6
  end
7
7
 
8
8
  it "should have special content that escapes HTML" do
9
- render_card(:core, :type=>'Plain Text', :content=>"<b></b>").should == '&lt;b&gt;&lt;/b&gt;'
9
+ render_card(:core, type: 'Plain Text', content: "<b></b>").should == '&lt;b&gt;&lt;/b&gt;'
10
10
  end
11
11
  end
@@ -1,65 +1,69 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  describe Card::Set::Type::Pointer do
3
3
  describe "item_names" do
4
- it "should return array of names of items referred to by a pointer" do
5
- Card.new(:type=>'Pointer', :content=>"[[Busy]]\n[[Body]]").item_names.should == ['Busy', 'Body']
4
+ it 'should return array of names of items referred to by a pointer' do
5
+ card = Card.new(type: 'Pointer', content:"[[Busy]]\n[[Body]]")
6
+ card.item_names.should == ['Busy', 'Body']
6
7
  end
7
8
  end
8
9
 
9
- describe "add_item" do
10
- it "add to empty ref list" do
11
- pointer = Card.new :name=>"tp", :type=>"pointer", :content=>""
12
- pointer.add_item "John"
13
- pointer.content.should == "[[John]]"
10
+ describe 'add_item' do
11
+ it 'add to empty ref list' do
12
+ pointer = Card.new name: 'tp', type: 'pointer', content: ''
13
+ pointer.add_item 'John'
14
+ pointer.content.should == '[[John]]'
14
15
  end
15
16
 
16
- it "add to existing ref list" do
17
- pointer = Card.new :name=>"tp", :type=>"pointer", :content=>"[[Jane]]"
18
- pointer.add_item "John"
17
+ it 'add to existing ref list' do
18
+ pointer = Card.new name: 'tp', type: 'pointer', content: '[[Jane]]'
19
+ pointer.add_item 'John'
19
20
  pointer.content.should == "[[Jane]]\n[[John]]"
20
21
  end
21
22
 
22
- it "not add duplicate entries" do
23
- pointer = Card.new :name=>"tp", :type=>"pointer", :content=>"[[Jane]]"
24
- pointer.add_item "Jane"
25
- pointer.content.should == "[[Jane]]"
23
+ it 'not add duplicate entries' do
24
+ pointer = Card.new name: 'tp', type: 'pointer', content: '[[Jane]]'
25
+ pointer.add_item 'Jane'
26
+ pointer.content.should == '[[Jane]]'
26
27
  end
27
28
  end
28
29
 
29
- describe "drop_item" do
30
- it "remove the link" do
31
- pointer = Card.new :name=>"tp", :type=>"pointer", :content=>"[[Jane]]\n[[John]]"
32
- pointer.drop_item "Jane"
33
- pointer.content.should == "[[John]]"
30
+ describe 'drop_item' do
31
+ it 'remove the link' do
32
+ content = "[[Jane]]\n[[John]]"
33
+ pointer = Card.new name: 'tp', type: 'pointer', content: content
34
+ pointer.drop_item 'Jane'
35
+ pointer.content.should == '[[John]]'
34
36
  end
35
37
 
36
- it "not fail on non-existent reference" do
37
- pointer = Card.new :name=>"tp", :type=>"pointer", :content=>"[[Jane]]\n[[John]]"
38
- pointer.drop_item "Bigfoot"
39
- pointer.content.should == "[[Jane]]\n[[John]]"
38
+ it 'not fail on non-existent reference' do
39
+ content = "[[Jane]]\n[[John]]"
40
+ pointer = Card.new name: 'tp', type: 'pointer', content: content
41
+ pointer.drop_item 'Bigfoot'
42
+ pointer.content.should == content
40
43
  end
41
44
 
42
- it "remove the last link" do
43
- pointer = Card.new :name=>"tp", :type=>"pointer", :content=>"[[Jane]]"
44
- pointer.drop_item "Jane"
45
- pointer.content.should == ""
45
+ it 'remove the last link' do
46
+ pointer = Card.new name: 'tp', type: 'pointer', content: '[[Jane]]'
47
+ pointer.drop_item 'Jane'
48
+ pointer.content.should == ''
46
49
  end
47
50
  end
48
51
 
49
52
 
50
53
 
51
- describe "html" do
54
+ describe 'html' do
52
55
  before do
53
56
  Card::Auth.as_bot do
54
- @card_name = "nonexistingcardmustnotexistthisistherule"
55
- @pointer = Card.create :name=>"tp", :type=>"pointer", :content=>"[[#{@card_name}]]"
57
+ @card_name = 'nonexistingcardmustnotexistthisistherule'
58
+ @pointer = Card.create name: 'tp', type: 'pointer', content: "[[#{@card_name}]]"
56
59
  # similar tests for an inherited type of Pointer
57
- @my_list = Card.create! :name=>'MyList', :type_id=>Card::CardtypeID
58
- Card.create :name=>'MyList+*type+*default', :type_id=>Card::PointerID
59
- @inherit_pointer = Card.create :name=>'ip', :type_id=>@my_list.id, :content=>"[[#{@card_name}]]"
60
+ @my_list = Card.create! name: 'MyList', type_id: Card::CardtypeID
61
+ Card.create name: 'MyList+*type+*default', type_id: Card::PointerID
62
+ @inherit_pointer = Card.create name: 'ip', type_id: @my_list.id, content: "[[#{@card_name}]]"
60
63
  end
61
64
  end
62
- it "should include nonexistingcardmustnotexistthisistherule in radio options" do
65
+
66
+ it 'should include nonexisting card in radio options' do
63
67
  common_html = 'input[class="pointer-radio-button"][checked="checked"][type="radio"][value="nonexistingcardmustnotexistthisistherule"][id="pointer-radio-nonexistingcardmustnotexistthisistherule"]'
64
68
  option_html = common_html + '[name="pointer_radio_button-tp"]'
65
69
  assert_view_select @pointer.format.render_radio, option_html
@@ -67,31 +71,35 @@ describe Card::Set::Type::Pointer do
67
71
  assert_view_select @inherit_pointer.format.render_radio, option_html
68
72
  end
69
73
 
70
- it "should include nonexistingcardmustnotexistthisistherule in checkbox options" do
74
+ it 'should include nonexisting card in checkbox options' do
71
75
  option_html = 'input[class="pointer-checkbox-button"][checked="checked"][name="pointer_checkbox"][type="checkbox"][value="nonexistingcardmustnotexistthisistherule"][id="pointer-checkbox-nonexistingcardmustnotexistthisistherule"]'
72
76
  assert_view_select @pointer.format.render_checkbox, option_html
73
77
  assert_view_select @inherit_pointer.format.render_checkbox, option_html
74
78
  end
75
- it "should include nonexistingcardmustnotexistthisistherule in select options" do
79
+
80
+ it 'should include nonexisting card in select options' do
76
81
  option_html = "option[value='#{@card_name}'][selected='selected']"
77
82
  assert_view_select @pointer.format.render_select, option_html, @card_name
78
83
  assert_view_select @inherit_pointer.format.render_select, option_html, @card_name
79
84
  end
80
- it "should include nonexistingcardmustnotexistthisistherule in multiselect options" do
85
+
86
+ it 'should include nonexisting card in multiselect options' do
81
87
  option_html = "option[value='#{@card_name}'][selected='selected']"
82
88
  assert_view_select @pointer.format.render_multiselect, option_html, @card_name
83
89
  assert_view_select @inherit_pointer.format.render_multiselect, option_html, @card_name
84
90
  end
85
91
  end
86
- describe "css" do
92
+
93
+ describe 'css' do
87
94
  before do
88
95
  @css = '#box { display: block }'
89
- Card.create :name=>'my css', :content=> @css
96
+ Card.create name: 'my css', content: @css
90
97
  end
91
- it "should render CSS of items" do
92
- css_list = render_card :content,
93
- { :type=>Card::PointerID, :name=>'my style list', :content=>'[[my css]]' },
94
- :format=>:css
98
+ it 'should render CSS of items' do
99
+ css_list = render_card(:content,
100
+ { type: Card::PointerID, name: 'my style list', content: '[[my css]]' },
101
+ format: :css
102
+ )
95
103
  # css_list.should =~ /STYLE GROUP\: \"my style list\"/
96
104
  # css_list.should =~ /Style Card\: \"my css\"/
97
105
  css_list.should =~ /#{ Regexp.escape @css }/
@@ -100,7 +108,9 @@ describe Card::Set::Type::Pointer do
100
108
 
101
109
  describe '#standardize_item' do
102
110
  it "should handle unlinked items" do
103
- pointer1 = Card.create! :name=>'pointer1', :type=>'Pointer', :content=>'bracketme'
111
+ pointer1 = Card.create!(
112
+ name: 'pointer1', type: 'Pointer', content: 'bracketme'
113
+ )
104
114
  pointer1.content.should == '[[bracketme]]'
105
115
  end
106
116
  end
@@ -1,24 +1,34 @@
1
- # What is this?
2
- # The Machine module together with the MachineInput module implements a kind of observer pattern.
3
- # It handles a collection of input cards to generate a output card (default is a file card).
4
- # If one of the input cards is changed the output card will be updated.
5
- # The classic example:
6
- # A style card observes a collection of css and sccs card to generate a file card with a css file containg the assembled compressed css.
7
-
8
- # How to use it?
9
- # Include the Machine module in the card set that is supposed to produce the output card. If the output card should be autmatically updated when a input card is changed the input card has to be in a set that includes the MachineInput module.
1
+ # WHAT IS THIS?
2
+ # The Machine module together with the MachineInput module implements a kind of
3
+ # observer pattern. It handles a collection of input cards to generate an
4
+ # outputcard (default is a file card). If one of the input cards is changed the
5
+ # output card will be updated.
6
+ #
7
+ # The classic example: A style card observes a collection of css and sccs card
8
+ # to generate a file card with a css file containg the assembled compressed css.
9
+ #
10
+ # HOW TO USE IT?
11
+ # Include the Machine module in the card set that is supposed to produce the
12
+ # output card. If the output card should be autmatically updated when a input
13
+ # card is changed the input card has to be in a set that includes the
14
+ # MachineInput module.
15
+ #
10
16
  # The default machine
11
- # - uses its item cards as input cards or the card itself if there are no item cards;
12
- # can be changed by passing a block to collect_input_cards
17
+ # - uses its item cards as input cards or the card itself if there are no item
18
+ # cards;
19
+ # - can be changed by passing a block to collect_input_cards
13
20
  # - takes the raw view of the input cards to generate the output;
14
- # can be changed by passing a block to machine_input (in the input card set)
21
+ # - can be changed by passing a block to machine_input (in the input card set)
15
22
  # - stores the output as a .txt file in the "+machine output" card;
16
- # can be cahnged by passing a filetype and/or a block to store_machine_output
17
-
18
-
19
- # How does it work?
20
- # Machine cards have a +machine input and a +machine output card. The +machine input card is a pointer to all input cards.
21
- # Including the MachineInput module creates an ":on => save" event that runs the machines of all cards that are linked to that card via the +machine input pointer.
23
+ # - can be changed by passing a filetype and/or a block to
24
+ # store_machine_output
25
+ #
26
+ #
27
+ # HOW DOES IT WORK?
28
+ # Machine cards have a "+machine input" and a "+machine output" card. The
29
+ # "+machine input" card is a pointer to all input cards. Including the
30
+ # MachineInput module creates an "on: save" event that runs the machines of
31
+ # all cards that are linked to that card via the +machine input pointer.
22
32
 
23
33
 
24
34
 
@@ -49,12 +59,12 @@ class Card
49
59
 
50
60
  def self.included(host_class)
51
61
  host_class.extend( ClassMethods )
52
- host_class.output_config = { :filetype => "txt" }
62
+ host_class.output_config = { filetype: 'txt' }
53
63
 
54
64
 
55
65
  if Codename[:machine_output] # for compatibility with old migrations
56
- host_class.card_accessor :machine_output, :type=>:file
57
- host_class.card_accessor :machine_input, :type => :pointer
66
+ host_class.card_accessor :machine_output, type: :file
67
+ host_class.card_accessor :machine_input, type: :pointer
58
68
 
59
69
  # define default machine behaviour
60
70
  host_class.collect_input_cards do
@@ -66,15 +76,15 @@ class Card
66
76
  loop_limit = 5
67
77
  while items.size > 0
68
78
  item = items.shift
69
- if item.trash or ( already_extended[item.id] and already_extended[item.id] > loop_limit)
70
- next
71
- elsif item.item_cards == [item] # no pointer card
79
+ next if item.trash
80
+ next if already_extended[item.id].to_i > loop_limit
81
+ if item.item_cards == [item] # no pointer card
72
82
  new_input << item
73
83
  else
74
84
  items.insert(0, item.item_cards)
75
85
  items.flatten!
76
86
  new_input << item if item != self
77
- already_extended[item] = already_extended[item] ? already_extended[item] + 1 : 1
87
+ already_extended[item] = already_extended[item].to_i + 1
78
88
  end
79
89
  end
80
90
  new_input
@@ -83,7 +93,8 @@ class Card
83
93
  host_class.prepare_machine_input {}
84
94
  host_class.machine_engine { |input| input }
85
95
  host_class.store_machine_output do |output|
86
- file = Tempfile.new [ id.to_s, ".#{host_class.output_config[:filetype]}" ]
96
+ filetype = host_class.output_config[:filetype]
97
+ file = Tempfile.new [ id.to_s, ".#{filetype}" ]
87
98
  file.write output
88
99
  file.rewind
89
100
  Card::Auth.as_bot do
@@ -102,7 +113,11 @@ class Card
102
113
  end
103
114
  end
104
115
 
105
- host_class.event "reset_machine_output_#{host_class.name.gsub(':','_')}".to_sym, :after => :store_subcards, :on => :save do
116
+ event_suffix = host_class.name.gsub ':', '_'
117
+ host_class.event(
118
+ "reset_machine_output_#{ event_suffix }".to_sym,
119
+ after: :store_subcards, on: :save
120
+ ) do
106
121
  reset_machine_output!
107
122
  end
108
123
  end
@@ -169,7 +184,8 @@ class Card
169
184
 
170
185
  def machine_output_url
171
186
  ensure_machine_output
172
- machine_output_card.file.url #(:default, :timestamp => false) # to get rid of additional number in url
187
+ machine_output_card.file.url #(:default, timestamp: false)
188
+ # to get rid of additional number in url
173
189
  end
174
190
 
175
191
  def machine_output_path
@@ -178,7 +194,8 @@ class Card
178
194
  end
179
195
 
180
196
  def ensure_machine_output
181
- if !output = fetch(:trait => :machine_output) or !output.selected_content_action_id
197
+ output = fetch trait: :machine_output
198
+ if !output || !output.selected_content_action_id
182
199
  update_machine_output
183
200
  end
184
201
  end
@@ -2,34 +2,58 @@ class Card
2
2
  module MachineInput
3
3
  module ClassMethods
4
4
  attr_accessor :machines_wql
5
-
5
+
6
6
  def machine_input_for args
7
7
  @machines_wql = args
8
8
  end
9
-
9
+
10
10
  def machine_input &block
11
11
  define_method :machine_input, block
12
12
  end
13
13
  end
14
-
14
+
15
15
  def self.included host_class
16
16
  host_class.extend( ClassMethods )
17
17
  host_class.machines_wql = {}
18
18
  host_class.machine_input do
19
19
  format._render_raw
20
20
  end
21
- host_class.event "after_machine_input_updated_#{host_class.name.gsub(':','_')}".to_sym, :after=>:extend, :on => :save do
22
- machines = Card.search( {:right_plus => [{:codename => "machine_input"}, {:link_to => name}]}.merge(host_class.machines_wql) )
21
+
22
+ event_suffix = host_class.name.gsub ':', '_'
23
+
24
+ host_class.event(
25
+ "after_machine_input_updated_#{ event_suffix }".to_sym,
26
+ after: :extend, on: :save
27
+ ) do
28
+
29
+ wql_statement = { right_plus: [
30
+ { codename: "machine_input" },
31
+ { link_to: name}
32
+ ]}.merge(host_class.machines_wql)
33
+ machines = Card.search(wql_statement)
23
34
  machines.each do |item|
24
35
  item.reset_machine_output! if item.kind_of? Machine
25
36
  end
26
37
  end
27
-
28
- host_class.event "before_machine_input_deleted_#{host_class.name.gsub(':','_')}".to_sym, :after=>:approve, :on => :delete do
29
- @involved_machines = Card.search( {:right_plus => [{:codename => "machine_input"}, {:link_to => name}]}.merge(host_class.machines_wql) )
38
+
39
+ host_class.event(
40
+ "before_machine_input_deleted_#{ event_suffix }".to_sym,
41
+ after: :approve, on: :delete
42
+ ) do
43
+
44
+ @involved_machines = Card.search(
45
+ {right_plus: [
46
+ {codename: "machine_input"},
47
+ {link_to: name}
48
+ ]}.merge(host_class.machines_wql)
49
+ )
30
50
  end
31
-
32
- host_class.event "after_machine_input_deleted_#{host_class.name.gsub(':','_')}".to_sym, :after=>:store_subcards, :on => :delete do
51
+
52
+ host_class.event(
53
+ "after_machine_input_deleted_#{ event_suffix }".to_sym,
54
+ after: :store_subcards, on: :delete
55
+ ) do
56
+
33
57
  @involved_machines.each do |item|
34
58
  item.reset_machine_output! if item.kind_of? Machine
35
59
  end