mindapp2 0.1.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 (264) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +5 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +43 -0
  8. data/Rakefile +1 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/generators/mindapp/USAGE +8 -0
  12. data/lib/generators/mindapp/install_generator.rb +179 -0
  13. data/lib/generators/mindapp/mongoid_generator.rb +30 -0
  14. data/lib/generators/mindapp/templates/app/assets/config/manifest.js +3 -0
  15. data/lib/generators/mindapp/templates/app/assets/images/.keep +0 -0
  16. data/lib/generators/mindapp/templates/app/assets/images/4dcity-old.ico +0 -0
  17. data/lib/generators/mindapp/templates/app/assets/images/4dcity.ico +0 -0
  18. data/lib/generators/mindapp/templates/app/assets/images/account.png +0 -0
  19. data/lib/generators/mindapp/templates/app/assets/images/add.png +0 -0
  20. data/lib/generators/mindapp/templates/app/assets/images/ajax-loader-circle.gif +0 -0
  21. data/lib/generators/mindapp/templates/app/assets/images/ajax-loader.gif +0 -0
  22. data/lib/generators/mindapp/templates/app/assets/images/anchor.png +0 -0
  23. data/lib/generators/mindapp/templates/app/assets/images/application_double.png +0 -0
  24. data/lib/generators/mindapp/templates/app/assets/images/application_form_edit.png +0 -0
  25. data/lib/generators/mindapp/templates/app/assets/images/arrow_left.png +0 -0
  26. data/lib/generators/mindapp/templates/app/assets/images/arrow_right.png +0 -0
  27. data/lib/generators/mindapp/templates/app/assets/images/arrow_turn_left.png +0 -0
  28. data/lib/generators/mindapp/templates/app/assets/images/arrow_turn_right.png +0 -0
  29. data/lib/generators/mindapp/templates/app/assets/images/calendar.png +0 -0
  30. data/lib/generators/mindapp/templates/app/assets/images/cancel.png +0 -0
  31. data/lib/generators/mindapp/templates/app/assets/images/chart_bar.png +0 -0
  32. data/lib/generators/mindapp/templates/app/assets/images/clock.png +0 -0
  33. data/lib/generators/mindapp/templates/app/assets/images/cog.png +0 -0
  34. data/lib/generators/mindapp/templates/app/assets/images/control_fastforward.png +0 -0
  35. data/lib/generators/mindapp/templates/app/assets/images/control_play.png +0 -0
  36. data/lib/generators/mindapp/templates/app/assets/images/cross.png +0 -0
  37. data/lib/generators/mindapp/templates/app/assets/images/delete.png +0 -0
  38. data/lib/generators/mindapp/templates/app/assets/images/external-link.png +0 -0
  39. data/lib/generators/mindapp/templates/app/assets/images/facebooksmall.png +0 -0
  40. data/lib/generators/mindapp/templates/app/assets/images/favicon.ico +0 -0
  41. data/lib/generators/mindapp/templates/app/assets/images/freemind(mm).png +0 -0
  42. data/lib/generators/mindapp/templates/app/assets/images/help.png +0 -0
  43. data/lib/generators/mindapp/templates/app/assets/images/highway-menu.png +0 -0
  44. data/lib/generators/mindapp/templates/app/assets/images/highway.png +0 -0
  45. data/lib/generators/mindapp/templates/app/assets/images/house.png +0 -0
  46. data/lib/generators/mindapp/templates/app/assets/images/icons-18-black.png +0 -0
  47. data/lib/generators/mindapp/templates/app/assets/images/icons-18-white.png +0 -0
  48. data/lib/generators/mindapp/templates/app/assets/images/icons-36-black.png +0 -0
  49. data/lib/generators/mindapp/templates/app/assets/images/icons-36-white.png +0 -0
  50. data/lib/generators/mindapp/templates/app/assets/images/logo.png +0 -0
  51. data/lib/generators/mindapp/templates/app/assets/images/logo_mindapp.png +0 -0
  52. data/lib/generators/mindapp/templates/app/assets/images/logout.png +0 -0
  53. data/lib/generators/mindapp/templates/app/assets/images/mylogo.png +0 -0
  54. data/lib/generators/mindapp/templates/app/assets/images/new.gif +0 -0
  55. data/lib/generators/mindapp/templates/app/assets/images/new.png +0 -0
  56. data/lib/generators/mindapp/templates/app/assets/images/page.png +0 -0
  57. data/lib/generators/mindapp/templates/app/assets/images/page_attach.png +0 -0
  58. data/lib/generators/mindapp/templates/app/assets/images/page_green.png +0 -0
  59. data/lib/generators/mindapp/templates/app/assets/images/page_output.png +0 -0
  60. data/lib/generators/mindapp/templates/app/assets/images/page_pdf.png +0 -0
  61. data/lib/generators/mindapp/templates/app/assets/images/pencil.png +0 -0
  62. data/lib/generators/mindapp/templates/app/assets/images/printer.png +0 -0
  63. data/lib/generators/mindapp/templates/app/assets/images/refresh.png +0 -0
  64. data/lib/generators/mindapp/templates/app/assets/images/report.png +0 -0
  65. data/lib/generators/mindapp/templates/app/assets/images/rssmall.png +0 -0
  66. data/lib/generators/mindapp/templates/app/assets/images/tick.png +0 -0
  67. data/lib/generators/mindapp/templates/app/assets/images/twittersmall.png +0 -0
  68. data/lib/generators/mindapp/templates/app/assets/images/user.png +0 -0
  69. data/lib/generators/mindapp/templates/app/assets/images/view_code.png +0 -0
  70. data/lib/generators/mindapp/templates/app/assets/javascripts/admins.js.coffee +3 -0
  71. data/lib/generators/mindapp/templates/app/assets/javascripts/application.js +25 -0
  72. data/lib/generators/mindapp/templates/app/assets/javascripts/application.js.bak +20 -0
  73. data/lib/generators/mindapp/templates/app/assets/javascripts/articles.coffee +3 -0
  74. data/lib/generators/mindapp/templates/app/assets/javascripts/basic.coffee +3 -0
  75. data/lib/generators/mindapp/templates/app/assets/javascripts/cable.js +13 -0
  76. data/lib/generators/mindapp/templates/app/assets/javascripts/channels/.keep +0 -0
  77. data/lib/generators/mindapp/templates/app/assets/javascripts/comments.coffee +3 -0
  78. data/lib/generators/mindapp/templates/app/assets/javascripts/ctrs.coffee +3 -0
  79. data/lib/generators/mindapp/templates/app/assets/javascripts/devs.js.coffee +3 -0
  80. data/lib/generators/mindapp/templates/app/assets/javascripts/disable_enter_key.js +10 -0
  81. data/lib/generators/mindapp/templates/app/assets/javascripts/iscroll-wrapper.js +32 -0
  82. data/lib/generators/mindapp/templates/app/assets/javascripts/iscroll.js +1084 -0
  83. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile-1.2.1.js +9272 -0
  84. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.datebox.js +1772 -0
  85. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.splitview.js +695 -0
  86. data/lib/generators/mindapp/templates/app/assets/javascripts/mindapp.js +14 -0
  87. data/lib/generators/mindapp/templates/app/assets/javascripts/pictures.coffee +3 -0
  88. data/lib/generators/mindapp/templates/app/assets/javascripts/sitemap.coffee +3 -0
  89. data/lib/generators/mindapp/templates/app/assets/javascripts/users.js.coffee +3 -0
  90. data/lib/generators/mindapp/templates/app/assets/stylesheets/admins.scss +3 -0
  91. data/lib/generators/mindapp/templates/app/assets/stylesheets/application.css.bak +15 -0
  92. data/lib/generators/mindapp/templates/app/assets/stylesheets/application.scss +31 -0
  93. data/lib/generators/mindapp/templates/app/assets/stylesheets/articles.scss +60 -0
  94. data/lib/generators/mindapp/templates/app/assets/stylesheets/basic.scss +3 -0
  95. data/lib/generators/mindapp/templates/app/assets/stylesheets/comments.scss +3 -0
  96. data/lib/generators/mindapp/templates/app/assets/stylesheets/ctrs.scss +3 -0
  97. data/lib/generators/mindapp/templates/app/assets/stylesheets/devs.scss +3 -0
  98. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
  99. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
  100. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
  101. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
  102. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
  103. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
  104. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
  105. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
  106. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
  107. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
  108. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
  109. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
  110. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
  111. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
  112. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
  113. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
  114. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
  115. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
  116. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
  117. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ajax-loader.gif +0 -0
  118. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_black.png +0 -0
  119. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_blue.png +0 -0
  120. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_red.png +0 -0
  121. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
  122. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
  123. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
  124. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
  125. data/lib/generators/mindapp/templates/app/assets/stylesheets/indicator.gif +0 -0
  126. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile-1.2.1.css +2339 -0
  127. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.datebox.css +65 -0
  128. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.grids.collapsible.css +122 -0
  129. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.splitview.css +128 -0
  130. data/lib/generators/mindapp/templates/app/assets/stylesheets/kul-4.2.css +1516 -0
  131. data/lib/generators/mindapp/templates/app/assets/stylesheets/kul-4.2.min.css +11 -0
  132. data/lib/generators/mindapp/templates/app/assets/stylesheets/mindapp.css +138 -0
  133. data/lib/generators/mindapp/templates/app/assets/stylesheets/pictures.scss +3 -0
  134. data/lib/generators/mindapp/templates/app/assets/stylesheets/rouge.css.erb +11 -0
  135. data/lib/generators/mindapp/templates/app/assets/stylesheets/sarabun.css +37 -0
  136. data/lib/generators/mindapp/templates/app/assets/stylesheets/sitemap.scss +3 -0
  137. data/lib/generators/mindapp/templates/app/assets/stylesheets/users.scss +3 -0
  138. data/lib/generators/mindapp/templates/app/channels/application_cable/channel.rb +4 -0
  139. data/lib/generators/mindapp/templates/app/channels/application_cable/connection.rb +4 -0
  140. data/lib/generators/mindapp/templates/app/controllers/admins_controller.rb +6 -0
  141. data/lib/generators/mindapp/templates/app/controllers/application_controller.rb +41 -0
  142. data/lib/generators/mindapp/templates/app/controllers/articles_controller.rb +67 -0
  143. data/lib/generators/mindapp/templates/app/controllers/comments_controller.rb +17 -0
  144. data/lib/generators/mindapp/templates/app/controllers/concerns/.keep +0 -0
  145. data/lib/generators/mindapp/templates/app/controllers/ctrs_controller.rb +2 -0
  146. data/lib/generators/mindapp/templates/app/controllers/devs_controller.rb +2 -0
  147. data/lib/generators/mindapp/templates/app/controllers/identities_controller.rb +5 -0
  148. data/lib/generators/mindapp/templates/app/controllers/mindapp_controller.rb +501 -0
  149. data/lib/generators/mindapp/templates/app/controllers/sessions_controller.rb +30 -0
  150. data/lib/generators/mindapp/templates/app/controllers/sitemap_controller.rb +12 -0
  151. data/lib/generators/mindapp/templates/app/controllers/users_controller.rb +25 -0
  152. data/lib/generators/mindapp/templates/app/helpers/admins_helper.rb +2 -0
  153. data/lib/generators/mindapp/templates/app/helpers/application_helper.rb +33 -0
  154. data/lib/generators/mindapp/templates/app/helpers/articles_helper.rb +2 -0
  155. data/lib/generators/mindapp/templates/app/helpers/basic_helper.rb +2 -0
  156. data/lib/generators/mindapp/templates/app/helpers/comments_helper.rb +2 -0
  157. data/lib/generators/mindapp/templates/app/helpers/ctrs_helper.rb +2 -0
  158. data/lib/generators/mindapp/templates/app/helpers/devs_helper.rb +2 -0
  159. data/lib/generators/mindapp/templates/app/helpers/pictures_helper.rb +2 -0
  160. data/lib/generators/mindapp/templates/app/helpers/sitemap_helper.rb +2 -0
  161. data/lib/generators/mindapp/templates/app/helpers/users_helper.rb +2 -0
  162. data/lib/generators/mindapp/templates/app/jobs/application_job.rb +2 -0
  163. data/lib/generators/mindapp/templates/app/mailers/application_mailer.rb +4 -0
  164. data/lib/generators/mindapp/templates/app/mailers/mindapp_mailer.rb +7 -0
  165. data/lib/generators/mindapp/templates/app/mindapp/index.mm +188 -0
  166. data/lib/generators/mindapp/templates/app/mindapp/template/view.html.erb +23 -0
  167. data/lib/generators/mindapp/templates/app/models/.gitkeep +0 -0
  168. data/lib/generators/mindapp/templates/app/models/address.rb +14 -0
  169. data/lib/generators/mindapp/templates/app/models/article.rb +14 -0
  170. data/lib/generators/mindapp/templates/app/models/ckeditor/asset.rb +5 -0
  171. data/lib/generators/mindapp/templates/app/models/ckeditor/attachment_file.rb +13 -0
  172. data/lib/generators/mindapp/templates/app/models/ckeditor/picture.rb +14 -0
  173. data/lib/generators/mindapp/templates/app/models/comment.rb +11 -0
  174. data/lib/generators/mindapp/templates/app/models/concerns/.keep +0 -0
  175. data/lib/generators/mindapp/templates/app/models/identity.rb +14 -0
  176. data/lib/generators/mindapp/templates/app/models/mindapp/doc.rb +31 -0
  177. data/lib/generators/mindapp/templates/app/models/mindapp/module.rb +11 -0
  178. data/lib/generators/mindapp/templates/app/models/mindapp/notice.rb +14 -0
  179. data/lib/generators/mindapp/templates/app/models/mindapp/role.rb +8 -0
  180. data/lib/generators/mindapp/templates/app/models/mindapp/runseq.rb +24 -0
  181. data/lib/generators/mindapp/templates/app/models/mindapp/service.rb +17 -0
  182. data/lib/generators/mindapp/templates/app/models/mindapp/xmain.rb +38 -0
  183. data/lib/generators/mindapp/templates/app/models/param.rb +41 -0
  184. data/lib/generators/mindapp/templates/app/models/person.rb +14 -0
  185. data/lib/generators/mindapp/templates/app/models/user.rb +30 -0
  186. data/lib/generators/mindapp/templates/app/views/admins/edit_role/edit_role.html.erb +7 -0
  187. data/lib/generators/mindapp/templates/app/views/admins/edit_role/select_user.html.erb +4 -0
  188. data/lib/generators/mindapp/templates/app/views/articles/edit.haml +12 -0
  189. data/lib/generators/mindapp/templates/app/views/articles/edit_article/edit_article.html.erb +13 -0
  190. data/lib/generators/mindapp/templates/app/views/articles/edit_article/select_article.html.erb +12 -0
  191. data/lib/generators/mindapp/templates/app/views/articles/index.haml +23 -0
  192. data/lib/generators/mindapp/templates/app/views/articles/my.haml +21 -0
  193. data/lib/generators/mindapp/templates/app/views/articles/new_article/form_article.html.erb +14 -0
  194. data/lib/generators/mindapp/templates/app/views/articles/show.html.haml +27 -0
  195. data/lib/generators/mindapp/templates/app/views/articles/xedit_article/edit_article.html.erb +13 -0
  196. data/lib/generators/mindapp/templates/app/views/articles/xedit_article/xedit_article.html.erb +11 -0
  197. data/lib/generators/mindapp/templates/app/views/ctrs/vfolder1/viewfile1.html.erb +23 -0
  198. data/lib/generators/mindapp/templates/app/views/ctrs/vfolder1/viewfile2.html.erb +23 -0
  199. data/lib/generators/mindapp/templates/app/views/ctrs/vfolder2/viewfile2.html.erb +23 -0
  200. data/lib/generators/mindapp/templates/app/views/identities/new.html.erb +30 -0
  201. data/lib/generators/mindapp/templates/app/views/layouts/_full.haml +39 -0
  202. data/lib/generators/mindapp/templates/app/views/layouts/_head.html.erb +13 -0
  203. data/lib/generators/mindapp/templates/app/views/layouts/_meta_tags.html.erb +5 -0
  204. data/lib/generators/mindapp/templates/app/views/layouts/_metatag.html.erb +19 -0
  205. data/lib/generators/mindapp/templates/app/views/layouts/_page.haml +16 -0
  206. data/lib/generators/mindapp/templates/app/views/layouts/_top.html.erb +10 -0
  207. data/lib/generators/mindapp/templates/app/views/layouts/application.haml +4 -0
  208. data/lib/generators/mindapp/templates/app/views/layouts/application.html.erb.bak +14 -0
  209. data/lib/generators/mindapp/templates/app/views/layouts/gmail.html.erb +9 -0
  210. data/lib/generators/mindapp/templates/app/views/layouts/mailer.html.erb +13 -0
  211. data/lib/generators/mindapp/templates/app/views/layouts/mailer.text.erb +1 -0
  212. data/lib/generators/mindapp/templates/app/views/layouts/mobile.html.erb +13 -0
  213. data/lib/generators/mindapp/templates/app/views/layouts/mobilejq.html.erb +31 -0
  214. data/lib/generators/mindapp/templates/app/views/layouts/print.html.erb +22 -0
  215. data/lib/generators/mindapp/templates/app/views/layouts/utf8.html.erb +22 -0
  216. data/lib/generators/mindapp/templates/app/views/mindapp/_activity.md +10 -0
  217. data/lib/generators/mindapp/templates/app/views/mindapp/_menu.haml +25 -0
  218. data/lib/generators/mindapp/templates/app/views/mindapp/_menu_mm.haml +29 -0
  219. data/lib/generators/mindapp/templates/app/views/mindapp/_model.md +5 -0
  220. data/lib/generators/mindapp/templates/app/views/mindapp/_modul.md +9 -0
  221. data/lib/generators/mindapp/templates/app/views/mindapp/_pending_home.haml +5 -0
  222. data/lib/generators/mindapp/templates/app/views/mindapp/_pending_page.haml +24 -0
  223. data/lib/generators/mindapp/templates/app/views/mindapp/_service.md +24 -0
  224. data/lib/generators/mindapp/templates/app/views/mindapp/_static.haml +23 -0
  225. data/lib/generators/mindapp/templates/app/views/mindapp/doc.md +37 -0
  226. data/lib/generators/mindapp/templates/app/views/mindapp/error_logs.haml +22 -0
  227. data/lib/generators/mindapp/templates/app/views/mindapp/feed.rss.builder +27 -0
  228. data/lib/generators/mindapp/templates/app/views/mindapp/help.haml +20 -0
  229. data/lib/generators/mindapp/templates/app/views/mindapp/index.html.haml +21 -0
  230. data/lib/generators/mindapp/templates/app/views/mindapp/logs.haml +22 -0
  231. data/lib/generators/mindapp/templates/app/views/mindapp/pending.haml +1 -0
  232. data/lib/generators/mindapp/templates/app/views/mindapp/run_form.haml +37 -0
  233. data/lib/generators/mindapp/templates/app/views/mindapp/run_output.haml +38 -0
  234. data/lib/generators/mindapp/templates/app/views/mindapp/search.haml +20 -0
  235. data/lib/generators/mindapp/templates/app/views/mindapp/status.haml +61 -0
  236. data/lib/generators/mindapp/templates/app/views/mindapp_mailer/gmail.html.erb +9 -0
  237. data/lib/generators/mindapp/templates/app/views/sessions/new.html.erb +11 -0
  238. data/lib/generators/mindapp/templates/app/views/sitemap/index.xml.haml +10 -0
  239. data/lib/generators/mindapp/templates/app/views/users/index.haml +13 -0
  240. data/lib/generators/mindapp/templates/app/views/users/pwd/enter.html.erb +6 -0
  241. data/lib/generators/mindapp/templates/app/views/users/user/enter_user.html.erb +8 -0
  242. data/lib/generators/mindapp/templates/cloudinary.yml +9 -0
  243. data/lib/generators/mindapp/templates/mindapp.yml +10 -0
  244. data/lib/generators/mindapp/templates/public/404.html +67 -0
  245. data/lib/generators/mindapp/templates/public/422.html +67 -0
  246. data/lib/generators/mindapp/templates/public/500.html +66 -0
  247. data/lib/generators/mindapp/templates/public/assets/images/logo.png +0 -0
  248. data/lib/generators/mindapp/templates/public/favicon.ico +0 -0
  249. data/lib/generators/mindapp/templates/public/robots.txt +3 -0
  250. data/lib/generators/mindapp/templates/seeds.rb +6 -0
  251. data/lib/generators/mindapp/templates/spec/controllers/admins_controller_spec.rb +5 -0
  252. data/lib/generators/mindapp/templates/spec/controllers/devs_controller_spec.rb +5 -0
  253. data/lib/generators/mindapp/templates/spec/controllers/users_controller_spec.rb +5 -0
  254. data/lib/generators/mindapp/templates/spec/helpers/admins_helper_spec.rb +15 -0
  255. data/lib/generators/mindapp/templates/spec/helpers/devs_helper_spec.rb +15 -0
  256. data/lib/generators/mindapp/templates/spec/helpers/users_helper_spec.rb +15 -0
  257. data/lib/generators/mindapp/templates/spec/spec_helper.rb +38 -0
  258. data/lib/mindapp/helpers.rb +509 -0
  259. data/lib/mindapp/railtie.rb +18 -0
  260. data/lib/mindapp/version.rb +3 -0
  261. data/lib/mindapp.rb +6 -0
  262. data/lib/tasks/mindapp.rake +202 -0
  263. data/mindapp.gemspec +27 -0
  264. metadata +349 -0
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the DevsHelper. For example:
5
+ #
6
+ # describe DevsHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe DevsHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the UsersHelper. For example:
5
+ #
6
+ # describe UsersHelper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ describe UsersHelper do
14
+ pending "add some examples to (or delete) #{__FILE__}"
15
+ end
@@ -0,0 +1,38 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ REQUEST.ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc,
8
+ # in spec/support/ and its subdirectories.
9
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+ # ## Mock Framework
13
+ #
14
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
15
+ #
16
+ # config.mock_with :mocha
17
+ # config.mock_with :flexmock
18
+ # config.mock_with :rr
19
+
20
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+
23
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
24
+ # examples within a transaction, remove the following line or assign false
25
+ # instead of true.
26
+ config.use_transactional_fixtures = true
27
+
28
+ # If true, the base class of anonymous controllers will be inferred
29
+ # automatically. This will be the default behavior in future versions of
30
+ # rspec-rails.
31
+ config.infer_base_class_for_anonymous_controllers = false
32
+
33
+ # Run specs in random order to surface order dependencies. If you find an
34
+ # order dependency and want to debug it, you can fix the order by providing
35
+ # the seed, which is printed after each run.
36
+ # --seed 1234
37
+ config.order = "random"
38
+ end
@@ -0,0 +1,509 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Mindapp
3
+ module Helpers
4
+ require "rexml/document"
5
+ include REXML
6
+ # methods from application_controller
7
+ def b(s)
8
+ "<b>#{s}</b>".html_safe
9
+ end
10
+ def date_thai(d= Time.now, options={})
11
+ unless d
12
+ ""
13
+ else
14
+ y = d.year+543
15
+ if options[:monthfull] || options[:month_full]
16
+ mh= ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฏาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม']
17
+ else
18
+ mh= ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.']
19
+ end
20
+ if options[:dateonly] || options[:date_only]
21
+ d.day.to_s+" "+mh[d.month-1]+" "+y.to_s
22
+ else
23
+ d.day.to_s+" "+mh[d.month-1]+" "+y.to_s+" เวลา "+sprintf("%02d",d.hour.to_s)+":"+sprintf("%02d",d.min.to_s)
24
+ end
25
+ end
26
+ end
27
+ def link_to_blank(body, url_options = {}, html_options = {})
28
+ link_to(body, url_options, html_options.merge(target: "_blank"))
29
+ end
30
+ def code_text(s) # old def code(s)
31
+ "<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'>#{s}</code></pre>".html_safe
32
+ end
33
+ def refresh_to(url='/', option={})
34
+ if option[:alert]
35
+ ma_log option[:alert]
36
+ end
37
+ render inline: "<script>window.location.replace('#{url}')</script>"
38
+ end
39
+ def read_binary(path)
40
+ File.open path, "rb" do |f| f.read end
41
+ end
42
+ def redirect_to_root
43
+ redirect_to root_path
44
+ end
45
+ def get_option(opt, runseq=@runseq)
46
+ xml= REXML::Document.new(runseq.xml).root
47
+ url=''
48
+ xml.each_element('///node') do |n|
49
+ text= n.attributes['TEXT']
50
+ url= text if text =~/^#{opt}:\s*/
51
+ end
52
+ c, h= url.split(':', 2)
53
+ opt= h ? h.strip : false
54
+ end
55
+ def ma_comment?(s)
56
+ s[0]==35
57
+ end
58
+ def get_ip
59
+ request.env['HTTP_X_FORWARDED_FOR'] || request.env['REMOTE_ADDR']
60
+ end
61
+ def get_default_role
62
+ default_role= Mindapp::Role.where(:code =>'default').first
63
+ return default_role ? default_role.name.to_s : ''
64
+ end
65
+ def name2code(s)
66
+ # rather not ignore # symbol cause it could be comment
67
+ code, name = s.split(':')
68
+ code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
69
+ end
70
+ def name2camel(s)
71
+ s.gsub(' ','_').camelcase
72
+ end
73
+ def true_action?(s)
74
+ %w(call ws redirect invoke email).include? s
75
+ end
76
+ def set_global
77
+ $xmain= @xmain ; $runseq = @runseq ; $user = current_user ; $xvars= @xmain.xvars; $ip = request.env["REMOTE_ADDR"]
78
+ end
79
+ def authorize? # use in pending tasks
80
+ @runseq= @xmain.runseqs.find @xmain.current_runseq
81
+ return false unless @runseq
82
+ @user = current_user
83
+ set_global
84
+ return false unless eval(@runseq.rule) if @runseq.rule
85
+ return true if true_action?(@runseq.action)
86
+ # return false if check_wait
87
+ return true if @runseq.role.blank?
88
+ unless @runseq.role.empty?
89
+ return false unless @user.role
90
+ return @user.role.upcase.split(',').include?(@runseq.role.upcase)
91
+ end
92
+ return true
93
+ end
94
+ def authorize_init? # use when initialize new transaction
95
+ # check module role
96
+ mrole = @service.module.role
97
+ return false if mrole && !current_user
98
+ return false if mrole && !current_user.has_role(mrole)
99
+
100
+ # check step 1 role
101
+ xml= @service.xml
102
+ step1 = REXML::Document.new(xml).root.elements['node']
103
+ role= get_option_xml("role", step1) || ""
104
+ # rule= get_option_xml("rule", step1) || true
105
+ return true if role==""
106
+ unless current_user
107
+ return role.blank?
108
+ else
109
+ return false unless current_user.role
110
+ return current_user.has_role(role)
111
+ end
112
+ end
113
+ def ma_log(message)
114
+ Mindapp::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
115
+ :unread=> true, :ip=> ($ip || request.env["REMOTE_ADDR"])
116
+ # if session[:user_id]
117
+ # Mindapp::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
118
+ # :user_id => $user.id, :unread=> true, :ip=>request.env["REMOTE_ADDR"]
119
+ # else
120
+ # Mindapp::Notice.create :message => ERB::Util.html_escape(message.gsub("`","'")),
121
+ # :unread=> true, :ip=>request.env["REMOTE_ADDR"]
122
+ # end
123
+ end
124
+
125
+ alias :ma_notice :ma_log
126
+
127
+ # methods from application_helper
128
+ def markdown(text)
129
+ erbified = ERB.new(text.html_safe).result(binding)
130
+ red = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
131
+ red.render(erbified).html_safe
132
+ end
133
+ def align_text(s, pixel=3)
134
+ "<span style='position:relative; top:-#{pixel}px;'>#{s}</span>".html_safe
135
+ end
136
+ def status_icon(status)
137
+ case status
138
+ when 'R'
139
+ image_tag 'user.png'
140
+ when 'F'
141
+ image_tag 'tick.png'
142
+ when 'I'
143
+ image_tag 'control_play.png'
144
+ when 'E'
145
+ image_tag 'logout.png'
146
+ when 'X'
147
+ image_tag 'cross.png'
148
+ else
149
+ image_tag 'cancel.png'
150
+ end
151
+ end
152
+ def role_name(code)
153
+ role= Mindapp::Role.where(code:code).first
154
+ return role ? role.name : ""
155
+ end
156
+ def uncomment(s)
157
+ s.sub(/^#\s/,'')
158
+ end
159
+ def code_div(s)
160
+ "<pre style='background-color: #efffef;'><code class='ruby' lang='ruby'> #{s}</code></pre>".html_safe
161
+ end
162
+ def ajax?(s)
163
+ return s.match('file_field') ? false : true
164
+ end
165
+ def step(s, total) # square text
166
+ s = (s==0)? 1: s.to_i
167
+ total = total.to_i
168
+ out ="<div class='step'>"
169
+ (s-1).times {|ss| out += "<span class='steps_done'>#{(ss+1)}</span>" }
170
+ out += %Q@<span class='step_now' >@
171
+ out += s.to_s
172
+ out += "</span>"
173
+ out += %Q@@
174
+ for i in s+1..total
175
+ out += "<span class='steps_more'>#{i}</span>"
176
+ end
177
+ out += "</div>"
178
+ out.html_safe
179
+ end
180
+
181
+ # methods that I don't know where they came from
182
+ def current_user
183
+ if session[:user_id]
184
+ return @user ||= User.find(session[:user_id]['$oid'])
185
+ else
186
+ return nil
187
+ end
188
+ end
189
+ def ui_action?(s)
190
+ %w(form output mail pdf).include? s
191
+ end
192
+ # def handle_ma_notice
193
+ # if Mindapp::Notice.recent.count>0
194
+ # notice= Mindapp::Notice.recent.last
195
+ # notice.update_attribute :unread, false
196
+ # "<script>notice('#{notice.message}');</script>"
197
+ # else
198
+ # ""
199
+ # end
200
+ # end
201
+ def process_services
202
+ # todo: persist mm_md5
203
+ xml= @app||get_app
204
+ if defined? session
205
+ md5= Digest::MD5.hexdigest(xml.to_s)
206
+ if session[:mm_md5]
207
+ return if session[:mm_md5]==md5
208
+ else
209
+ session[:mm_md5]= md5
210
+ end
211
+ end
212
+ protected_services = []
213
+ protected_modules = []
214
+ mseq= 0
215
+ @services= xml.elements["//node[@TEXT='services']"] || REXML::Document.new
216
+ @services.each_element('node') do |m|
217
+ ss= m.attributes["TEXT"]
218
+ code, name= ss.split(':', 2)
219
+ next if code.blank?
220
+ next if code.comment?
221
+ module_code= code.to_code
222
+ # create or update to GmaModule
223
+ ma_module= Mindapp::Module.find_or_create_by :code=>module_code
224
+ ma_module.update_attributes :uid=>ma_module.id.to_s
225
+ protected_modules << ma_module.uid
226
+ name = module_code if name.blank?
227
+ ma_module.update_attributes :name=> name.strip, :seq=> mseq
228
+ mseq += 1
229
+ seq= 0
230
+ m.each_element('node') do |s|
231
+ service_name= s.attributes["TEXT"].to_s
232
+ scode, sname= service_name.split(':', 2)
233
+ sname ||= scode; sname.strip!
234
+ scode= scode.to_code
235
+ if scode=="role"
236
+ ma_module.update_attribute :role, sname
237
+ next
238
+ end
239
+ if scode.downcase=="link"
240
+ role= get_option_xml("role", s) || ""
241
+ rule= get_option_xml("rule", s) || ""
242
+ ma_service= Mindapp::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode, :name=> sname
243
+ ma_service.update_attributes :xml=>s.to_s, :name=>sname,
244
+ :list=>listed(s), :ma_secured=>secured?(s),
245
+ :module_id=>ma_module.id, :seq => seq,
246
+ :confirm=> get_option_xml("confirm", xml),
247
+ :role => role, :rule => rule, :uid=> ma_service.id.to_s
248
+ seq += 1
249
+ protected_services << ma_service.uid
250
+ else
251
+ # normal service
252
+ step1 = s.elements['node']
253
+ role= get_option_xml("role", step1) || ""
254
+ rule= get_option_xml("rule", step1) || ""
255
+ ma_service= Mindapp::Service.find_or_create_by :module_code=> ma_module.code, :code=> scode
256
+ ma_service.update_attributes :xml=>s.to_s, :name=>sname,
257
+ :list=>listed(s), :ma_secured=>secured?(s),
258
+ :module_id=>ma_module.id, :seq => seq,
259
+ :confirm=> get_option_xml("confirm", xml),
260
+ :role => role, :rule => rule, :uid=> ma_service.id.to_s
261
+ seq += 1
262
+ protected_services << ma_service.uid
263
+ end
264
+ end
265
+ end
266
+ Mindapp::Module.not_in(:uid=>protected_modules).delete_all
267
+ Mindapp::Service.not_in(:uid=>protected_services).delete_all
268
+ end
269
+ def get_app
270
+ f= MM || "#{Rails.root}/app/mindapp/index.mm"
271
+ dir= File.dirname(f)
272
+ t= REXML::Document.new(File.read(MM).gsub("\n","")).root
273
+ recheck= true ; first_pass= true
274
+ while recheck
275
+ recheck= false
276
+ t.elements.each("//node") do |n|
277
+ if n.attributes['LINK'] # has attached file
278
+ if first_pass
279
+ f= "#{dir}/#{n.attributes['LINK']}"
280
+ else
281
+ f= n.attributes['LINK']
282
+ end
283
+ next unless File.exists?(f)
284
+ tt= REXML::Document.new(File.read(f).gsub("\n","")).root.elements["node"]
285
+ make_folders_absolute(f,tt)
286
+ tt.elements.each("node") do |tt_node|
287
+ n.parent.insert_before n, tt_node
288
+ end
289
+ recheck= true
290
+ n.parent.delete_element n
291
+ end
292
+ end
293
+ first_pass = false
294
+ end
295
+ return t
296
+ end
297
+ def controller_exists?(modul)
298
+ File.exists? "#{Rails.root}/app/controllers/#{modul}_controller.rb"
299
+ end
300
+ def dup_hash(a)
301
+ h = Hash.new(0)
302
+ a.each do |aa|
303
+ h[aa] += 1
304
+ end
305
+ return h
306
+ end
307
+ def login?
308
+ session[:user_id] != nil
309
+ end
310
+ def own_xmain?
311
+ if $xmain
312
+ return current_user.id==$xvars['user_id']
313
+ else
314
+ # if eval on first step would return true so user can start service
315
+ return true
316
+ end
317
+ end
318
+ def get_option_xml(opt, xml)
319
+ if xml
320
+ url=''
321
+ xml.each_element('node') do |n|
322
+ text= n.attributes['TEXT']
323
+ url= text if text =~/^#{opt}/
324
+ end
325
+ return nil if url.blank?
326
+ c, h= url.split(':', 2)
327
+ opt= h ? h.strip : true
328
+ else
329
+ return nil
330
+ end
331
+ end
332
+ def listed(node)
333
+ icons=[]
334
+ node.each_element("icon") do |nn|
335
+ icons << nn.attributes["BUILTIN"]
336
+ end
337
+ return !icons.include?("closed")
338
+ end
339
+ def secured?(node)
340
+ icons=[]
341
+ node.each_element("icon") do |nn|
342
+ icons << nn.attributes["BUILTIN"]
343
+ end
344
+ return icons.include?("password")
345
+ end
346
+ def freemind2action(s)
347
+ case s.downcase
348
+ #when 'bookmark' # Excellent
349
+ # 'call'
350
+ when 'bookmark' # Excellent
351
+ 'do'
352
+ when 'attach' # Look here
353
+ 'form'
354
+ when 'edit' # Refine
355
+ 'pdf'
356
+ when 'wizard' # Magic
357
+ 'ws'
358
+ when 'help' # Question
359
+ 'if'
360
+ when 'forward' # Forward
361
+ 'redirect'
362
+ when 'kaddressbook' #Phone
363
+ 'invoke' # invoke new service along the way
364
+ when 'pencil'
365
+ 'output'
366
+ when 'mail'
367
+ 'mail'
368
+ end
369
+ end
370
+ def affirm(s)
371
+ return s =~ /[y|yes|t|true]/i ? true : false
372
+ end
373
+ def negate(s)
374
+ return s =~ /[n|no|f|false]/i ? true : false
375
+ end
376
+
377
+ # module FormBuilder
378
+ # def date_field(method, options = {})
379
+ # default= self.object.send(method) || Date.today
380
+ # data_options= ({"mode"=>"calbox"}).merge(options)
381
+ # %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
382
+ # end
383
+ # end
384
+ end
385
+ end
386
+
387
+ class String
388
+ def comment?
389
+ self[0]=='#'
390
+ end
391
+ def to_code
392
+ s= self.dup
393
+ # s.downcase!
394
+ # s.gsub! /[\s\-_]/, ""
395
+ # s
396
+ code, name = s.split(':')
397
+ code.downcase.strip.gsub(' ','_').gsub(/[^#_\/a-zA-Z0-9]/,'')
398
+ end
399
+ end
400
+
401
+ module ActionView
402
+ module Helpers
403
+ module DateHelper
404
+ def date_field_tag(method, options = {})
405
+ default= options[:default] || Date.today
406
+ data_options= ({"mode"=>"calbox"}).merge(options)
407
+ %Q(<input name='#{method}' id='#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>).html_safe
408
+ end
409
+ end
410
+ class FormBuilder
411
+ # def date_select_thai(method)
412
+ # self.date_select method, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year]
413
+ # end
414
+ def date_field(method, options = {})
415
+ default= options[:default] || self.object.send(method) || Date.today
416
+ data_options= ({"mode"=>"calbox"}).merge(options)
417
+ out= %Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default.strftime("%F")}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
418
+ out.html_safe
419
+ end
420
+ def time_field(method, options = {})
421
+ default= self.object.send(method) || Time.now
422
+ data_options= ({"mode"=>"timebox"}).merge(options)
423
+ out=%Q(<input name='#{self.object_name}[#{method}]' id='#{self.object_name}_#{method}' value='#{default}' type='date' data-role='datebox' data-options='#{data_options.to_json}'>)
424
+ out.html_safe
425
+ end
426
+ def date_select_thai(method, default= Time.now, disabled=false)
427
+ date_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
428
+ end
429
+ def datetime_select_thai(method, default= Time.now, disabled=false)
430
+ datetime_select method, :default => default, :use_month_names=>THAI_MONTHS, :order=>[:day, :month, :year], :disabled=>disabled
431
+ end
432
+
433
+ def point(o={})
434
+ o[:zoom]= 11 unless o[:zoom]
435
+ o[:width]= '100%' unless o[:width]
436
+ o[:height]= '300px' unless o[:height]
437
+ o[:lat] = 13.91819 unless o[:lat]
438
+ o[:lng] = 100.48889 unless o[:lng]
439
+
440
+ out = <<-EOT
441
+ <script type='text/javascript'>
442
+ //<![CDATA[
443
+ var latLng;
444
+ var map_#{self.object_name};
445
+ var marker_#{self.object_name};
446
+
447
+ function init_map() {
448
+ var lat = #{o[:lat]};
449
+ var lng = #{o[:lng]};
450
+ //var lat = position.coords.latitude"; // HTML5 pass position in function initialize(position)
451
+ // google.loader.ClientLocation.latitude;
452
+ //var lng = position.coords.longitude;
453
+ // google.loader.ClientLocation.longitude;
454
+ latLng = new google.maps.LatLng(lat, lng);
455
+ map_#{self.object_name} = new google.maps.Map(document.getElementById("map_#{self.object_name}"), {
456
+ zoom: #{o[:zoom]},
457
+ center: latLng,
458
+ mapTypeId: google.maps.MapTypeId.ROADMAP
459
+ });
460
+ marker_#{self.object_name} = new google.maps.Marker({
461
+ position: latLng,
462
+ map: map_#{self.object_name},
463
+ draggable: true,
464
+ });
465
+ google.maps.event.addListener(marker_#{self.object_name}, 'dragend', function(event) {
466
+ $('##{self.object_name}_lat').val(event.latLng.lat());
467
+ $('##{self.object_name}_lng').val(event.latLng.lng());
468
+ });
469
+ google.maps.event.addListener(map_#{self.object_name}, 'click', function(event) {
470
+ $('##{self.object_name}_lat').val(event.latLng.lat());
471
+ $('##{self.object_name}_lng').val(event.latLng.lng());
472
+ move();
473
+ });
474
+ $('##{self.object_name}_lat').val(lat);
475
+ $('##{self.object_name}_lng').val(lng);
476
+ };
477
+
478
+ function move() {
479
+ latLng = new google.maps.LatLng($('##{self.object_name}_lat').val(), $('##{self.object_name}_lng').val());
480
+ map_#{self.object_name}.panTo(latLng);
481
+ marker_#{self.object_name}.setPosition(latLng);
482
+ }
483
+
484
+ //google.maps.event.addDomListener(window, 'load', init_map);
485
+
486
+ //]]>
487
+ </script>
488
+ <div class="field" data-role="fieldcontain">
489
+ Latitude: #{self.text_field :lat, :style=>"width:300px;" }
490
+ Longitude: #{self.text_field :lng, :style=>"width:300px;" }
491
+ </div>
492
+ <p/>
493
+ <div id='map_#{self.object_name}' style='max-width: none !important; width:#{o[:width]}; height:#{o[:height]};' class='map'></div>
494
+ <script>
495
+ $('##{self.object_name}_lat').change(function() {move()});
496
+ $('##{self.object_name}_lng').change(function() {move()});
497
+ //var w= $("input[id*=lat]").parent().width();
498
+ //$("input[id*=lat]").css('width','300px');
499
+ //$("input[id*=lng]").css('width','300px');
500
+ $( document ).one( "pagechange", function(){
501
+ init_map();
502
+ });
503
+ </script>
504
+ EOT
505
+ out.html_safe
506
+ end
507
+ end
508
+ end
509
+ end
@@ -0,0 +1,18 @@
1
+ require 'mindapp'
2
+ require 'mindapp/helpers'
3
+
4
+ module Mindapp
5
+ require 'rails'
6
+ class Railtie < Rails::Railtie
7
+ initializer "testing" do |app|
8
+ ActionController::Base.send :include, Mindapp::Helpers
9
+ end
10
+ rake_tasks do
11
+ load "tasks/mindapp.rake"
12
+ end
13
+ end
14
+ end
15
+
16
+ module ApplicationHelper
17
+ include Mindapp::Helpers
18
+ end
@@ -0,0 +1,3 @@
1
+ module Mindapp
2
+ VERSION = "0.1.0"
3
+ end
data/lib/mindapp.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "mindapp/version"
2
+ require 'mindapp/railtie'
3
+
4
+ module Mindapp
5
+ # Your code goes here...
6
+ end