adminpanel 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +13 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +34 -0
  5. data/Rakefile +1 -0
  6. data/adminpanel.gemspec +32 -0
  7. data/app/assets/fonts/.DS_Store +0 -0
  8. data/app/assets/fonts/FontAwesome.otf +0 -0
  9. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  10. data/app/assets/fonts/fontawesome-webfont.svg +255 -0
  11. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  12. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  13. data/app/assets/images/adminpanel/alpha.png +0 -0
  14. data/app/assets/images/adminpanel/arrows-active.png +0 -0
  15. data/app/assets/images/adminpanel/arrows-normal.png +0 -0
  16. data/app/assets/images/adminpanel/bgnoise.png +0 -0
  17. data/app/assets/images/adminpanel/crop.gif +0 -0
  18. data/app/assets/images/adminpanel/dialogs.png +0 -0
  19. data/app/assets/images/adminpanel/dotted.png +0 -0
  20. data/app/assets/images/adminpanel/favicon.ico +0 -0
  21. data/app/assets/images/adminpanel/glyphicons-halflings-white.png +0 -0
  22. data/app/assets/images/adminpanel/glyphicons-halflings.png +0 -0
  23. data/app/assets/images/adminpanel/gritter-light.png +0 -0
  24. data/app/assets/images/adminpanel/gritter-long.png +0 -0
  25. data/app/assets/images/adminpanel/gritter.png +0 -0
  26. data/app/assets/images/adminpanel/hue.png +0 -0
  27. data/app/assets/images/adminpanel/icons-big.png +0 -0
  28. data/app/assets/images/adminpanel/icons-small.png +0 -0
  29. data/app/assets/images/adminpanel/ie-spacer.gif +0 -0
  30. data/app/assets/images/adminpanel/odinn.jpg +0 -0
  31. data/app/assets/images/adminpanel/pattern.jpg +0 -0
  32. data/app/assets/images/adminpanel/pattern_transp.png +0 -0
  33. data/app/assets/images/adminpanel/progress.gif +0 -0
  34. data/app/assets/images/adminpanel/quicklook-bg.png +0 -0
  35. data/app/assets/images/adminpanel/quicklook-icons.png +0 -0
  36. data/app/assets/images/adminpanel/rails.png +0 -0
  37. data/app/assets/images/adminpanel/resize.png +0 -0
  38. data/app/assets/images/adminpanel/saturation.png +0 -0
  39. data/app/assets/images/adminpanel/select2.png +0 -0
  40. data/app/assets/images/adminpanel/select2x2.png +0 -0
  41. data/app/assets/images/adminpanel/sidebar.png +0 -0
  42. data/app/assets/images/adminpanel/sort_asc.png +0 -0
  43. data/app/assets/images/adminpanel/sort_asc_disabled.png +0 -0
  44. data/app/assets/images/adminpanel/sort_both.png +0 -0
  45. data/app/assets/images/adminpanel/sort_desc.png +0 -0
  46. data/app/assets/images/adminpanel/sort_desc_disabled.png +0 -0
  47. data/app/assets/images/adminpanel/spinner-mini.gif +0 -0
  48. data/app/assets/images/adminpanel/spinner.gif +0 -0
  49. data/app/assets/images/adminpanel/toolbar.png +0 -0
  50. data/app/assets/javascripts/adminpanel/bootstrap-datepicker.js +1159 -0
  51. data/app/assets/javascripts/adminpanel/bootstrap-timepicker.js +803 -0
  52. data/app/assets/javascripts/adminpanel/bootstrap.js +2170 -0
  53. data/app/assets/javascripts/adminpanel/imagesloaded.js +13 -0
  54. data/app/assets/javascripts/adminpanel/init_editor.js +28 -0
  55. data/app/assets/javascripts/adminpanel/jquery.dataTables.min.js +155 -0
  56. data/app/assets/javascripts/adminpanel/jquery.facybox.js +395 -0
  57. data/app/assets/javascripts/adminpanel/jquery.masonry.min.js +10 -0
  58. data/app/assets/javascripts/adminpanel/jquery.slimscroll.min.js +14 -0
  59. data/app/assets/javascripts/adminpanel/medium-editor.js +703 -0
  60. data/app/assets/javascripts/adminpanel/products.js +14 -0
  61. data/app/assets/javascripts/adminpanel/realm.js +90 -0
  62. data/app/assets/javascripts/adminpanel/tables.js +126 -0
  63. data/app/assets/javascripts/application-admin.js +16 -0
  64. data/app/assets/stylesheets/adminpanel/_clearfix.css.scss +8 -0
  65. data/app/assets/stylesheets/adminpanel/alertify.css +242 -0
  66. data/app/assets/stylesheets/adminpanel/bootstrap.css +6103 -0
  67. data/app/assets/stylesheets/adminpanel/colorpicker.css +7 -0
  68. data/app/assets/stylesheets/adminpanel/datepicker.css +9 -0
  69. data/app/assets/stylesheets/adminpanel/elfinder.min.css +59 -0
  70. data/app/assets/stylesheets/adminpanel/facybox.css +146 -0
  71. data/app/assets/stylesheets/adminpanel/font-awesome.min.css +34 -0
  72. data/app/assets/stylesheets/adminpanel/fullcalendar.css +618 -0
  73. data/app/assets/stylesheets/adminpanel/fullcalendar.print.css +61 -0
  74. data/app/assets/stylesheets/adminpanel/medium-editor.css.scss +1 -0
  75. data/app/assets/stylesheets/adminpanel/select2.css +524 -0
  76. data/app/assets/stylesheets/adminpanel/theme.css +1563 -0
  77. data/app/assets/stylesheets/adminpanel/timepicker.css +82 -0
  78. data/app/assets/stylesheets/application-admin.css +14 -0
  79. data/app/controllers/adminpanel/application_controller.rb +18 -0
  80. data/app/controllers/adminpanel/categories_controller.rb +41 -0
  81. data/app/controllers/adminpanel/galleries_controller.rb +45 -0
  82. data/app/controllers/adminpanel/products_controller.rb +87 -0
  83. data/app/controllers/adminpanel/sections_controller.rb +46 -0
  84. data/app/controllers/adminpanel/sessions_controller.rb +26 -0
  85. data/app/controllers/adminpanel/users_controller.rb +85 -0
  86. data/app/helpers/adminpanel/application_helper.rb +73 -0
  87. data/app/helpers/custom_form_builder.rb +219 -0
  88. data/app/models/adminpanel/category.rb +7 -0
  89. data/app/models/adminpanel/contact.rb +25 -0
  90. data/app/models/adminpanel/gallery.rb +10 -0
  91. data/app/models/adminpanel/image.rb +6 -0
  92. data/app/models/adminpanel/product.rb +24 -0
  93. data/app/models/adminpanel/section.rb +16 -0
  94. data/app/models/adminpanel/user.rb +35 -0
  95. data/app/uploaders/adminpanel/gallery_uploader.rb +56 -0
  96. data/app/uploaders/adminpanel/image_uploader.rb +63 -0
  97. data/app/uploaders/adminpanel/section_uploader.rb +56 -0
  98. data/app/views/adminpanel/.DS_Store +0 -0
  99. data/app/views/adminpanel/categories/edit.html.erb +18 -0
  100. data/app/views/adminpanel/categories/index.html.erb +55 -0
  101. data/app/views/adminpanel/categories/new.html.erb +18 -0
  102. data/app/views/adminpanel/categories/show.html.erb +0 -0
  103. data/app/views/adminpanel/galleries/create.html.erb +2 -0
  104. data/app/views/adminpanel/galleries/delete.html.erb +2 -0
  105. data/app/views/adminpanel/galleries/edit.html.erb +26 -0
  106. data/app/views/adminpanel/galleries/index.html.erb +60 -0
  107. data/app/views/adminpanel/galleries/new.html.erb +18 -0
  108. data/app/views/adminpanel/galleries/show.html.erb +18 -0
  109. data/app/views/adminpanel/galleries/update.html.erb +2 -0
  110. data/app/views/adminpanel/products/.DS_Store +0 -0
  111. data/app/views/adminpanel/products/_image_fields.html.erb +24 -0
  112. data/app/views/adminpanel/products/_product_form.html.erb +31 -0
  113. data/app/views/adminpanel/products/edit.html.erb +10 -0
  114. data/app/views/adminpanel/products/index.html.erb +57 -0
  115. data/app/views/adminpanel/products/new.html.erb +10 -0
  116. data/app/views/adminpanel/products/show.html.erb +61 -0
  117. data/app/views/adminpanel/sections/_image_fields.html.erb +24 -0
  118. data/app/views/adminpanel/sections/create.html.erb +2 -0
  119. data/app/views/adminpanel/sections/destroy.html.erb +2 -0
  120. data/app/views/adminpanel/sections/edit.html.erb +40 -0
  121. data/app/views/adminpanel/sections/index.html.erb +38 -0
  122. data/app/views/adminpanel/sections/new.html.erb +27 -0
  123. data/app/views/adminpanel/sections/show.html.erb +28 -0
  124. data/app/views/adminpanel/sections/update.html.erb +2 -0
  125. data/app/views/adminpanel/sessions/new.html.erb +26 -0
  126. data/app/views/adminpanel/users/_form.html.erb +33 -0
  127. data/app/views/adminpanel/users/edit.html.erb +22 -0
  128. data/app/views/adminpanel/users/index.html.erb +55 -0
  129. data/app/views/adminpanel/users/new.html.erb +22 -0
  130. data/app/views/adminpanel/users/show.html.erb +21 -0
  131. data/app/views/layouts/_shim.html.erb +4 -0
  132. data/app/views/layouts/_side_menu.html.erb +45 -0
  133. data/app/views/layouts/_top_bar.html.erb +43 -0
  134. data/app/views/layouts/admin.html.erb +45 -0
  135. data/app/views/shared/_breadcrumb.html.erb +6 -0
  136. data/app/views/shared/_error_messages.html.erb +17 -0
  137. data/config/locales/en.yml +5 -0
  138. data/config/locales/es.yml +202 -0
  139. data/config/routes.rb +11 -0
  140. data/lib/adminpanel.rb +8 -0
  141. data/lib/adminpanel/engine.rb +5 -0
  142. data/lib/adminpanel/version.rb +3 -0
  143. metadata +349 -0
@@ -0,0 +1,73 @@
1
+ module Adminpanel
2
+ module ApplicationHelper
3
+ def custom_form_for(name, *args, &block)
4
+ options = args.extract_options!
5
+ options.reverse_merge! :builder => CustomFormBuilder, :html => { :class => "form-horizontal" }
6
+
7
+ form_for(name, *(args << options), &block)
8
+ end
9
+
10
+ def full_title(page_title)
11
+ base_title = "Super admin"
12
+ if page_title.empty?
13
+ base_title
14
+ else
15
+ "#{page_title} | #{base_title}"
16
+ end
17
+ end
18
+
19
+ def is_current_section?(*controller)
20
+ controller.include?(params[:controller]) ? 'active' : nil
21
+ end
22
+
23
+ def section_is_login(section_name)
24
+ section_name.downcase == 'login'
25
+ end
26
+
27
+ def link_to_add_fields(name, f, association, model_name)
28
+ new_object = f.object.send(association).klass.new
29
+ id = new_object.object_id
30
+ fields = f.fields_for(association, new_object, :child_index => id) do |builder|
31
+ render(association.to_s.singularize + "_fields", :f => builder, :model_name => model_name)
32
+ end
33
+ link_to(content_tag(:div, content_tag(:button,
34
+ content_tag(:h6, name, :id => "add-estimate-button"),
35
+ :class => "btn btn-success btn-mini"), :class => "mws-form-row"),
36
+ '#', :class => "add_fields", :data => {:id => id, :fields => fields.gsub("\n", "")})
37
+ end
38
+
39
+ def sign_in(user)
40
+ cookies.permanent[:remember_token] = user.remember_token
41
+ self.current_user = user
42
+ end
43
+
44
+ def signed_in?
45
+ !current_user.nil?
46
+ end
47
+
48
+ def current_user=(user)
49
+ @current_user = user
50
+ end
51
+
52
+ def current_user
53
+ @current_user ||= User.find_by_remember_token(cookies[:remember_token])
54
+ end
55
+
56
+ def sign_out
57
+ self.current_user = nil
58
+ cookies.delete(:remember_token)
59
+ end
60
+
61
+ def initialize_breadcrumb
62
+ @breadcrumb ||= [:title => 'Inicio', :url => root_url]
63
+ end
64
+
65
+ def breadcrumb_add(title, url)
66
+ initialize_breadcrumb << { :title => title, :url => url }
67
+ end
68
+
69
+ def render_breadcrumb(divider)
70
+ render :partial => 'shared/breadcrumb', :locals => { :nav => initialize_breadcrumb, :divider => divider }
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,219 @@
1
+ class CustomFormBuilder < ActionView::Helpers::FormBuilder
2
+
3
+ alias_method :text_field_original, :text_field
4
+ alias_method :radio_button_original, :radio_button
5
+ alias_method :checkbox_original, :check_box
6
+
7
+ def text_field(name, *args)
8
+ options = args.extract_options!
9
+
10
+ options.reverse_merge! :class => "span7"
11
+ options.reverse_merge! :label => name
12
+ label = options[:label]
13
+ options.delete(:label)
14
+
15
+ @template.content_tag :div, :class => "control-group" do
16
+ @template.content_tag(:label, label, :class => "control-label") +
17
+ @template.content_tag(:div, super(name, *args << options), :class => "controls")
18
+ end
19
+ end
20
+
21
+ def custom_file_field(name, *args)
22
+ options = args.extract_options!
23
+
24
+ options.reverse_merge! :class => "span7"
25
+ options.reverse_merge! :label => name
26
+ label = options[:label]
27
+ options.delete(:label)
28
+
29
+ @template.content_tag :div, :class => "control-group" do
30
+ @template.content_tag(:label, label, :class => "control-label") +
31
+ @template.content_tag(:div, file_field(name, *args << options), :class => "controls")
32
+ end
33
+ end
34
+
35
+ def radio_button_group(name, buttons, options)
36
+
37
+ options.reverse_merge! :label => name
38
+ options.reverse_merge! :html => {}
39
+ output = ""
40
+
41
+ buttons.each do |b|
42
+ output += @template.content_tag(:label, radio_button_original(name, b, options[:html]) + b.capitalize, :class => "radio")
43
+ end
44
+
45
+ @template.content_tag :div, :class => "control-group" do
46
+ @template.content_tag(:label, options[:label], :class => "control-label") +
47
+ @template.content_tag(:div, output, { :class => "controls"}, false)
48
+ end
49
+ end
50
+
51
+ def check_box(name, *args)
52
+ options = args.extract_options!
53
+
54
+ options.reverse_merge! :class => "span7"
55
+ options.reverse_merge! :label => name
56
+ options.reverse_merge! :include_blank => "(Seleccione por favor)";
57
+ label = options[:label]
58
+ options.delete(:label)
59
+
60
+ @template.content_tag(:label, super(name, *args) + label, :class => "checkbox")
61
+ end
62
+
63
+ def select(name, select_options, *args)
64
+ options = args.extract_options!
65
+
66
+ options.reverse_merge! :class => "span7"
67
+ options.reverse_merge! :label => name
68
+ options.reverse_merge! :include_blank => "(Seleccione por favor)";
69
+ label = options[:label]
70
+ options.delete(:label)
71
+
72
+ @template.content_tag :div, :class => "control-group" do
73
+ @template.content_tag(:label, label, :class => "control-label") +
74
+ @template.content_tag(:div, super(name, select_options, *args << options), :class => "controls")
75
+ end
76
+ end
77
+
78
+ def number_field(name, *args)
79
+ options = args.extract_options!
80
+
81
+ options.reverse_merge! :class => "span5"
82
+ options.reverse_merge! :label => name
83
+ label = options[:label]
84
+ options.delete(:label)
85
+
86
+ @template.content_tag :div, :class => "control-group" do
87
+ @template.content_tag(:label, label, :class => "control-label") +
88
+ @template.content_tag(:div, super(name, *args << options), :class => "controls")
89
+ end
90
+ end
91
+
92
+ def password_field(name, *args)
93
+ options = args.extract_options!
94
+
95
+ options.reverse_merge! :class => "span7"
96
+ options.reverse_merge! :label => name
97
+ label = options[:label]
98
+ options.delete(:label)
99
+
100
+ @template.content_tag :div, :class => "control-group" do
101
+ @template.content_tag(:label, label, :class => "control-label") +
102
+ @template.content_tag(:div, super(name, *args << options), :class => "controls")
103
+ end
104
+ end
105
+
106
+ def text_area(name, *args)
107
+ options = args.extract_options!
108
+
109
+ options.reverse_merge! :class => "span7"
110
+ options.reverse_merge! :rows => "10"
111
+ options.reverse_merge! :label => name
112
+ label = options[:label]
113
+ options.delete(:label)
114
+
115
+ @template.content_tag :div, :class => "control-group" do
116
+ @template.content_tag(:label, label, :class => "control-label") +
117
+ @template.content_tag(:div, super(name, *args << options), :class => "controls")
118
+ end
119
+ end
120
+
121
+ def submit(name, *args)
122
+ options = args.extract_options!
123
+
124
+ options.reverse_merge! :class => "btn btn-primary"
125
+ super(name, *args << options)
126
+ end
127
+
128
+ def date_picker(name, *args)
129
+
130
+ options = args.extract_options!
131
+
132
+ options.reverse_merge! :value => Time.now.strftime("%d-%m-%Y")
133
+ options.reverse_merge! :label => name
134
+ label = options[:label]
135
+ options.delete(:label)
136
+
137
+ @template.content_tag :div, :class => "control-group" do
138
+ @template.content_tag(:label, label, :class => "control-label") +
139
+ @template.content_tag(
140
+ :div,
141
+ @template.content_tag(
142
+ :div,
143
+ text_field_original(name, *args << options) +
144
+ @template.content_tag(
145
+ :span,
146
+ @template.content_tag(
147
+ :i,
148
+ nil,
149
+ :class => "icon-th"
150
+ ),
151
+ :class => "add-on"
152
+ ),
153
+ {
154
+ :class => "input-append date span5 datepicker datepicker-basic",
155
+ :data => {
156
+ :date_format => "dd-mm-yyyy",
157
+ :date => options[:value]
158
+ }
159
+ }
160
+ ),
161
+ :class => "controls"
162
+ )
163
+ end
164
+ end
165
+
166
+ def prepend_field(name, *args)
167
+
168
+ options = args.extract_options!
169
+
170
+ options.reverse_merge! :label => name
171
+ label = options[:label]
172
+ options.delete(:label)
173
+
174
+ options.reverse_merge! :symbol => "#"
175
+ symbol = options[:symbol]
176
+ options.delete(:symbol)
177
+
178
+ @template.content_tag :div, :class => "control-group" do
179
+ @template.content_tag(:label, label, :class => "control-label") +
180
+ @template.content_tag(
181
+ :div,
182
+ @template.content_tag(
183
+ :div,
184
+ @template.content_tag(:span, symbol, :class => "add-on") +
185
+ text_field_original(name, *args << options),
186
+ :class => "input-prepend"
187
+ ),
188
+ :class => "controls"
189
+ )
190
+ end
191
+ end
192
+
193
+ def append_field(name, *args)
194
+
195
+ options = args.extract_options!
196
+
197
+ options.reverse_merge! :label => name
198
+ label = options[:label]
199
+ options.delete(:label)
200
+
201
+ options.reverse_merge! :symbol => "#"
202
+ symbol = options[:symbol]
203
+ options.delete(:symbol)
204
+
205
+ @template.content_tag :div, :class => "control-group" do
206
+ @template.content_tag(:label, label, :class => "control-label") +
207
+ @template.content_tag(
208
+ :div,
209
+ @template.content_tag(
210
+ :div,
211
+ text_field_original(name, *args << options) +
212
+ @template.content_tag(:span, symbol, :class => "add-on"),
213
+ :class => "input-append"
214
+ ),
215
+ :class => "controls"
216
+ )
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,7 @@
1
+ module Adminpanel
2
+ class Category < ActiveRecord::Base
3
+ attr_accessible :name
4
+
5
+ validates_presence_of :name
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ module Adminpanel
2
+ class Contact
3
+ include ActiveModel::Validations
4
+ include ActiveModel::Conversion
5
+ extend ActiveModel::Naming
6
+
7
+ attr_accessor :name, :email, :subject, :body
8
+
9
+ validates_presence_of :name
10
+ validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
11
+ validates_presence_of :email
12
+ validates_presence_of :subject
13
+ validates_presence_of :body
14
+
15
+ def initialize(attributes = {})
16
+ attributes.each do |name, value|
17
+ send("#{name}=", value)
18
+ end
19
+ end
20
+
21
+ def persisted?
22
+ false
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ require "carrierwave"
2
+ require "carrierwave/orm/activerecord"
3
+ module Adminpanel
4
+ class Gallery < ActiveRecord::Base
5
+ attr_accessible :file
6
+
7
+ mount_uploader :file, Adminpanel::GalleryUploader
8
+ validates_presence_of :file
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ module Adminpanel
2
+ class Image < ActiveRecord::Base
3
+ attr_accessible :file, :foreign_key, :model
4
+ mount_uploader :file, Adminpanel::ImageUploader
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ require "carrierwave"
2
+ require "carrierwave/orm/activerecord"
3
+
4
+ module Adminpanel
5
+ class Product < ActiveRecord::Base
6
+ attr_accessible :description, :name, :images_attributes, :category_id, :brief
7
+ has_many :images, :foreign_key => "foreign_key", :conditions => { :model => "Product" }
8
+ belongs_to :category
9
+ accepts_nested_attributes_for :images, :allow_destroy => true
10
+
11
+ validates_presence_of :name
12
+ validates_presence_of :description
13
+ validates_presence_of :category_id
14
+ validates_presence_of :brief
15
+
16
+ def to_param
17
+ "#{id} #{name}".parameterize
18
+ end
19
+
20
+ def simple_name
21
+ "Product"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ require 'carrierwave'
2
+ require 'carrierwave/orm/activerecord'
3
+ module Adminpanel
4
+ class Section < ActiveRecord::Base
5
+ attr_accessible :description, :file, :has_image, :key, :name, :has_description, :images_attributes
6
+ has_many :images, :foreign_key => "foreign_key", :conditions => { :model => "Section" }
7
+ accepts_nested_attributes_for :images, :allow_destroy => true
8
+ mount_uploader :file, Adminpanel::SectionUploader
9
+ validates_length_of :description, :minimum => 10, :on => :update, :if => lambda{|section| section.key == "telephone"}
10
+ validates_presence_of :description, :on => :update
11
+
12
+ def simple_name
13
+ "Section"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,35 @@
1
+ module Adminpanel
2
+ class User < ActiveRecord::Base
3
+ attr_accessible :email, :name, :password, :password_confirmation
4
+ has_secure_password
5
+
6
+ #name validations
7
+ validates_presence_of :name
8
+
9
+ #password validations
10
+ validates_confirmation_of :password
11
+ validates_presence_of :password
12
+ validates_length_of :password, :minimum => 6
13
+
14
+ #password_confirmation validations
15
+ validates_presence_of :password_confirmation
16
+
17
+ #email validations
18
+ validates_presence_of :email
19
+ validates_uniqueness_of :email
20
+ VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
21
+ validates_format_of :email, :with => VALID_EMAIL_REGEX
22
+
23
+ before_save{ email.downcase! }
24
+ before_save :create_remember_token
25
+
26
+ def has_role?(role_sym)
27
+ roles.any? { |r| r.name.underscore.to_sym == role_sym }
28
+ end
29
+
30
+ private
31
+ def create_remember_token
32
+ self.remember_token = SecureRandom.base64.tr("+/", "-_")
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ module Adminpanel
3
+ class GalleryUploader < CarrierWave::Uploader::Base
4
+
5
+ # Include RMagick or MiniMagick support:
6
+ include CarrierWave::RMagick
7
+ # include CarrierWave::MiniMagick
8
+
9
+ # Choose what kind of storage to use for this uploader:
10
+ storage :file
11
+ # storage :fog
12
+
13
+ def root
14
+ Rails.root.join 'public/'
15
+ end
16
+
17
+ # Override the directory where uploaded files will be stored.
18
+ # This is a sensible default for uploaders that are meant to be mounted:
19
+ def store_dir
20
+ "uploads/gallery/#{mounted_as}/#{model.id}"
21
+ end
22
+
23
+ # Provide a default URL as a default if there hasn't been a file uploaded:
24
+ # def default_url
25
+ # # For Rails 3.1+ asset pipeline compatibility:
26
+ # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
27
+ #
28
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
29
+ # end
30
+
31
+ # Process files as they are uploaded:
32
+ process :resize_to_fill => [1024, 450]
33
+ #
34
+ # def scale(width, height)
35
+ # # do something
36
+ # end
37
+
38
+ # Create different versions of your uploaded files:
39
+ version :thumb do
40
+ process :resize_to_limit => [200, 200]
41
+ end
42
+
43
+ # Add a white list of extensions which are allowed to be uploaded.
44
+ # For images you might use something like this:
45
+ def extension_white_list
46
+ %w(jpg jpeg png)
47
+ end
48
+
49
+ # Override the filename of the uploaded files:
50
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
51
+ # def filename
52
+ # "something.jpg" if original_filename
53
+ # end
54
+
55
+ end
56
+ end