constructor-core 0.7.0 → 0.7.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 (351) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +13 -0
  5. data/.yardopts +9 -0
  6. data/Gemfile +31 -0
  7. data/Guardfile +15 -0
  8. data/LICENSE.md +7 -0
  9. data/README.md +35 -0
  10. data/Rakefile +19 -0
  11. data/bin/rails +8 -0
  12. data/config.ru +4 -0
  13. data/config/routes.rb +3 -17
  14. data/constructor-cms.gemspec +26 -0
  15. data/{app → core/app}/assets/images/constructor_core/glyphicons-halflings-white.png +0 -0
  16. data/{app → core/app}/assets/images/constructor_core/glyphicons-halflings.png +0 -0
  17. data/{app → core/app}/assets/images/constructor_core/minus.gif +0 -0
  18. data/{app → core/app}/assets/images/constructor_core/plus.gif +0 -0
  19. data/{app → core/app}/assets/images/constructor_core/rss.png +0 -0
  20. data/{app → core/app}/assets/images/constructor_core/treeview-black-line.gif +0 -0
  21. data/{app → core/app}/assets/images/constructor_core/treeview-black.gif +0 -0
  22. data/{app → core/app}/assets/images/constructor_core/treeview-default-line.gif +0 -0
  23. data/{app → core/app}/assets/images/constructor_core/treeview-default.gif +0 -0
  24. data/{app → core/app}/assets/images/constructor_core/treeview-famfamfam-line.gif +0 -0
  25. data/{app → core/app}/assets/images/constructor_core/treeview-famfamfam.gif +0 -0
  26. data/{app → core/app}/assets/images/constructor_core/treeview-gray-line.gif +0 -0
  27. data/{app → core/app}/assets/images/constructor_core/treeview-gray.gif +0 -0
  28. data/{app → core/app}/assets/images/constructor_core/treeview-red-line.gif +0 -0
  29. data/{app → core/app}/assets/images/constructor_core/treeview-red.gif +0 -0
  30. data/{app → core/app}/assets/images/constructor_core/twitter.png +0 -0
  31. data/{app → core/app}/assets/images/constructor_core/widgets.png +0 -0
  32. data/{app → core/app}/assets/javascripts/constructor_core/application.js.coffee +0 -0
  33. data/{app → core/app}/assets/javascripts/constructor_core/bootstrap.js +0 -0
  34. data/{app → core/app}/assets/javascripts/constructor_core/jquery.cookie.js +0 -0
  35. data/{app → core/app}/assets/javascripts/constructor_core/jquery_bundle.js.coffee +0 -0
  36. data/{app → core/app}/assets/javascripts/constructor_core/keys_snippet.js +0 -0
  37. data/{app → core/app}/assets/javascripts/constructor_core/retina.js +0 -0
  38. data/{app → core/app}/assets/javascripts/constructor_core/urlify.js +0 -0
  39. data/{app → core/app}/assets/stylesheets/constructor_core/application.css.scss +0 -0
  40. data/{app → core/app}/assets/stylesheets/constructor_core/main.css.scss +0 -0
  41. data/{app → core/app}/controllers/constructor_core/application_controller.rb +0 -0
  42. data/{app → core/app}/controllers/constructor_core/sessions_controller.rb +0 -0
  43. data/{app → core/app}/controllers/constructor_core/users_controller.rb +0 -0
  44. data/{app → core/app}/helpers/constructor_core/application_helper.rb +0 -0
  45. data/{app → core/app}/models/constructor_core/user.rb +0 -0
  46. data/{app → core/app}/views/constructor_core/devise/confirmations/new.html.haml +0 -0
  47. data/{app → core/app}/views/constructor_core/devise/mailer/confirmation_instructions.html.haml +0 -0
  48. data/{app → core/app}/views/constructor_core/devise/mailer/reset_password_instructions.html.haml +0 -0
  49. data/{app → core/app}/views/constructor_core/devise/mailer/unlock_instructions.html.haml +0 -0
  50. data/{app → core/app}/views/constructor_core/devise/passwords/edit.html.haml +0 -0
  51. data/{app → core/app}/views/constructor_core/devise/passwords/new.html.haml +0 -0
  52. data/{app → core/app}/views/constructor_core/devise/registrations/edit.html.haml +0 -0
  53. data/{app → core/app}/views/constructor_core/devise/registrations/new.html.haml +0 -0
  54. data/{app → core/app}/views/constructor_core/devise/shared/_links.html.haml +0 -0
  55. data/{app → core/app}/views/constructor_core/devise/unlocks/new.html.haml +0 -0
  56. data/{app → core/app}/views/constructor_core/sessions/new.html.haml +0 -0
  57. data/{app → core/app}/views/constructor_core/users/profile.haml +0 -0
  58. data/{app → core/app}/views/layouts/constructor_core/application.haml +0 -0
  59. data/{config → core/config}/environments/production.rb +0 -0
  60. data/{config → core/config}/initializers/devise.rb +0 -0
  61. data/{config → core/config}/locales/devise.en.yml +0 -0
  62. data/{config → core/config}/locales/devise.fr.yml +0 -0
  63. data/{config → core/config}/locales/devise.ru.yml +0 -0
  64. data/{config → core/config}/locales/en.yml +0 -0
  65. data/{config → core/config}/locales/fr.yml +0 -0
  66. data/{config → core/config}/locales/ru.yml +0 -0
  67. data/core/config/routes.rb +18 -0
  68. data/{constructor-core.gemspec → core/constructor-core.gemspec} +0 -0
  69. data/{db → core/db}/migrate/1_devise_users.rb +0 -0
  70. data/{db → core/db}/migrate/2_add_default_user.rb +0 -0
  71. data/{lib → core/lib}/constructor-core.rb +0 -0
  72. data/{lib → core/lib}/constructor_core/engine.rb +0 -0
  73. data/{lib → core/lib}/constructor_core/version.rb +1 -1
  74. data/{vendor → core/vendor}/assets/javascripts/.gitkeep +0 -0
  75. data/{vendor → core/vendor}/assets/javascripts/ckeditor/ckeditor.js +0 -0
  76. data/{vendor → core/vendor}/assets/javascripts/ckeditor/config.js +0 -0
  77. data/{vendor → core/vendor}/assets/javascripts/ckeditor/lang/en.js +0 -0
  78. data/{vendor → core/vendor}/assets/javascripts/ckeditor/lang/ru.js +0 -0
  79. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +0 -0
  80. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +0 -0
  81. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +0 -0
  82. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +0 -0
  83. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +0 -0
  84. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +0 -0
  85. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +0 -0
  86. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +0 -0
  87. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +0 -0
  88. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +0 -0
  89. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +0 -0
  90. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +0 -0
  91. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +0 -0
  92. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +0 -0
  93. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +0 -0
  94. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +0 -0
  95. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +0 -0
  96. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +0 -0
  97. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +0 -0
  98. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +0 -0
  99. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +0 -0
  100. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +0 -0
  101. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +0 -0
  102. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +0 -0
  103. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +0 -0
  104. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +0 -0
  105. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +0 -0
  106. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +0 -0
  107. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +0 -0
  108. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +0 -0
  109. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +0 -0
  110. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +0 -0
  111. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +0 -0
  112. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +0 -0
  113. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +0 -0
  114. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +0 -0
  115. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +0 -0
  116. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +0 -0
  117. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +0 -0
  118. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +0 -0
  119. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +0 -0
  120. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +0 -0
  121. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +0 -0
  122. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +0 -0
  123. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +0 -0
  124. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +0 -0
  125. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +0 -0
  126. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/about/dialogs/about.js +0 -0
  127. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  128. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +0 -0
  129. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +0 -0
  130. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +0 -0
  131. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/div/dialogs/div.js +0 -0
  132. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/fakeobjects/images/spacer.gif +0 -0
  133. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/find/dialogs/find.js +0 -0
  134. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/icons.png +0 -0
  135. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/iframe/dialogs/iframe.js +0 -0
  136. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  137. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +0 -0
  138. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
  139. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/link/dialogs/anchor.js +0 -0
  140. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/link/dialogs/link.js +0 -0
  141. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/link/images/anchor.png +0 -0
  142. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +0 -0
  143. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/magicline/images/icon.png +0 -0
  144. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/pastefromword/filter/default.js +0 -0
  145. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/preview/preview.html +0 -0
  146. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/scayt/LICENSE.md +0 -0
  147. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/scayt/README.md +0 -0
  148. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/scayt/dialogs/options.js +0 -0
  149. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +0 -0
  150. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  151. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  152. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  153. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  154. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  155. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  156. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  157. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  158. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  159. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  160. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  161. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +0 -0
  162. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ca.js +0 -0
  163. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cs.js +0 -0
  164. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cy.js +0 -0
  165. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/de.js +0 -0
  166. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/el.js +0 -0
  167. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/en.js +0 -0
  168. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/eo.js +0 -0
  169. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/et.js +0 -0
  170. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fa.js +0 -0
  171. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fi.js +0 -0
  172. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr.js +0 -0
  173. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/he.js +0 -0
  174. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hr.js +0 -0
  175. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/it.js +0 -0
  176. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ku.js +0 -0
  177. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/lv.js +0 -0
  178. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nb.js +0 -0
  179. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nl.js +0 -0
  180. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/no.js +0 -0
  181. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pl.js +0 -0
  182. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +0 -0
  183. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sk.js +0 -0
  184. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sv.js +0 -0
  185. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/th.js +0 -0
  186. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/tr.js +0 -0
  187. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ug.js +0 -0
  188. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +0 -0
  189. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +0 -0
  190. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/table/dialogs/table.js +0 -0
  191. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +0 -0
  192. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.css +0 -0
  193. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.js +0 -0
  194. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/templates/templates/default.js +0 -0
  195. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  196. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  197. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  198. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/wsc/LICENSE.md +0 -0
  199. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/wsc/README.md +0 -0
  200. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +0 -0
  201. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +0 -0
  202. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +0 -0
  203. data/{vendor → core/vendor}/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +0 -0
  204. data/{vendor → core/vendor}/assets/javascripts/ckeditor/styles.js +0 -0
  205. data/{vendor → core/vendor}/assets/stylesheets/.gitkeep +0 -0
  206. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/contents.css +0 -0
  207. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/dialog.css +0 -0
  208. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/dialog_ie.css +0 -0
  209. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/dialog_ie7.css +0 -0
  210. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/dialog_ie8.css +0 -0
  211. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/dialog_opera.css +0 -0
  212. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/editor.css +0 -0
  213. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/editor_gecko.css +0 -0
  214. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/editor_ie.css +0 -0
  215. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/editor_ie7.css +0 -0
  216. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/editor_ie8.css +0 -0
  217. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/icons.png +0 -0
  218. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/images/arrow.png +0 -0
  219. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/images/close.png +0 -0
  220. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/images/mini.png +0 -0
  221. data/{vendor → core/vendor}/assets/stylesheets/ckeditor/skins/moono/readme.md +0 -0
  222. data/lib/constructor-cms.rb +3 -0
  223. data/lib/constructor-cms/engine.rb +6 -0
  224. data/pages/app/assets/images/constructor_pages/arrow_down.png +0 -0
  225. data/pages/app/assets/images/constructor_pages/arrow_up.png +0 -0
  226. data/pages/app/assets/images/constructor_pages/information.png +0 -0
  227. data/pages/app/assets/images/constructor_pages/page_white_edit.png +0 -0
  228. data/pages/app/assets/images/constructor_pages/photos.png +0 -0
  229. data/pages/app/assets/javascripts/constructor_pages/ajax_pages.js +61 -0
  230. data/pages/app/assets/javascripts/constructor_pages/jquery.history.js +1 -0
  231. data/pages/app/controllers/constructor_pages/application_controller.rb +20 -0
  232. data/pages/app/controllers/constructor_pages/fields_controller.rb +70 -0
  233. data/pages/app/controllers/constructor_pages/pages_controller.rb +155 -0
  234. data/pages/app/controllers/constructor_pages/templates_controller.rb +62 -0
  235. data/pages/app/helpers/constructor_pages/code_name_uniq.rb +7 -0
  236. data/pages/app/helpers/constructor_pages/fields_helper.rb +18 -0
  237. data/pages/app/helpers/constructor_pages/pages_helper.rb +22 -0
  238. data/pages/app/helpers/constructor_pages/templates_helper.rb +13 -0
  239. data/pages/app/helpers/constructor_pages/treeview_helper.rb +33 -0
  240. data/pages/app/models/constructor_pages/field.rb +59 -0
  241. data/pages/app/models/constructor_pages/page.rb +173 -0
  242. data/pages/app/models/constructor_pages/template.rb +38 -0
  243. data/pages/app/models/constructor_pages/types/boolean_type.rb +11 -0
  244. data/pages/app/models/constructor_pages/types/date_type.rb +11 -0
  245. data/pages/app/models/constructor_pages/types/float_type.rb +11 -0
  246. data/pages/app/models/constructor_pages/types/html_type.rb +11 -0
  247. data/pages/app/models/constructor_pages/types/image_type.rb +19 -0
  248. data/pages/app/models/constructor_pages/types/integer_type.rb +11 -0
  249. data/pages/app/models/constructor_pages/types/string_type.rb +11 -0
  250. data/pages/app/models/constructor_pages/types/text_type.rb +11 -0
  251. data/pages/app/views/constructor_pages/fields/_form.haml +29 -0
  252. data/pages/app/views/constructor_pages/fields/edit.haml +6 -0
  253. data/pages/app/views/constructor_pages/fields/new.haml +6 -0
  254. data/pages/app/views/constructor_pages/fields/types/_boolean.haml +1 -0
  255. data/pages/app/views/constructor_pages/fields/types/_date.haml +1 -0
  256. data/pages/app/views/constructor_pages/fields/types/_float.haml +1 -0
  257. data/pages/app/views/constructor_pages/fields/types/_html.haml +1 -0
  258. data/pages/app/views/constructor_pages/fields/types/_image.haml +7 -0
  259. data/pages/app/views/constructor_pages/fields/types/_integer.haml +1 -0
  260. data/pages/app/views/constructor_pages/fields/types/_string.haml +1 -0
  261. data/pages/app/views/constructor_pages/fields/types/_text.haml +1 -0
  262. data/pages/app/views/constructor_pages/pages/_breadcrumbs.haml +7 -0
  263. data/pages/app/views/constructor_pages/pages/_form.haml +98 -0
  264. data/pages/app/views/constructor_pages/pages/_menu.haml +8 -0
  265. data/pages/app/views/constructor_pages/pages/_submenu.haml +6 -0
  266. data/pages/app/views/constructor_pages/pages/edit.haml +6 -0
  267. data/pages/app/views/constructor_pages/pages/index.haml +42 -0
  268. data/pages/app/views/constructor_pages/pages/new.haml +6 -0
  269. data/pages/app/views/constructor_pages/pages/show.haml +5 -0
  270. data/pages/app/views/constructor_pages/partials/_arrow_buttons.haml +6 -0
  271. data/pages/app/views/constructor_pages/templates/_form.haml +53 -0
  272. data/pages/app/views/constructor_pages/templates/edit.haml +6 -0
  273. data/pages/app/views/constructor_pages/templates/index.haml +24 -0
  274. data/pages/app/views/constructor_pages/templates/new.haml +6 -0
  275. data/pages/config/initializers/dragonfly.rb +9 -0
  276. data/pages/config/locales/en.yml +65 -0
  277. data/pages/config/locales/fr.yml +65 -0
  278. data/pages/config/locales/ru.yml +100 -0
  279. data/pages/config/routes.rb +26 -0
  280. data/pages/constructor-pages.gemspec +31 -0
  281. data/pages/db/migrate/10_create_html_types.rb +15 -0
  282. data/pages/db/migrate/11_create_image_types.rb +16 -0
  283. data/pages/db/migrate/12_add_default_template.rb +13 -0
  284. data/pages/db/migrate/1_create_pages.rb +27 -0
  285. data/pages/db/migrate/2_create_templates.rb +18 -0
  286. data/pages/db/migrate/3_create_fields.rb +17 -0
  287. data/pages/db/migrate/4_create_string_types.rb +15 -0
  288. data/pages/db/migrate/5_create_float_types.rb +15 -0
  289. data/pages/db/migrate/6_create_boolean_types.rb +15 -0
  290. data/pages/db/migrate/7_create_integer_types.rb +15 -0
  291. data/pages/db/migrate/8_create_text_types.rb +15 -0
  292. data/pages/db/migrate/9_create_date_types.rb +15 -0
  293. data/pages/lib/constructor-pages.rb +6 -0
  294. data/pages/lib/constructor_pages/engine.rb +6 -0
  295. data/pages/public/hello.txt +1 -0
  296. data/pages/spec/features/constructor_pages/fields_spec.rb +217 -0
  297. data/pages/spec/features/constructor_pages/pages_spec.rb +313 -0
  298. data/pages/spec/features/constructor_pages/templates_spec.rb +267 -0
  299. data/pages/spec/helpers/constructor_pages/.keep +0 -0
  300. data/pages/spec/models/constructor_pages/field_spec.rb +135 -0
  301. data/pages/spec/models/constructor_pages/page_spec.rb +420 -0
  302. data/pages/spec/models/constructor_pages/template_spec.rb +34 -0
  303. data/pages/spec/models/constructor_pages/types/boolean_type_spec.rb +21 -0
  304. data/pages/spec/models/constructor_pages/types/date_type_spec.rb +21 -0
  305. data/pages/spec/models/constructor_pages/types/float_type_spec.rb +21 -0
  306. data/pages/spec/models/constructor_pages/types/html_type_spec.rb +63 -0
  307. data/pages/spec/models/constructor_pages/types/integer_type_spec.rb +24 -0
  308. data/pages/spec/models/constructor_pages/types/string_type_spec.rb +21 -0
  309. data/pages/spec/models/constructor_pages/types/text_type_spec.rb +63 -0
  310. data/pages/spec/routing/constructor_pages/.keep +0 -0
  311. data/spec/dummy/README.rdoc +28 -0
  312. data/spec/dummy/Rakefile +6 -0
  313. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  314. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  315. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  316. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  317. data/spec/dummy/app/mailers/.gitkeep +0 -0
  318. data/spec/dummy/app/models/.gitkeep +0 -0
  319. data/spec/dummy/app/views/html_templates/page.haml +1 -0
  320. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  321. data/spec/dummy/bin/bundle +3 -0
  322. data/spec/dummy/bin/rails +4 -0
  323. data/spec/dummy/bin/rake +4 -0
  324. data/spec/dummy/config.ru +4 -0
  325. data/spec/dummy/config/application.rb +23 -0
  326. data/spec/dummy/config/boot.rb +5 -0
  327. data/spec/dummy/config/database.yml +25 -0
  328. data/spec/dummy/config/environment.rb +5 -0
  329. data/spec/dummy/config/environments/development.rb +29 -0
  330. data/spec/dummy/config/environments/production.rb +80 -0
  331. data/spec/dummy/config/environments/test.rb +36 -0
  332. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  333. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  334. data/spec/dummy/config/initializers/inflections.rb +16 -0
  335. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  336. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  337. data/spec/dummy/config/initializers/session_store.rb +3 -0
  338. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  339. data/spec/dummy/config/locales/en.yml +5 -0
  340. data/spec/dummy/config/routes.rb +3 -0
  341. data/spec/dummy/lib/assets/.gitkeep +0 -0
  342. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  343. data/spec/dummy/log/.gitkeep +0 -0
  344. data/spec/dummy/public/404.html +58 -0
  345. data/spec/dummy/public/422.html +58 -0
  346. data/spec/dummy/public/500.html +57 -0
  347. data/spec/dummy/public/favicon.ico +0 -0
  348. data/spec/dummy/public/robots.txt +5 -0
  349. data/spec/spec_helper.rb +46 -0
  350. data/tasks/constructor-cms_tasks.rake +15 -0
  351. metadata +396 -211
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ module ConstructorPages
4
+ class TemplatesController < ApplicationController
5
+ include TreeviewHelper
6
+
7
+ movable :template
8
+
9
+ before_filter {@roots = Template.roots}
10
+
11
+ def new
12
+ @template = Template.new
13
+ end
14
+
15
+ def edit
16
+ @template = Template.find(params[:id])
17
+ end
18
+
19
+ def create
20
+ @template = Template.new template_params
21
+
22
+ if @template.save
23
+ redirect_to templates_url, notice: t(:template_success_added, name: @template.name)
24
+ else
25
+ render action: :new
26
+ end
27
+ end
28
+
29
+ def update
30
+ @template = Template.find params[:id]
31
+
32
+ if @template.update template_params
33
+ redirect_to templates_url, notice: t(:template_success_updated, name: @template.name)
34
+ else
35
+ render action: :edit
36
+ end
37
+ end
38
+
39
+ def destroy
40
+ @template = Template.find(params[:id])
41
+
42
+ if @template.pages.count == 0
43
+ name = @template.name
44
+ @template.destroy
45
+ redirect_to templates_url, notice: t(:template_success_removed, name: name)
46
+ else
47
+ redirect_to :back, alert: t(:template_error_delete_pages)
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def template_params
54
+ params.require(:template).permit(
55
+ :name,
56
+ :code_name,
57
+ :parent_id,
58
+ :child_id
59
+ )
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,7 @@
1
+ module ConstructorPages
2
+ module CodeNameUniq
3
+ def code_name_uniqueness
4
+ errors.add(:base, :code_name_already_in_use) unless Page.check_code_name(code_name) and check_code_name(code_name)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ module ConstructorPages
4
+ module FieldsHelper
5
+ def types_value
6
+ [
7
+ [t(:string), "string"],
8
+ [t(:integer), "integer"],
9
+ [t(:float), "float"],
10
+ [t(:boolean), "boolean"],
11
+ [t(:date), "date"],
12
+ [t(:text), "text"],
13
+ [t(:html), "html"],
14
+ [t(:image), "image"]
15
+ ]
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module ConstructorPages
2
+ module PagesHelper
3
+ include TreeviewHelper
4
+
5
+ def for_select(roots)
6
+ result = []
7
+ roots.each do |r|
8
+ r.self_and_descendants.each {|i| result.push(["#{'--'*i.level} #{i.name}", i.id, {'data-full_url' => i.full_url}])}
9
+ end
10
+ result
11
+ end
12
+
13
+ def templates
14
+ Template.all.map{|t| ["#{'--'*t.level} #{t.name}", t.id]}
15
+ end
16
+
17
+ def image_tag_with_at2x(name_at_1x, options={})
18
+ name_at_2x = name_at_1x.gsub(%r{\.\w+$}, '@2x\0')
19
+ image_tag(name_at_1x, options.merge("data-at2x" => asset_path(name_at_2x)))
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ module ConstructorPages
2
+ module TemplatesHelper
3
+ include TreeviewHelper
4
+
5
+ def for_select(roots)
6
+ result = []
7
+ roots.each do |r|
8
+ r.self_and_descendants.each {|i| result.push(["#{'--'*i.level} #{i.name}", i.id])}
9
+ end
10
+ result
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,33 @@
1
+ module ConstructorPages
2
+ module TreeviewHelper
3
+ def render_tree(roots, &block)
4
+ output = '<ul>'
5
+
6
+ roots.each do |root|
7
+ level, last = root.level, nil
8
+
9
+ root.self_and_descendants.each do |item|
10
+ if item.level > level
11
+ output += '<ul>'
12
+ elsif item.level < level
13
+ output += '</li>'
14
+ output += '</ul></li>' * (level-item.level)
15
+ elsif !item.root?
16
+ output += '</li>'
17
+ end
18
+
19
+ output += '<li>'
20
+
21
+ output += capture(item, &block)
22
+
23
+ level, last = item.level, item
24
+ end
25
+
26
+ output += '</li>'
27
+ output += '</ul></li>' * last.level
28
+ end
29
+
30
+ output.html_safe
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ module ConstructorPages
4
+ # Field model. Fields allows to add custom fields for template.
5
+ # Each field has type of value such as float, integer, string...
6
+ class Field < ActiveRecord::Base
7
+ # Adding code_name_uniqueness method
8
+ include CodeNameUniq
9
+
10
+ # Array of available field types
11
+ TYPES = %w{string integer float boolean text date html image}.tap {|_t|
12
+ _t.each {|t| class_eval %{has_many :#{t}_types, dependent: :destroy, class_name: 'Types::#{t.titleize}Type'}}}
13
+
14
+ validates_presence_of :name
15
+ validates_uniqueness_of :code_name, scope: :template_id
16
+ validate :code_name_uniqueness
17
+
18
+ after_create :create_page_fields
19
+ after_destroy :destroy_all_page_fields
20
+
21
+ has_many :pages, through: :template
22
+ belongs_to :template
23
+
24
+ acts_as_list scope: :template_id
25
+ default_scope -> { order :position }
26
+
27
+ # Return constant of model type_value
28
+ def type_class; "constructor_pages/types/#{type_value}_type".classify.constantize end
29
+
30
+ # Return object of type_value by page
31
+ def find_type_object(page); type_class.find_by(field_id: id, page_id: page.id) end
32
+
33
+ # Create object of type_value by page
34
+ def create_type_object(page); type_class.create(field_id: id, page_id: page.id) end
35
+
36
+ # Remove all type_fields values for specified page
37
+ def remove_type_object(page); find_type_object(page).destroy end
38
+
39
+ # Get value from type_field for specified page
40
+ def get_value_for(page); find_type_object(page).tap {|t| return t && t.value} end
41
+
42
+ # Set value type_field for specified page
43
+ def set_value_for(page, value); find_type_object(page).tap {|t| t || return; t.update value: value} end
44
+
45
+ private
46
+
47
+ # Check if there is code_name in template branch
48
+ def check_code_name(code_name)
49
+ [code_name.pluralize, code_name.singularize].each {|name|
50
+ %w{self_and_ancestors descendants}.each {|m|
51
+ return false if template.send(m).map(&:code_name).include?(name)}}
52
+ true
53
+ end
54
+
55
+ # Create and destroy page fields
56
+ %w{create destroy_all}.each {|m| class_eval %{
57
+ def #{m}_page_fields; template.pages.each {|page| type_class.#{m} page_id: page.id, field_id: id} end }}
58
+ end
59
+ end
@@ -0,0 +1,173 @@
1
+ # encoding: utf-8
2
+
3
+ module ConstructorPages
4
+ # Page model. Pages are core for company websites, blogs etc.
5
+ class Page < ActiveRecord::Base
6
+ # Adding has_many for all field types
7
+ Field::TYPES.each do |t|
8
+ class_eval %{has_many :#{t}_types, dependent: :destroy, class_name: 'Types::#{t.titleize}Type'}
9
+ end
10
+
11
+ has_many :fields, through: :template
12
+ belongs_to :template
13
+
14
+ default_scope -> { order :lft }
15
+
16
+ validate :template_check
17
+
18
+ before_save :friendly_url, :template_assign, :full_url_update
19
+ after_update :descendants_update
20
+ after_create :create_fields_values
21
+
22
+ acts_as_nested_set
23
+
24
+ class << self
25
+ # Used for find page by request. It return first page if no request given or request is home page
26
+ # @param request for example <tt>'/conditioners/split-systems/zanussi'</tt>
27
+ def find_by_request_or_first(request = nil)
28
+ request == nil || '/' ? Page.first : Page.find_by(full_url: request)
29
+ end
30
+
31
+ # Generate full_url from parent id and url
32
+ # @param parent_id integer
33
+ # @param url should looks like <tt>'hello-world-page'</tt> without leading slash
34
+ def full_url_generate(parent_id, url = '')
35
+ '/' + Page.find(parent_id).self_and_ancestors.map(&:url).append(url).join('/')
36
+ end
37
+
38
+ # Check code_name for field and template.
39
+ # When missing method Page find field or page in branch with plural and singular code_name so
40
+ # field and template code_name should be uniqueness for page methods
41
+ def check_code_name(code_name)
42
+ [code_name, code_name.pluralize, code_name.singularize].each do |name|
43
+ return false if Page.instance_methods.include?(name.to_sym)
44
+ end
45
+
46
+ true
47
+ end
48
+
49
+ def search(what_search = nil)
50
+ (@where_search.is_a?(String) ? Page.find_by(full_url: @where_search) : @where_search)
51
+ .tap {|p| @result = @where_search ? p ? p.descendants : [] : Page.all }
52
+ what_search && Template.find_by(code_name: what_search.to_s.singularize.downcase)
53
+ .tap {|t| @result = t ? @result.where(template: t) : [] }
54
+ @params_search && @params_search.each_pair {|k,v| @result = @result.select {|p| p.send(k) == v}}
55
+ @where_search = @params_search = nil
56
+ @result
57
+ end
58
+
59
+ def in(where_search = nil); tap {@where_search = where_search} end
60
+ def by(params_search = nil); tap {@params_search = params_search} end
61
+
62
+ def search_in(where_search = nil); self.in(where_search).search end
63
+ def search_by(params_search = nil); self.by(params_search).search end
64
+ end
65
+
66
+ def search(what_search = nil); Page.in(self).search(what_search) end
67
+ def by(params_search = nil); Page.by(params_search); self end
68
+ def search_by(params_search = nil); Page.by(params_search).in(self).search end
69
+
70
+ # Get field by code_name
71
+ def field(code_name)
72
+ Field.find_by code_name: code_name, template_id: template_id
73
+ end
74
+
75
+ # Get value of field by code_name
76
+ def get_field_value(code_name)
77
+ field(code_name).tap {|f| return f.get_value_for(self) if f}
78
+ end
79
+
80
+ # Set value of field by code_name and value
81
+ def set_field_value(code_name, value)
82
+ field(code_name).tap {|f| f.set_value_for(self, value) if f}
83
+ end
84
+
85
+ # Update all fields values with given params.
86
+ # @param params should looks like <tt>{price: 500, content: 'Hello'}</tt>
87
+ # @param reset_booleans reset all boolean fields to false before assign params
88
+ def update_fields_values(params, reset_booleans = true)
89
+ params || return
90
+
91
+ fields.each {|f| f.find_type_object(self).tap {|t| t || break
92
+ t.value = 0 if f.type_value == 'boolean' && reset_booleans
93
+ params[f.code_name.to_sym].tap {|v| v && t.value = v}
94
+ t.save }}
95
+ end
96
+
97
+ # Create fields values
98
+ def create_fields_values; fields.each {|f| f.create_type_object self} end
99
+
100
+ # Remove all fields values
101
+ def remove_fields_values; fields.each {|f| f.remove_type_object self} end
102
+
103
+ # Search page by template code_name in same branch of pages and templates.
104
+ # It allows to call page.category.brand.series.model etc.
105
+ #
106
+ # Return one page if founded in ancestors,
107
+ # and return array of pages if founded in descendants
108
+ #
109
+ # It determines if code_name is singular or nor
110
+ # @param cname template code name
111
+ def find_page_in_branch(cname)
112
+ Template.find_by(code_name: cname.singularize).tap {|t| t || return
113
+ (descendants.where(template_id: t.id) if cname == cname.pluralize).tap {|r| r ||= []
114
+ return r.empty? ? ancestors.find_by(template_id: t.id) : r}}
115
+ end
116
+
117
+ alias_method :find_pages_in_branch, :find_page_in_branch
118
+
119
+ def published?; active end
120
+
121
+ alias_method :active?, :published?
122
+
123
+ # Returns page hash attributes with fields.
124
+ #
125
+ # Default attributes are name and title. Options param allows to add more.
126
+ # @param options default merge name and title page attributes
127
+ def as_json(options = {})
128
+ {name: self.name, title: self.title}.merge(options).tap do |options|
129
+ fields.each {|f| options.merge!({f.code_name.to_sym => f.get_value_for(self)})}
130
+ end
131
+ end
132
+
133
+ # Check if link specified
134
+ def redirect?; url != link && !link.empty? end
135
+
136
+ # When method missing it get/set field value or get page in branch
137
+ #
138
+ # Examples:
139
+ # page.content = 'Hello world'
140
+ # puts page.price
141
+ # page.brand.models.each do...
142
+ def method_missing(name, *args, &block)
143
+ super && return if new_record?
144
+ name = name.to_s
145
+ name[-1] == '=' ? set_field_value(name[0..-2], args[0]) : get_field_value(name) || find_pages_in_branch(name)
146
+ end
147
+
148
+ private
149
+
150
+ # if url has been changed by manually or url is empty
151
+ def friendly_url
152
+ self.url = ((auto_url || url.empty?) ? translit(name) : url).parameterize
153
+ end
154
+
155
+ # TODO: add more languages
156
+ # translit to english
157
+ def translit(str); Russian.translit(str) end
158
+
159
+ # Page is not valid if there is no template
160
+ def template_check; errors.add_on_empty(:template_id) if Template.count == 0 end
161
+
162
+ # If template_id is nil then get first template
163
+ def template_assign; self.template_id = Template.first.id unless template_id end
164
+
165
+ # Update full_url
166
+ def full_url_update
167
+ self.full_url = (parent_id ? Page.full_url_generate(parent_id, url) : '/' + url)
168
+ end
169
+
170
+ # Reload all descendants
171
+ def descendants_update; descendants.map(&:save) end
172
+ end
173
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ module ConstructorPages
4
+ # Template model. Template allows assing different design for pages.
5
+ #
6
+ # Templates has many fields.
7
+ # For example:
8
+ # template "Product" should has fields like "price", "description", "size" etc.
9
+ class Template < ActiveRecord::Base
10
+ # Adding code_name_uniqueness method
11
+ include CodeNameUniq
12
+
13
+ validates_presence_of :name, :code_name
14
+ validates_uniqueness_of :code_name
15
+ validate :code_name_uniqueness
16
+
17
+ default_scope -> { order :lft }
18
+
19
+ has_many :pages, dependent: :destroy
20
+ has_many :fields, dependent: :destroy
21
+
22
+ acts_as_nested_set
23
+
24
+ # Return child corresponding child_id or children first
25
+ def child
26
+ !child_id && !leaf? ? children.first : self.class.find(child_id)
27
+ end
28
+
29
+ private
30
+
31
+ # Check if there is code_name in same branch
32
+ def check_code_name(cname)
33
+ [cname.pluralize, cname.singularize].each {|name|
34
+ return false if root.descendants.map{|t| t.code_name unless t.code_name == cname}.include?(name)}
35
+ true
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ module ConstructorPages
4
+ module Types
5
+ # Boolean type. Render as checkbox.
6
+ class BooleanType < ActiveRecord::Base
7
+ belongs_to :field
8
+ belongs_to :page
9
+ end
10
+ end
11
+ end