underworld 1.0.0

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 (365) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +339 -0
  5. data/Rakefile +48 -0
  6. data/app/assets/fonts/DroidNaskh-Bold.ttf +0 -0
  7. data/app/assets/fonts/DroidNaskh-Regular.ttf +0 -0
  8. data/app/assets/fonts/OpenSans-Bold.ttf +0 -0
  9. data/app/assets/fonts/OpenSans-BoldItalic.ttf +0 -0
  10. data/app/assets/fonts/OpenSans-ExtraBold.ttf +0 -0
  11. data/app/assets/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  12. data/app/assets/fonts/OpenSans-Italic.ttf +0 -0
  13. data/app/assets/fonts/OpenSans-Light.ttf +0 -0
  14. data/app/assets/fonts/OpenSans-LightItalic.ttf +0 -0
  15. data/app/assets/fonts/OpenSans-Regular.ttf +0 -0
  16. data/app/assets/fonts/OpenSans-Semibold.ttf +0 -0
  17. data/app/assets/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  18. data/app/assets/images/underworld/select2-spinner.gif +0 -0
  19. data/app/assets/images/underworld/select2.png +0 -0
  20. data/app/assets/images/underworld/select2x2.png +0 -0
  21. data/app/assets/javascripts/underworld/application.js +16 -0
  22. data/app/assets/javascripts/underworld/dashboard/application.js.erb +30 -0
  23. data/app/assets/javascripts/underworld/dashboard/functions.js.erb +50 -0
  24. data/app/assets/javascripts/underworld/dashboard/init.js.coffee +33 -0
  25. data/app/assets/javascripts/underworld/dashboard/lib/actions.js +7 -0
  26. data/app/assets/javascripts/underworld/dashboard/lib/amd.js.coffee.erb +0 -0
  27. data/app/assets/javascripts/underworld/dashboard/lib/flash_message.js +71 -0
  28. data/app/assets/javascripts/underworld/dashboard/lib/locale.js +14 -0
  29. data/app/assets/javascripts/underworld/dashboard/lib/misc.js +5 -0
  30. data/app/assets/javascripts/underworld/dashboard/lib/string.js +3 -0
  31. data/app/assets/javascripts/underworld/dashboard/lib/ujs_patches.js.coffee +28 -0
  32. data/app/assets/javascripts/underworld/dashboard/manifest.js +5 -0
  33. data/app/assets/javascripts/underworld/dashboard/variables.js.erb +6 -0
  34. data/app/assets/javascripts/underworld/groups.js +2 -0
  35. data/app/assets/javascripts/underworld/home.js +2 -0
  36. data/app/assets/javascripts/underworld/i18n.js +13 -0
  37. data/app/assets/javascripts/underworld/simple.js +20 -0
  38. data/app/assets/javascripts/underworld/users.js +2 -0
  39. data/app/assets/stylesheets/underworld/dashboard/loadindicator.scss +17 -0
  40. data/app/assets/stylesheets/underworld/dashboard/ltr/application.css +38 -0
  41. data/app/assets/stylesheets/underworld/dashboard/ltr/base.css.scss +0 -0
  42. data/app/assets/stylesheets/underworld/dashboard/rtl/application.css +11 -0
  43. data/app/assets/stylesheets/underworld/dashboard/rtl/base.css.scss +0 -0
  44. data/app/assets/stylesheets/underworld/dashboard/share.scss +62 -0
  45. data/app/assets/stylesheets/underworld/dashboard/variables.scss +9 -0
  46. data/app/assets/stylesheets/underworld/ltr/application.css +0 -0
  47. data/app/assets/stylesheets/underworld/rtl/application.css +0 -0
  48. data/app/assets/stylesheets/underworld/simple/ltr/application.css +2 -0
  49. data/app/assets/stylesheets/underworld/simple/rtl/application.css +2 -0
  50. data/app/assets/stylesheets/underworld/simple/rtl/rtl.scss +16 -0
  51. data/app/assets/stylesheets/underworld/simple/share.scss +11 -0
  52. data/app/controllers/underworld/api_controller.rb +133 -0
  53. data/app/controllers/underworld/application_controller.rb +16 -0
  54. data/app/controllers/underworld/assets_controller.rb +6 -0
  55. data/app/controllers/underworld/dashboard/application_controller.rb +43 -0
  56. data/app/controllers/underworld/dashboard/groups_controller.rb +85 -0
  57. data/app/controllers/underworld/dashboard/profile_controller.rb +49 -0
  58. data/app/controllers/underworld/dashboard/user_messages_controller.rb +27 -0
  59. data/app/controllers/underworld/dashboard/users_controller.rb +116 -0
  60. data/app/controllers/underworld/dashboard_controller.rb +16 -0
  61. data/app/controllers/underworld/omniauth/callbacks_controller.rb +24 -0
  62. data/app/helpers/underworld/application_helper.rb +4 -0
  63. data/app/helpers/underworld/dashboard_helper.rb +107 -0
  64. data/app/helpers/underworld/groups_helper.rb +4 -0
  65. data/app/helpers/underworld/home_helper.rb +4 -0
  66. data/app/helpers/underworld/users_helper.rb +8 -0
  67. data/app/models/application_record.rb +3 -0
  68. data/app/models/underworld/concerns/assignment.rb +16 -0
  69. data/app/models/underworld/concerns/user/auth_definitions.rb +87 -0
  70. data/app/models/underworld/concerns/user/gravatar.rb +11 -0
  71. data/app/models/underworld/concerns/user/mongoid_fields.rb +81 -0
  72. data/app/models/underworld/concerns/user/permission.rb +47 -0
  73. data/app/models/underworld/concerns/user/user_roles.rb +24 -0
  74. data/app/models/underworld/group.rb +57 -0
  75. data/app/models/underworld/permission.rb +43 -0
  76. data/app/models/underworld/user.rb +81 -0
  77. data/app/models/underworld/user_message.rb +6 -0
  78. data/app/policies/underworld/admin_only_policy.rb +66 -0
  79. data/app/policies/underworld/application_policy.rb +55 -0
  80. data/app/policies/underworld/group_policy.rb +8 -0
  81. data/app/policies/underworld/user_message_policy.rb +9 -0
  82. data/app/policies/underworld/user_policy.rb +9 -0
  83. data/app/views/angular/auth/groups/details.html +2 -0
  84. data/app/views/angular/auth/groups/index.html +2 -0
  85. data/app/views/angular/auth/groups/new.html +2 -0
  86. data/app/views/angular/auth/index.html +30 -0
  87. data/app/views/angular/auth/profile/edit.html +54 -0
  88. data/app/views/angular/auth/users/details.html +28 -0
  89. data/app/views/angular/auth/users/index.html +6 -0
  90. data/app/views/angular/auth/users/new.html +57 -0
  91. data/app/views/angular/conversations/details.html +19 -0
  92. data/app/views/angular/conversations/index.html +13 -0
  93. data/app/views/angular/conversations/new.html +39 -0
  94. data/app/views/angular/conversations/show.html +6 -0
  95. data/app/views/angular/conversations/show_details.html +15 -0
  96. data/app/views/angular/fields/boolean/boolean.html +4 -0
  97. data/app/views/angular/fields/control-combo/control-list.html +19 -0
  98. data/app/views/angular/fields/datetime/datetime.html +10 -0
  99. data/app/views/angular/fields/datetime/time.html +25 -0
  100. data/app/views/angular/fields/file/file.html.slim +0 -0
  101. data/app/views/angular/fields/float/float.html +4 -0
  102. data/app/views/angular/fields/image/image.html +1 -0
  103. data/app/views/angular/fields/integer/integer.html +4 -0
  104. data/app/views/angular/fields/relation/relation.html +44 -0
  105. data/app/views/angular/fields/string/string.html +22 -0
  106. data/app/views/angular/fields/tag/tag.html +1 -0
  107. data/app/views/angular/fields/text/text.html +4 -0
  108. data/app/views/angular/filter/index.html +15 -0
  109. data/app/views/angular/index.html +3 -0
  110. data/app/views/angular/locale/fa.po +25 -0
  111. data/app/views/angular/locale/templates.pot +24 -0
  112. data/app/views/angular/logs/index.html +6 -0
  113. data/app/views/angular/modules.html +0 -0
  114. data/app/views/angular/nav.html.erb +39 -0
  115. data/app/views/angular/underworld/views/generic_add_view.html.slim +5 -0
  116. data/app/views/devise/registrations/edit.html.erb +29 -0
  117. data/app/views/devise/registrations/new.html.erb +38 -0
  118. data/app/views/devise/sessions/new.html.erb +37 -0
  119. data/app/views/devise/shared/_links.erb +19 -0
  120. data/app/views/devise/shared/_omni_link.erb +33 -0
  121. data/app/views/kaminari/_first_page.html.slim +3 -0
  122. data/app/views/kaminari/_gap.html.slim +2 -0
  123. data/app/views/kaminari/_last_page.html.slim +3 -0
  124. data/app/views/kaminari/_next_page.html.slim +3 -0
  125. data/app/views/kaminari/_page.html.slim +3 -0
  126. data/app/views/kaminari/_paginator.html.slim +13 -0
  127. data/app/views/kaminari/_prev_page.html.slim +3 -0
  128. data/app/views/layouts/underworld/application.html.erb +79 -0
  129. data/app/views/layouts/underworld/dashboard.html.erb +52 -0
  130. data/app/views/layouts/underworld/simple.html.erb +27 -0
  131. data/app/views/underworld/api/v1/conversations/create.json.jbuilder +1 -0
  132. data/app/views/underworld/api/v1/conversations/destroy.json.jbuilder +1 -0
  133. data/app/views/underworld/api/v1/conversations/index.json.jbuilder +1 -0
  134. data/app/views/underworld/api/v1/conversations/reply.json.jbuilder +1 -0
  135. data/app/views/underworld/api/v1/conversations/show.json.jbuilder +14 -0
  136. data/app/views/underworld/api/v1/conversations/trash.json.jbuilder +1 -0
  137. data/app/views/underworld/api/v1/groups/create.json.jbuilder +4 -0
  138. data/app/views/underworld/api/v1/groups/destroy.html.erb +2 -0
  139. data/app/views/underworld/api/v1/groups/destroy.json.jbuilder +1 -0
  140. data/app/views/underworld/api/v1/groups/edit.html.erb +2 -0
  141. data/app/views/underworld/api/v1/groups/index.html.erb +2 -0
  142. data/app/views/underworld/api/v1/groups/index.json.jbuilder +6 -0
  143. data/app/views/underworld/api/v1/groups/new.html.erb +2 -0
  144. data/app/views/underworld/api/v1/groups/show.html.erb +2 -0
  145. data/app/views/underworld/api/v1/groups/show.json.jbuilder +5 -0
  146. data/app/views/underworld/api/v1/groups/update.json.jbuilder +4 -0
  147. data/app/views/underworld/api/v1/logs/index.json.jbuilder +1 -0
  148. data/app/views/underworld/api/v1/permissions/index.json.jbuilder +1 -0
  149. data/app/views/underworld/api/v1/permissions/user_permissions.json.jbuilder +1 -0
  150. data/app/views/underworld/api/v1/users/create.html.erb +2 -0
  151. data/app/views/underworld/api/v1/users/create.json.jbuilder +1 -0
  152. data/app/views/underworld/api/v1/users/destroy.json.jbuilder +1 -0
  153. data/app/views/underworld/api/v1/users/distroy.html.erb +2 -0
  154. data/app/views/underworld/api/v1/users/edit.html.erb +2 -0
  155. data/app/views/underworld/api/v1/users/index.html.erb +2 -0
  156. data/app/views/underworld/api/v1/users/index.json.jbuilder +4 -0
  157. data/app/views/underworld/api/v1/users/show.html.erb +2 -0
  158. data/app/views/underworld/api/v1/users/show.json.jbuilder +2 -0
  159. data/app/views/underworld/api/v1/users/update.json.jbuilder +1 -0
  160. data/app/views/underworld/dashboard/groups/_form.html.slim +68 -0
  161. data/app/views/underworld/dashboard/groups/create.js.erb +3 -0
  162. data/app/views/underworld/dashboard/groups/edit.html.slim +3 -0
  163. data/app/views/underworld/dashboard/groups/errors.js.erb +3 -0
  164. data/app/views/underworld/dashboard/groups/index.html.slim +47 -0
  165. data/app/views/underworld/dashboard/groups/new.html.slim +2 -0
  166. data/app/views/underworld/dashboard/groups/update.js.erb +3 -0
  167. data/app/views/underworld/dashboard/index.html.erb +0 -0
  168. data/app/views/underworld/dashboard/login_required_page.html.erb +5 -0
  169. data/app/views/underworld/dashboard/not_found.html.slim +9 -0
  170. data/app/views/underworld/dashboard/not_found.js.erb +1 -0
  171. data/app/views/underworld/dashboard/profile/_form.html.erb +33 -0
  172. data/app/views/underworld/dashboard/profile/_profile_form.html.erb +33 -0
  173. data/app/views/underworld/dashboard/profile/create.js.erb +3 -0
  174. data/app/views/underworld/dashboard/profile/edit.html.erb +2 -0
  175. data/app/views/underworld/dashboard/profile/edit_password.html.erb +2 -0
  176. data/app/views/underworld/dashboard/profile/errors.js.erb +3 -0
  177. data/app/views/underworld/dashboard/resource/_form.html.slim +33 -0
  178. data/app/views/underworld/dashboard/resource/_input.html.slim +3 -0
  179. data/app/views/underworld/dashboard/resource/create.js.erb +3 -0
  180. data/app/views/underworld/dashboard/resource/destroy.js.erb +2 -0
  181. data/app/views/underworld/dashboard/resource/edit.html.slim +3 -0
  182. data/app/views/underworld/dashboard/resource/index.html.slim +60 -0
  183. data/app/views/underworld/dashboard/resource/new.html.slim +2 -0
  184. data/app/views/underworld/dashboard/resource/show.html.slim +22 -0
  185. data/app/views/underworld/dashboard/resource/update.js.erb +3 -0
  186. data/app/views/underworld/dashboard/shared/_content_header.html.slim +15 -0
  187. data/app/views/underworld/dashboard/shared/_control_sidebar.html.slim +50 -0
  188. data/app/views/underworld/dashboard/shared/_footer.html.slim +7 -0
  189. data/app/views/underworld/dashboard/shared/_header.html.erb +98 -0
  190. data/app/views/underworld/dashboard/shared/_sidebar.html.erb +69 -0
  191. data/app/views/underworld/dashboard/shared/_toolbar.html.slim +0 -0
  192. data/app/views/underworld/dashboard/shared/errors.js.erb +3 -0
  193. data/app/views/underworld/dashboard/user_messages/_form.html.slim +0 -0
  194. data/app/views/underworld/dashboard/user_messages/create.js.erb +0 -0
  195. data/app/views/underworld/dashboard/user_messages/destroy.js.erb +0 -0
  196. data/app/views/underworld/dashboard/user_messages/new.html.slim +72 -0
  197. data/app/views/underworld/dashboard/users/_form.html.slim +73 -0
  198. data/app/views/underworld/dashboard/users/_password_form.html.slim +37 -0
  199. data/app/views/underworld/dashboard/users/create.js.erb +3 -0
  200. data/app/views/underworld/dashboard/users/destroy.js.erb +2 -0
  201. data/app/views/underworld/dashboard/users/edit.html.slim +3 -0
  202. data/app/views/underworld/dashboard/users/edit_password.html.slim +1 -0
  203. data/app/views/underworld/dashboard/users/errors.js.erb +3 -0
  204. data/app/views/underworld/dashboard/users/index.html.slim +66 -0
  205. data/app/views/underworld/dashboard/users/new.html.slim +2 -0
  206. data/app/views/underworld/dashboard/users/show.html.slim +6 -0
  207. data/app/views/underworld/dashboard/users/update.js.erb +3 -0
  208. data/app/views/underworld/dashboard/users/update_password.js.erb +3 -0
  209. data/app/views/underworld/relations/_belongs_to.json.jbuilder +11 -0
  210. data/config/initializers/devise.rb +24 -0
  211. data/config/locales/devise.en.yml +59 -0
  212. data/config/locales/devise.fa.yml +58 -0
  213. data/config/locales/underworld.en.yml +96 -0
  214. data/config/locales/underworld.fa.yml +108 -0
  215. data/config/routes.rb +43 -0
  216. data/config/spring.rb +1 -0
  217. data/db/migrate/20131013091000_devise_create_underworld_users.rb +65 -0
  218. data/db/migrate/20131020124701_create_underworld_groups.rb +15 -0
  219. data/db/migrate/20131021170923_create_underworld_permissions.rb +15 -0
  220. data/db/migrate/20131123120422_add_permissions_groups_table.rb +16 -0
  221. data/db/migrate/20140613120923_add_users_groups_table.rb +13 -0
  222. data/db/migrate/20151122115129_add_uniqueness_index_to_users_groups.rb +11 -0
  223. data/db/migrate/20160310105736_create_underworld_user_messages.rb +25 -0
  224. data/db/seeds.rb +49 -0
  225. data/lib/generators/underworld/install_generator.rb +108 -0
  226. data/lib/generators/underworld/resource_generator.rb +70 -0
  227. data/lib/generators/underworld/resources_generator.rb +20 -0
  228. data/lib/generators/underworld/templates/README +21 -0
  229. data/lib/generators/underworld/templates/SPECS +13 -0
  230. data/lib/generators/underworld/templates/api/controller.rb.erb +60 -0
  231. data/lib/generators/underworld/templates/api_controller.rb +2 -0
  232. data/lib/generators/underworld/templates/dashboard/controller.rb.erb +2 -0
  233. data/lib/generators/underworld/templates/dashboard_controller.rb +18 -0
  234. data/lib/generators/underworld/templates/devise.rb +251 -0
  235. data/lib/generators/underworld/templates/features/api.feature +92 -0
  236. data/lib/generators/underworld/templates/features/api.step.rb +7 -0
  237. data/lib/generators/underworld/templates/features/step_definitions/email_steps.rb +206 -0
  238. data/lib/generators/underworld/templates/features/support/email_spec.rb +1 -0
  239. data/lib/generators/underworld/templates/features/support/env.rb +79 -0
  240. data/lib/generators/underworld/templates/javascripts/application.js +19 -0
  241. data/lib/generators/underworld/templates/policy/application_policy.rb +2 -0
  242. data/lib/generators/underworld/templates/policy/policy.rb.erb +2 -0
  243. data/lib/generators/underworld/templates/seeds.rb +1 -0
  244. data/lib/generators/underworld/templates/spec/factories/groups.rb +5 -0
  245. data/lib/generators/underworld/templates/spec/factories/users.rb +10 -0
  246. data/lib/generators/underworld/templates/spec/spec_helper.rb +69 -0
  247. data/lib/generators/underworld/templates/spec/support/devise.rb +3 -0
  248. data/lib/generators/underworld/templates/stylesheets/dashboard/ltr/application.css +3 -0
  249. data/lib/generators/underworld/templates/stylesheets/dashboard/rtl/application.css +3 -0
  250. data/lib/generators/underworld/templates/stylesheets/ltr/application.css +3 -0
  251. data/lib/generators/underworld/templates/stylesheets/rtl/application.css +3 -0
  252. data/lib/generators/underworld/templates/underworld.rb +12 -0
  253. data/lib/generators/underworld/templates/views/create.json.jbuilder.erb +3 -0
  254. data/lib/generators/underworld/templates/views/destroy.json.jbuilder.erb +1 -0
  255. data/lib/generators/underworld/templates/views/index.json.jbuilder.erb +13 -0
  256. data/lib/generators/underworld/templates/views/show.json.jbuilder.erb +6 -0
  257. data/lib/generators/underworld/templates/views/update.json.jbuilder.erb +6 -0
  258. data/lib/generators/underworld/views_generator.rb +57 -0
  259. data/lib/tasks/docs.rake +6 -0
  260. data/lib/tasks/sync.rake +9 -0
  261. data/lib/tasks/underworld_tasks.rake +38 -0
  262. data/lib/underworld.rb +35 -0
  263. data/lib/underworld/action_dispatch.rb +3 -0
  264. data/lib/underworld/api.rb +42 -0
  265. data/lib/underworld/api/groups_api.rb +41 -0
  266. data/lib/underworld/api/permissions_api.rb +24 -0
  267. data/lib/underworld/api/root.rb +15 -0
  268. data/lib/underworld/api/users_api.rb +20 -0
  269. data/lib/underworld/concerns.rb +7 -0
  270. data/lib/underworld/concerns/authorizable.rb +81 -0
  271. data/lib/underworld/configuration.rb +97 -0
  272. data/lib/underworld/dashboard.rb +11 -0
  273. data/lib/underworld/dashboard/dsl.rb +41 -0
  274. data/lib/underworld/dashboard/dsl/base.rb +133 -0
  275. data/lib/underworld/dashboard/dsl/create.rb +116 -0
  276. data/lib/underworld/dashboard/dsl/form_fields_properties.rb +62 -0
  277. data/lib/underworld/dashboard/dsl/index.rb +45 -0
  278. data/lib/underworld/dashboard/dsl/show.rb +6 -0
  279. data/lib/underworld/dashboard/dsl/update.rb +6 -0
  280. data/lib/underworld/dashboard/helpers/box_helpers.rb +129 -0
  281. data/lib/underworld/dashboard/models.rb +2 -0
  282. data/lib/underworld/dashboard/models/sidebar.rb +139 -0
  283. data/lib/underworld/dashboard/sections.rb +2 -0
  284. data/lib/underworld/dashboard/sections/resource.rb +229 -0
  285. data/lib/underworld/dashboard/sections/resource_create.rb +263 -0
  286. data/lib/underworld/dashboard/sections/resource_destroy.rb +27 -0
  287. data/lib/underworld/dashboard/sections/resource_show.rb +96 -0
  288. data/lib/underworld/dashboard/sections/resources_index.rb +113 -0
  289. data/lib/underworld/dashboard/sections/sidebar.rb +41 -0
  290. data/lib/underworld/discovery.rb +8 -0
  291. data/lib/underworld/discovery/permissions.rb +49 -0
  292. data/lib/underworld/engine.rb +53 -0
  293. data/lib/underworld/exceptions.rb +7 -0
  294. data/lib/underworld/extension.rb +18 -0
  295. data/lib/underworld/extension/base.rb +29 -0
  296. data/lib/underworld/fake_assets.rb +5 -0
  297. data/lib/underworld/i18n.rb +101 -0
  298. data/lib/underworld/initialize.rb +0 -0
  299. data/lib/underworld/liquid.rb +7 -0
  300. data/lib/underworld/liquid/block.rb +14 -0
  301. data/lib/underworld/liquid/render_tag.rb +50 -0
  302. data/lib/underworld/liquid/tag.rb +51 -0
  303. data/lib/underworld/middlewares.rb +1 -0
  304. data/lib/underworld/middlewares/locale.rb +29 -0
  305. data/lib/underworld/omniauth.rb +8 -0
  306. data/lib/underworld/omniauth/callbacks.rb +39 -0
  307. data/lib/underworld/orm.rb +30 -0
  308. data/lib/underworld/routes.rb +117 -0
  309. data/lib/underworld/version.rb +3 -0
  310. data/test/controllers/underworld/dashboard/resource_test.rb +118 -0
  311. data/test/dummy/README.rdoc +28 -0
  312. data/test/dummy/Rakefile +6 -0
  313. data/test/dummy/app/assets/javascripts/application.js +13 -0
  314. data/test/dummy/app/assets/javascripts/dashboard/application.js +19 -0
  315. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  316. data/test/dummy/app/assets/stylesheets/dashboard/ltr/application.css +3 -0
  317. data/test/dummy/app/assets/stylesheets/dashboard/rtl/application.css +3 -0
  318. data/test/dummy/app/assets/stylesheets/ltr/application.css +3 -0
  319. data/test/dummy/app/assets/stylesheets/rtl/application.css +3 -0
  320. data/test/dummy/app/controllers/api_controller.rb +2 -0
  321. data/test/dummy/app/controllers/application_controller.rb +6 -0
  322. data/test/dummy/app/controllers/dashboard/application_controller.rb +18 -0
  323. data/test/dummy/app/helpers/application_helper.rb +2 -0
  324. data/test/dummy/app/policies/application_policy.rb +2 -0
  325. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  326. data/test/dummy/bin/bundle +3 -0
  327. data/test/dummy/bin/rails +4 -0
  328. data/test/dummy/bin/rake +4 -0
  329. data/test/dummy/config.ru +4 -0
  330. data/test/dummy/config/application.rb +23 -0
  331. data/test/dummy/config/boot.rb +5 -0
  332. data/test/dummy/config/database.yml +25 -0
  333. data/test/dummy/config/environment.rb +5 -0
  334. data/test/dummy/config/environments/development.rb +29 -0
  335. data/test/dummy/config/environments/production.rb +80 -0
  336. data/test/dummy/config/environments/test.rb +38 -0
  337. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  338. data/test/dummy/config/initializers/devise.rb +251 -0
  339. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  340. data/test/dummy/config/initializers/formstatic.rb +76 -0
  341. data/test/dummy/config/initializers/formtastic.rb +110 -0
  342. data/test/dummy/config/initializers/inflections.rb +16 -0
  343. data/test/dummy/config/initializers/kaminari_config.rb +10 -0
  344. data/test/dummy/config/initializers/mime_types.rb +5 -0
  345. data/test/dummy/config/initializers/secret_token.rb +12 -0
  346. data/test/dummy/config/initializers/session_store.rb +3 -0
  347. data/test/dummy/config/initializers/underworld.rb +11 -0
  348. data/test/dummy/config/initializers/underworld_assets.rb +1 -0
  349. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  350. data/test/dummy/config/locales/en.yml +23 -0
  351. data/test/dummy/config/routes.rb +13 -0
  352. data/test/dummy/lib/templates/slim/scaffold/_form.html.slim +8 -0
  353. data/test/dummy/public/404.html +58 -0
  354. data/test/dummy/public/422.html +58 -0
  355. data/test/dummy/public/500.html +57 -0
  356. data/test/dummy/public/favicon.ico +0 -0
  357. data/test/fabricators/underworld/groups.rb +27 -0
  358. data/test/fabricators/underworld/permissions.rb +14 -0
  359. data/test/fabricators/underworld/users.rb +17 -0
  360. data/test/generators/install_generator_test.rb +84 -0
  361. data/test/integration/underworld/authentication_test.rb +36 -0
  362. data/test/integration/underworld/dashboard_test.rb +64 -0
  363. data/test/test_helper.rb +72 -0
  364. metadata +1045 -0
  365. metadata.gz.sig +0 -0
@@ -0,0 +1,43 @@
1
+ Underworld::Engine.routes.draw do
2
+ get 'templates/*path' => 'dashboard#jstemplate'
3
+
4
+ # Authentications
5
+ devise_config = {
6
+ class_name: 'Underworld::User',
7
+ :module => :devise,
8
+ skip: :omniauth_callbacks
9
+ }
10
+
11
+ # Add omniauth callback if there was any provider
12
+ unless Devise.omniauth_providers.empty?
13
+ devise_config[:controllers] = {
14
+ :omniauth_callbacks => 'underworld/omniauth/callbacks',
15
+ }
16
+ end
17
+
18
+ localized_scope do
19
+ in_dashboard do
20
+ scope :auth do
21
+ resources :groups, as: 'auth_groups'
22
+ resources :users, as: 'auth_users' do
23
+ member do
24
+ get 'password', to: 'users#edit_password', as: 'auth_users_edit_password'
25
+ patch 'password', to: 'users#update_password'
26
+ end
27
+ end
28
+ end
29
+ resources :user_messages do
30
+ collection do
31
+ get 'sent', to: 'user_messages#sent', as: :sent
32
+ end
33
+ end
34
+ get '', to: '/underworld/dashboard#index', as: 'index'
35
+ get '/404', to: '/underworld/dashboard#not_found', as: 'not_found'
36
+ end
37
+
38
+ devise_config.merge!(Underworld::Engine.devise_for)
39
+ devise_for :users, devise_config
40
+ end
41
+
42
+ get '/amd/*asset', to: 'assets#finder'
43
+ end
@@ -0,0 +1 @@
1
+ Spring.application_root = './spec/dummy'
@@ -0,0 +1,65 @@
1
+ class DeviseCreateUnderworldUsers < ActiveRecord::Migration
2
+ def change
3
+ args = {}
4
+ args[:id] = :uuid if Underworld::Engine.use_uuid
5
+
6
+ create_table(:underworld_users, **args) do |t|
7
+ ## Database authenticatable
8
+ t.string :email, :null => false, :default => ""
9
+ t.string :encrypted_password, :null => false, :default => ""
10
+
11
+ ## Recoverable
12
+ t.string :reset_password_token
13
+ t.datetime :reset_password_sent_at
14
+
15
+ ## Rememberable
16
+ t.datetime :remember_created_at
17
+
18
+ ## Trackable
19
+ t.integer :sign_in_count, :default => 0
20
+ t.datetime :current_sign_in_at
21
+ t.datetime :last_sign_in_at
22
+ t.string :current_sign_in_ip
23
+ t.string :last_sign_in_ip
24
+
25
+
26
+ t.string :first_name
27
+ t.string :last_name
28
+
29
+ if not Devise.omniauth_providers.empty?
30
+ # Service
31
+ t.string :provider, :default => ""
32
+ t.string :uid
33
+ end
34
+
35
+ if Rails.env.production?
36
+ ## Confirmable
37
+ t.string :confirmation_token
38
+ t.datetime :confirmed_at
39
+ t.datetime :confirmation_sent_at
40
+ t.string :unconfirmed_email # Only if using reconfirmable
41
+
42
+ # Token authenticatable
43
+ t.string :authentication_token
44
+ end
45
+
46
+ ## Lockable
47
+ t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
48
+ t.string :unlock_token # Only if unlock strategy is :email or :both
49
+ t.datetime :locked_at
50
+
51
+
52
+
53
+ t.timestamps
54
+ end
55
+
56
+ add_index :underworld_users, :email, unique: true
57
+ add_index :underworld_users, :reset_password_token, unique: true
58
+
59
+ if Rails.env.production?
60
+ add_index :underworld_users, :confirmation_token, unique: true
61
+ end
62
+ add_index :underworld_users, :unlock_token, unique: true
63
+ # add_index :underworld_users, :authentication_token, :unique => true
64
+ end
65
+ end
@@ -0,0 +1,15 @@
1
+ class CreateUnderworldGroups < ActiveRecord::Migration
2
+ def change
3
+ args = {}
4
+ args[:id] = :uuid if Underworld::Engine.use_uuid
5
+
6
+ create_table :underworld_groups, **args do |t|
7
+ t.string :name
8
+ t.string :role
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ add_index :underworld_groups, :role, unique: true
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateUnderworldPermissions < ActiveRecord::Migration
2
+ def change
3
+ args = {}
4
+ args[:id] = :uuid if Underworld::Engine.use_uuid
5
+
6
+ create_table :underworld_permissions, **args do |t|
7
+ t.string :model
8
+ t.string :permission_type
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ add_index :underworld_permissions, :model
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ class AddPermissionsGroupsTable < ActiveRecord::Migration
2
+ def change
3
+ args = {}
4
+ args[:id] = :uuid if Underworld::Engine.use_uuid
5
+
6
+ create_table :underworld_groups_permissions, **args do |t|
7
+ if Underworld::Engine.use_uuid
8
+ t.uuid :permission_id
9
+ t.uuid :group_id
10
+ else
11
+ t.belongs_to :permission
12
+ t.belongs_to :group
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class AddUsersGroupsTable < ActiveRecord::Migration
2
+ def change
3
+ create_table :underworld_groups_users do |t|
4
+ if Underworld::Engine.use_uuid
5
+ t.uuid :user_id
6
+ t.uuid :group_id
7
+ else
8
+ t.belongs_to :user
9
+ t.belongs_to :group
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ class AddUniquenessIndexToUsersGroups < ActiveRecord::Migration
2
+ def up
3
+ add_index(:underworld_groups_users, [ :user_id, :group_id ],
4
+ unique: true, name: 'by_user_and_group')
5
+ end
6
+
7
+ def down
8
+ remove_index(:underworld_groups_users,
9
+ name: 'by_user_and_group')
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ class CreateUnderworldUserMessages < ActiveRecord::Migration
2
+ def change
3
+ args = {}
4
+ args[:id] = :uuid if Underworld::Engine.use_uuid
5
+
6
+ create_table :underworld_user_messages, **args do |t|
7
+ if Underworld::Engine.use_uuid
8
+ t.uuid :sender_id
9
+ t.uuid :receiver_id
10
+ else
11
+ t.integer :sender_id
12
+ t.integer :receiver_id
13
+ end
14
+
15
+ t.boolean :read_only
16
+ t.text :content
17
+ t.text :raw_content
18
+
19
+ t.timestamps
20
+ end
21
+
22
+ add_index :underworld_user_messages, :sender_id
23
+ add_index :underworld_user_messages, :receiver_id
24
+ end
25
+ end
@@ -0,0 +1,49 @@
1
+ # Database initial data
2
+ ModelDiscovery::Engine.load_seed
3
+
4
+ #Underworld::Workflows::Discovery.build_table_list
5
+ Underworld::Discovery::Permissions.create_all_permissions
6
+
7
+ case Underworld::ORM.current
8
+ when 'active_record'
9
+ admin_group = Underworld::Group.create(name: 'Admin', role: 'admin')
10
+ guest_group = Underworld::Group.create(name: 'Guest', role: 'guest')
11
+
12
+ admin_group.permissions = Underworld::Permission.all
13
+
14
+ admin = Underworld::User.create(email: 'admin@example.com',
15
+ password: 'changeme',
16
+ password_confirmation: 'changeme')
17
+ admin.groups << admin_group
18
+
19
+
20
+ user = Underworld::User.create(email: 'user@example.com',
21
+ password: '123123123',
22
+ password_confirmation: '123123123')
23
+
24
+ when 'mongoid'
25
+ admin_group = Underworld::Group.create(name: 'Admin', role: 'admin')
26
+ Underworld::Permission.each do |perm|
27
+ admin_group.permissions << perm
28
+ end
29
+ admin_group.save!
30
+
31
+ guest_group = Underworld::Group.create(name: 'Guest', role: 'guest')
32
+
33
+ admin = Underworld::User.new(email: 'admin@example.com',
34
+ password: 'changeme',
35
+ password_confirmation: 'changeme')
36
+
37
+
38
+ admin.groups << admin_group
39
+
40
+ user = Underworld::User.new(email: 'user@example.com',
41
+ password: '123123123',
42
+ password_confirmation: '123123123')
43
+
44
+ guest_group = Underworld::Group.new(name: 'Guest', role: 'guest')
45
+
46
+ end
47
+
48
+ admin.save
49
+ user.save
@@ -0,0 +1,108 @@
1
+ module Underworld
2
+ module Generators
3
+ # Generator responsible for `install` generator
4
+ class InstallGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+
7
+ desc 'Copy all the necessary files to use Underworld'
8
+ class_option :orm
9
+
10
+ def copy_migrations
11
+ rake('underworld:install:migrations') unless options[:mongoid]
12
+ end
13
+
14
+ def install_model_discovery
15
+ rake 'model_discovery_engine:install:migrations'
16
+ end
17
+
18
+ def copy_init_files
19
+ template 'devise.rb', 'config/initializers/devise.rb'
20
+ template 'underworld.rb', 'config/initializers/underworld.rb'
21
+ template 'api_controller.rb', 'app/controllers/api_controller.rb'
22
+ template 'dashboard_controller.rb', 'app/controllers/dashboard/application_controller.rb'
23
+ template 'policy/application_policy.rb', 'app/policies/application_policy.rb'
24
+ end
25
+
26
+ def patch_seed
27
+ prepend_to_file 'db/seeds.rb' do
28
+ "Underworld::Engine.load_seed\n"
29
+ end
30
+ end
31
+
32
+ def copy_js_manifest
33
+ empty_directory 'app/assets/javascripts/dashboard'
34
+ directory 'javascripts', 'app/assets/javascripts/dashboard'
35
+ end
36
+
37
+
38
+ def install_formtastic
39
+ generate 'formtastic:install'
40
+ end
41
+
42
+ def configure_kaminari
43
+ generate 'kaminari:config'
44
+ end
45
+
46
+ #def grunt_file
47
+ # template 'i18n/Gruntfile.js.erb', 'lib/tasks/grunt/Gruntfile.js'
48
+ #end
49
+
50
+ def copy_scss_manifest
51
+ directory 'stylesheets', 'app/assets/stylesheets'
52
+ end
53
+
54
+ def install_routes
55
+ route "end\n"
56
+ route ' # Your dashboard routes goes here.'
57
+ route "in_dashboard do"
58
+
59
+ route "end\n"
60
+ route ' # Your API routes goes here.'
61
+ route 'api_routes do'
62
+
63
+ route "mount Underworld::Engine => '/'\n"
64
+ end
65
+
66
+ def assets_manifests_initializer
67
+ initializer 'underworld_assets.rb' do
68
+ 'Rails.application.config.assets.precompile += %w( underworld/simple.js )'
69
+ end
70
+ end
71
+
72
+ def patch_application_controller
73
+ inject_into_class "app/controllers/application_controller.rb", ApplicationController, " extend Underworld::I18n::Locale\n"
74
+ end
75
+
76
+ def add_gems
77
+ gem 'jquery-turbolinks'
78
+
79
+ inside Rails.root do
80
+ run 'bundle update'
81
+ end
82
+ end
83
+
84
+ def append_assets_to_compile
85
+ append_to_file 'config/initializers/assets.rb' do
86
+ "Rails.application.config.assets.precompile += %w( dashboard/rtl/application.css dashboard/ltr/application.css)"
87
+ end
88
+ end
89
+
90
+ def patch_formtastic
91
+ append_to_file 'config/initializers/formtastic.rb' do
92
+ 'Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder'
93
+ end
94
+ end
95
+
96
+ def show_readme
97
+ readme 'README' if behavior == :invoke
98
+ end
99
+
100
+ private
101
+
102
+ def angularjs_app_path
103
+ path = Underworld::Engine.dashboard_js_manifest.split('/')[0..-2].join('/')
104
+ "app/assets/javascripts/#{path}/"
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,70 @@
1
+ module Underworld
2
+ module Generators
3
+ # Generate a resource on dashboard
4
+ class ResourceGenerator < Rails::Generators::Base
5
+
6
+ desc 'Generates new Underworld resource.'
7
+ argument :resource_name , type: :string, required: true
8
+
9
+ source_root File.expand_path('../templates', __FILE__)
10
+
11
+ def create_pundit_file
12
+ generate 'pundit:policy', resource_name
13
+ end
14
+
15
+ def create_controller
16
+ template('dashboard/controller.rb.erb',
17
+ "app/controllers/dashboard/#{module_path}#{resources}_controller.rb")
18
+ end
19
+
20
+ def inject_routes
21
+ gsub_file('config/routes.rb',
22
+ "in_dashboard do",
23
+ "in_dashboard do\n resources :#{resources}")
24
+ end
25
+
26
+ def warning
27
+ unless module_name.blank?
28
+ puts ""
29
+ puts "[Warning] : Please fix your routes. Since you're using a resource inside"
30
+ puts " a namespace, you have to fixed your routes to point to your"
31
+ puts " new generate code. For example if you create a resource like"
32
+ puts " `School::Student`, then you should have your route like this:"
33
+ puts ""
34
+ puts " in_dashboard do"
35
+ puts " namespace :school do"
36
+ puts " resources students"
37
+ puts " end"
38
+ puts " end"
39
+ puts ""
40
+ end
41
+ end
42
+ private
43
+
44
+ def module_name
45
+ resource_name.underscore.split('/')[0..-2].join('/')
46
+ end
47
+
48
+ def module_path
49
+ if !module_name.blank?
50
+ module_name + '/'
51
+ else
52
+ ''
53
+ end
54
+ end
55
+
56
+ def controller_module
57
+ path = 'dashboard/' + module_path
58
+ path.classify
59
+ end
60
+
61
+ def resource
62
+ resource_name.underscore.split('/')[-1].singularize
63
+ end
64
+
65
+ def resources
66
+ resource.pluralize
67
+ end
68
+ end
69
+ end
70
+ end