card 1.20.4 → 1.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/card.gemspec +9 -9
  4. data/db/migrate_core_cards/20170515101262_add_advanced_edit_cards.rb +20 -0
  5. data/db/migrate_core_cards/20170608083819_add_full_width_layout_card.rb +23 -0
  6. data/db/migrate_core_cards/20170608200649_add_input_options_codename.rb +8 -0
  7. data/db/seed/new/card_actions.yml +783 -791
  8. data/db/seed/new/card_acts.yml +65 -47
  9. data/db/seed/new/card_changes.yml +3198 -3177
  10. data/db/seed/new/card_references.yml +604 -534
  11. data/db/seed/new/cards.yml +2355 -2256
  12. data/db/seed/test/fixtures/card_actions.yml +1795 -1803
  13. data/db/seed/test/fixtures/card_acts.yml +264 -246
  14. data/db/seed/test/fixtures/card_changes.yml +6275 -6184
  15. data/db/seed/test/fixtures/card_references.yml +1305 -1263
  16. data/db/seed/test/fixtures/cards.yml +3393 -3298
  17. data/db/seed/test/seed.rb +2 -2
  18. data/db/version_core_cards.txt +1 -1
  19. data/lib/card.rb +4 -0
  20. data/lib/card/act_manager/subdirector_array.rb +1 -0
  21. data/lib/card/auth/current.rb +7 -3
  22. data/lib/card/env.rb +5 -0
  23. data/lib/card/env/success.rb +1 -1
  24. data/lib/card/format/names.rb +3 -13
  25. data/lib/card/model/save_helper.rb +4 -6
  26. data/lib/card/query.rb +2 -1
  27. data/lib/card/query/attributes.rb +34 -14
  28. data/lib/card/query/value.rb +3 -4
  29. data/lib/card/set/format.rb +29 -4
  30. data/lib/card/set/format/haml_views.rb +25 -13
  31. data/lib/card/set/trait.rb +1 -0
  32. data/lib/card/set_pattern.rb +17 -1
  33. data/lib/card/subcards.rb +3 -2
  34. data/lib/generators/card/format/format_generator.rb +2 -0
  35. data/lib/generators/card/set/set_generator.rb +2 -0
  36. data/lib/generators/card/template/USAGE +10 -0
  37. data/lib/generators/card/template/template_generator.rb +46 -0
  38. data/lib/generators/card/template/templates/haml_template.erb +1 -0
  39. data/mod/Modfile +1 -1
  40. data/mod/account/set/all/account.rb +9 -5
  41. data/mod/account/set/right/account.rb +17 -5
  42. data/mod/account/set/self/account_links.rb +1 -2
  43. data/mod/account/set/type/signup.rb +4 -5
  44. data/mod/account/set/type/user.rb +1 -1
  45. data/mod/account/spec/set/all/account_spec.rb +2 -2
  46. data/mod/account/spec/set/right/account_spec.rb +2 -2
  47. data/mod/account/spec/set/right/email_spec.rb +1 -1
  48. data/mod/account/spec/set/right/password_spec.rb +1 -1
  49. data/mod/account/spec/set/self/signin_spec.rb +2 -2
  50. data/mod/account/spec/set/type/signup_spec.rb +4 -0
  51. data/mod/ace_editor/set/abstract/ace_editor.rb +6 -3
  52. data/mod/ace_editor/set/self/script_ace.rb +1 -0
  53. data/mod/admin/set/self/admin.rb +1 -1
  54. data/mod/admin/set/self/version.rb +1 -0
  55. data/mod/basic_formats/format/css_format.rb +1 -0
  56. data/mod/basic_formats/format/csv_format.rb +1 -0
  57. data/mod/basic_formats/format/file_format.rb +1 -0
  58. data/mod/basic_formats/format/js_format.rb +1 -0
  59. data/mod/basic_formats/format/json_format.rb +1 -0
  60. data/mod/basic_formats/format/rss_format.rb +1 -0
  61. data/mod/basic_formats/format/xml_format.rb +1 -0
  62. data/mod/basic_formats/set/all/all_csv.rb +1 -1
  63. data/mod/basic_formats/set/all/base.rb +11 -3
  64. data/mod/basic_formats/set/all/json.rb +50 -8
  65. data/mod/basic_formats/set/all/rss.rb +21 -7
  66. data/mod/basic_formats/set/self/01_head/javascript.rb +1 -1
  67. data/mod/basic_formats/set/self/head.rb +1 -1
  68. data/mod/basic_formats/spec/set/all/base_spec.rb +13 -0
  69. data/mod/basic_types/set/type/html.rb +6 -2
  70. data/mod/basic_types/set/type/plain_text.rb +2 -3
  71. data/mod/bootstrap/lib/bootstrap.rb +2 -2
  72. data/mod/bootstrap/lib/bootstrap/basic_tags.rb +1 -1
  73. data/mod/bootstrap/lib/bootstrap/component.rb +2 -3
  74. data/mod/bootstrap/lib/bootstrap/component/form.rb +6 -5
  75. data/mod/bootstrap/lib/bootstrap/component/horizontal_form.rb +1 -1
  76. data/mod/bootstrap/lib/bootstrap/component/layout.rb +3 -3
  77. data/mod/bootstrap/lib/bootstrap/component_loader.rb +0 -2
  78. data/mod/bootstrap/lib/bootstrap/delegate.rb +2 -2
  79. data/mod/bootstrap/lib/bootstrapper.rb +1 -1
  80. data/mod/bootstrap/set/all/bootstrap/accordion.rb +1 -1
  81. data/mod/bootstrap/set/all/bootstrap/form.rb +2 -2
  82. data/mod/bootstrap/set/all/bootstrap/helper.rb +1 -0
  83. data/mod/bootstrap/set/all/bootstrap/wrapper.rb +1 -1
  84. data/mod/bootstrap/set/self/bootstrap_js.rb +1 -1
  85. data/mod/bootstrap/set/self/bootswatch_shared.rb +6 -6
  86. data/mod/bootstrap/set/self/script_mods.rb +1 -1
  87. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_builder_spec.rb +7 -6
  88. data/mod/bootstrap/spec/set/all/bootstrap/bootstrap_spec.rb +2 -1
  89. data/mod/bootstrap/spec/set/all/bootstrap/form_spec.rb +6 -3
  90. data/mod/bootstrap/spec/set/all/bootstrap/layout_spec.rb +3 -2
  91. data/mod/carrierwave/set/abstract/attachment.rb +1 -3
  92. data/mod/carrierwave/set/abstract/attachment/paths.rb +1 -1
  93. data/mod/carrierwave/set/abstract/attachment/storage_type.rb +11 -1
  94. data/mod/carrierwave/set/type/file.rb +3 -3
  95. data/mod/carrierwave/spec/lib/carrier_wave/file_card_uploader_spec.rb +3 -0
  96. data/mod/carrierwave/spec/set/type/file_spec.rb +24 -6
  97. data/mod/carrierwave/spec/set/type/image_spec.rb +3 -0
  98. data/mod/core/chunk/link.rb +1 -1
  99. data/mod/core/chunk/nest.rb +2 -1
  100. data/mod/core/chunk/query_reference.rb +1 -1
  101. data/mod/core/chunk/reference.rb +1 -0
  102. data/mod/core/chunk/uri.rb +4 -3
  103. data/mod/core/set/abstract/lock.rb +26 -0
  104. data/mod/core/set/all/assign_attributes.rb +8 -4
  105. data/mod/core/set/all/collection.rb +16 -7
  106. data/mod/core/set/all/content.rb +6 -0
  107. data/mod/core/set/all/event.rb +1 -1
  108. data/mod/core/set/all/fetch.rb +2 -2
  109. data/mod/core/set/all/haml.rb +5 -15
  110. data/mod/core/set/all/initialize.rb +2 -2
  111. data/mod/core/set/all/name.rb +1 -1
  112. data/mod/core/set/all/permissions.rb +28 -16
  113. data/mod/core/set/all/rules.rb +1 -2
  114. data/mod/core/set/all/subcards.rb +3 -3
  115. data/mod/core/set/all/templating.rb +5 -1
  116. data/mod/core/set/all/trash.rb +1 -1
  117. data/mod/core/set/all/utils.rb +1 -1
  118. data/mod/core/spec/set/all/actify_spec.rb +1 -1
  119. data/mod/core/spec/set/all/assign_attributes_spec.rb +2 -2
  120. data/mod/core/spec/set/all/collection_spec.rb +6 -3
  121. data/mod/core/spec/set/all/export_spec.rb +40 -112
  122. data/mod/core/spec/set/all/name_spec.rb +1 -1
  123. data/mod/core/spec/set/all/permissions_spec.rb +7 -7
  124. data/mod/core/spec/set/all/rules2_spec.rb +25 -25
  125. data/mod/core/spec/set/all/rules_spec.rb +2 -7
  126. data/mod/developer/set/all/event_viz.rb +1 -1
  127. data/mod/developer/set/right/debug.rb +1 -1
  128. data/mod/history/lib/card/act.rb +1 -0
  129. data/mod/history/lib/card/act/act_renderer.rb +23 -20
  130. data/mod/history/lib/card/act/act_renderer/absolute_act_renderer.rb +0 -1
  131. data/mod/history/lib/card/act/act_renderer/relative_act_renderer.rb +1 -0
  132. data/mod/history/lib/card/action.rb +1 -1
  133. data/mod/history/lib/card/action/action_renderer.rb +2 -2
  134. data/mod/history/lib/card/change.rb +2 -1
  135. data/mod/history/set/all/action_view.rb +1 -1
  136. data/mod/history/set/all/content_history.rb +7 -4
  137. data/mod/history/set/all/history.rb +6 -6
  138. data/mod/machines/file/all_script_machine_output/file.js +50 -34
  139. data/mod/machines/file/all_style_machine_output/file.css +1 -1
  140. data/mod/machines/lib/javascript/wagn.js.coffee +29 -18
  141. data/mod/machines/lib/javascript/wagn_layout.js.coffee +7 -3
  142. data/mod/machines/lib/stylesheets/style_cards.scss +10 -10
  143. data/mod/machines/set/abstract/machine.rb +5 -28
  144. data/mod/machines/set/abstract/script.rb +7 -4
  145. data/mod/machines/set/all/reset_machines.rb +1 -1
  146. data/mod/machines/set/self/script_jquery_helper.rb +2 -2
  147. data/mod/machines/set/self/script_slot.rb +1 -1
  148. data/mod/machines/set/type/coffee_script.rb +3 -2
  149. data/mod/machines/set/type/css.rb +7 -3
  150. data/mod/machines/set/type/scss.rb +7 -1
  151. data/mod/machines/spec/set/type/coffeescript_spec.rb +1 -1
  152. data/mod/machines/spec/set/type/javascript_spec.rb +1 -1
  153. data/mod/machines/spec/set/type/scss_spec.rb +3 -2
  154. data/mod/machines/spec/set/type/skin_spec.rb +1 -1
  155. data/mod/machines/spec/shared_examples/machine.rb +5 -3
  156. data/mod/machines/spec/shared_examples/machine_input.rb +1 -0
  157. data/mod/notifications/format/email_html_format.rb +1 -0
  158. data/mod/notifications/set/all/follow.rb +1 -1
  159. data/mod/notifications/set/all/observer.rb +1 -1
  160. data/mod/notifications/set/all/send_notifications.rb +2 -2
  161. data/mod/notifications/set/self/follow_defaults.rb +3 -8
  162. data/mod/notifications/set/type/email_template/email_config.rb +2 -2
  163. data/mod/notifications/set/type_plus_right/user/follow.rb +2 -2
  164. data/mod/notifications/spec/set/all/follow_spec.rb +7 -0
  165. data/mod/notifications/spec/set/all/notify_spec.rb +3 -0
  166. data/mod/notifications/spec/set/all/observer_spec.rb +1 -1
  167. data/mod/notifications/spec/set/right/followers_spec.rb +1 -0
  168. data/mod/pointer/set/abstract/00_paging_params.rb +11 -0
  169. data/mod/pointer/set/abstract/{00_paging.rb → 01_paging.rb} +10 -6
  170. data/mod/pointer/set/abstract/{00_paging → 01_paging}/paging_links.rb +0 -0
  171. data/mod/pointer/set/abstract/{01_pointer.rb → 02_pointer.rb} +26 -5
  172. data/mod/pointer/set/abstract/{01_pointer → 02_pointer}/edit.rb +3 -5
  173. data/mod/pointer/set/self/input_options.rb +12 -0
  174. data/mod/pointer/spec/set/self/input_options_spec.rb +8 -0
  175. data/mod/pointer/spec/set/type/pointer_spec.rb +3 -2
  176. data/mod/prosemirror_editor/set/abstract/prosemirror_editor.rb +1 -1
  177. data/mod/prosemirror_editor/set/self/script_prosemirror.rb +1 -0
  178. data/mod/settings/lib/card/setting.rb +1 -2
  179. data/mod/settings/set/abstract/permission.rb +1 -1
  180. data/mod/settings/set/self/add_help.rb +1 -1
  181. data/mod/settings/set/self/autoname.rb +1 -1
  182. data/mod/settings/set/self/csv_structure.rb +2 -0
  183. data/mod/settings/set/self/help.rb +1 -1
  184. data/mod/settings/set/self/input.rb +1 -2
  185. data/mod/settings/set/self/options.rb +2 -2
  186. data/mod/settings/set/self/options_label.rb +2 -2
  187. data/mod/settings/set/type/setting.rb +1 -1
  188. data/mod/settings/spec/set/right/script_spec.rb +1 -1
  189. data/mod/settings/spec/set/right/style_spec.rb +1 -1
  190. data/mod/solid_cache/set/abstract/solid_cache.rb +5 -3
  191. data/mod/solid_cache/spec/set/abstract/solid_cache_spec.rb +4 -3
  192. data/mod/standard/set/abstract/01_search_params.rb +4 -3
  193. data/mod/standard/set/abstract/search.rb +2 -1
  194. data/mod/standard/set/abstract/toolbar_split_button.rb +22 -0
  195. data/mod/standard/set/all/links.rb +3 -3
  196. data/mod/standard/set/all/rich_html/classy.rb +37 -0
  197. data/mod/standard/set/all/rich_html/editing.rb +6 -2
  198. data/mod/standard/set/all/rich_html/editor.rb +50 -0
  199. data/mod/standard/set/all/rich_html/form.rb +19 -12
  200. data/mod/standard/set/all/rich_html/form_elements.rb +2 -2
  201. data/mod/standard/set/all/rich_html/formgroup.rb +2 -1
  202. data/mod/standard/set/all/rich_html/header.rb +2 -27
  203. data/mod/standard/set/all/rich_html/menu.rb +1 -1
  204. data/mod/standard/set/all/rich_html/new.rb +5 -1
  205. data/mod/standard/set/all/rich_html/toolbar.rb +15 -60
  206. data/mod/standard/set/all/rich_html/wrapper.rb +6 -3
  207. data/mod/standard/set/right/when_created.rb +2 -2
  208. data/mod/standard/set/rstar/rules_editor.rb +10 -7
  209. data/mod/standard/set/self/activity_toolbar_button.rb +14 -0
  210. data/mod/standard/set/self/recent.rb +7 -2
  211. data/mod/standard/set/self/rules_toolbar_button.rb +42 -0
  212. data/mod/standard/set/self/search.rb +19 -6
  213. data/mod/standard/set/type/basic.rb +6 -6
  214. data/mod/standard/set/type/cardtype.rb +7 -3
  215. data/mod/standard/set/type/date.rb +2 -4
  216. data/mod/standard/set/type/layout_type.rb +1 -0
  217. data/mod/standard/set/type/list.rb +1 -1
  218. data/mod/standard/set/type/listed_by.rb +1 -2
  219. data/mod/standard/set/type/number.rb +4 -2
  220. data/mod/standard/set/type/phrase.rb +4 -2
  221. data/mod/standard/set/type/search_type.rb +11 -3
  222. data/mod/standard/set/type/set.rb +8 -8
  223. data/mod/standard/set/type/toggle.rb +1 -3
  224. data/mod/standard/set/type/uri.rb +6 -2
  225. data/mod/standard/spec/chunk/include_spec.rb +3 -2
  226. data/mod/standard/spec/chunk/query_reference_spec.rb +2 -2
  227. data/mod/standard/spec/set/all/history_spec.rb +1 -0
  228. data/mod/standard/spec/set/all/links_spec.rb +1 -0
  229. data/mod/standard/spec/set/all/rich_html/toolbar_spec.rb +2 -0
  230. data/mod/standard/spec/set/self/activity_toolbar_button_spec.rb +22 -0
  231. data/mod/standard/spec/set/type/email_template/email_config_spec.rb +10 -8
  232. data/mod/standard/spec/set/type/email_template_spec.rb +1 -0
  233. data/mod/standard/spec/set/type/list_spec.rb +2 -0
  234. data/mod/standard/spec/set/type/listed_by_spec.rb +5 -0
  235. data/mod/standard/spec/set/type/search_type_spec.rb +1 -1
  236. data/mod/standard/spec/set/type/toggle_spec.rb +1 -2
  237. data/mod/standard/spec/set/type/uri_spec.rb +0 -1
  238. data/mod/tinymce_editor/db/migrate_cards/20160804112560_add_tinymce_cards.rb +3 -1
  239. data/mod/tinymce_editor/set/abstract/tinymce_editor.rb +1 -1
  240. data/mod/tinymce_editor/set/self/script_tinymce.rb +1 -0
  241. data/mod/twitter/db/migrate_cards/20170305112346_add_twitter_cards.rb +1 -1
  242. data/mod/twitter/set/type/twitter_template.rb +1 -1
  243. data/spec/lib/card/format_spec.rb +26 -7
  244. data/spec/lib/card/loader_spec.rb +96 -35
  245. data/spec/lib/card/query_spec.rb +0 -1
  246. data/spec/support/card_spec_loader.rb +1 -0
  247. data/spec/support/helper/card_helper.rb +0 -36
  248. data/spec/support/helper/set_helper.rb +80 -0
  249. data/spec/support/matchers.rb +74 -0
  250. data/tmpsets/set/mod001-core/all/actify.rb +5 -6
  251. data/tmpsets/set/mod001-core/all/fetch.rb +14 -12
  252. data/tmpsets/set/mod001-core/all/name.rb +1 -1
  253. data/tmpsets/set/mod001-core/all/permissions.rb +12 -22
  254. data/tmpsets/set/mod001-core/all/tracked_attributes.rb +76 -0
  255. data/tmpsets/set/mod001-core/all/utils.rb +40 -3
  256. data/tmpsets/set/mod002-history/all/history.rb +1 -2
  257. data/tmpsets/set/mod008-solid_cache/abstract/solid_cache.rb +1 -1
  258. data/tmpsets/set/mod013-carrierwave/abstract/attachment.rb +282 -0
  259. data/tmpsets/set/mod013-carrierwave/type/file.rb +155 -0
  260. data/tmpsets/set/mod013-carrierwave/type/image.rb +96 -0
  261. data/tmpsets/set/mod014-admin/self/admin.rb +113 -0
  262. data/tmpsets/set/mod014-admin/self/admin_info.rb +110 -0
  263. data/tmpsets/set/mod014-admin/self/version.rb +15 -0
  264. data/tmpsets/set/mod015-developer/all/event_viz.rb +59 -0
  265. data/tmpsets/set/mod015-developer/all/view_viz.rb +30 -0
  266. data/tmpsets/set/mod015-developer/right/debug.rb +96 -0
  267. metadata +52 -22
@@ -17,6 +17,8 @@ class Card
17
17
  template "format_spec_template.erb", format_path("spec")
18
18
  end
19
19
 
20
+ private
21
+
20
22
  def format_path modifier=nil
21
23
  suffix = modifier ? "_#{modifier}" : nil
22
24
  filename = "#{module_name}_format#{suffix}.rb"
@@ -18,6 +18,8 @@ class Card
18
18
  template "set_spec_template.erb", set_path("spec")
19
19
  end
20
20
 
21
+ private
22
+
21
23
  def set_path modifier=nil
22
24
  suffix = modifier ? "_#{modifier}" : nil
23
25
  filename = "#{anchors.last}#{suffix}.rb"
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Generates a haml template.
3
+
4
+ Example:
5
+ wagn generate card:template standard type tshirt core
6
+
7
+ This will create:
8
+ mod/standard/template/type/tshirt/core.haml
9
+
10
+
@@ -0,0 +1,46 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require "generators/card"
4
+
5
+ class Card
6
+ module Generators
7
+ # A wagn generator that creates a haml template for a view.
8
+ # Run "wagn generate card:template" to get usage information.
9
+ class TemplateGenerator < NamedBase
10
+ source_root File.expand_path("../templates", __FILE__)
11
+
12
+ argument :set_pattern, required: true
13
+ argument :anchors, required: true, type: :array
14
+ class_option "core", type: :boolean, aliases: "-c",
15
+ default: false, group: :runtime,
16
+ desc: "create haml template in Card gem"
17
+
18
+ def create_files
19
+ with_valid_arguments do
20
+ template "haml_template.erb", set_path
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def with_valid_arguments
27
+ if !Dir.exist? mod_path
28
+ warn "invalid mod name: #{file_name}. Directory #{mod_path} doesn't exist."
29
+ # Card.set_patterns not loaded at this point
30
+ elsif !%w[self type type_plus_right ltype_rtype rstar star
31
+ type all_plus all].include? set_pattern
32
+ warn "invalid set pattern: #{set_pattern}"
33
+ else
34
+ yield
35
+ end
36
+ end
37
+
38
+ def set_path
39
+ filename = "#{anchors.last}.haml"
40
+ dirs = anchors[0..-2]
41
+ path_parts = [mod_path, "template", set_pattern, dirs, filename]
42
+ File.join(*path_parts.compact)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -5,7 +5,7 @@ mod 'basic_formats'
5
5
  mod 'pointer'
6
6
  mod 'ace_editor'
7
7
  mod 'prosemirror_editor'
8
- mod 'tiny_mce'
8
+ mod 'tinymce_editor'
9
9
  mod 'solid_cache'
10
10
  mod 'basic_types'
11
11
  mod 'machines'
@@ -17,10 +17,11 @@ def parties
17
17
  end
18
18
 
19
19
  def among? ok_ids
20
- ok_ids.each do |ok_id|
21
- return true if parties.member? ok_id
20
+ ok_ids.any? do |ok_id|
21
+ ok_id == Card::AnyoneID ||
22
+ (ok_id == Card::AnyoneWithRoleID && all_roles.size > 1) ||
23
+ parties.member?(ok_id)
22
24
  end
23
- ok_ids.member? Card::AnyoneID
24
25
  end
25
26
 
26
27
  def own_account?
@@ -48,10 +49,13 @@ def all_roles
48
49
  end
49
50
 
50
51
  def fetch_roles
52
+ [Card::AnyoneSignedInID] + role_ids_from_roles_trait
53
+ end
54
+
55
+ def role_ids_from_roles_trait
51
56
  Auth.as_bot do
52
57
  role_trait = fetch trait: :roles
53
- next [Card::AnyoneSignedInID] unless role_trait
54
- [Card::AnyoneSignedInID] + role_trait.item_ids
58
+ role_trait ? role_trait.item_ids : []
55
59
  end
56
60
  end
57
61
 
@@ -57,12 +57,27 @@ end
57
57
 
58
58
  format :html do
59
59
  view :raw do
60
+ # FIXME: use field_nest instead of parsing content
61
+ # Problem: whey you do that then the fields are missing in the sign up form
62
+ # output(
63
+ # [
64
+ # field_nest(:email, view: :titled, title: "email"),
65
+ # field_nest(:password, view: :titled, title: "password")
66
+ # ]
67
+ # )
60
68
  %({{+#{Card[:email].name}|titled;title:email}}
61
- {{+#{Card[:password].name}|titled;title:password}})
69
+ {{+#{Card[:password].name}|titled;title:password}})
62
70
  end
63
71
 
64
72
  view :edit do
65
73
  voo.structure = true
74
+ voo.edit_structure = [[:email, "email"], [:password, "password"]]
75
+ super()
76
+ end
77
+
78
+ view :edit_in_form do
79
+ voo.structure = true
80
+ voo.edit_structure = [[:email, "email"], [:password, "password"]]
66
81
  super()
67
82
  end
68
83
  end
@@ -120,10 +135,7 @@ def reset_password_try_again
120
135
  "Please check your email for a new password reset link." }
121
136
  end
122
137
 
123
-
124
- def edit_password_success_args
125
-
126
- end
138
+ def edit_password_success_args; end
127
139
 
128
140
  def reset_password?
129
141
  @env_token = Env.params[:token]
@@ -1,7 +1,7 @@
1
1
 
2
2
  format :html do
3
3
  def item_links _args=nil
4
- [:my_card, :invite, :sign_out, :sign_up, :sign_in].map do |link_view|
4
+ %i[my_card invite sign_out sign_up sign_in].map do |link_view|
5
5
  optional_render link_view
6
6
  end
7
7
  end
@@ -50,7 +50,6 @@ format :html do
50
50
 
51
51
  view(:navbar_right, cache: :never) { super() }
52
52
 
53
-
54
53
  view :core, cache: :never do
55
54
  status_class = Auth.signed_in? ? "logged-in" : "logged-out"
56
55
  wrap_with :span, id: "logging", class: status_class do
@@ -1,10 +1,9 @@
1
1
  format :html do
2
2
  def invitation?
3
- if @invitation.nil?
4
- @invitation = Auth.signed_in? && args[:account].confirm_ok?
5
- else
6
- @invitation
7
- end
3
+ return @invitation unless @invitation.nil?
4
+ @invitation = Auth.signed_in? &&
5
+ (card.fetch trait: :account, new: {}).confirm_ok?
6
+ # consider making account a card_accessor?
8
7
  end
9
8
 
10
9
  view :new do
@@ -5,7 +5,7 @@ attr_accessor :email
5
5
 
6
6
  format :html do
7
7
  view :setup, tags: :unknown_ok,
8
- perms: ->(_r) { Auth.needs_setup? } do |args|
8
+ perms: ->(_r) { Auth.needs_setup? } do |_args|
9
9
  voo.title = "Welcome, Wagneer!"
10
10
  voo.show! :help
11
11
  voo.hide! :menu
@@ -129,11 +129,11 @@ describe Card::Set::All::Account do
129
129
  expect(@read_rules.member?(Card.fetch("*all+*read").id)).to be_truthy
130
130
  end
131
131
 
132
- it "13 more should apply to Joe Admin" do
132
+ it "14 more should apply to Joe Admin" do
133
133
  # includes lots of account rules...
134
134
  Card::Auth.as("joe_admin") do
135
135
  ids = Card::Auth.as_card.read_rules
136
- expect(ids.length).to eq(@read_rules.size + 18)
136
+ expect(ids.length).to eq(@read_rules.size + 14)
137
137
  end
138
138
  end
139
139
  end
@@ -109,7 +109,7 @@ describe Card::Set::Right::Account do
109
109
  end
110
110
 
111
111
  describe "#update_attributes" do
112
- before :each do
112
+ before do
113
113
  @account = Card::Auth.find_account_by_email("joe@user.com")
114
114
  end
115
115
 
@@ -127,7 +127,7 @@ describe Card::Set::Right::Account do
127
127
  end
128
128
 
129
129
  describe "#reset_password" do
130
- before :each do
130
+ before do
131
131
  @email = "joe@user.com"
132
132
  @account = Card::Auth.find_account_by_email(@email)
133
133
  @account.send_reset_password_token
@@ -27,7 +27,7 @@ describe Card::Set::Right::Email do
27
27
 
28
28
  context "+*account+*email" do
29
29
  context "update" do
30
- before :each do
30
+ before do
31
31
  @email_card = Card["u1"].account.email_card
32
32
  end
33
33
 
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  describe Card::Set::Right::Password do
4
- before :each do
4
+ before do
5
5
  @account = Card::Auth.find_account_by_email("joe@user.com")
6
6
  end
7
7
 
@@ -3,7 +3,7 @@
3
3
  # FIXME: need more specific assertions
4
4
 
5
5
  describe Card::Set::Self::Signin do
6
- before :each do
6
+ before do
7
7
  @card = Card[:signin]
8
8
  end
9
9
 
@@ -51,7 +51,7 @@ describe Card::Set::Self::Signin do
51
51
  end
52
52
 
53
53
  context "#reset password" do
54
- before :each do
54
+ before do
55
55
  Card::Env.params[:reset_password] = true
56
56
  end
57
57
 
@@ -205,6 +205,10 @@ describe Card::Set::Type::Signup do
205
205
  expect(@account.token).to be_present
206
206
  expect(@account.password).not_to be_present
207
207
  end
208
+
209
+ it "considers signups created by signed-in users to be invitations" do
210
+ expect(@signup.format.invitation?).to be(true)
211
+ end
208
212
  end
209
213
 
210
214
  # describe '#signup_notifications' do
@@ -1,8 +1,11 @@
1
1
  format :html do
2
- view :editor do |args|
3
- args[:ace_mode] ||= "html"
2
+ def ace_editor_input
4
3
  text_area :content, rows: 5,
5
4
  class: "card-content ace-editor-textarea",
6
- "data-ace-mode" => args[:ace_mode]
5
+ "data-ace-mode" => ace_mode
6
+ end
7
+
8
+ def ace_mode
9
+ :html
7
10
  end
8
11
  end
@@ -1,3 +1,4 @@
1
1
  include_set Abstract::CodeFile
2
2
 
3
3
  Self::ScriptMods.add_to_basket :item_codenames, :script_ace
4
+ Self::InputOptions.add_to_basket :options, "ace editor"
@@ -27,7 +27,7 @@ format :html do
27
27
  stats += Array.wrap task[:stats]
28
28
  end
29
29
  table_content = stats.map { |args| stat_row(args) }
30
- table table_content, header: %w(Stat Value Action)
30
+ table table_content, header: %w[Stat Value Action]
31
31
  end
32
32
 
33
33
  def card_stats
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require_dependency "card/version"
3
4
 
4
5
  view :raw do |_args|
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class CssFormat < Format
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class CsvFormat < TextFormat
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class FileFormat < Format
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class JsFormat < Format
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class JsonFormat < DataFormat
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class RssFormat < HtmlFormat
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  class Card
3
4
  class Format
4
5
  class XmlFormat < DataFormat
@@ -27,7 +27,7 @@ format :csv do
27
27
  end
28
28
 
29
29
  def name_with_fields_row
30
- nested_fields.each_with_object([card.name]) do |(field_name, options), row|
30
+ nested_fields.each_with_object([card.name]) do |(field_name, _options), row|
31
31
  row << nest(field_name)
32
32
  end
33
33
  end
@@ -35,9 +35,17 @@ format do
35
35
 
36
36
  # DATE VIEWS
37
37
 
38
- view(:created_at, closed: true) { time_ago_in_words card.created_at }
39
- view(:updated_at, closed: true) { time_ago_in_words card.updated_at }
40
- view(:acted_at, closed: true) { time_ago_in_words card.acted_at }
38
+ view(:created_at, closed: true) { date_view card.created_at }
39
+ view(:updated_at, closed: true) { date_view card.updated_at }
40
+ view(:acted_at, closed: true) { date_view card.acted_at }
41
+
42
+ def date_view date
43
+ if voo.variant
44
+ date.strftime voo.variant
45
+ else
46
+ time_ago_in_words date
47
+ end
48
+ end
41
49
 
42
50
  # CONTENT VIEWS
43
51
 
@@ -1,4 +1,6 @@
1
1
  format :json do
2
+ AUTOCOMPLETE_LIMIT = 8 # number of name suggestions for autocomplete text fields
3
+
2
4
  def default_nest_view
3
5
  :atom
4
6
  end
@@ -20,11 +22,27 @@ format :json do
20
22
  end
21
23
 
22
24
  view :name_complete, cache: :never do
25
+ name_search
26
+ end
27
+
28
+ view :junction_name_complete, cache: :never do
29
+ name_search query_attribute: :junction_complete
30
+ end
31
+
32
+ view :name_match, cache: :never do
33
+ starts_with = name_search query_attribute: :junction_complete
34
+ remaining_slots = AUTOCOMPLETE_LIMIT - starts_with.size
35
+ return starts_with if remaining_slots.zero?
36
+ starts_with + name_search(query_attribute: :name_match,
37
+ limit: remaining_slots)
38
+ end
39
+
40
+ def name_search query_attribute: :complete, limit: AUTOCOMPLETE_LIMIT
23
41
  # context is "" so that term will not be interpreted in the context
24
42
  # of search card name. However, this can break searches where the
25
43
  # search card name is required (eg found_by)
26
- card.search complete: params["term"], limit: 8, sort: "name",
27
- return: "name", context: ""
44
+ card.search limit: limit, sort: "name", return: "name", context: "",
45
+ query_attribute => params[:term]
28
46
  end
29
47
 
30
48
  view :status, tags: :unknown_ok, perms: :none, cache: :never do
@@ -37,17 +55,16 @@ format :json do
37
55
  end
38
56
 
39
57
  view :content, cache: :never do
40
- req = controller.request
41
- { url: (req && req.original_url),
58
+ { url: request_url,
42
59
  timestamp: Time.now.to_s,
43
- card: _render_atom }
60
+ card: _render_atom }
44
61
  end
45
62
 
46
63
  view :atom, cache: :never do
47
64
  h = { name: card.name, type: card.type_name }
48
- h[:content] = card.content unless card.structure
65
+ h[:content] = card.content unless card.structure
49
66
  h[:codename] = card.codename if card.codename
50
- h[:value] = _render_core if @depth < max_depth
67
+ h[:value] = _render_core if @depth < max_depth
51
68
  h
52
69
  end
53
70
 
@@ -55,10 +72,35 @@ format :json do
55
72
  view :cast, cache: :never do
56
73
  card.cast
57
74
  end
75
+
76
+ view :marks do
77
+ {
78
+ id: card.id,
79
+ name: card.name,
80
+ url: path
81
+ }
82
+ end
83
+
84
+ view :essentials do
85
+ if voo.show? :marks
86
+ render_marks.merge(essentials)
87
+ else
88
+ essentials
89
+ end
90
+ end
91
+
92
+ def essentials
93
+ return {} if card.structure
94
+ { content: card.content }
95
+ end
96
+
97
+ def request_url
98
+ req = controller.request
99
+ req ? req.original_url : path
100
+ end
58
101
  end
59
102
 
60
103
  # TODO: perhaps this should be in a general "data" module.
61
104
  def cast
62
105
  real? ? { id: id } : { name: name, type_id: type_id, content: db_content }
63
106
  end
64
-