cortex 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. checksums.yaml +7 -0
  2. data/.babelrc +18 -0
  3. data/.codeclimate.yml +43 -0
  4. data/.csslintrc +2 -0
  5. data/.editorconfig +9 -0
  6. data/.eslintignore +1 -0
  7. data/.eslintrc.yml +277 -0
  8. data/.github/PULL_REQUEST_TEMPLATE.md +47 -0
  9. data/.gitignore +82 -0
  10. data/.npmignore +34 -0
  11. data/.postcssrc.yml +3 -0
  12. data/.rspec +3 -0
  13. data/.rubocop.yml +1156 -0
  14. data/CODE_OF_CONDUCT.md +74 -0
  15. data/CONTRIBUTING.md +58 -0
  16. data/Gemfile +101 -0
  17. data/Gemfile.lock +604 -0
  18. data/Guardfile +23 -0
  19. data/LICENSE.md +201 -0
  20. data/README.md +239 -0
  21. data/Rakefile +22 -0
  22. data/app/assets/config/cortex_manifest.js +4 -0
  23. data/app/assets/fonts/cortex/Montserrat-Light.otf +0 -0
  24. data/app/assets/fonts/cortex/Montserrat-Medium.otf +0 -0
  25. data/app/assets/fonts/cortex/Montserrat-Regular.otf +0 -0
  26. data/app/assets/fonts/cortex/Montserrat-SemiBold.otf +0 -0
  27. data/app/assets/images/cortex/favicon.ico +0 -0
  28. data/app/assets/images/cortex/icons/add.svg +59 -0
  29. data/app/assets/images/cortex/icons/blog.png +0 -0
  30. data/app/assets/images/cortex/icons/media.png +0 -0
  31. data/app/assets/images/cortex/logo.svg +43 -0
  32. data/app/assets/javascripts/cortex/application.js +17 -0
  33. data/app/assets/javascripts/cortex/authentication.js +6 -0
  34. data/app/assets/javascripts/cortex/base.js +6 -0
  35. data/app/assets/javascripts/cortex/datepicker_init.js +29 -0
  36. data/app/assets/javascripts/cortex/flash.js +7 -0
  37. data/app/assets/javascripts/cortex/form.js +6 -0
  38. data/app/assets/javascripts/cortex/media_dialogs.js +40 -0
  39. data/app/assets/javascripts/cortex/quick_links.js +13 -0
  40. data/app/assets/stylesheets/cortex/application.scss +34 -0
  41. data/app/assets/stylesheets/cortex/authentication.scss +34 -0
  42. data/app/assets/stylesheets/cortex/base.scss +4 -0
  43. data/app/assets/stylesheets/cortex/bootstrap-namespaced.scss +57 -0
  44. data/app/assets/stylesheets/cortex/components/card.scss +9 -0
  45. data/app/assets/stylesheets/cortex/components/dialog.scss +67 -0
  46. data/app/assets/stylesheets/cortex/components/flash.scss +60 -0
  47. data/app/assets/stylesheets/cortex/components/form.scss +45 -0
  48. data/app/assets/stylesheets/cortex/components/header.scss +53 -0
  49. data/app/assets/stylesheets/cortex/components/index.scss +28 -0
  50. data/app/assets/stylesheets/cortex/components/jumbo-button.scss +41 -0
  51. data/app/assets/stylesheets/cortex/components/loaders.scss +76 -0
  52. data/app/assets/stylesheets/cortex/components/notes.scss +26 -0
  53. data/app/assets/stylesheets/cortex/components/sidebar.scss +120 -0
  54. data/app/assets/stylesheets/cortex/components/table.scss +7 -0
  55. data/app/assets/stylesheets/cortex/components/tenant-switcher.scss +209 -0
  56. data/app/assets/stylesheets/cortex/components/ui.scss +119 -0
  57. data/app/assets/stylesheets/cortex/demo.scss +140 -0
  58. data/app/assets/stylesheets/cortex/directives/aspect-ratio.scss +9 -0
  59. data/app/assets/stylesheets/cortex/helpers.scss +1701 -0
  60. data/app/assets/stylesheets/cortex/layout.scss +21 -0
  61. data/app/assets/stylesheets/cortex/material-icons.scss +13 -0
  62. data/app/assets/stylesheets/cortex/variables/_colors.scss +46 -0
  63. data/app/assets/stylesheets/cortex/variables/_material-overrides.scss +1 -0
  64. data/app/assets/stylesheets/cortex/variables/_typography.scss +114 -0
  65. data/app/cells/cortex/application_cell.rb +8 -0
  66. data/app/cells/cortex/content_type/nav.haml +5 -0
  67. data/app/cells/cortex/content_type_cell.rb +10 -0
  68. data/app/cells/cortex/field_cell.rb +35 -0
  69. data/app/cells/cortex/index/content_item/column.haml +4 -0
  70. data/app/cells/cortex/index/content_item_cell.rb +37 -0
  71. data/app/cells/cortex/index/index.haml +5 -0
  72. data/app/cells/cortex/index/table_body.haml +11 -0
  73. data/app/cells/cortex/index/table_headers.haml +5 -0
  74. data/app/cells/cortex/index_cell.rb +53 -0
  75. data/app/cells/cortex/wizard/column/show.haml +10 -0
  76. data/app/cells/cortex/wizard/column_cell.rb +21 -0
  77. data/app/cells/cortex/wizard/field/show.haml +30 -0
  78. data/app/cells/cortex/wizard/field_cell.rb +29 -0
  79. data/app/cells/cortex/wizard/plugin/show.haml +1 -0
  80. data/app/cells/cortex/wizard/plugin_cell.rb +28 -0
  81. data/app/cells/cortex/wizard/show.haml +1 -0
  82. data/app/cells/cortex/wizard/step/show.haml +2 -0
  83. data/app/cells/cortex/wizard/step_cell.rb +17 -0
  84. data/app/cells/cortex/wizard_cell.rb +15 -0
  85. data/app/containers/cortex/transaction_container.rb +23 -0
  86. data/app/controllers/concerns/cortex/decoratable.rb +16 -0
  87. data/app/controllers/cortex/admin_controller.rb +7 -0
  88. data/app/controllers/cortex/application_controller.rb +19 -0
  89. data/app/controllers/cortex/authentication/passwords_controller.rb +3 -0
  90. data/app/controllers/cortex/authentication/sessions_controller.rb +3 -0
  91. data/app/controllers/cortex/content_items_controller.rb +75 -0
  92. data/app/controllers/cortex/content_types_controller.rb +19 -0
  93. data/app/controllers/cortex/dashboards_controller.rb +7 -0
  94. data/app/controllers/cortex/graphql_controller.rb +40 -0
  95. data/app/controllers/cortex/tenants_controller.rb +12 -0
  96. data/app/devise/cortex/authentication_failure.rb +12 -0
  97. data/app/graphql/cortex/cortex_schema.rb +8 -0
  98. data/app/graphql/cortex/interfaces/.keep +0 -0
  99. data/app/graphql/cortex/mutations/.keep +0 -0
  100. data/app/graphql/cortex/types/content_item_type.rb +31 -0
  101. data/app/graphql/cortex/types/content_type_type.rb +23 -0
  102. data/app/graphql/cortex/types/contract_type.rb +10 -0
  103. data/app/graphql/cortex/types/date_time_type.rb +8 -0
  104. data/app/graphql/cortex/types/field_item_type.rb +15 -0
  105. data/app/graphql/cortex/types/field_type.rb +18 -0
  106. data/app/graphql/cortex/types/mutation_type.rb +5 -0
  107. data/app/graphql/cortex/types/query_type.rb +45 -0
  108. data/app/graphql/cortex/types/tenant_type.rb +19 -0
  109. data/app/graphql/cortex/types/user_type.rb +20 -0
  110. data/app/helpers/cortex/application_helper.rb +75 -0
  111. data/app/helpers/cortex/cells/association_helper.rb +25 -0
  112. data/app/helpers/cortex/content_item_helper.rb +106 -0
  113. data/app/helpers/cortex/dashboard_helper.rb +19 -0
  114. data/app/helpers/cortex/popup_helper.rb +27 -0
  115. data/app/jobs/cortex/application_job.rb +4 -0
  116. data/app/mailers/cortex/application_mailer.rb +6 -0
  117. data/app/mailers/cortex/password_reset_mailer.rb +13 -0
  118. data/app/models/concerns/cortex/belongs_to_tenant.rb +13 -0
  119. data/app/models/concerns/cortex/has_firstname_lastname.rb +11 -0
  120. data/app/models/concerns/cortex/has_gravatar.rb +18 -0
  121. data/app/models/concerns/cortex/searchable.rb +11 -0
  122. data/app/models/concerns/cortex/searchable_content_item.rb +31 -0
  123. data/app/models/concerns/cortex/searchable_content_item_for_content_type.rb +52 -0
  124. data/app/models/concerns/cortex/searchable_content_type.rb +11 -0
  125. data/app/models/cortex/application_record.rb +17 -0
  126. data/app/models/cortex/content_item.rb +71 -0
  127. data/app/models/cortex/content_type.rb +27 -0
  128. data/app/models/cortex/contentable_decorator.rb +8 -0
  129. data/app/models/cortex/contract.rb +12 -0
  130. data/app/models/cortex/decorator.rb +13 -0
  131. data/app/models/cortex/field.rb +36 -0
  132. data/app/models/cortex/field_item.rb +54 -0
  133. data/app/models/cortex/field_type.rb +44 -0
  134. data/app/models/cortex/permission.rb +11 -0
  135. data/app/models/cortex/role.rb +12 -0
  136. data/app/models/cortex/tenant.rb +41 -0
  137. data/app/models/cortex/user.rb +77 -0
  138. data/app/operations/cortex/database_transact_operation.rb +17 -0
  139. data/app/operations/cortex/execute_content_item_state_change_operation.rb +16 -0
  140. data/app/operations/cortex/parse_content_item_field_items_operation.rb +18 -0
  141. data/app/operations/cortex/persist_content_item_operation.rb +12 -0
  142. data/app/policies/cortex/application_policy.rb +55 -0
  143. data/app/policies/cortex/content_item_policy.rb +49 -0
  144. data/app/policies/cortex/content_type_policy.rb +38 -0
  145. data/app/transactions/concerns/cortex/content_itemable.rb +15 -0
  146. data/app/transactions/concerns/cortex/field_item_transactor.rb +28 -0
  147. data/app/transactions/concerns/cortex/widget_parsable.rb +19 -0
  148. data/app/transactions/cortex/application_transaction.rb +5 -0
  149. data/app/transactions/cortex/create_content_item_transaction.rb +35 -0
  150. data/app/transactions/cortex/get_content_item_transaction.rb +4 -0
  151. data/app/transactions/cortex/get_content_items_for_content_type_transaction.rb +34 -0
  152. data/app/transactions/cortex/get_publish_state_transaction.rb +28 -0
  153. data/app/transactions/cortex/new_field_item_transaction.rb +16 -0
  154. data/app/transactions/cortex/update_content_item_transaction.rb +45 -0
  155. data/app/transactions/cortex/update_field_item_transaction.rb +23 -0
  156. data/app/types/cortex/application_types.rb +21 -0
  157. data/app/types/cortex/content_item_transaction_type.rb +10 -0
  158. data/app/types/cortex/core_types.rb +5 -0
  159. data/app/types/cortex/transaction_type.rb +5 -0
  160. data/app/views/cortex/authentication/passwords/new.html.haml +13 -0
  161. data/app/views/cortex/authentication/sessions/new.html.haml +20 -0
  162. data/app/views/cortex/authentication/shared/_links.html.haml +19 -0
  163. data/app/views/cortex/content_items/_form.html.haml +13 -0
  164. data/app/views/cortex/content_items/_grid.html.haml +1 -0
  165. data/app/views/cortex/content_items/edit.html.haml +2 -0
  166. data/app/views/cortex/content_items/index.html.haml +4 -0
  167. data/app/views/cortex/content_items/new.html.haml +2 -0
  168. data/app/views/cortex/content_types/index.html.haml +2 -0
  169. data/app/views/cortex/content_types/new.html.haml +0 -0
  170. data/app/views/cortex/dashboards/index.html.haml +6 -0
  171. data/app/views/cortex/graphql/ide.haml +1 -0
  172. data/app/views/cortex/partials/_breadcrumb.html.haml +2 -0
  173. data/app/views/cortex/partials/_cortex_redux_state.html.haml +1 -0
  174. data/app/views/cortex/partials/_flash.html.haml +25 -0
  175. data/app/views/cortex/partials/_media_dialogs.html.haml +13 -0
  176. data/app/views/cortex/partials/_navigation.html.haml +15 -0
  177. data/app/views/cortex/partials/_notes.html.haml +17 -0
  178. data/app/views/cortex/partials/_quick_links.html.haml +22 -0
  179. data/app/views/cortex/partials/_sidebar.html.haml +7 -0
  180. data/app/views/cortex/partials/_topbar.html.haml +5 -0
  181. data/app/views/cortex/partials/_user_control.html.haml +7 -0
  182. data/app/views/cortex/partials/authentication/_header.html.haml +4 -0
  183. data/app/views/cortex/partials/trackers/_google_analytics.html.haml +10 -0
  184. data/app/views/cortex/partials/trackers/_qualtrics.html.haml +10 -0
  185. data/app/views/cortex/password_reset_mailer/send_password_reset.html.erb +5 -0
  186. data/app/views/cortex/password_reset_mailer/send_password_reset.text.erb +5 -0
  187. data/app/views/layouts/cortex/application.html.haml +30 -0
  188. data/app/views/layouts/cortex/devise.html.haml +19 -0
  189. data/app/views/layouts/cortex/mailer.html.erb +13 -0
  190. data/app/views/layouts/cortex/mailer.text.erb +1 -0
  191. data/bin/rails +25 -0
  192. data/config/config.yml +22 -0
  193. data/config/initializers/devise.rb +35 -0
  194. data/config/initializers/elasticsearch.rb +3 -0
  195. data/config/initializers/filter_parameter_logging.rb +4 -0
  196. data/config/initializers/flipper.rb +16 -0
  197. data/config/initializers/graphiql.rb +51 -0
  198. data/config/initializers/inflections.rb +16 -0
  199. data/config/initializers/load_config.rb +16 -0
  200. data/config/initializers/mime_types.rb +5 -0
  201. data/config/initializers/plugins.rb +17 -0
  202. data/config/initializers/react_on_rails.rb +15 -0
  203. data/config/initializers/rolify.rb +9 -0
  204. data/config/initializers/tag_parsers.rb +5 -0
  205. data/config/locales/devise.en.yml +64 -0
  206. data/config/routes.rb +41 -0
  207. data/cortex.gemspec +84 -0
  208. data/db/migrate/0_enable_pgcrypto_extension.rb +5 -0
  209. data/db/migrate/10_create_fields.rb +15 -0
  210. data/db/migrate/11_create_content_items.rb +14 -0
  211. data/db/migrate/12_create_field_items.rb +12 -0
  212. data/db/migrate/13_create_field_types.rb +5 -0
  213. data/db/migrate/1_create_users.rb +14 -0
  214. data/db/migrate/2_create_tenants.rb +26 -0
  215. data/db/migrate/3_add_devise_to_users.rb +49 -0
  216. data/db/migrate/4_create_roles.rb +15 -0
  217. data/db/migrate/5_create_permissions.rb +16 -0
  218. data/db/migrate/6_create_flipper_tables.rb +20 -0
  219. data/db/migrate/7_create_contracts.rb +11 -0
  220. data/db/migrate/8_create_decorators.rb +21 -0
  221. data/db/migrate/9_create_content_types.rb +17 -0
  222. data/db/seeds.rb +40 -0
  223. data/db/seeds.yml +33 -0
  224. data/lib/assets/.keep +0 -0
  225. data/lib/breadcrumbs/title_builder.rb +12 -0
  226. data/lib/cortex.rb +4 -0
  227. data/lib/cortex/engine.rb +41 -0
  228. data/lib/cortex/version.rb +3 -0
  229. data/lib/helpers/utility_helper.rb +7 -0
  230. data/lib/tasks/cortex_tasks.rake +13 -0
  231. data/lib/tasks/elasticsearch_tasks.rake +1 -0
  232. data/node_package/.babelrc +26 -0
  233. data/node_package/src/components/side_bar/environment_flag.jsx +21 -0
  234. data/node_package/src/components/side_bar/tenant_list.jsx +65 -0
  235. data/node_package/src/components/wizard/column.jsx +29 -0
  236. data/node_package/src/components/wizard/field.jsx +22 -0
  237. data/node_package/src/components/wizard/step.jsx +20 -0
  238. data/node_package/src/constants/tenant_switcher.jsx +17 -0
  239. data/node_package/src/constants/type_constants.jsx +12 -0
  240. data/node_package/src/constants/wizard.jsx +9 -0
  241. data/node_package/src/containers/layout.jsx +33 -0
  242. data/node_package/src/containers/tenant_switcher_container.jsx +115 -0
  243. data/node_package/src/containers/wizard_container.jsx +28 -0
  244. data/node_package/src/elements/loaders.jsx +7 -0
  245. data/node_package/src/helpers/formatting.jsx +5 -0
  246. data/node_package/src/helpers/tenant_ancestry.jsx +14 -0
  247. data/node_package/src/helpers/tenant_lookup.jsx +23 -0
  248. data/node_package/src/index.jsx +21 -0
  249. data/node_package/src/reducers/index.jsx +13 -0
  250. data/node_package/src/reducers/rails_context_reducer.jsx +5 -0
  251. data/node_package/src/reducers/tenant_switcher_reducer.jsx +74 -0
  252. data/node_package/src/reducers/wizard_reducer.jsx +32 -0
  253. data/node_package/src/services/rails_api_service.jsx +13 -0
  254. data/node_package/src/store/store.jsx +15 -0
  255. data/package.json +66 -0
  256. data/spec/dummy/Rakefile +7 -0
  257. data/spec/dummy/app/assets/config/manifest.js +4 -0
  258. data/spec/dummy/app/assets/javascripts/application.js +2 -0
  259. data/spec/dummy/app/assets/stylesheets/application.scss +2 -0
  260. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  261. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  262. data/spec/dummy/app/javascript/packs/application.js +8 -0
  263. data/spec/dummy/app/javascript/packs/cortex.jsx +1 -0
  264. data/spec/dummy/app/jobs/application_job.rb +2 -0
  265. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  266. data/spec/dummy/app/views/layouts/application.html.haml +11 -0
  267. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  268. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  269. data/spec/dummy/bin/bundle +105 -0
  270. data/spec/dummy/bin/rails +4 -0
  271. data/spec/dummy/bin/rake +4 -0
  272. data/spec/dummy/bin/rspec +17 -0
  273. data/spec/dummy/bin/setup +38 -0
  274. data/spec/dummy/bin/update +29 -0
  275. data/spec/dummy/bin/webpack +29 -0
  276. data/spec/dummy/bin/webpack-dev-server +29 -0
  277. data/spec/dummy/bin/yarn +11 -0
  278. data/spec/dummy/config.ru +7 -0
  279. data/spec/dummy/config/apollo_engine_proxy.yml +23 -0
  280. data/spec/dummy/config/application.rb +21 -0
  281. data/spec/dummy/config/boot.rb +11 -0
  282. data/spec/dummy/config/cable.yml +9 -0
  283. data/spec/dummy/config/config.yml +22 -0
  284. data/spec/dummy/config/database.yml +22 -0
  285. data/spec/dummy/config/environment.rb +5 -0
  286. data/spec/dummy/config/environments/development.rb +74 -0
  287. data/spec/dummy/config/environments/production.rb +103 -0
  288. data/spec/dummy/config/environments/staging.rb +103 -0
  289. data/spec/dummy/config/environments/test.rb +65 -0
  290. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
  291. data/spec/dummy/config/initializers/assets.rb +14 -0
  292. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  293. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  294. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  295. data/spec/dummy/config/initializers/inflections.rb +16 -0
  296. data/spec/dummy/config/initializers/load_config.rb +9 -0
  297. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  298. data/spec/dummy/config/initializers/react_on_rails.rb +41 -0
  299. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  300. data/spec/dummy/config/initializers/sentry.rb +6 -0
  301. data/spec/dummy/config/initializers/session_store.rb +7 -0
  302. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  303. data/spec/dummy/config/locales/en.yml +8 -0
  304. data/spec/dummy/config/newrelic.yml +224 -0
  305. data/spec/dummy/config/puma.rb +47 -0
  306. data/spec/dummy/config/routes.rb +5 -0
  307. data/spec/dummy/config/secrets.yml +32 -0
  308. data/spec/dummy/config/sidekiq.yml +9 -0
  309. data/spec/dummy/config/webpack/development.js +3 -0
  310. data/spec/dummy/config/webpack/environment.js +3 -0
  311. data/spec/dummy/config/webpack/production.js +3 -0
  312. data/spec/dummy/config/webpack/test.js +3 -0
  313. data/spec/dummy/config/webpacker.yml +66 -0
  314. data/spec/dummy/db/migrate/20180118233001_enable_pgcrypto_extension.cortex.rb +6 -0
  315. data/spec/dummy/db/migrate/20180118233002_create_users.cortex.rb +15 -0
  316. data/spec/dummy/db/migrate/20180118233003_create_tenants.cortex.rb +27 -0
  317. data/spec/dummy/db/migrate/20180118233004_add_devise_to_users.cortex.rb +50 -0
  318. data/spec/dummy/db/migrate/20180118233005_create_roles.cortex.rb +16 -0
  319. data/spec/dummy/db/migrate/20180118233006_create_permissions.cortex.rb +17 -0
  320. data/spec/dummy/db/migrate/20180118233007_create_flipper_tables.cortex.rb +21 -0
  321. data/spec/dummy/db/migrate/20180118233008_create_contracts.cortex.rb +12 -0
  322. data/spec/dummy/db/migrate/20180118233009_create_decorators.cortex.rb +22 -0
  323. data/spec/dummy/db/migrate/20180118233010_create_content_types.cortex.rb +18 -0
  324. data/spec/dummy/db/migrate/20180118233011_create_fields.cortex.rb +16 -0
  325. data/spec/dummy/db/migrate/20180118233012_create_content_items.cortex.rb +15 -0
  326. data/spec/dummy/db/migrate/20180118233013_create_field_items.cortex.rb +13 -0
  327. data/spec/dummy/db/migrate/20180118233014_create_field_types.cortex.rb +6 -0
  328. data/spec/dummy/db/schema.rb +258 -0
  329. data/spec/dummy/db/seeds.rb +1 -0
  330. data/spec/dummy/lib/tasks/content_types_tasks.rake +31 -0
  331. data/spec/dummy/lib/tasks/employer/blog_tasks.rake +345 -0
  332. data/spec/dummy/package.json +28 -0
  333. data/spec/dummy/public/404.html +67 -0
  334. data/spec/dummy/public/422.html +67 -0
  335. data/spec/dummy/public/500.html +66 -0
  336. data/spec/dummy/public/robots.txt +5 -0
  337. data/spec/dummy/spec/javascripts/support/jasmine.yml +50 -0
  338. data/spec/dummy/yarn.lock +6615 -0
  339. data/spec/rails_helper.rb +57 -0
  340. data/spec/spec_helper.rb +96 -0
  341. data/yarn.lock +6032 -0
  342. metadata +1061 -0
@@ -0,0 +1,29 @@
1
+ module Cortex
2
+ module Wizard
3
+ class FieldCell < Cortex::ApplicationCell
4
+ property :id
5
+ property :label
6
+ property :input
7
+ property :render_method
8
+ property :tooltip
9
+
10
+ def show
11
+ render
12
+ end
13
+
14
+ private
15
+
16
+ def field_item
17
+ context[:content_item].field_items.select { |field_item| field_item.field_id == id }[0]
18
+ end
19
+
20
+ def field
21
+ ::Cortex::Field.find_by_id(id)
22
+ end
23
+
24
+ def field_type
25
+ field.field_type_instance
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1 @@
1
+ = cell_information
@@ -0,0 +1,28 @@
1
+ module Cortex
2
+ module Wizard
3
+ class PluginCell < Cortex::ApplicationCell
4
+ def show
5
+ render
6
+ end
7
+
8
+ private
9
+
10
+ def field_item
11
+ field_id = plugin_info[:data][:field_id]
12
+ context[:content_item].field_items.find { |field_item| field_item.field_id == field_id } || {}
13
+ end
14
+
15
+ def display
16
+ {}
17
+ end
18
+
19
+ def plugin_info
20
+ @options[:plugin_info]
21
+ end
22
+
23
+ def cell_information
24
+ cell(plugin_info[:class_name], field_item, display: display, config: plugin_info[:config]).(plugin_info[:render_method].to_sym)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1 @@
1
+ = cell(Cortex::Wizard::StepCell, collection: data_mash.steps).()
@@ -0,0 +1,2 @@
1
+ .mdl-grid
2
+ = cell(Cortex::Wizard::ColumnCell, collection: columns).()
@@ -0,0 +1,17 @@
1
+ module Cortex
2
+ module Wizard
3
+ class StepCell < Cortex::ApplicationCell
4
+ include ActionView::RecordIdentifier
5
+ include ActionView::Helpers::FormHelper
6
+
7
+ property :name
8
+ property :heading
9
+ property :description
10
+ property :columns
11
+
12
+ def show
13
+ render
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Cortex
2
+ class WizardCell < Cortex::ApplicationCell
3
+ property :data
4
+
5
+ def show
6
+ render
7
+ end
8
+
9
+ private
10
+
11
+ def data_mash
12
+ Hashie::Mash.new(data)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ module Cortex
2
+ class TransactionContainer
3
+ extend Dry::Container::Mixin
4
+
5
+ namespace "cortex" do
6
+ register "database_transact" do
7
+ Cortex::DatabaseTransactOperation
8
+ end
9
+
10
+ register "parse_content_item_field_items" do
11
+ Cortex::ParseContentItemFieldItemsOperation.new
12
+ end
13
+
14
+ register "persist_content_item" do
15
+ Cortex::PersistContentItemOperation.new
16
+ end
17
+
18
+ register "execute_content_item_state_change" do
19
+ Cortex::ExecuteContentItemStateChangeOperation.new
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ # TODO: ContentTypes, Decorators or Contracts themselves should inform the system what the correct Decorator is, not a hardcoded concern method
2
+ module Cortex
3
+ module Decoratable
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ def index_decorator(content_type)
8
+ content_type.decorators.find_by_name('Index')
9
+ end
10
+
11
+ def wizard_decorator(content_type)
12
+ content_type.decorators.find_by_name('Wizard')
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ require_dependency 'cortex/application_controller'
2
+
3
+ module Cortex
4
+ class AdminController < ApplicationController
5
+ before_action :authenticate_user!
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module Cortex
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ before_action :default_headers
5
+ before_action :configure_permitted_parameters, if: :devise_controller?
6
+ respond_to :html, :json
7
+ add_flash_types :success, :warning, :danger, :info
8
+
9
+ protected
10
+
11
+ def default_headers
12
+ headers['X-UA-Compatible'] = 'IE=edge'
13
+ end
14
+
15
+ def configure_permitted_parameters
16
+ devise_parameter_sanitizer.permit(:sign_up, keys: [:tenant_id])
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ class Cortex::Authentication::PasswordsController < Devise::PasswordsController
2
+ layout 'cortex/devise'
3
+ end
@@ -0,0 +1,3 @@
1
+ class Cortex::Authentication::SessionsController < Devise::SessionsController
2
+ layout 'cortex/devise'
3
+ end
@@ -0,0 +1,75 @@
1
+ require_dependency 'cortex/application_controller'
2
+
3
+ module Cortex
4
+ class ContentItemsController < AdminController
5
+ include Cortex::Decoratable
6
+ include Cortex::ContentItemHelper
7
+ include Cortex::PopupHelper
8
+
9
+ def index
10
+ @index = index_decorator(content_type)
11
+ @content_items = content_type.content_items.find_by_tenant(current_user.active_tenant)
12
+ add_breadcrumb content_type.name.pluralize
13
+ end
14
+
15
+ def new
16
+ @content_item = content_type.content_items.new
17
+ content_type.fields.each do |field|
18
+ # TODO: Should this hit the Plugin Transaction Layer?
19
+ @content_item.field_items << FieldItem.new(field: field)
20
+ end
21
+ @wizard = wizard_decorator(@content_item.content_type)
22
+
23
+ add_breadcrumb content_type.name.pluralize, :content_type_content_items_path
24
+ add_breadcrumb 'New'
25
+ end
26
+
27
+ def edit
28
+ @content_item = content_type.content_items.find_by_tenant(current_user.active_tenant).find_by_id(params[:id])
29
+ @wizard = wizard_decorator(@content_item.content_type)
30
+
31
+ title = @content_item.field_items.find { |field_item| field_item.field.name == 'Title' }.data['text'] # TODO: refactor this hardcoded Field reference
32
+ add_breadcrumb content_type.name.pluralize, :content_type_content_items_path
33
+ add_breadcrumb title
34
+ add_breadcrumb 'Edit'
35
+ end
36
+
37
+ def update
38
+ begin
39
+ update_content_item
40
+ rescue ActiveRecord::RecordInvalid => e
41
+ flash[:warning] = validation_message(e.message)
42
+ @content_item = content_item_reload(content_type.content_items.find_by_id(params[:id]))
43
+ @wizard = wizard_decorator(@content_item.content_type)
44
+
45
+ title = @content_item.field_items.find { |field_item| field_item.field.name == 'Title' }.data['text'] # TODO: refactor this hardcoded Field reference
46
+ add_breadcrumb content_type.name.pluralize, :content_type_content_items_path
47
+ add_breadcrumb title
48
+ add_breadcrumb 'Edit'
49
+
50
+ render :edit
51
+ else
52
+ flash[:success] = "Hooray! #{content_type.name} Updated!"
53
+ redirect_to content_type_content_items_path
54
+ end
55
+ end
56
+
57
+ def create
58
+ begin
59
+ create_content_item
60
+ rescue ActiveRecord::RecordInvalid => e
61
+ flash[:warning] = validation_message(e.message)
62
+ @content_item = content_item_reload(content_type.content_items.new)
63
+ @wizard = wizard_decorator(@content_item.content_type)
64
+
65
+ add_breadcrumb content_type.name.pluralize, :content_type_content_items_path
66
+ add_breadcrumb 'New'
67
+
68
+ render :new
69
+ else
70
+ flash[:success] = "Hooray! #{content_type.name} Created!"
71
+ redirect_to content_type_content_items_path
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,19 @@
1
+ require_dependency 'cortex/application_controller'
2
+
3
+ module Cortex
4
+ class ContentTypesController < AdminController
5
+ add_breadcrumb 'Content Types', :content_types_path
6
+
7
+ def index
8
+ @content_types = Cortex::ContentType.all
9
+ end
10
+
11
+ def new
12
+
13
+ end
14
+
15
+ def create
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ require_dependency 'cortex/application_controller'
2
+
3
+ module Cortex
4
+ class DashboardsController < AdminController
5
+ add_breadcrumb 'Dashboard', :dashboards_path
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ require_dependency 'cortex/application_controller'
2
+
3
+ module Cortex
4
+ class GraphqlController < ApplicationController
5
+ def execute
6
+ variables = ensure_hash(params[:variables])
7
+ query = params[:query]
8
+ operation_name = params[:operationName]
9
+ context = {
10
+ current_user: current_user
11
+ }
12
+ result = Cortex::CortexSchema.execute(query, variables: variables, context: context, operation_name: operation_name)
13
+ render json: result
14
+ end
15
+
16
+ def ide
17
+ add_breadcrumb 'GraphQL IDE', :graphql_ide_path
18
+ end
19
+
20
+ private
21
+
22
+ # Handle form data, JSON body, or a blank value
23
+ def ensure_hash(ambiguous_param)
24
+ case ambiguous_param
25
+ when String
26
+ if ambiguous_param.present?
27
+ ensure_hash(JSON.parse(ambiguous_param))
28
+ else
29
+ {}
30
+ end
31
+ when Hash, ActionController::Parameters
32
+ ambiguous_param
33
+ when nil
34
+ {}
35
+ else
36
+ raise ArgumentError, "Unexpected parameter: #{ambiguous_param}"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ require_dependency 'cortex/application_controller'
2
+
3
+ module Cortex
4
+ class TenantsController < AdminController
5
+ def switch_tenants
6
+ current_user.update(active_tenant: Tenant.find(params[:requested_tenant]))
7
+ respond_to do |format|
8
+ format.json { render :json => current_user.active_tenant }
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Cortex
2
+ class AuthenticationFailure < Devise::FailureApp
3
+ # You need to override respond to eliminate recall
4
+ def respond
5
+ if http_auth?
6
+ http_auth
7
+ else
8
+ redirect
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ module Cortex
2
+ CortexSchema = GraphQL::Schema.define do
3
+ use ApolloTracing.new
4
+
5
+ # mutation(Cortex::Types::MutationType)
6
+ query(Cortex::Types::QueryType)
7
+ end
8
+ end
File without changes
File without changes
@@ -0,0 +1,31 @@
1
+ module Cortex
2
+ Types::ContentItemType = GraphQL::ObjectType.define do
3
+ name 'ContentItem'
4
+ description 'Content created by a Content Creator from a ContentType'
5
+
6
+ field :id, !types.ID
7
+ field :state, types.String
8
+ field :tenant, !Cortex::Types::TenantType
9
+ field :creator, !Cortex::Types::UserType
10
+ field :content_type, !Cortex::Types::ContentTypeType
11
+
12
+ field :updated_by, Cortex::Types::UserType
13
+ field :created_at, !Cortex::Types::DateTimeType
14
+ field :updated_at, !Cortex::Types::DateTimeType
15
+ field :deleted_at, Cortex::Types::DateTimeType
16
+
17
+ field :allFieldItems, types[Cortex::Types::FieldItemType] do
18
+ resolve -> (obj, _args, _ctx) {
19
+ obj.field_items
20
+ }
21
+ end
22
+
23
+ field :FieldItem, Cortex::Types::FieldItemType do
24
+ argument :name_id, !types.String
25
+
26
+ resolve -> (obj, args, _ctx) {
27
+ obj.field_items.find { |field_item| field_item.field.name_id == args[:name_id] }
28
+ }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,23 @@
1
+ module Cortex
2
+ Types::ContentTypeType = GraphQL::ObjectType.define do
3
+ name 'ContentType'
4
+ description 'Content model set forth by a superadministrator. ContentItems are created from this.'
5
+
6
+ field :id, !types.ID
7
+ field :name, !types.String
8
+ field :name_id, !types.String
9
+ field :description, types.String
10
+ field :publishable, !types.Boolean
11
+ field :icon, types.String
12
+ field :contract, !Cortex::Types::ContractType
13
+ field :tenant, !Cortex::Types::TenantType
14
+ field :creator, !Cortex::Types::UserType
15
+
16
+ field :updated_by, Cortex::Types::UserType
17
+ field :created_at, !Cortex::Types::DateTimeType
18
+ field :updated_at, !Cortex::Types::DateTimeType
19
+ field :deleted_at, Cortex::Types::DateTimeType
20
+
21
+ # TODO: Fields
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module Cortex
2
+ Types::ContractType = GraphQL::ObjectType.define do
3
+ name 'Contract'
4
+ description ''
5
+
6
+ field :id, !types.ID
7
+
8
+ # TODO: the whole thing
9
+ end
10
+ end