redde 0.1.18 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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)