redde 0.1.18 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.hound.yml +2 -0
  4. data/.rubocop.yml +19 -0
  5. data/.travis.yml +5 -4
  6. data/Gemfile +8 -5
  7. data/MIT-LICENSE +20 -0
  8. data/README.md +96 -105
  9. data/Rakefile +20 -1
  10. data/app/assets/fonts/redde-admin.eot +0 -0
  11. data/app/assets/fonts/redde-admin.svg +12 -0
  12. data/app/assets/fonts/redde-admin.ttf +0 -0
  13. data/app/assets/fonts/redde-admin.woff +0 -0
  14. data/app/assets/images/redde/close-hover.svg +4 -0
  15. data/app/assets/images/redde/close.svg +6 -0
  16. data/app/assets/images/redde/enter.svg +4 -0
  17. data/app/assets/images/redde/eye.svg +5 -0
  18. data/app/assets/images/redde/eye_disactive.svg +5 -0
  19. data/app/assets/images/redde/main-menu/cog.svg +8 -0
  20. data/app/assets/images/redde/main-menu/cog_active.svg +8 -0
  21. data/app/assets/images/redde/main-menu/folder.svg +4 -0
  22. data/app/assets/images/redde/main-menu/folder_active.svg +4 -0
  23. data/app/assets/images/redde/main-menu/home.svg +4 -0
  24. data/app/assets/images/redde/main-menu/home_active.svg +4 -0
  25. data/app/assets/images/redde/main-menu/list.svg +4 -0
  26. data/app/assets/images/redde/main-menu/list_active.svg +4 -0
  27. data/app/assets/images/redde/next.svg +7 -0
  28. data/app/assets/images/redde/plus.svg +3 -0
  29. data/app/assets/images/redde/sel.svg +6 -0
  30. data/app/assets/images/redde/user.svg +12 -0
  31. data/app/assets/javascripts/redde/fileapi.js.coffee +17 -0
  32. data/app/assets/javascripts/redde/index.js.coffee +12 -0
  33. data/app/assets/javascripts/redde/redactor/index.coffee +8 -0
  34. data/{lib/generators/redde/layout/templates/assets/redactor/javascripts/jquery-migrate-1.2.1.js → app/assets/javascripts/redde/redactor/jquery-migrate-1.3.0.js} +215 -34
  35. data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/redactor.js.erb +250 -250
  36. data/app/assets/javascripts/redde/sortTree/index.js.coffee +47 -0
  37. data/app/assets/javascripts/redde/sortable.coffee +47 -0
  38. data/{spec/dummy/app/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/error-msg.sass +4 -2
  39. data/app/assets/stylesheets/redde/blocks/flash-msg.sass +22 -0
  40. data/app/assets/stylesheets/redde/blocks/list-v2.sass +96 -0
  41. data/app/assets/stylesheets/redde/blocks/photos-uploader.sass +21 -0
  42. data/app/assets/stylesheets/redde/blocks/photos.sass +56 -0
  43. data/app/assets/stylesheets/redde/blocks/redde-form.sass +55 -0
  44. data/app/assets/stylesheets/redde/blocks/sort-tree.sass +46 -0
  45. data/app/assets/stylesheets/redde/defaults/btn.sass +30 -0
  46. data/app/assets/stylesheets/redde/defaults/del.sass +23 -0
  47. data/app/assets/stylesheets/redde/defaults/index.sass +87 -0
  48. data/app/assets/stylesheets/redde/defaults/inp.sass +20 -0
  49. data/app/assets/stylesheets/redde/defaults/reset.sass +25 -0
  50. data/app/assets/stylesheets/redde/defaults/sbm.sass +32 -0
  51. data/app/assets/stylesheets/redde/defaults/sel.sass +29 -0
  52. data/app/assets/stylesheets/redde/fonts.sass +42 -0
  53. data/app/assets/stylesheets/redde/index.scss +5 -0
  54. data/app/assets/stylesheets/redde/layouts/header.sass +63 -0
  55. data/app/assets/stylesheets/redde/layouts/main-menu.sass +63 -0
  56. data/app/assets/stylesheets/redde/layouts/main.sass +48 -0
  57. data/app/assets/stylesheets/redde/layouts/page-header.sass +34 -0
  58. data/app/assets/stylesheets/redde/layouts/page-sidebar.sass +9 -0
  59. data/app/assets/stylesheets/redde/mixins.sass +10 -0
  60. data/{spec/dummy/app/assets/stylesheets → app/assets/stylesheets/redde}/redactor/index.scss +46 -49
  61. data/app/assets/stylesheets/redde-admin/blocks/list-v2.sass +96 -0
  62. data/app/assets/stylesheets/redde-admin/defaults/del.sass +23 -0
  63. data/app/controllers/admin/base_controller.rb +81 -0
  64. data/{lib/generators/redde/layout/templates/controllers → app/controllers/admin}/managers_controller.rb +10 -6
  65. data/app/controllers/admin/redde_photos_controller.rb +31 -0
  66. data/app/controllers/admin/system_commands_controller.rb +11 -0
  67. data/app/form_builders/redde_form_builder.rb +106 -0
  68. data/app/helpers/redde/admin_helper.rb +33 -0
  69. data/app/helpers/redde/form_helper.rb +59 -0
  70. data/app/helpers/redde/index_helper.rb +61 -0
  71. data/{lib/redde/concerns/layout.rb → app/models/concerns/redde/layouts.rb} +1 -1
  72. data/app/models/concerns/redde/photoable.rb +5 -0
  73. data/{lib/redde/concerns → app/models/concerns/redde}/sluggable.rb +6 -3
  74. data/app/models/concerns/redde/tree_sortable.rb +40 -0
  75. data/{lib/redde/concerns → app/models/concerns/redde}/with_photo.rb +5 -5
  76. data/app/models/redde/photo.rb +16 -0
  77. data/app/models/redde/system_command.rb +43 -0
  78. data/{lib → app/models}/redde/url_generator.rb +7 -3
  79. data/{lib/generators/redde/photo/templates/uploader.rb → app/uploaders/photo_uploader.rb} +4 -4
  80. data/app/views/admin/base/_tree_item.html.haml +10 -0
  81. data/app/views/admin/base/edit.html.haml +21 -0
  82. data/app/views/admin/base/index.html.haml +68 -0
  83. data/app/views/admin/base/tree.html.haml +14 -0
  84. data/app/views/admin/managers/edit.html.haml +11 -0
  85. data/app/views/admin/managers/index.html.haml +17 -0
  86. data/{lib/generators/redde/layout/templates/base → app/views/admin/redde}/_header.html.haml +5 -6
  87. data/app/views/admin/redde/_main_menu.html.haml +12 -0
  88. data/app/views/admin/redde/_page_header.html.haml +3 -0
  89. data/app/views/admin/redde/_sidebar.html.haml +16 -0
  90. data/{lib/generators/redde/layout/templates/base → app/views/admin/redde}/_validate.haml +2 -2
  91. data/app/views/admin/redde_photos/_photo.haml +11 -0
  92. data/app/views/admin/redde_photos/_photos.haml +28 -0
  93. data/app/views/admin/system_commands/index.html.haml +25 -0
  94. data/app/views/kaminari/redde/_first_page.html.haml +9 -0
  95. data/app/views/kaminari/redde/_gap.html.haml +8 -0
  96. data/app/views/kaminari/redde/_last_page.html.haml +9 -0
  97. data/app/views/kaminari/redde/_next_page.html.haml +9 -0
  98. data/app/views/kaminari/redde/_page.html.haml +10 -0
  99. data/app/views/kaminari/redde/_paginator.html.haml +18 -0
  100. data/app/views/kaminari/redde/_prev_page.html.haml +9 -0
  101. data/{lib/generators/redde/layout/templates → app/views}/layouts/admin.html.haml +28 -29
  102. data/{lib/generators/redde/layout/templates → app/views}/layouts/login.html.haml +32 -32
  103. data/bin/rails +12 -0
  104. data/config/locales/paginate.ru.yml +9 -0
  105. data/config/routes.rb +8 -0
  106. data/db/migrate/20160121152706_create_redde_photos.rb +16 -0
  107. data/lib/generators/redde/layout/layout_generator.rb +3 -26
  108. data/lib/generators/redde/layout/templates/assets/javascripts/admin.js +1 -0
  109. data/lib/generators/redde/layout/templates/assets/stylesheets/admin.css +15 -0
  110. data/lib/generators/redde/scaffold/scaffold_generator.rb +45 -8
  111. data/lib/generators/redde/scaffold/templates/controllers/controller.rb +2 -45
  112. data/lib/generators/redde/scaffold/templates/edit.html.haml +4 -9
  113. data/lib/generators/redde/scaffold/templates/index.html.haml +2 -6
  114. data/lib/generators/redde/scaffold/templates/ru.yml +14 -0
  115. data/lib/redde/engine.rb +16 -0
  116. data/lib/redde/version.rb +1 -1
  117. data/lib/redde.rb +20 -4
  118. data/lib/tasks/redde_tasks.rake +4 -0
  119. data/redde.gemspec +44 -22
  120. metadata +482 -455
  121. data/Guardfile +0 -24
  122. data/LICIENSE.md +0 -21
  123. data/lib/generators/redde/layout/templates/assets/images/admin/del.png +0 -0
  124. data/lib/generators/redde/layout/templates/assets/images/admin/folder_.png +0 -0
  125. data/lib/generators/redde/layout/templates/assets/javascripts/admin/index.js +0 -20
  126. data/lib/generators/redde/layout/templates/assets/redactor/javascripts/redactor/index.coffee +0 -4
  127. data/lib/generators/redde/layout/templates/assets/redactor/stylesheets/redactor/index.scss +0 -369
  128. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/error-msg.sass +0 -47
  129. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/notice.scss +0 -39
  130. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/photos.scss +0 -31
  131. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/blocks/sortable.sass +0 -44
  132. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/custom/index.scss +0 -1
  133. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/index.scss +0 -131
  134. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/input.sass +0 -35
  135. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/reset.sass +0 -33
  136. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/defaults/table.scss +0 -24
  137. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/index.scss +0 -6
  138. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/header.sass +0 -50
  139. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/launchbar.sass +0 -23
  140. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/main.sass +0 -38
  141. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/page-header.sass +0 -22
  142. data/lib/generators/redde/layout/templates/assets/stylesheets/admin/layouts/page-sidebar.sass +0 -24
  143. data/lib/generators/redde/layout/templates/base/_launchbar.html.haml +0 -11
  144. data/lib/generators/redde/layout/templates/base/_sidebar.html.haml +0 -14
  145. data/lib/generators/redde/layout/templates/controllers/base_controller.rb +0 -28
  146. data/lib/generators/redde/layout/templates/form_builders/redde_form_builder.rb +0 -63
  147. data/lib/generators/redde/layout/templates/helpers/admin_helper.rb +0 -94
  148. data/lib/generators/redde/photo/photo_generator.rb +0 -35
  149. data/lib/generators/redde/photo/templates/controller.rb +0 -20
  150. data/lib/generators/redde/photo/templates/create_photos.rb +0 -16
  151. data/lib/generators/redde/photo/templates/photo.rb +0 -4
  152. data/lib/generators/redde/photo/templates/photos/_photo.haml +0 -5
  153. data/lib/generators/redde/photo/templates/photos/_photos.haml +0 -19
  154. data/lib/generators/redde/photo/templates/photos/create.js.erb +0 -1
  155. data/lib/redde/concerns/photoable.rb +0 -17
  156. data/spec/dummy/.rspec +0 -1
  157. data/spec/dummy/README.rdoc +0 -28
  158. data/spec/dummy/Rakefile +0 -6
  159. data/spec/dummy/app/assets/images/admin/addphoto.png +0 -0
  160. data/spec/dummy/app/assets/images/admin/ajaxloader2.gif +0 -0
  161. data/spec/dummy/app/assets/images/admin/arrow_down.png +0 -0
  162. data/spec/dummy/app/assets/images/admin/arrow_enter.png +0 -0
  163. data/spec/dummy/app/assets/images/admin/arrow_right.png +0 -0
  164. data/spec/dummy/app/assets/images/admin/coins.png +0 -0
  165. data/spec/dummy/app/assets/images/admin/confirm.png +0 -0
  166. data/spec/dummy/app/assets/images/admin/del.png +0 -0
  167. data/spec/dummy/app/assets/images/admin/delete.png +0 -0
  168. data/spec/dummy/app/assets/images/admin/email.png +0 -0
  169. data/spec/dummy/app/assets/images/admin/error-label-triangle.png +0 -0
  170. data/spec/dummy/app/assets/images/admin/error.png +0 -0
  171. data/spec/dummy/app/assets/images/admin/favicon.png +0 -0
  172. data/spec/dummy/app/assets/images/admin/fio.png +0 -0
  173. data/spec/dummy/app/assets/images/admin/folder.png +0 -0
  174. data/spec/dummy/app/assets/images/admin/folder_.png +0 -0
  175. data/spec/dummy/app/assets/images/admin/icon_eye.gif +0 -0
  176. data/spec/dummy/app/assets/images/admin/lightbox/css/jquery.lightbox-0.5.css +0 -101
  177. data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-blank.gif +0 -0
  178. data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-btn-close.gif +0 -0
  179. data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-btn-next.gif +0 -0
  180. data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-btn-prev.gif +0 -0
  181. data/spec/dummy/app/assets/images/admin/lightbox/images/lightbox-ico-loading.gif +0 -0
  182. data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.js +0 -32
  183. data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.lightbox-0.5.js +0 -477
  184. data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.lightbox-0.5.min.js +0 -42
  185. data/spec/dummy/app/assets/images/admin/lightbox/js/jquery.lightbox-0.5.pack.js +0 -14
  186. data/spec/dummy/app/assets/images/admin/logo.png +0 -0
  187. data/spec/dummy/app/assets/images/admin/logo_reddeshop.png +0 -0
  188. data/spec/dummy/app/assets/images/admin/move_handler.png +0 -0
  189. data/spec/dummy/app/assets/images/admin/phone.png +0 -0
  190. data/spec/dummy/app/assets/images/admin/photo_ico.png +0 -0
  191. data/spec/dummy/app/assets/images/admin/print.png +0 -0
  192. data/spec/dummy/app/assets/images/admin/refresh.png +0 -0
  193. data/spec/dummy/app/assets/images/admin/submit.png +0 -0
  194. data/spec/dummy/app/assets/images/admin/submit_hover.png +0 -0
  195. data/spec/dummy/app/assets/images/admin/view.png +0 -0
  196. data/spec/dummy/app/assets/images/admin/view_mk.png +0 -0
  197. data/spec/dummy/app/assets/images/redactor/icons.png +0 -0
  198. data/spec/dummy/app/assets/images/redactor/plugins/file.html +0 -3
  199. data/spec/dummy/app/assets/images/redactor/plugins/image.html +0 -39
  200. data/spec/dummy/app/assets/images/redactor/plugins/image_edit.html +0 -35
  201. data/spec/dummy/app/assets/images/redactor/plugins/link.html +0 -74
  202. data/spec/dummy/app/assets/images/redactor/plugins/table.html +0 -25
  203. data/spec/dummy/app/assets/images/redactor/plugins/video.html +0 -15
  204. data/spec/dummy/app/assets/javascripts/admin/jquery.mjs.nestedSortable.js +0 -429
  205. data/spec/dummy/app/assets/javascripts/admin.js +0 -21
  206. data/spec/dummy/app/assets/javascripts/application.js +0 -14
  207. data/spec/dummy/app/assets/javascripts/jquery-migrate-1.2.1.js +0 -521
  208. data/spec/dummy/app/assets/javascripts/redactor/langs/en.js +0 -76
  209. data/spec/dummy/app/assets/javascripts/redactor/langs/ru.js +0 -75
  210. data/spec/dummy/app/assets/javascripts/redactor/redactor.js.erb +0 -2248
  211. data/spec/dummy/app/assets/javascripts/redactor/toolbars/default.js +0 -219
  212. data/spec/dummy/app/assets/stylesheets/admin/blocks/list.scss +0 -22
  213. data/spec/dummy/app/assets/stylesheets/admin/blocks/notice.scss +0 -39
  214. data/spec/dummy/app/assets/stylesheets/admin/blocks/orders.scss +0 -22
  215. data/spec/dummy/app/assets/stylesheets/admin/blocks/paginate.sass +0 -28
  216. data/spec/dummy/app/assets/stylesheets/admin/blocks/pagination.scss +0 -28
  217. data/spec/dummy/app/assets/stylesheets/admin/blocks/partners.scss +0 -15
  218. data/spec/dummy/app/assets/stylesheets/admin/blocks/phead-tabs.sass +0 -27
  219. data/spec/dummy/app/assets/stylesheets/admin/blocks/photos.scss +0 -31
  220. data/spec/dummy/app/assets/stylesheets/admin/blocks/sortable.sass +0 -44
  221. data/spec/dummy/app/assets/stylesheets/admin/custom/index.scss +0 -1
  222. data/spec/dummy/app/assets/stylesheets/admin/defaults/index.scss +0 -131
  223. data/spec/dummy/app/assets/stylesheets/admin/defaults/input.sass +0 -35
  224. data/spec/dummy/app/assets/stylesheets/admin/defaults/reset.sass +0 -33
  225. data/spec/dummy/app/assets/stylesheets/admin/defaults/table.scss +0 -24
  226. data/spec/dummy/app/assets/stylesheets/admin/index.scss +0 -6
  227. data/spec/dummy/app/assets/stylesheets/admin/layouts/header.sass +0 -50
  228. data/spec/dummy/app/assets/stylesheets/admin/layouts/launchbar.sass +0 -23
  229. data/spec/dummy/app/assets/stylesheets/admin/layouts/login.sass +0 -25
  230. data/spec/dummy/app/assets/stylesheets/admin/layouts/main.sass +0 -38
  231. data/spec/dummy/app/assets/stylesheets/admin/layouts/page-header.sass +0 -22
  232. data/spec/dummy/app/assets/stylesheets/admin/layouts/page-sidebar.sass +0 -24
  233. data/spec/dummy/app/assets/stylesheets/admin/layouts/sidebar.sass +0 -30
  234. data/spec/dummy/app/assets/stylesheets/admin/shop/_filter.scss +0 -16
  235. data/spec/dummy/app/assets/stylesheets/admin/shop/_order-sh.scss +0 -59
  236. data/spec/dummy/app/assets/stylesheets/admin/shop/_pe.scss +0 -43
  237. data/spec/dummy/app/assets/stylesheets/redactor/wym.css +0 -136
  238. data/spec/dummy/app/controllers/admin/base_controller.rb +0 -28
  239. data/spec/dummy/app/controllers/admin/managers_controller.rb +0 -36
  240. data/spec/dummy/app/controllers/application_controller.rb +0 -6
  241. data/spec/dummy/app/controllers/articles_controller.rb +0 -8
  242. data/spec/dummy/app/controllers/managers/registrations_controller.rb +0 -21
  243. data/spec/dummy/app/helpers/admin_helper.rb +0 -94
  244. data/spec/dummy/app/models/article.rb +0 -4
  245. data/spec/dummy/app/models/article_category.rb +0 -2
  246. data/spec/dummy/app/models/photo.rb +0 -3
  247. data/spec/dummy/app/views/admin/base/_header.html.haml +0 -12
  248. data/spec/dummy/app/views/admin/base/_launchbar.html.haml +0 -11
  249. data/spec/dummy/app/views/admin/base/_sidebar.html.haml +0 -14
  250. data/spec/dummy/app/views/admin/base/_validate.haml +0 -8
  251. data/spec/dummy/app/views/admin/base/welcome.haml +0 -2
  252. data/spec/dummy/app/views/admin/photos/_photo.haml +0 -5
  253. data/spec/dummy/app/views/admin/photos/_photos.haml +0 -19
  254. data/spec/dummy/app/views/admin/photos/create.js.erb +0 -1
  255. data/spec/dummy/app/views/admin/photos/destroy.js.erb +0 -1
  256. data/spec/dummy/app/views/articles/show.html.haml +0 -2
  257. data/spec/dummy/app/views/layouts/admin.html.haml +0 -29
  258. data/spec/dummy/app/views/layouts/application.html.erb +0 -15
  259. data/spec/dummy/app/views/layouts/login.html.haml +0 -32
  260. data/spec/dummy/bin/bundle +0 -3
  261. data/spec/dummy/bin/rails +0 -4
  262. data/spec/dummy/bin/rake +0 -4
  263. data/spec/dummy/config/application.rb +0 -33
  264. data/spec/dummy/config/boot.rb +0 -5
  265. data/spec/dummy/config/database.yml +0 -25
  266. data/spec/dummy/config/environment.rb +0 -5
  267. data/spec/dummy/config/environments/development.rb +0 -29
  268. data/spec/dummy/config/environments/production.rb +0 -80
  269. data/spec/dummy/config/environments/test.rb +0 -36
  270. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  271. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  272. data/spec/dummy/config/initializers/inflections.rb +0 -16
  273. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  274. data/spec/dummy/config/initializers/secret_token.rb +0 -12
  275. data/spec/dummy/config/initializers/session_store.rb +0 -3
  276. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  277. data/spec/dummy/config/locales/en.yml +0 -36
  278. data/spec/dummy/config/routes.rb +0 -4
  279. data/spec/dummy/config.ru +0 -4
  280. data/spec/dummy/db/migrate/20130908123351_create_articles.rb +0 -9
  281. data/spec/dummy/db/migrate/20140128152208_create_article_categories.rb +0 -11
  282. data/spec/dummy/db/migrate/20140607122532_create_photos.rb +0 -16
  283. data/spec/dummy/db/schema.rb +0 -98
  284. data/spec/dummy/public/404.html +0 -58
  285. data/spec/dummy/public/422.html +0 -58
  286. data/spec/dummy/public/500.html +0 -57
  287. data/spec/dummy/public/favicon.ico +0 -0
  288. data/spec/generators/layout_generator_spec.rb +0 -42
  289. data/spec/generators/photo_generator_spec.rb +0 -32
  290. data/spec/generators/scaffold_generator_spec.rb +0 -58
  291. data/spec/models/sluggable_spec.rb +0 -42
  292. data/spec/models/url_generator_spec.rb +0 -18
  293. data/spec/models/with_photo_spec.rb +0 -25
  294. data/spec/spec_helper.rb +0 -52
  295. /data/{lib/generators/redde/layout/templates/assets/redactor → app/assets}/images/.keep +0 -0
  296. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/addphoto.png +0 -0
  297. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/ajaxloader2.gif +0 -0
  298. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/arrow_down.png +0 -0
  299. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/arrow_enter.png +0 -0
  300. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/arrow_right.png +0 -0
  301. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/coins.png +0 -0
  302. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/confirm.png +0 -0
  303. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/delete.png +0 -0
  304. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/email.png +0 -0
  305. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/error.png +0 -0
  306. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/favicon.png +0 -0
  307. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/fio.png +0 -0
  308. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/icon_eye.gif +0 -0
  309. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/css/jquery.lightbox-0.5.css +0 -0
  310. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-blank.gif +0 -0
  311. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-btn-close.gif +0 -0
  312. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-btn-next.gif +0 -0
  313. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-btn-prev.gif +0 -0
  314. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/images/lightbox-ico-loading.gif +0 -0
  315. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.js +0 -0
  316. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.lightbox-0.5.js +0 -0
  317. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.lightbox-0.5.min.js +0 -0
  318. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/lightbox/js/jquery.lightbox-0.5.pack.js +0 -0
  319. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/logo_reddeshop.png +0 -0
  320. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/phone.png +0 -0
  321. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/photo_ico.png +0 -0
  322. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/print.png +0 -0
  323. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/refresh.png +0 -0
  324. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/submit.png +0 -0
  325. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/submit_hover.png +0 -0
  326. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/view.png +0 -0
  327. /data/{lib/generators/redde/layout/templates → app}/assets/images/admin/view_mk.png +0 -0
  328. /data/{lib/generators/redde/layout/templates/assets/images/admin → app/assets/images/redde}/error-label-triangle.png +0 -0
  329. /data/{lib/generators/redde/layout/templates/assets/images/admin → app/assets/images/redde}/folder.png +0 -0
  330. /data/{lib/generators/redde/layout/templates/assets/images/admin → app/assets/images/redde}/logo.png +0 -0
  331. /data/{lib/generators/redde/layout/templates/assets/images/admin/move_handler.png → app/assets/images/redde/move-handler.png} +0 -0
  332. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/icons.png +0 -0
  333. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/file.html +0 -0
  334. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/image.html +0 -0
  335. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/image_edit.html +0 -0
  336. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/link.html +0 -0
  337. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/table.html +0 -0
  338. /data/{lib/generators/redde/layout/templates/assets/redactor/images → app/assets/images/redde}/redactor/plugins/video.html +0 -0
  339. /data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/langs/en.js +0 -0
  340. /data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/langs/ru.js +0 -0
  341. /data/{lib/generators/redde/layout/templates/assets/redactor/javascripts → app/assets/javascripts/redde}/redactor/toolbars/default.js +0 -0
  342. /data/{lib/generators/redde/layout/templates/assets/javascripts/admin → app/assets/javascripts/redde/sortTree}/jquery.mjs.nestedSortable.js +0 -0
  343. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/list.scss +0 -0
  344. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/orders.scss +0 -0
  345. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/paginate.sass +0 -0
  346. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/pagination.scss +0 -0
  347. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/partners.scss +0 -0
  348. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/blocks/phead-tabs.sass +0 -0
  349. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/layouts/login.sass +0 -0
  350. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/layouts/sidebar.sass +0 -0
  351. /data/{lib/generators/redde/layout/templates/assets/redactor/stylesheets → app/assets/stylesheets/redde}/redactor/wym.css +0 -0
  352. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/shop/_filter.scss +0 -0
  353. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/shop/_order-sh.scss +0 -0
  354. /data/{lib/generators/redde/layout/templates/assets/stylesheets/admin → app/assets/stylesheets/redde}/shop/_pe.scss +0 -0
  355. /data/{spec/dummy/app/assets/images → app/controllers}/.keep +0 -0
  356. /data/{lib/generators/redde/layout/templates → app}/controllers/managers/registrations_controller.rb +0 -0
  357. /data/{spec/dummy/app/models → app/helpers}/.keep +0 -0
  358. /data/{spec/dummy/lib/assets → app/mailers}/.keep +0 -0
  359. /data/{spec/dummy/log → app/models}/.keep +0 -0
  360. /data/{spec/dummy/app/assets/stylesheets/application.css.scss → app/views/.keep} +0 -0
  361. /data/{lib/generators/redde/layout/templates → app/views/admin}/base/welcome.haml +0 -0
  362. /data/{lib/generators/redde/photo/templates/photos → app/views/admin/redde_photos}/destroy.js.erb +0 -0
@@ -0,0 +1,81 @@
1
+ class Admin::BaseController < ActionController::Base
2
+ layout 'admin'
3
+ before_action :authenticate_manager!
4
+ include Redde::AdminHelper
5
+ include Redde::IndexHelper
6
+
7
+ def welcome
8
+ end
9
+
10
+ def index
11
+ instance_variable_set("@#{collection}", scope)
12
+ return render 'tree' if column_names.include?('ancestry')
13
+ end
14
+
15
+ def new
16
+ instance_variable_set("@#{record}", model_name.new)
17
+ render 'edit'
18
+ end
19
+
20
+ def create
21
+ instance_variable_set("@#{record}", model_name.new(params[record.to_sym].permit!))
22
+ redirect_or_edit(instance_variable_get("@#{record}"), instance_variable_get("@#{record}").save)
23
+ end
24
+
25
+ def edit
26
+ instance_variable_set("@#{record}", model_name.find(params[:id]))
27
+ end
28
+
29
+ def update
30
+ instance_variable_set("@#{record}", model_name.find(params[:id]))
31
+ redirect_or_edit(instance_variable_get("@#{record}"), instance_variable_get("@#{record}").update(params[record.to_sym].permit!))
32
+ end
33
+
34
+ def destroy
35
+ instance_variable_set("@#{record}", model_name.find(params[:id]))
36
+ instance_variable_get("@#{record}").destroy
37
+ redirect_to send("admin_#{collection}_path"), notice: "#{model_name.model_name.human} удалена."
38
+ end
39
+
40
+ def sort
41
+ if column_names.include?('ancestry')
42
+ model_name.sort(params[:list])
43
+ else
44
+ params[:pos].each_with_index do |id, idx|
45
+ p = model_name.find(id)
46
+ p.update(position: idx)
47
+ end
48
+ end
49
+ render nothing: true
50
+ end
51
+
52
+ private
53
+
54
+ def scope
55
+ return model_name.roots.order(:position) if column_names.include?('ancestry')
56
+ scope = model_name
57
+ scope = scope.order('position') if column_names.include?('position')
58
+ scope.all.page(params[:page])
59
+ end
60
+
61
+ def redirect_or_edit(obj, saved, notice = nil, custom_url = nil)
62
+ return render 'edit' unless saved
63
+ yield if block_given?
64
+ redirect_to url_for_obj(obj, custom_url), notice: notice_for(obj, notice)
65
+ end
66
+
67
+ def notice_for(obj, notice = nil)
68
+ notice ||= default_notice
69
+ "#{obj.class.model_name.human} #{notice}."
70
+ end
71
+
72
+ def default_notice
73
+ 'сохранена'
74
+ end
75
+
76
+ def url_for_obj(obj, custom_url = nil)
77
+ return custom_url if custom_url.present?
78
+ return [:edit, :admin, obj] if params[:commit] == 'Применить'
79
+ [:admin, obj.class.model_name.plural.to_sym]
80
+ end
81
+ end
@@ -1,35 +1,39 @@
1
1
  class Admin::ManagersController < Admin::BaseController
2
2
  def index
3
- @managers = Manager.all
3
+ @managers = scope.all
4
4
  end
5
5
 
6
6
  def new
7
- @manager = Manager.new
7
+ @manager = scope.new
8
8
  render 'edit'
9
9
  end
10
10
 
11
11
  def create
12
- @manager = Manager.new(manager_params)
12
+ @manager = scope.new(manager_params)
13
13
  redirect_or_edit(@manager, @manager.save)
14
14
  end
15
15
 
16
16
  def edit
17
- @manager = Manager.find(params[:id])
17
+ @manager = scope.find(params[:id])
18
18
  end
19
19
 
20
20
  def update
21
- @manager = Manager.find(params[:id])
21
+ @manager = scope.find(params[:id])
22
22
  redirect_or_edit(@manager, @manager.update(manager_params))
23
23
  end
24
24
 
25
25
  def destroy
26
- @manager = Manager.find(params[:id])
26
+ @manager = scope.find(params[:id])
27
27
  @manager.destroy if current_manager.id != @manager.id
28
28
  redirect_to [:admin, :managers], alert: 'Администратор удален'
29
29
  end
30
30
 
31
31
  private
32
32
 
33
+ def scope
34
+ Manager
35
+ end
36
+
33
37
  def manager_params
34
38
  params[:manager].permit!
35
39
  end
@@ -0,0 +1,31 @@
1
+ class Admin::ReddePhotosController < ActionController::Base
2
+ def sort
3
+ params[:photo].each_with_index do |id, idx|
4
+ p = Redde::Photo.find(id)
5
+ p.update(position: idx)
6
+ end
7
+ render nothing: true
8
+ end
9
+
10
+ def create
11
+ parent = photo_params[:imageable_type].constantize.find(photo_params[:imageable_id])
12
+ @photo = parent.photos.build(photo_params)
13
+ if @photo.save
14
+ render(partial: 'photo', object: @photo)
15
+ else
16
+ render nothing: true, status: 422
17
+ end
18
+ end
19
+
20
+ def destroy
21
+ @photo = Redde::Photo.find(params[:id])
22
+ @photo.destroy
23
+ render 'admin/redde_photos/destroy'
24
+ end
25
+
26
+ private
27
+
28
+ def photo_params
29
+ params.require(:redde_photo).permit!
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ class Admin::SystemCommandsController < Admin::BaseController
2
+ def index
3
+ end
4
+
5
+ def update
6
+ return redirect_to [:admin, :system_commands], alert: 'Необходимо указать команду' unless params[:id].present?
7
+ return redirect_to [:admin, :system_commands], notice: 'Недопустимый тип команды' unless Redde::SystemCommand::ALLOWED_ACTIONS.include?(params[:id].to_s)
8
+ Redde::SystemCommand.execute(params[:id])
9
+ redirect_to [:admin, :system_commands], notice: 'Команда отправлена'
10
+ end
11
+ end
@@ -0,0 +1,106 @@
1
+ class ReddeFormBuilder < ActionView::Helpers::FormBuilder
2
+ delegate :render, :content_tag, :tag, :link_to, :concat, :capture, to: :@template
3
+ # delegate :debug, :render, :content_tag, :tag, :link_to, :concat, :capture, to: :@template
4
+
5
+ def redde_field(name, *args)
6
+ label(name)
7
+ case object.class.columns.detect { |column| column.name == name.to_s }.type
8
+ when :text then redde_text_area(name, *args)
9
+ when :boolean then redde_check_box(name, *args)
10
+ when :time then redde_date_time(name, *args)
11
+ else
12
+ redde_text_field(name, *args)
13
+ end
14
+ end
15
+
16
+ def redde_select(name, choices, opts = {}, *args)
17
+ options = args.extract_options!
18
+ options[:class] = assign_class(['sel', 'redde-form__sel'], options[:class])
19
+ wrap(name, select(name, choices, opts, options.except(:wrap, :cell)), options)
20
+ end
21
+
22
+ def redde_date_time(name, *args)
23
+ options = args.extract_options!
24
+ content_tag :tr, class: options[:wrapper_class] do
25
+ content_tag(:td, smart_label(name), class: 'redde-form__cell _lbl') + content_tag(:td, datetime_select(name, options))
26
+ end
27
+ end
28
+
29
+ def redde_check_box(name, *args)
30
+ options = args.extract_options!
31
+ content_tag :tr, class: options[:wrapper_class] do
32
+ concat tag :td
33
+ concat content_tag :td, check_box(name, options) + " " + smart_label(name), class: 'redde-form__cell'
34
+ end
35
+ end
36
+
37
+ def redde_text_field(name, *args)
38
+ options = args.extract_options!
39
+ options[:class] = assign_class(['inp', 'redde-form__inp'], options[:class])
40
+ wrap(name, text_field(name, options), options)
41
+ end
42
+
43
+ def redde_text_area(name, *args)
44
+ options = args.extract_options!
45
+ content_tag :tr, class: options[:wrapper_class] do
46
+ content_tag :td, colspan: 2 do
47
+ smart_label(name) + tag(:br) + text_area(name, options)
48
+ end
49
+ end
50
+ end
51
+
52
+ def redde_submit(text, opts)
53
+ css_class = ['sbm']
54
+ css_class << opts[:class] if opts[:class].present?
55
+ css_class << '_save' if text == 'Сохранить'
56
+ button(text, class: css_class, value: text, name: :commit)
57
+ end
58
+
59
+ def redde_submits *args, &block
60
+ content_tag :div, class: 'redde-form__actions' do
61
+ concat redde_submit('Сохранить', class: 'redde-form__sbm')
62
+ concat redde_submit('Применить', class: 'redde-form__sbm')
63
+ concat capture(&block) if block_given?
64
+ end
65
+ end
66
+
67
+ def error_messages(attrs = {})
68
+ if object.errors.full_messages.any?
69
+ render 'admin/redde/validate', { f: self, attrs: attrs }
70
+ end
71
+ end
72
+
73
+ def wrap(name = nil, *args, &block)
74
+ options = args.extract_options!
75
+ content = block_given? ? capture(&block) : args[0]
76
+ content_tag( :tr, content_tag( :td, smart_label(name), class: ['redde-form__cell', '_label', options[:cell]].flatten.compact ) + content_tag( :td, content, class: ['redde-form__cell', options[:cell]] ), class: ['redde-form__row', ('_error' if object.errors[name].any?), options[:wrap]].flatten.compact )
77
+ end
78
+
79
+ def fieldset(name, *args, &block)
80
+ options = args.extract_options!
81
+ content_tag(:tbody, class: options[:class]) do
82
+ concat content_tag(:tr, content_tag(:th, name, colspan: 2, class: 'redde-form__thead'))
83
+ concat capture(&block)
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def assign_class(base, added)
90
+ base = [base] if base.is_a? String
91
+ if added.present?
92
+ base << added if added.is_a? String
93
+ base += added if added.is_a? Array
94
+ end
95
+ base
96
+ end
97
+
98
+ def smart_label(name)
99
+ required = object.class.validators_on(name).any? { |v| v.is_a? ActiveModel::Validations::PresenceValidator }
100
+ label(name, nil, class: ["redde-form__label", ("_required" if required)])
101
+ end
102
+
103
+ def objectify_options(options)
104
+ super.except(:wrap, :cell)
105
+ end
106
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ module Redde::AdminHelper
3
+ def command_link(name, action, confirm = nil)
4
+ options = { method: :put }
5
+ options[:data] = { confirm: confirm } if confirm.present?
6
+ link_to name, admin_system_command_path(action), options
7
+ end
8
+
9
+ def sidebar_link(title, path = [], additional_names = [])
10
+ additional_names = [additional_names] unless additional_names.is_a?(Array)
11
+ active_names = additional_names + [path.try(:last) || '']
12
+ active_names.map!(&:to_s)
13
+ classes = ['sidebar__link']
14
+ classes << '_active' if active_names.include?(controller_name)
15
+ link_to title, path, class: classes
16
+ end
17
+
18
+ def photoable(parent)
19
+ render('admin/redde_photos/photos', parent: parent)
20
+ end
21
+
22
+ def tsingular(model)
23
+ model.model_name.human
24
+ end
25
+
26
+ def taccusative(model_name)
27
+ t("activerecord.models.#{model_name}.acc")
28
+ end
29
+
30
+ def tplural(model)
31
+ model.model_name.human(count: 'other')
32
+ end
33
+ end
@@ -0,0 +1,59 @@
1
+ module Redde::FormHelper
2
+ # Override the default ActiveRecordHelper behaviour of wrapping the input.
3
+ # This gets taken care of semantically by adding an error class to the wrapper tag
4
+ # containing the input.
5
+ #
6
+ FIELD_ERROR_PROC = proc do |html_tag, instance_tag|
7
+ html_tag
8
+ end
9
+
10
+ def redde_form_for(object, options = {}, &block)
11
+ options = make_options(options)
12
+ options[:builder] ||= ReddeFormBuilder
13
+
14
+ with_clean_form_field_error_proc do
15
+ form_for(object, options) do |f|
16
+ concat f.error_messages
17
+ concat content_tag(:table, capture(f, &block), class: 'redde-form__tbl')
18
+ concat f.redde_submits
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ def redde_fields_for(record_name, record_object = nil, options = {}, &block)
25
+ options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
26
+ options[:builder] ||= ReddeFormBuilder
27
+
28
+ with_clean_form_field_error_proc do
29
+ fields_for(record_name, record_object, options, &block)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def make_options(options)
36
+ return options.merge(html: { class: 'redde-form' }) unless options.key?(:html)
37
+ unless options[:html].key?(:class)
38
+ options[:html][:class] = 'redde-form'
39
+ return options
40
+ end
41
+ if options[:html][:class].is_a? String
42
+ options[:html][:class] += ' redde-form'
43
+ elsif options[:html][:class].is_a? Array
44
+ options[:html][:class] << 'redde-form'
45
+ end
46
+ options
47
+ end
48
+
49
+ def with_clean_form_field_error_proc
50
+ default_field_error_proc = ::ActionView::Base.field_error_proc
51
+ begin
52
+ ::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
53
+ yield
54
+ ensure
55
+ ::ActionView::Base.field_error_proc = default_field_error_proc
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+ module Redde::IndexHelper
3
+ IGNORED_COLUMNS = %w(ancestry position created_at updated_at id)
4
+ def title_for(item)
5
+ return item.title if column_names.include?('title')
6
+ return item.name if column_names.include('name')
7
+ model_name.columns.select { |i| i.type == :string }.first
8
+ end
9
+
10
+ def collection
11
+ controller_name
12
+ end
13
+
14
+ def record
15
+ controller_name.singularize
16
+ end
17
+
18
+ def model_name
19
+ record.camelize.constantize
20
+ end
21
+
22
+ def column_names
23
+ model_name
24
+ .column_names
25
+ .reject { |c| excluded_column_names.include?(c) }
26
+ .sort { |a, b| sort_priority(a) <=> sort_priority(b) }
27
+ end
28
+
29
+ def form_column_names
30
+ column_names.select { |i| !IGNORED_COLUMNS.include?(i) }
31
+ end
32
+
33
+ def sort_priority(column_name)
34
+ case column_name
35
+ when 'position' then 1
36
+ when 'visible' then 2
37
+ when 'name' then 3
38
+ when 'title' then 3
39
+ else 5
40
+ end
41
+ end
42
+
43
+ def excluded_column_names
44
+ %w(id created_at updated_at)
45
+ end
46
+
47
+ def list_table_options
48
+ {}.tap do |options|
49
+ if column_names.include? 'position'
50
+ options['class'] = 'sortable'
51
+ options['data-sortable'] = true
52
+ end
53
+ end
54
+ end
55
+
56
+ def sort_table_options(item)
57
+ {}.tap do |options|
58
+ options[:id] = "pos_#{item.id}" if column_names.include?('position')
59
+ end
60
+ end
61
+ end
@@ -1,4 +1,4 @@
1
- module Redde::Layout
1
+ module Redde::Layouts
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  included do
@@ -0,0 +1,5 @@
1
+ module Redde::Photoable
2
+ extend ActiveSupport::Concern
3
+
4
+
5
+ end
@@ -1,10 +1,13 @@
1
- require 'redde/url_generator'
2
-
3
1
  module Redde::Sluggable
4
2
  extend ActiveSupport::Concern
5
3
 
6
4
  included do
7
- validates :slug, format: { with: /\A[A-z0-9_-]*\z/i, message: 'имеет неверный формат, разрешены английские символы, знак подчеркивания "_" и дефис "-"'}, presence: true
5
+ validates :slug,
6
+ format: {
7
+ with: /\A[A-z0-9_-]*\z/i,
8
+ message: 'имеет неверный формат, разрешены английские символы, знак подчеркивания "_" и дефис "-"'
9
+ },
10
+ presence: true
8
11
  before_validation :set_slug
9
12
  end
10
13
 
@@ -0,0 +1,40 @@
1
+ module Redde::TreeSortable
2
+ def sort(list)
3
+ Sorter.new(list, self).sort
4
+ end
5
+
6
+ class Sorter
7
+ attr_accessor :list, :klass
8
+ def initialize(list, klass)
9
+ @list = list
10
+ @klass = klass
11
+ end
12
+
13
+ def sort
14
+ tree.each do |parent, cats|
15
+ i = 1
16
+ if parent == 'root'
17
+ pid = nil
18
+ else
19
+ pid = klass.find(parent).id
20
+ end
21
+ cats.each do |cat|
22
+ klass.find(cat).update(parent_id: pid, position: i)
23
+ i += 1
24
+ end
25
+ end
26
+ end
27
+
28
+ def tree
29
+ temp = {}
30
+ list.each do |key, value|
31
+ if temp[value]
32
+ temp[value] << key
33
+ else
34
+ temp[value] = [key]
35
+ end
36
+ end
37
+ temp
38
+ end
39
+ end
40
+ end
@@ -1,24 +1,24 @@
1
1
  module Redde::WithPhoto
2
2
  extend ActiveSupport::Concern
3
3
 
4
- QUERY = 'imageable_id = :id AND imageable_type = :type OR token in (:tokens)'
4
+ QUERY = 'imageable_id = :id AND imageable_type = :type OR token in (:tokens)'.freeze
5
5
 
6
6
  included do
7
7
  attr_accessor :photo_tokens
8
- has_many :photos, dependent: :destroy, as: :imageable
8
+ has_many :photos, class_name: 'Redde::Photo', dependent: :destroy, as: :imageable
9
9
  after_create :assign_photos
10
10
  end
11
11
 
12
12
  def all_photos
13
- Photo.where(QUERY, id: self.id, type: self.class.name, tokens: tokens)
13
+ Redde::Photo.where(QUERY, id: id, type: self.class.name, tokens: tokens)
14
14
  end
15
15
 
16
16
  def assign_photos
17
- Photo.where(token: tokens).update_all(imageable_attributes)
17
+ Redde::Photo.where(token: tokens).update_all(imageable_attributes)
18
18
  end
19
19
 
20
20
  def imageable_attributes
21
- { imageable_id: self.id, imageable_type: self.class.name, token: nil }
21
+ { imageable_id: id, imageable_type: self.class.name, token: nil }
22
22
  end
23
23
 
24
24
  def tokens
@@ -0,0 +1,16 @@
1
+ class Redde::Photo < ActiveRecord::Base
2
+ mount_uploader :src, PhotoUploader
3
+ self.table_name = 'redde_photos'
4
+
5
+ belongs_to :imageable, polymorphic: true
6
+ default_scope { order(:position) }
7
+ before_save :set_token, unless: :persisted_link?
8
+
9
+ def set_token
10
+ self.token = SecureRandom.uuid unless token.present?
11
+ end
12
+
13
+ def persisted_link?
14
+ imageable_type.present? && imageable_id.present?
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ class Redde::SystemCommand
2
+ attr_accessor :action
3
+
4
+ ALLOWED_ACTIONS = %w(cache unicorn sidekiq reboot).freeze
5
+
6
+ def self.execute(action)
7
+ new(action).process
8
+ end
9
+
10
+ def initialize(action)
11
+ @action = action
12
+ Logger.new('log/commands.log').info "Received #{action} command"
13
+ fail "Unsopported command #{action}. Allowed commands: #{ALLOWED_ACTIONS.join(', ')}" unless ALLOWED_ACTIONS.include?(action.to_s)
14
+ end
15
+
16
+ def process
17
+ send(action)
18
+ end
19
+
20
+ private
21
+
22
+ def cache
23
+ `sudo service memcached restart`
24
+ end
25
+
26
+ def unicorn
27
+ `sudo service #{project_name} restart`
28
+ end
29
+
30
+ def sidekiq
31
+ system("sudo kill `cat #{Rails.root}/tmp/pids/sidekiq.pid` &&
32
+ cd #{Rails.root} &&
33
+ RAILS_ENV=#{Rails.env} bundle exec sidekiq -C config/sidekiq.yml -L log/sidekiq.log -d")
34
+ end
35
+
36
+ def reboot
37
+ `sudo reboot`
38
+ end
39
+
40
+ def project_name
41
+ Rails.root.to_s.gsub('/current', '').split('/').last
42
+ end
43
+ end
@@ -11,9 +11,13 @@ class Redde::UrlGenerator
11
11
  end
12
12
 
13
13
  def translitted_name
14
- Russian.translit(name).gsub(' ', '-')
15
- .gsub(/[^\x00-\x7F]+/, '').gsub(/[^\w_ \-]+/i, '')
16
- .gsub(/[ \-]+/i, '-').gsub(/^\-|\-$/i, '')
14
+ Russian
15
+ .translit(name)
16
+ .tr(' ', '-')
17
+ .gsub(/[^\x00-\x7F]+/, '')
18
+ .gsub(/[^\w_ \-]+/i, '')
19
+ .gsub(/[ \-]+/i, '-')
20
+ .gsub(/^\-|\-$/i, '')
17
21
  end
18
22
 
19
23
  def formatted_name
@@ -1,8 +1,8 @@
1
+ # encoding: utf-8
2
+
1
3
  class PhotoUploader < CarrierWave::Uploader::Base
2
4
  # Include RMagick or MiniMagick support:
3
- include CarrierWave::RMagick
4
- # include CarrierWave::MiniMagick
5
-
5
+ include CarrierWave::MiniMagick
6
6
  # Choose what kind of storage to use for this uploader:
7
7
  storage :file
8
8
  # storage :fog
@@ -44,7 +44,7 @@ class PhotoUploader < CarrierWave::Uploader::Base
44
44
  # end
45
45
 
46
46
  version :admin do
47
- process resize_and_pad: [119, 119, :transparent, ::Magick::CenterGravity]
47
+ process resize_and_pad: [119, 119, :transparent]
48
48
  end
49
49
 
50
50
  # Override the filename of the uploaded files:
@@ -0,0 +1,10 @@
1
+ %li.sort-tree__item(data-sort-tree-item){id: "list_#{item.id}"}
2
+ .sort-tree__wrap(data-sort-tree-tolerance)
3
+ = link_to title_for(item), [:edit, :admin, item], class: 'sort-tree__link'
4
+ - if item.is_childless?
5
+ = surround '(', ')' do
6
+ = link_to 'На сайт', '/', target: '_blank'
7
+ .sort-tree__controls
8
+ = link_to 'Удал', [:admin, item], class: 'a_del sort-tree__btn', data: { confirm: 'Точно удалить?' }, method: 'delete'
9
+ - if item.has_children?
10
+ %ol= render partial: 'tree_item', collection: item.children.order(:position), as: :item
@@ -0,0 +1,21 @@
1
+ - item = instance_variable_get("@#{record}")
2
+ - content_for :page_header do
3
+ .page-header__title
4
+ - if item.new_record?
5
+ Добавить #{taccusative(record)}
6
+ - else
7
+ Редактировать #{taccusative(record)}
8
+ = link_to 'Назад', { action: :index }, class: 'btn page-header__btn'
9
+
10
+ = photoable(item) if item.class.reflect_on_association(:photos)
11
+
12
+ = redde_form_for [:admin, item] do |f|
13
+ - form_column_names.each do |column|
14
+ = f.redde_field column.to_sym
15
+ - if column_names.include?('ancestry')
16
+ = f.redde_select :parent_id, options_from_collection_for_select(f.object.class.all, :id, :title, f.object.parent_id), { include_blank: '- Выбрать -' }
17
+ -# %div= render 'redditor/admin/page', { f: f } if @article.methods.include?(:page)
18
+
19
+ -# проверить и написать правильное условие
20
+ -# f.object.class.reflect_on_association(:seo)
21
+ =# render 'admin/seos/block', { f: f } if f.object.methods.include?(:seo)