constructor-core 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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,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,217 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module ConstructorPages
6
+ describe 'Fields Controller' do
7
+ before :all do
8
+ ConstructorCore::User.delete_all
9
+ @user = ConstructorCore::User.create email: 'ivanzotov@gmail.com', password: '123qweASD'
10
+ end
11
+
12
+ before :each do
13
+ Page.delete_all
14
+ Field.delete_all
15
+ Template.delete_all
16
+
17
+ Field::TYPES.each do |t|
18
+ "constructor_pages/types/#{t}_type".classify.constantize.delete_all
19
+ end
20
+
21
+ @template = Template.create name: 'Page', code_name: 'page'
22
+
23
+ login_as @user
24
+ end
25
+
26
+ describe 'Index' do
27
+ before :each do
28
+ @template = Template.create name: 'Brand', code_name: 'brand'
29
+ @content_field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
30
+ @price_field = Field.create name: 'Price', code_name: 'price', template: @template, type_value: 'float'
31
+ end
32
+
33
+ it 'should list all fields of template' do
34
+ visit pages.edit_template_path(@template)
35
+ page.should have_text 'Content'
36
+ page.should have_text 'Price'
37
+ end
38
+
39
+ it 'should has edit field link' do
40
+ visit pages.edit_template_path(@template)
41
+ find("a[href='#{pages.edit_field_path(@content_field, @template)}']").should be_true
42
+ find("a[href='#{pages.edit_field_path(@price_field, @template)}']").should be_true
43
+ end
44
+
45
+ it 'should has delete field link' do
46
+ visit pages.edit_template_path(@template)
47
+ find("a[href='#{pages.field_path(@content_field)}']").should be_true
48
+ find("a[href='#{pages.field_path(@price_field)}']").should be_true
49
+ end
50
+
51
+ it 'should has move field link' do
52
+ visit pages.edit_template_path(@template)
53
+ find("a[href='#{pages.field_move_down_path(@content_field)}']").should be_true
54
+ find("a[href='#{pages.field_move_up_path(@price_field)}']").should be_true
55
+ end
56
+ end
57
+
58
+ describe 'New field' do
59
+ before :each do
60
+ @template = Template.create name: 'Brand', code_name: 'brand'
61
+ end
62
+
63
+ context 'Access' do
64
+ it 'should be accessed by new_field_path if loggen in' do
65
+ visit pages.new_field_path(@template)
66
+ current_path.should == pages.new_field_path(@template)
67
+ status_code.should == 200
68
+ end
69
+
70
+ it 'should not be accessed by new_field_path if not loggen in' do
71
+ logout
72
+ visit pages.new_field_path(@template)
73
+ current_path.should == '/'
74
+ end
75
+ end
76
+
77
+ context 'Contain' do
78
+ before :each do
79
+ @content_field = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
80
+ @price_field = Field.create name: 'Price', code_name: 'price', template: @template, type_value: 'float'
81
+ end
82
+
83
+ it 'should has name field' do
84
+ visit pages.new_field_path(@template)
85
+ page.should have_field 'Name'
86
+ end
87
+
88
+ it 'should has code name field' do
89
+ visit pages.new_field_path(@template)
90
+ page.should have_field 'Code name'
91
+ end
92
+
93
+ it 'should has select type' do
94
+ visit pages.new_field_path(@template)
95
+ page.should have_select 'Type value'
96
+ end
97
+
98
+ it 'should has no delete link' do
99
+ visit pages.new_field_path(@template)
100
+ page.should_not have_link 'Delete'
101
+ end
102
+
103
+ it 'should has Create Field button' do
104
+ visit pages.new_field_path(@template)
105
+ page.should have_button 'Create Field'
106
+ end
107
+ end
108
+
109
+ it 'should create new field' do
110
+ visit pages.new_field_path(@template)
111
+ fill_in 'Name', with: 'Amount'
112
+ fill_in 'Code name', with: 'amount'
113
+ select 'Integer', from: 'Type value'
114
+ Field.count.should == 0
115
+ click_button 'Create Field'
116
+ Field.count.should == 1
117
+ _field = Field.first
118
+ _field.name.should == 'Amount'
119
+ _field.code_name.should == 'amount'
120
+ _field.type_value.should == 'integer'
121
+ current_path.should == pages.edit_template_path(@template)
122
+ page.should have_text 'added successfully'
123
+ page.should have_text 'Amount'
124
+ end
125
+
126
+ it 'should validate uniqueness of code_name' do
127
+ visit pages.new_field_path(@template)
128
+ fill_in 'Name', with: 'Hello'
129
+ fill_in 'Code name', with: 'get_field_value'
130
+ Field.count.should == 0
131
+ click_button 'Create Field'
132
+ Field.count.should == 0
133
+ current_path.should == pages.fields_path
134
+ page.should have_text 'Code name has already been taken'
135
+
136
+ visit pages.new_field_path(@template)
137
+ fill_in 'Name', with: 'Hello'
138
+ fill_in 'Code name', with: 'brand'
139
+ Field.count.should == 0
140
+ click_button 'Create Field'
141
+ Field.count.should == 0
142
+ current_path.should == pages.fields_path
143
+ page.should have_text 'Code name has already been taken'
144
+ end
145
+ end
146
+
147
+ describe 'Edit field' do
148
+ before :each do
149
+ @template = Template.create name: 'Brand', code_name: 'brand'
150
+ @field_content = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
151
+ end
152
+
153
+ context 'Access' do
154
+ it 'should be accessed by edit_field_path if loggen in' do
155
+ visit pages.edit_field_path(@field_content, @template)
156
+ current_path.should == pages.edit_field_path(@field_content, @template)
157
+ status_code.should == 200
158
+ end
159
+
160
+ it 'should not be accessed by new_field_path if not loggen in' do
161
+ logout
162
+ visit pages.edit_field_path(@field_content, @template)
163
+ current_path.should == '/'
164
+ end
165
+ end
166
+
167
+ it 'should has delete link' do
168
+ visit pages.edit_field_path(@field_content, @template)
169
+ page.should have_link 'Delete', pages.field_path(@field_content)
170
+ end
171
+
172
+ it 'should has Update Field button' do
173
+ visit pages.edit_field_path(@field_content, @template)
174
+ page.should have_button 'Update Field'
175
+ end
176
+
177
+ it 'should edit field' do
178
+ visit pages.edit_field_path(@field_content, @template)
179
+ fill_in 'Name', with: 'Long content'
180
+ fill_in 'Code name', with: 'long_content'
181
+ select 'HTML', from: 'Type value'
182
+ click_button 'Update Field'
183
+ @field_content.reload
184
+ @field_content.name.should == 'Long content'
185
+ @field_content.code_name.should == 'long_content'
186
+ @field_content.type_value.should == 'html'
187
+ current_path.should == pages.edit_template_path(@template)
188
+ page.should have_text 'updated successfully'
189
+ end
190
+ end
191
+
192
+ describe 'Delete field' do
193
+ before :each do
194
+ @template = Template.create name: 'Brand', code_name: 'brand'
195
+ @field_content = Field.create name: 'Content', code_name: 'content', template: @template, type_value: 'text'
196
+ end
197
+
198
+ it 'should delete field from template edit' do
199
+ visit pages.edit_template_path(@template)
200
+ Field.count.should == 1
201
+ find("a[href='#{pages.field_path(@field_content)}']").click
202
+ Field.count.should == 0
203
+ current_path.should == pages.edit_template_path(@template)
204
+ page.should have_text 'removed successfully'
205
+ end
206
+
207
+ it 'should delete from field edit' do
208
+ visit pages.edit_field_path(@field_content, @template)
209
+ Field.count.should == 1
210
+ click_link 'Delete'
211
+ Field.count.should == 0
212
+ current_path.should == pages.edit_template_path(@template)
213
+ page.should have_text 'removed successfully'
214
+ end
215
+ end
216
+ end
217
+ end
@@ -0,0 +1,313 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module ConstructorPages
6
+ describe 'Pages Controller' do
7
+ before :all do
8
+ ConstructorCore::User.delete_all
9
+ @user = ConstructorCore::User.create email: 'ivanzotov@gmail.com', password: '123qweASD'
10
+ end
11
+
12
+ before :each do
13
+ Page.delete_all
14
+ Field.delete_all
15
+ Template.delete_all
16
+
17
+ Field::TYPES.each do |t|
18
+ "constructor_pages/types/#{t}_type".classify.constantize.delete_all
19
+ end
20
+
21
+ @template = Template.create name: 'Page', code_name: 'page'
22
+
23
+ login_as @user
24
+ end
25
+
26
+ describe 'Index' do
27
+ context 'Access' do
28
+ it 'should be accessed by pages_path if loggen in' do
29
+ visit pages.pages_path
30
+ current_path.should == pages.pages_path
31
+ status_code.should == 200
32
+ end
33
+
34
+ it 'should not be accessed by pages_path if not loggen in' do
35
+ logout
36
+ visit pages.pages_path
37
+ current_path.should == '/'
38
+ end
39
+ end
40
+
41
+ it 'should notice if no template exists' do
42
+ Template.delete_all
43
+ visit pages.pages_path
44
+ page.should_not have_link 'New page'
45
+ page.should have_content 'Create at least one template'
46
+ end
47
+
48
+ it 'should not notice if template exists' do
49
+ visit pages.pages_path
50
+ page.should have_link 'New page'
51
+ page.should_not have_text 'Create at least one template'
52
+ end
53
+
54
+ it 'should has pages list' do
55
+ Page.create name: 'Zanussi'
56
+ visit pages.pages_path
57
+ page.should have_selector 'ul li'
58
+ page.should have_link 'Zanussi'
59
+ end
60
+
61
+ it 'should has new page link' do
62
+ visit pages.pages_path
63
+ page.should have_link 'New page', pages.new_page_path
64
+ end
65
+
66
+ it 'should has edit_page link' do
67
+ _page = Page.create name: 'Zanussi'
68
+ visit pages.pages_path
69
+ page.should have_link 'Edit page', pages.edit_page_path(_page)
70
+ end
71
+
72
+ it 'should has delete_page link' do
73
+ _page = Page.create name: 'Zanussi'
74
+ visit pages.pages_path
75
+ page.should have_link 'Delete', pages.page_path(_page)
76
+ end
77
+
78
+ it 'should has Add child if child exists' do
79
+ _template = Template.create name: 'Child', code_name: 'child_page', parent: @template
80
+ _page = Page.create name: 'Zanussi', template: @template
81
+ visit pages.pages_path
82
+ page.should have_link 'Add child', pages.new_child_page_path(_page)
83
+ end
84
+ end
85
+
86
+ describe 'Moving' do
87
+ it 'should move page' do
88
+ _page_first = Page.create name: 'First'
89
+ _page_second = Page.create name: 'Second'
90
+ _page_third = Page.create name: 'Third'
91
+
92
+ _page_first.left_sibling.should be_nil
93
+ _page_first.right_sibling.should == _page_second
94
+
95
+ _page_second.left_sibling.should == _page_first
96
+ _page_second.right_sibling.should == _page_third
97
+
98
+ _page_third.left_sibling.should == _page_second
99
+ _page_third.right_sibling.should be_nil
100
+
101
+ visit pages.pages_path
102
+ find("a[href='#{pages.page_move_down_path(_page_first.id)}']").click
103
+
104
+ _page_first.reload
105
+ _page_first.left_sibling.should == _page_second
106
+ _page_first.right_sibling.should == _page_third
107
+
108
+ _page_second.reload
109
+ _page_second.left_sibling.should be_nil
110
+ _page_second.right_sibling.should == _page_first
111
+
112
+ _page_third.reload
113
+ _page_third.left_sibling.should == _page_first
114
+ _page_third.right_sibling.should be_nil
115
+
116
+ find("a[href='#{pages.page_move_up_path(_page_third.id)}']").click
117
+
118
+ _page_first.reload
119
+ _page_first.left_sibling.should == _page_third
120
+ _page_first.right_sibling.should be_nil
121
+
122
+ _page_second.reload
123
+ _page_second.left_sibling.should be_nil
124
+ _page_second.right_sibling.should == _page_third
125
+
126
+ _page_third.reload
127
+ _page_third.left_sibling.should == _page_second
128
+ _page_third.right_sibling.should == _page_first
129
+ end
130
+ end
131
+
132
+ describe 'New page' do
133
+ describe 'Access' do
134
+ it 'should be accessed by new_page_path if logged in' do
135
+ visit pages.new_page_path
136
+ current_path.should == pages.new_page_path
137
+ status_code.should == 200
138
+ end
139
+
140
+ it 'should not be accessed by new_page_path if not logged in' do
141
+ logout
142
+ visit pages.new_page_path
143
+ current_path.should == '/'
144
+ end
145
+ end
146
+
147
+ it 'should has child template of parent page' do
148
+ _template = Template.create name: 'Child', code_name: 'child_page', parent: @template
149
+ _page = Page.create name: 'Zanussi', template: @template
150
+ visit pages.pages_path
151
+ click_link 'Add child'
152
+ current_path.should == pages.new_child_page_path(_page)
153
+ page.should have_select 'Template', selected: '-- Child'
154
+ end
155
+
156
+ it 'should has published checkbox' do
157
+ visit pages.new_page_path
158
+ page.should have_checked_field 'Active'
159
+ end
160
+
161
+ it 'should has name field' do
162
+ visit pages.new_page_path
163
+ page.should have_field 'Name'
164
+ end
165
+
166
+ it 'should has no delete link' do
167
+ visit pages.new_page_path
168
+ page.should_not have_link 'Delete'
169
+ end
170
+
171
+ it 'should has create button' do
172
+ visit pages.new_page_path
173
+ page.should have_button 'Create Page'
174
+ end
175
+
176
+ it 'should save new page' do
177
+ visit pages.new_page_path
178
+ fill_in 'Name', with: 'Hello world'
179
+ Page.count.should == 0
180
+ click_button 'Create Page'
181
+ Page.count.should == 1
182
+ _page = Page.first
183
+ _page.name.should == 'Hello world'
184
+ _page.url.should == 'hello-world'
185
+ current_path.should == pages.pages_path
186
+ page.should have_text 'added successfully'
187
+ end
188
+
189
+ it 'should redirect to back if no template exists' do
190
+ Template.delete_all
191
+ visit pages.new_page_path
192
+ current_path.should == pages.pages_path
193
+ page.should have_text 'Create at least one template'
194
+ end
195
+ end
196
+
197
+ describe 'Edit page' do
198
+ before :each do
199
+ @page = Page.create name: 'Hello world'
200
+ end
201
+
202
+ describe 'Access' do
203
+ it 'should be accessed by edit_page_path if logged in' do
204
+ visit pages.edit_page_path(@page)
205
+ status_code.should == 200
206
+ end
207
+
208
+ it 'should not be accessed by edit_page_path if not logged in' do
209
+ logout
210
+ visit pages.edit_page_path(@page)
211
+ current_path.should == '/'
212
+ end
213
+ end
214
+
215
+ it 'should has delete link' do
216
+ visit pages.edit_page_path(@page)
217
+ page.should have_link 'Delete'
218
+ end
219
+
220
+ it 'should edit page' do
221
+ visit pages.edit_page_path(@page)
222
+ fill_in 'Name', with: 'Zanussi'
223
+ fill_in 'Title', with: 'Zanussi conditioners'
224
+ fill_in 'Keywords', with: 'Zanussi, conditioners, Voronezh'
225
+ fill_in 'Description', with: 'Zanussi conditioners Voronezh'
226
+ @page.name.should == 'Hello world'
227
+ click_button 'Update Page'
228
+ @page.reload
229
+ @page.name.should == 'Zanussi'
230
+ @page.url.should == 'zanussi'
231
+ @page.title.should == 'Zanussi conditioners'
232
+ @page.keywords.should == 'Zanussi, conditioners, Voronezh'
233
+ @page.description.should == 'Zanussi conditioners Voronezh'
234
+ page.should have_text 'updated successfully'
235
+ end
236
+ end
237
+
238
+ describe 'Delete page' do
239
+ it 'should delete from pages index' do
240
+ Page.create name: 'Page'
241
+ visit pages.pages_path
242
+ Page.count.should == 1
243
+ click_link 'Delete'
244
+ Page.count.should == 0
245
+ page.should have_text 'removed successfully'
246
+ end
247
+
248
+ it 'should delete from page' do
249
+ _page = Page.create name: 'Page'
250
+ visit pages.edit_page_path(_page)
251
+ Page.count.should == 1
252
+ click_link 'Delete'
253
+ Page.count.should == 0
254
+ page.should have_text 'removed successfully'
255
+ end
256
+ end
257
+
258
+ describe 'Fields' do
259
+ it 'should create fields after create page' do
260
+ Field.create name: 'Short description', code_name: 'short_description', template: @template, type_value: 'text'
261
+ Field.create name: 'Long description', code_name: 'long_description', template: @template, type_value: 'html'
262
+
263
+ visit pages.new_page_path
264
+ fill_in 'Name', with: 'Page'
265
+ click_button 'Create Page'
266
+ page.should have_content 'added successfully'
267
+
268
+ _page = Page.first
269
+ _page.short_description.should == ''
270
+
271
+ visit pages.edit_page_path(_page)
272
+
273
+ fill_in 'Short description', with: 'This is short description'
274
+ fill_in 'Long description', with: 'This is long description'
275
+
276
+ click_button 'Update Page'
277
+
278
+ _page.short_description.should == 'This is short description'
279
+ end
280
+
281
+ it 'should change fields if template change' do
282
+ Field.create name: 'Price', code_name: 'price', template: @template, type_value: 'float'
283
+ _template = Template.create name: 'Brand', code_name: 'brand'
284
+ Field.create name: 'Amount', code_name: 'amount', template: _template, type_value: 'integer'
285
+
286
+ visit pages.new_page_path
287
+ fill_in 'Name', with: 'Simple page'
288
+ click_button 'Create Page'
289
+ _page = Page.first
290
+ visit pages.edit_page_path(_page)
291
+ page.should have_selector('#fields_price')
292
+ fill_in 'Price', with: '250.20'
293
+ click_button 'Update Page'
294
+ _page.reload
295
+ _page.price.should == 250.2
296
+ visit pages.edit_page_path(_page)
297
+ select 'Brand', from: 'Template'
298
+ click_button 'Update Page'
299
+ _page.reload
300
+ _page.template.should == _template
301
+ _page.price.should be_nil
302
+ _page.amount.should == 0
303
+ visit pages.edit_page_path(_page)
304
+ page.should_not have_selector('#fields_price')
305
+ page.should have_selector('#fields_amount')
306
+ fill_in 'Amount', with: 200
307
+ click_button 'Update Page'
308
+ _page.reload
309
+ _page.amount.should == 200
310
+ end
311
+ end
312
+ end
313
+ end