constructor-cms 0.5.7 → 0.5.8

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 (289) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +13 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +9 -0
  5. data/.yardopts +9 -0
  6. data/Gemfile +20 -0
  7. data/Guardfile +17 -0
  8. data/Rakefile +17 -0
  9. data/config.ru +4 -0
  10. data/constructor-cms.gemspec +28 -0
  11. data/core/app/assets/images/constructor_core/glyphicons-halflings-white.png +0 -0
  12. data/core/app/assets/images/constructor_core/glyphicons-halflings.png +0 -0
  13. data/core/app/assets/images/constructor_core/minus.gif +0 -0
  14. data/core/app/assets/images/constructor_core/plus.gif +0 -0
  15. data/core/app/assets/images/constructor_core/rss.png +0 -0
  16. data/core/app/assets/images/constructor_core/treeview-black-line.gif +0 -0
  17. data/core/app/assets/images/constructor_core/treeview-black.gif +0 -0
  18. data/core/app/assets/images/constructor_core/treeview-default-line.gif +0 -0
  19. data/core/app/assets/images/constructor_core/treeview-default.gif +0 -0
  20. data/core/app/assets/images/constructor_core/treeview-famfamfam-line.gif +0 -0
  21. data/core/app/assets/images/constructor_core/treeview-famfamfam.gif +0 -0
  22. data/core/app/assets/images/constructor_core/treeview-gray-line.gif +0 -0
  23. data/core/app/assets/images/constructor_core/treeview-gray.gif +0 -0
  24. data/core/app/assets/images/constructor_core/treeview-red-line.gif +0 -0
  25. data/core/app/assets/images/constructor_core/treeview-red.gif +0 -0
  26. data/core/app/assets/images/constructor_core/twitter.png +0 -0
  27. data/core/app/assets/images/constructor_core/widgets.png +0 -0
  28. data/core/app/assets/javascripts/constructor_core/application.js.coffee +52 -0
  29. data/core/app/assets/javascripts/constructor_core/bootstrap.js +2276 -0
  30. data/core/app/assets/javascripts/constructor_core/jquery.cookie.js +92 -0
  31. data/core/app/assets/javascripts/constructor_core/jquery_bundle.js.coffee +3 -0
  32. data/core/app/assets/javascripts/constructor_core/keys_snippet.js +33 -0
  33. data/core/app/assets/javascripts/constructor_core/retina.js +148 -0
  34. data/core/app/assets/javascripts/constructor_core/urlify.js +82 -0
  35. data/core/app/assets/stylesheets/constructor_core/application.css.scss +3 -0
  36. data/core/app/assets/stylesheets/constructor_core/main.css.scss +229 -0
  37. data/core/app/controllers/constructor_core/application_controller.rb +31 -0
  38. data/core/app/controllers/constructor_core/sessions_controller.rb +15 -0
  39. data/core/app/controllers/constructor_core/users_controller.rb +26 -0
  40. data/core/app/helpers/constructor_core/application_helper.rb +9 -0
  41. data/core/app/models/constructor_core/user.rb +8 -0
  42. data/core/app/views/constructor_core/devise/confirmations/new.html.haml +10 -0
  43. data/core/app/views/constructor_core/devise/mailer/confirmation_instructions.html.haml +5 -0
  44. data/core/app/views/constructor_core/devise/mailer/reset_password_instructions.html.haml +7 -0
  45. data/core/app/views/constructor_core/devise/mailer/unlock_instructions.html.haml +5 -0
  46. data/core/app/views/constructor_core/devise/passwords/edit.html.haml +21 -0
  47. data/core/app/views/constructor_core/devise/passwords/new.html.haml +13 -0
  48. data/core/app/views/constructor_core/devise/registrations/edit.html.haml +28 -0
  49. data/core/app/views/constructor_core/devise/registrations/new.html.haml +20 -0
  50. data/core/app/views/constructor_core/devise/shared/_links.html.haml +19 -0
  51. data/core/app/views/constructor_core/devise/unlocks/new.html.haml +9 -0
  52. data/core/app/views/constructor_core/sessions/new.html.haml +22 -0
  53. data/core/app/views/constructor_core/users/profile.haml +16 -0
  54. data/core/app/views/layouts/constructor_core/application.haml +93 -0
  55. data/core/config/environments/production.rb +3 -0
  56. data/core/config/initializers/devise.rb +15 -0
  57. data/core/config/locales/devise.en.yml +56 -0
  58. data/core/config/locales/devise.ru.yml +52 -0
  59. data/core/config/locales/en.yml +15 -0
  60. data/core/config/locales/ru.yml +27 -0
  61. data/core/config/routes.rb +18 -0
  62. data/core/constructor-core.gemspec +24 -0
  63. data/core/db/migrate/1_devise_users.rb +24 -0
  64. data/core/db/migrate/2_add_default_user.rb +9 -0
  65. data/core/lib/constructor-core.rb +25 -0
  66. data/core/lib/constructor_core/engine.rb +6 -0
  67. data/core/lib/constructor_core/version.rb +3 -0
  68. data/core/vendor/assets/javascripts/.gitkeep +0 -0
  69. data/core/vendor/assets/javascripts/ckeditor/ckeditor.js +913 -0
  70. data/core/vendor/assets/javascripts/ckeditor/config.js +38 -0
  71. data/core/vendor/assets/javascripts/ckeditor/lang/en.js +5 -0
  72. data/core/vendor/assets/javascripts/ckeditor/lang/ru.js +5 -0
  73. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +10 -0
  74. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +25 -0
  75. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +9 -0
  76. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +9 -0
  77. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +9 -0
  78. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +10 -0
  79. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +9 -0
  80. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +9 -0
  81. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +10 -0
  82. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +10 -0
  83. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +9 -0
  84. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +10 -0
  85. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +10 -0
  86. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +9 -0
  87. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +9 -0
  88. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +10 -0
  89. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +10 -0
  90. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +9 -0
  91. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +9 -0
  92. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +9 -0
  93. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +9 -0
  94. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +9 -0
  95. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +10 -0
  96. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +9 -0
  97. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +9 -0
  98. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +10 -0
  99. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +9 -0
  100. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +10 -0
  101. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +9 -0
  102. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +9 -0
  103. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +9 -0
  104. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +10 -0
  105. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +9 -0
  106. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +10 -0
  107. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +9 -0
  108. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +9 -0
  109. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +9 -0
  110. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +9 -0
  111. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +10 -0
  112. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +9 -0
  113. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +10 -0
  114. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +9 -0
  115. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +10 -0
  116. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +9 -0
  117. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +9 -0
  118. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +9 -0
  119. data/core/vendor/assets/javascripts/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +7 -0
  120. data/core/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/about.js +6 -0
  121. data/core/vendor/assets/javascripts/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  122. data/core/vendor/assets/javascripts/ckeditor/plugins/clipboard/dialogs/paste.js +11 -0
  123. data/core/vendor/assets/javascripts/ckeditor/plugins/colordialog/dialogs/colordialog.js +13 -0
  124. data/core/vendor/assets/javascripts/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  125. data/core/vendor/assets/javascripts/ckeditor/plugins/div/dialogs/div.js +9 -0
  126. data/core/vendor/assets/javascripts/ckeditor/plugins/fakeobjects/images/spacer.gif +0 -0
  127. data/core/vendor/assets/javascripts/ckeditor/plugins/find/dialogs/find.js +24 -0
  128. data/core/vendor/assets/javascripts/ckeditor/plugins/icons.png +0 -0
  129. data/core/vendor/assets/javascripts/ckeditor/plugins/iframe/dialogs/iframe.js +10 -0
  130. data/core/vendor/assets/javascripts/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  131. data/core/vendor/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +43 -0
  132. data/core/vendor/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
  133. data/core/vendor/assets/javascripts/ckeditor/plugins/link/dialogs/anchor.js +8 -0
  134. data/core/vendor/assets/javascripts/ckeditor/plugins/link/dialogs/link.js +36 -0
  135. data/core/vendor/assets/javascripts/ckeditor/plugins/link/images/anchor.png +0 -0
  136. data/core/vendor/assets/javascripts/ckeditor/plugins/liststyle/dialogs/liststyle.js +10 -0
  137. data/core/vendor/assets/javascripts/ckeditor/plugins/magicline/images/icon.png +0 -0
  138. data/core/vendor/assets/javascripts/ckeditor/plugins/pastefromword/filter/default.js +31 -0
  139. data/core/vendor/assets/javascripts/ckeditor/plugins/preview/preview.html +10 -0
  140. data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/LICENSE.md +28 -0
  141. data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/README.md +25 -0
  142. data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/dialogs/options.js +20 -0
  143. data/core/vendor/assets/javascripts/ckeditor/plugins/scayt/dialogs/toolbar.css +71 -0
  144. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  145. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  146. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  147. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  148. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  149. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  150. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  151. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  152. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  153. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  154. data/core/vendor/assets/javascripts/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  155. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +20 -0
  156. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ca.js +13 -0
  157. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cs.js +13 -0
  158. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/cy.js +14 -0
  159. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/de.js +13 -0
  160. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/el.js +13 -0
  161. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/en.js +13 -0
  162. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/eo.js +12 -0
  163. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/et.js +13 -0
  164. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fa.js +12 -0
  165. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fi.js +13 -0
  166. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/fr.js +11 -0
  167. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/he.js +13 -0
  168. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/hr.js +13 -0
  169. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/it.js +14 -0
  170. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ku.js +13 -0
  171. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/lv.js +13 -0
  172. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nb.js +11 -0
  173. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/nl.js +13 -0
  174. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/no.js +11 -0
  175. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pl.js +12 -0
  176. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +11 -0
  177. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sk.js +13 -0
  178. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/sv.js +11 -0
  179. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/th.js +13 -0
  180. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/tr.js +12 -0
  181. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/ug.js +13 -0
  182. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +9 -0
  183. data/core/vendor/assets/javascripts/ckeditor/plugins/specialchar/dialogs/specialchar.js +14 -0
  184. data/core/vendor/assets/javascripts/ckeditor/plugins/table/dialogs/table.js +21 -0
  185. data/core/vendor/assets/javascripts/ckeditor/plugins/tabletools/dialogs/tableCell.js +16 -0
  186. data/core/vendor/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.css +84 -0
  187. data/core/vendor/assets/javascripts/ckeditor/plugins/templates/dialogs/templates.js +10 -0
  188. data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/default.js +6 -0
  189. data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  190. data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  191. data/core/vendor/assets/javascripts/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  192. data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/LICENSE.md +28 -0
  193. data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/README.md +25 -0
  194. data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/ciframe.html +49 -0
  195. data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  196. data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
  197. data/core/vendor/assets/javascripts/ckeditor/plugins/wsc/dialogs/wsc.js +11 -0
  198. data/core/vendor/assets/javascripts/ckeditor/styles.js +111 -0
  199. data/core/vendor/assets/stylesheets/.gitkeep +0 -0
  200. data/core/vendor/assets/stylesheets/ckeditor/contents.css +103 -0
  201. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog.css +5 -0
  202. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_ie.css +5 -0
  203. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_ie7.css +5 -0
  204. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_ie8.css +5 -0
  205. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/dialog_opera.css +5 -0
  206. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor.css +5 -0
  207. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_gecko.css +5 -0
  208. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_ie.css +5 -0
  209. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_ie7.css +5 -0
  210. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/editor_ie8.css +5 -0
  211. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/icons.png +0 -0
  212. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/images/arrow.png +0 -0
  213. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/images/close.png +0 -0
  214. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/images/mini.png +0 -0
  215. data/core/vendor/assets/stylesheets/ckeditor/skins/moono/readme.md +51 -0
  216. data/pages/app/assets/images/constructor_pages/arrow_down.png +0 -0
  217. data/pages/app/assets/images/constructor_pages/arrow_up.png +0 -0
  218. data/pages/app/assets/images/constructor_pages/information.png +0 -0
  219. data/pages/app/assets/images/constructor_pages/page_white_edit.png +0 -0
  220. data/pages/app/assets/images/constructor_pages/photos.png +0 -0
  221. data/pages/app/assets/javascripts/constructor_pages/ajax_pages.js +61 -0
  222. data/pages/app/assets/javascripts/constructor_pages/jquery.history.js +1 -0
  223. data/pages/app/controllers/constructor_pages/fields_controller.rb +70 -0
  224. data/pages/app/controllers/constructor_pages/pages_controller.rb +144 -0
  225. data/pages/app/controllers/constructor_pages/templates_controller.rb +51 -0
  226. data/pages/app/helpers/constructor_pages/code_name_uniq.rb +9 -0
  227. data/pages/app/helpers/constructor_pages/fields_helper.rb +18 -0
  228. data/pages/app/helpers/constructor_pages/move_helper.rb +14 -0
  229. data/pages/app/helpers/constructor_pages/pages_helper.rb +20 -0
  230. data/pages/app/helpers/constructor_pages/templates_helper.rb +11 -0
  231. data/pages/app/models/constructor_pages/field.rb +89 -0
  232. data/pages/app/models/constructor_pages/page.rb +190 -0
  233. data/pages/app/models/constructor_pages/template.rb +49 -0
  234. data/pages/app/models/constructor_pages/types/boolean_type.rb +12 -0
  235. data/pages/app/models/constructor_pages/types/date_type.rb +16 -0
  236. data/pages/app/models/constructor_pages/types/float_type.rb +12 -0
  237. data/pages/app/models/constructor_pages/types/html_type.rb +12 -0
  238. data/pages/app/models/constructor_pages/types/image_type.rb +18 -0
  239. data/pages/app/models/constructor_pages/types/integer_type.rb +12 -0
  240. data/pages/app/models/constructor_pages/types/string_type.rb +12 -0
  241. data/pages/app/models/constructor_pages/types/text_type.rb +12 -0
  242. data/pages/app/views/constructor_pages/fields/_form.haml +28 -0
  243. data/pages/app/views/constructor_pages/fields/edit.haml +6 -0
  244. data/pages/app/views/constructor_pages/fields/new.haml +6 -0
  245. data/pages/app/views/constructor_pages/fields/types/_boolean.haml +1 -0
  246. data/pages/app/views/constructor_pages/fields/types/_date.haml +1 -0
  247. data/pages/app/views/constructor_pages/fields/types/_float.haml +1 -0
  248. data/pages/app/views/constructor_pages/fields/types/_html.haml +1 -0
  249. data/pages/app/views/constructor_pages/fields/types/_image.haml +7 -0
  250. data/pages/app/views/constructor_pages/fields/types/_integer.haml +1 -0
  251. data/pages/app/views/constructor_pages/fields/types/_string.haml +1 -0
  252. data/pages/app/views/constructor_pages/fields/types/_text.haml +1 -0
  253. data/pages/app/views/constructor_pages/pages/_breadcrumbs.haml +7 -0
  254. data/pages/app/views/constructor_pages/pages/_form.haml +97 -0
  255. data/pages/app/views/constructor_pages/pages/_menu.haml +8 -0
  256. data/pages/app/views/constructor_pages/pages/_submenu.haml +6 -0
  257. data/pages/app/views/constructor_pages/pages/edit.haml +6 -0
  258. data/pages/app/views/constructor_pages/pages/index.haml +52 -0
  259. data/pages/app/views/constructor_pages/pages/new.haml +6 -0
  260. data/pages/app/views/constructor_pages/pages/show.haml +5 -0
  261. data/pages/app/views/constructor_pages/templates/_form.haml +47 -0
  262. data/pages/app/views/constructor_pages/templates/edit.haml +6 -0
  263. data/pages/app/views/constructor_pages/templates/index.haml +39 -0
  264. data/pages/app/views/constructor_pages/templates/new.haml +6 -0
  265. data/pages/config/initializers/dragonfly.rb +9 -0
  266. data/pages/config/locales/en.yml +51 -0
  267. data/pages/config/locales/ru.yml +89 -0
  268. data/pages/config/routes.rb +32 -0
  269. data/pages/constructor-pages.gemspec +30 -0
  270. data/pages/db/migrate/10_create_html_types.rb +15 -0
  271. data/pages/db/migrate/11_create_image_types.rb +16 -0
  272. data/pages/db/migrate/12_add_default_template.rb +13 -0
  273. data/pages/db/migrate/1_create_pages.rb +27 -0
  274. data/pages/db/migrate/2_create_templates.rb +18 -0
  275. data/pages/db/migrate/3_create_fields.rb +17 -0
  276. data/pages/db/migrate/4_create_string_types.rb +15 -0
  277. data/pages/db/migrate/5_create_float_types.rb +15 -0
  278. data/pages/db/migrate/6_create_boolean_types.rb +15 -0
  279. data/pages/db/migrate/7_create_integer_types.rb +15 -0
  280. data/pages/db/migrate/8_create_text_types.rb +15 -0
  281. data/pages/db/migrate/9_create_date_types.rb +15 -0
  282. data/pages/lib/constructor-pages.rb +6 -0
  283. data/pages/lib/constructor_pages/engine.rb +6 -0
  284. data/pages/public/hello.txt +1 -0
  285. data/pages/spec/models/constructor_pages/field_model_spec.rb +138 -0
  286. data/pages/spec/models/constructor_pages/page_model_spec.rb +313 -0
  287. data/pages/spec/models/constructor_pages/template_model_spec.rb +29 -0
  288. data/pages/spec/requests/constructor_pages/pages_controller_spec.rb +12 -0
  289. metadata +296 -8
@@ -0,0 +1,15 @@
1
+ class CreateStringTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::StringType.table_name do |t|
4
+ t.string :value, :default => ""
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::StringType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateFloatTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::FloatType.table_name do |t|
4
+ t.float :value, :default => 0.0
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::FloatType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateBooleanTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::BooleanType.table_name do |t|
4
+ t.boolean :value, :default => false
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::BooleanType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateIntegerTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::IntegerType.table_name do |t|
4
+ t.integer :value, :default => 0
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::IntegerType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateTextTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::TextType.table_name do |t|
4
+ t.text :value, :default => "", :limit => 4294967295
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::TextType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateDateTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::DateType.table_name do |t|
4
+ t.date :value, :default => Time.now
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::DateType.table_name
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ require 'awesome_nested_set'
2
+ require 'haml-rails'
3
+ require 'constructor_pages/engine'
4
+ require 'rack/cache'
5
+ require 'acts_as_list'
6
+ require 'russian'
@@ -0,0 +1,6 @@
1
+ module ConstructorPages
2
+ class Engine < Rails::Engine
3
+ engine_name "constructor_pages"
4
+ isolate_namespace ConstructorPages
5
+ end
6
+ end
@@ -0,0 +1 @@
1
+ hello world
@@ -0,0 +1,138 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module ConstructorPages
6
+ describe Field do
7
+ before :each do
8
+ Template.delete_all
9
+ @template = Template.create name: 'Page', code_name: 'page'
10
+
11
+ Field.delete_all
12
+ Field::TYPES.each do |t|
13
+ "constructor_pages/types/#{t}_type".classify.constantize.delete_all
14
+ end
15
+ end
16
+
17
+ describe '.create' do
18
+ it 'should be valid' do
19
+ _field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
20
+ _field.should be_valid
21
+ end
22
+
23
+ it 'should create page fields' do
24
+ _page = Page.create name: 'Page', template: @template
25
+ _field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
26
+
27
+ _page.content.should == ''
28
+ end
29
+ end
30
+
31
+ describe '#destroy' do
32
+ it 'should destroy page fields' do
33
+ _field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
34
+ _page = Page.create name: 'Page', template: @template
35
+
36
+ _page.content.should == ''
37
+ _field.destroy
38
+ _page.content.should be_nil
39
+ end
40
+ end
41
+
42
+ describe '#type_class' do
43
+ it 'should return constant of type_value' do
44
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'html'
45
+ field.type_class.should == Types::HtmlType
46
+
47
+ field.type_value = 'text'
48
+ field.type_class.should == Types::TextType
49
+ end
50
+ end
51
+
52
+ describe '#find_type_object' do
53
+ it 'should find one object of type_value by page' do
54
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
55
+ page = Page.create name: 'Page', template: @template
56
+
57
+ text_type = Types::TextType.find_by_field_id_and_page_id field.id, page.id
58
+
59
+ field.find_type_object(page).should == text_type
60
+ end
61
+ end
62
+
63
+ describe '#create_type_object' do
64
+ it 'should create object of type_value by page' do
65
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
66
+ page = Page.create name: 'Page', template: @template
67
+
68
+ text_type = field.create_type_object(page)
69
+ text_type.should be_an_instance_of(Types::TextType)
70
+ text_type.page_id.should == page.id
71
+ text_type.field_id.should == field.id
72
+ end
73
+ end
74
+
75
+ describe '#remove_type_object' do
76
+ it 'should remote object of type_value by page' do
77
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
78
+ page = Page.create name: 'Page', template: @template
79
+
80
+ field.find_type_object(page).should be_an_instance_of(Types::TextType)
81
+
82
+ field.remove_type_object(page)
83
+ field.find_type_object(page).should be_nil
84
+ end
85
+ end
86
+
87
+ describe '#get_value_for' do
88
+ it 'should get value of type field by page' do
89
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
90
+ page = Page.create name: 'Page', template: @template
91
+ page.content = 'Hello world'
92
+
93
+ field.get_value_for(page).should == 'Hello world'
94
+ end
95
+ end
96
+
97
+ describe '#set_value_for' do
98
+ it 'should set value for type field by page' do
99
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
100
+ page = Page.create name: 'Page', template: @template
101
+
102
+ field.set_value_for(page, 'Hello')
103
+ page.content.should == 'Hello'
104
+ end
105
+ end
106
+
107
+ describe '#code_name' do
108
+ it 'should be uniqueness in scope fields' do
109
+ Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
110
+ _field = Field.create name: 'Content 2', code_name: 'content', template: @template, type_value: 'html'
111
+
112
+ _field.should_not be_valid
113
+ end
114
+
115
+ it 'should be uniqueness in scope Page' do
116
+ Page.create name: 'Page', template: @template
117
+ _field = Field.create name: 'Content', code_name: 'get_field_value', template: @template, type_value: 'text'
118
+ _field.should_not be_valid
119
+ end
120
+
121
+ it 'should be uniqueness in scope Template branch' do
122
+ Page.create name: 'Page', template: @template
123
+
124
+ _template = Template.create name: 'Brand', code_name: 'brand', parent: @template
125
+ @template.reload
126
+
127
+ _field = Field.create name: 'Content', code_name: 'brand', template: @template, type_value: 'text'
128
+ _field.should_not be_valid
129
+
130
+ _field.code_name = 'brands'
131
+ _field.should_not be_valid
132
+
133
+ _field.code_name = 'price'
134
+ _field.should be_valid
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,313 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module ConstructorPages
6
+ describe Page do
7
+ before :each do
8
+ Template.delete_all
9
+ @template = Template.create name: 'Page', code_name: 'page'
10
+
11
+ Page.delete_all
12
+ Field.delete_all
13
+ Types::TextType.delete_all
14
+ end
15
+
16
+ context 'CLASS METHODS' do
17
+ describe '.create' do
18
+ it 'should be valid' do
19
+ Page.create.valid?.should be_true
20
+ end
21
+
22
+ it 'should create type_fields after' do
23
+ field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
24
+ page = Page.create name: 'New page', template: @template
25
+
26
+ field.get_value_for(page).should == ''
27
+ end
28
+ end
29
+
30
+ describe '.find_by_request_or_first' do
31
+ before :each do
32
+ @page = Page.create name: 'New page', url: 'new-page'
33
+ end
34
+
35
+ it 'should return page by given request path' do
36
+ Page.find_by_request_or_first('/new-page').should == @page
37
+ end
38
+
39
+ it 'should return first page if no given request' do
40
+ Page.find_by_request_or_first.should == @page
41
+ end
42
+ end
43
+
44
+ describe '.full_url_generate' do
45
+ it 'should generate full_url from parent_id and url' do
46
+ first_page = Page.create name: 'First page', url: 'first-page'
47
+ second_page = Page.create name: 'Second page', url: 'second-page', parent: first_page
48
+ Page.full_url_generate(second_page.id, 'third-page').should == '/first-page/second-page/third-page'
49
+ end
50
+ end
51
+ end
52
+
53
+ context 'INSTANCE METHODS' do
54
+ context 'Getting and setting field value' do
55
+ before :each do
56
+ @template = Template.create name: 'Page template', code_name: 'page_template'
57
+ @page = Page.create name: 'Home page', template: @template
58
+ @field = Field.create name: 'Desc', code_name: 'desc', template: @template, type_value: 'text'
59
+ end
60
+
61
+ describe '#get_field' do
62
+ it 'should get value from type_field' do
63
+ @field.set_value_for(@page, 'Hello world')
64
+ @page.get_field_value('desc').should == 'Hello world'
65
+ end
66
+ end
67
+
68
+ describe '#set_field' do
69
+ it 'should set value for type_field' do
70
+ @page.set_field_value('desc', 'my world')
71
+ @field.get_value_for(@page).should == 'my world'
72
+ end
73
+ end
74
+ end
75
+
76
+ context 'Updating and removing fields values' do
77
+ before :each do
78
+ @template = Template.create name: 'New template', code_name: 'brand'
79
+ @field = Field.create name: 'Price', code_name: 'price', template: @template, type_value: 'float'
80
+ @page = Page.create name: 'New page', template: @template
81
+ @page.price = 500
82
+ end
83
+
84
+ describe '#update_fields_values' do
85
+ it 'should update fields values with params' do
86
+ @template.reload
87
+ Field.create name: 'Count', code_name: 'amount', template: @template, type_value: 'integer'
88
+
89
+ @page.reload
90
+
91
+ @page.amount = 10
92
+
93
+ @page.update_fields_values({price: 1000, amount: 20})
94
+
95
+ @page.price.should == 1000
96
+ @page.amount.should == 20
97
+ end
98
+
99
+ it 'should reset boolean fields' do
100
+ Field.create name: 'Check', code_name: 'check', template: @template, type_value: 'boolean'
101
+
102
+ @page.check = true
103
+
104
+ @page.update_fields_values({price: 1000})
105
+
106
+ @page.price.should == 1000
107
+ @page.check.should be_false
108
+ end
109
+ end
110
+
111
+ describe '#remove_fields_values' do
112
+ it 'should destroy all type_values fields' do
113
+ @field.find_type_object(@page).value.should == 500
114
+
115
+ @page.remove_fields_values
116
+ @field.find_type_object(@page).should be_nil
117
+ end
118
+ end
119
+ end
120
+
121
+ describe '#find_page_in_branch' do
122
+ it 'should find page(s) in same branch pages and templates by template_code_name' do
123
+ brand_template = Template.create name: 'Brand', code_name: 'brand'
124
+ series_template = Template.create name: 'Series', code_name: 'series', parent: brand_template
125
+
126
+ brand_page = Page.create name: 'Zanussi', template: brand_template
127
+ series_page = Page.create name: 'Fresco', template: series_template, parent: brand_page
128
+ brand_page.reload
129
+
130
+ series_page.find_page_in_branch('brand').should == brand_page
131
+ brand_page.find_pages_in_branch('series').should == [series_page]
132
+ end
133
+ end
134
+
135
+ describe '#as_json' do
136
+ context 'should return page hash attributes with fields' do
137
+ before :each do
138
+ @template = Template.create name: 'Json', code_name: 'json_template'
139
+ @page = Page.create name: 'Test json', template: @template
140
+ end
141
+
142
+ it 'should return defaults name and title attrs' do
143
+ @page.as_json.should == {name: @page.name, title: @page.title}
144
+ end
145
+
146
+ it 'should add fields to hash' do
147
+ Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
148
+ @page.content = 'Hello world'
149
+ @page.reload
150
+
151
+ @page.as_json.should == {name: @page.name, title: @page.title, content: 'Hello world'}
152
+ end
153
+ end
154
+ end
155
+
156
+ describe '#redirect?' do
157
+ it 'should check if link specified or not' do
158
+ page = Page.create name: 'Test redirection'
159
+ page.redirect?.should be_false
160
+
161
+ page.link = ''
162
+ page.save
163
+
164
+ page.redirect?.should be_false
165
+
166
+ page.link = '/hello-redirect'
167
+ page.save
168
+
169
+ page.redirect?.should be_true
170
+ end
171
+ end
172
+ end
173
+
174
+ context 'ATTRIBUTES' do
175
+ describe '#auto_url' do
176
+ it 'should be true by default' do
177
+ page = Page.create
178
+ page.auto_url.should be_true
179
+ end
180
+ end
181
+
182
+ describe '#template' do
183
+ context 'if there is no template' do
184
+ it 'should not be valid' do
185
+ Template.delete_all
186
+
187
+ page = Page.create
188
+ page.valid?.should_not be_true
189
+ end
190
+ end
191
+
192
+ context 'if template_id is nil' do
193
+ it 'should be first template' do
194
+ page = Page.create
195
+ page.template.should == Template.first
196
+ end
197
+ end
198
+ end
199
+
200
+ describe '#url' do
201
+ context 'if url is empty or if auto_url is true' do
202
+ it 'should be generated from name' do
203
+ page = Page.create name: 'Hello world'
204
+ page.url.should == 'hello-world'
205
+ end
206
+
207
+ it 'should translit utf-8' do
208
+ page = Page.create name: 'Проверка'
209
+ page.full_url.should == '/proverka'
210
+
211
+ page_two = Page.create name: 'Тест', parent: page
212
+ page_two.full_url.should == '/proverka/test'
213
+ end
214
+ end
215
+
216
+ context 'else' do
217
+ it 'should get url field value' do
218
+ page = Page.create name: 'Hello', auto_url: true
219
+ page.url.should == 'hello'
220
+
221
+ page.auto_url = false
222
+ page.url = 'world'
223
+ page.save
224
+ page.url.should == 'world'
225
+
226
+ page.auto_url = true
227
+ page.name = 'Another world'
228
+ page.url = 'world-two'
229
+ page.save
230
+ page.url.should == 'another-world'
231
+ end
232
+ end
233
+ end
234
+
235
+ describe '#full_url' do
236
+ it 'should be generated from url and ancestors' do
237
+ page = Page.create name: 'Hello'
238
+ page.full_url.should == '/hello'
239
+
240
+ page_two = Page.create name: 'World', parent: page
241
+ page_two.full_url.should == '/hello/world'
242
+ end
243
+
244
+ context 'if parent or url has been changed' do
245
+ it 'should update full_url' do
246
+ page = Page.create name: 'Change url', url: 'change-url', auto_url: false
247
+ child_page = Page.create name: 'Child page', url: 'child', auto_url: false, parent: page
248
+ page.reload
249
+
250
+ page.full_url.should == '/change-url'
251
+ child_page.full_url.should == '/change-url/child'
252
+
253
+ page.url = 'another-change-url'
254
+ page.save
255
+ page.full_url.should == '/another-change-url'
256
+
257
+ child_page.reload
258
+ child_page.full_url.should == '/another-change-url/child'
259
+ end
260
+ end
261
+
262
+ context 'if parent is root or nil' do
263
+ it 'should be as /self.url' do
264
+ page = Page.create name: 'Page', url: 'page', auto_url: false, parent_id: nil
265
+ page.full_url.should == '/page'
266
+
267
+ parent = Page.create name: 'Parent'
268
+ page.parent = parent
269
+ page.save
270
+
271
+ page.full_url.should == '/parent/page'
272
+
273
+ page.parent = nil
274
+ page.save
275
+ page.full_url.should == '/page'
276
+ end
277
+ end
278
+ end
279
+
280
+ describe 'method_missing' do
281
+ context 'Getting and setting field value' do
282
+ before :each do
283
+ @template = Template.create name: 'Page', code_name: 'page_template'
284
+ @page = Page.create name: 'No method', template: @template
285
+ @field = Field.create name: 'Content', code_name: 'desc', template: @template, type_value: 'text'
286
+ end
287
+
288
+ it 'should return value of type_value for missing method' do
289
+ @field.set_value_for(@page, 'my world')
290
+ @page.desc.should == 'my world'
291
+ end
292
+
293
+ it 'should set value for type_value for missing method' do
294
+ @page.desc = 'my world 2'
295
+ @field.get_value_for(@page).should == 'my world 2'
296
+ end
297
+ end
298
+
299
+ it 'should find page in branch template if no field found' do
300
+ brand_template = Template.create name: 'Brand', code_name: 'brand'
301
+ series_template = Template.create name: 'Series', code_name: 'series', parent: brand_template
302
+
303
+ brand_page = Page.create name: 'Zanussi', template: brand_template
304
+ series_page = Page.create name: 'Fresco', template: series_template, parent: brand_page
305
+ brand_page.reload
306
+
307
+ series_page.brand.should == brand_page
308
+ brand_page.series.should == [series_page]
309
+ end
310
+ end
311
+ end
312
+ end
313
+ end