adminpanel 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +3 -2
- data/Gemfile +24 -24
- data/README.md +8 -2
- data/adminpanel.gemspec +39 -39
- data/app/assets/javascripts/adminpanel/realm.js +0 -3
- data/app/controllers/adminpanel/galleries_controller.rb +38 -2
- data/app/models/adminpanel/gallery.rb +51 -0
- data/app/models/adminpanel/section.rb +6 -1
- data/app/views/adminpanel/galleries/_galleries_table.html.erb +15 -0
- data/app/views/adminpanel/galleries/index.html.erb +6 -15
- data/app/views/adminpanel/galleries/move_better.js.erb +1 -0
- data/app/views/adminpanel/galleries/move_worst.js.erb +1 -0
- data/app/views/adminpanel/sections/_sections_table.html.erb +17 -0
- data/app/views/adminpanel/sections/index.html.erb +36 -30
- data/app/views/layouts/admin.html.erb +2 -3
- data/config/locales/es.yml +10 -0
- data/config/routes.rb +6 -1
- data/lib/adminpanel.rb +7 -7
- data/lib/adminpanel/version.rb +3 -3
- data/lib/generators/adminpanel/install/templates/migrations/create_adminpanel_tables.rb +17 -0
- data/spec/dummy/db/schema.rb +1 -51
- data/spec/features/galleries_pages_spec.rb +69 -1
- data/spec/features/section_pages_spec.rb +1 -1
- data/spec/models/gallery_spec.rb +4 -0
- data/spec/models/section_spec.rb +27 -15
- data/spec/spec_helper.rb +2 -0
- data/spec/support/define_factory_models.rb +1 -0
- data/spec/support/{active_record.rb → test_database.rb} +2 -3
- data/spec/uploaders/gallery_uploader_spec.rb +1 -1
- data/spec/uploaders/image_uploader_spec.rb +0 -1
- metadata +8 -12
- data/spec/dummy/public/uploads/image/file/1/hipster.jpg +0 -0
- data/spec/dummy/public/uploads/image/file/1/portfolio_hipster.jpg +0 -0
- data/spec/dummy/public/uploads/image/file/1/thumb_hipster.jpg +0 -0
- data/spec/support/schema.rb +0 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
SHA512:
|
3
|
-
metadata.gz: 6d8f123e3a3faf4e15d9314743b74780780988363dcb070d23b4cea17671beb6fc807be8ac42f392cdee3949c4dea68ceb824bfe8226f311d465475f5e39a8d7
|
4
|
-
data.tar.gz: 819a1638157388e34921f75d3fe4f707fd8f6a6cc7e102da078ce0761ad3aa4d474b1e1d6b2d61df54beeca2b9f7ae7851fc2515b7af3d53f5668e07f8e3cd74
|
5
2
|
SHA1:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 435b2e9a0b1762665f46f09b0139867b12b4309e
|
4
|
+
data.tar.gz: 2ada99e5776704ba5872ffa3345673fb7d2b6626
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c956d64b07c304bdf6f650bc78b0ad4c455f59d4195219985c6ae8c344fa059c2e46cd8c2949cf8eaa5955e7ceba8a11d910f311be29bcb41a911aed775c0475
|
7
|
+
data.tar.gz: cdfe59993943b62d09aed0dca24177d10cce055041b8a47e0b640b495eaf2c107f9c256dd538f820f34833c21baf32c5cb7005b03d42403e73a20ab67c2e65a1
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in adminpanel.gemspec
|
4
|
-
# gemspec
|
5
|
-
|
6
|
-
gem "rails", "~> 3.2.12"
|
7
|
-
gem "carrierwave", "~> 0.9.0"
|
8
|
-
gem "rmagick", "~> 2.13.2"
|
9
|
-
gem "jquery-rails", "~> 3.0.4"
|
10
|
-
gem "bcrypt-ruby", "~> 3.0.0"
|
11
|
-
gem "rails-i18n", "~> 3.0.0"
|
12
|
-
|
13
|
-
group :test do
|
14
|
-
gem "bundler", "~> 1.3"
|
15
|
-
gem "activerecord", "3.2.12"
|
16
|
-
gem "rspec", "2.14.0"
|
17
|
-
gem "rspec-rails"
|
18
|
-
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
19
|
-
gem "rake"
|
20
|
-
gem "factory_girl", "2.6.4"
|
21
|
-
gem "capybara", "1.1.4"
|
22
|
-
gem "nokogiri", "1.5.9"
|
23
|
-
gem "rubyzip", "0.9.9"
|
24
|
-
end
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in adminpanel.gemspec
|
4
|
+
# gemspec
|
5
|
+
|
6
|
+
gem "rails", "~> 3.2.12"
|
7
|
+
gem "carrierwave", "~> 0.9.0"
|
8
|
+
gem "rmagick", "~> 2.13.2"
|
9
|
+
gem "jquery-rails", "~> 3.0.4"
|
10
|
+
gem "bcrypt-ruby", "~> 3.0.0"
|
11
|
+
gem "rails-i18n", "~> 3.0.0"
|
12
|
+
|
13
|
+
group :test do
|
14
|
+
gem "bundler", "~> 1.3"
|
15
|
+
gem "activerecord", "3.2.12"
|
16
|
+
gem "rspec", "2.14.0"
|
17
|
+
gem "rspec-rails"
|
18
|
+
gem "sqlite3", :platform => [:ruby, :mswin, :mingw]
|
19
|
+
gem "rake"
|
20
|
+
gem "factory_girl", "2.6.4"
|
21
|
+
gem "capybara", "1.1.4"
|
22
|
+
gem "nokogiri", "1.5.9"
|
23
|
+
gem "rubyzip", "0.9.9"
|
24
|
+
end
|
data/README.md
CHANGED
@@ -29,13 +29,16 @@ Then run:
|
|
29
29
|
|
30
30
|
rails g adminpanel:install create_migrations
|
31
31
|
rake db:migrate
|
32
|
-
to create the database that the adminpanel it's expecting.
|
32
|
+
to create the database that the adminpanel it's expecting, this will also seed the database with the default user.
|
33
33
|
|
34
34
|
Then, mount the gem wherever you like!
|
35
35
|
|
36
36
|
mount Adminpanel::Engine => "/admin"
|
37
37
|
|
38
|
-
|
38
|
+
Also make sure to include adminpanel assets in your application.rb if you need to precompile them:
|
39
|
+
|
40
|
+
config.assets.precompile += ['application-admin.js', 'application-admin.css']
|
41
|
+
The version 0.1.0 is the first stable version, feel free to use it, any doubts or errors feel free to ask me!.
|
39
42
|
|
40
43
|
## Contributing
|
41
44
|
|
@@ -49,3 +52,6 @@ Any doubts or errors feel free to ask me!
|
|
49
52
|
|
50
53
|
1. Add english support
|
51
54
|
2. Add the medium editor to the custom builder so it inits itself
|
55
|
+
3. Get a section generator or some kind of it
|
56
|
+
4. Add test to section edit(the only tests remaining)
|
57
|
+
5. Add a generator that let you create scaffolded model/controller/view in way that you can change them in the main app.
|
data/adminpanel.gemspec
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'adminpanel/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "adminpanel"
|
8
|
-
spec.version = Adminpanel::VERSION
|
9
|
-
spec.authors = ["Jose Ramon Camacho", "Victor Camacho"]
|
10
|
-
spec.email = ["joserracamacho@gmail.com"]
|
11
|
-
spec.description = %q{Gem that makes the admin panel for a site a breeze!}
|
12
|
-
spec.summary = %q{Developed with love for ruby 1.8.7}
|
13
|
-
spec.homepage = "https://github.com/joseramonc/adminpanel"
|
14
|
-
spec.license = "MIT"
|
15
|
-
|
16
|
-
spec.files = `git ls-files`.split($/)
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ["lib", "app/assets"]
|
20
|
-
|
21
|
-
|
22
|
-
spec.add_dependency "rails", "~> 3.2.12"
|
23
|
-
spec.add_dependency "carrierwave", "~> 0.9.0"
|
24
|
-
spec.add_dependency "rmagick", "~> 2.13.2"
|
25
|
-
spec.add_dependency "jquery-rails", "~> 3.0.4"
|
26
|
-
spec.add_dependency "bcrypt-ruby", "~> 3.0.0"
|
27
|
-
spec.add_dependency "rails-i18n", "~> 3.0.0"
|
28
|
-
|
29
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
30
|
-
spec.add_development_dependency "activerecord", "~> 3.2.12"
|
31
|
-
spec.add_development_dependency "rake"
|
32
|
-
spec.add_development_dependency "sqlite3"
|
33
|
-
spec.add_development_dependency "factory_girl_rails", "2.6.4"
|
34
|
-
spec.add_development_dependency "rspec", "~> 2.14.0"
|
35
|
-
spec.add_development_dependency "rspec-rails", "~> 2.14.0"
|
36
|
-
spec.add_development_dependency "capybara", "1.1.4"
|
37
|
-
spec.add_development_dependency "nokogiri", "1.5.9"
|
38
|
-
spec.add_development_dependency "rubyzip", "0.9.9"
|
39
|
-
end
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'adminpanel/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "adminpanel"
|
8
|
+
spec.version = Adminpanel::VERSION
|
9
|
+
spec.authors = ["Jose Ramon Camacho", "Victor Camacho"]
|
10
|
+
spec.email = ["joserracamacho@gmail.com"]
|
11
|
+
spec.description = %q{Gem that makes the admin panel for a site a breeze!}
|
12
|
+
spec.summary = %q{Developed with love for ruby 1.8.7}
|
13
|
+
spec.homepage = "https://github.com/joseramonc/adminpanel"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib", "app/assets"]
|
20
|
+
|
21
|
+
|
22
|
+
spec.add_dependency "rails", "~> 3.2.12"
|
23
|
+
spec.add_dependency "carrierwave", "~> 0.9.0"
|
24
|
+
spec.add_dependency "rmagick", "~> 2.13.2"
|
25
|
+
spec.add_dependency "jquery-rails", "~> 3.0.4"
|
26
|
+
spec.add_dependency "bcrypt-ruby", "~> 3.0.0"
|
27
|
+
spec.add_dependency "rails-i18n", "~> 3.0.0"
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
30
|
+
spec.add_development_dependency "activerecord", "~> 3.2.12"
|
31
|
+
spec.add_development_dependency "rake"
|
32
|
+
spec.add_development_dependency "sqlite3"
|
33
|
+
spec.add_development_dependency "factory_girl_rails", "2.6.4"
|
34
|
+
spec.add_development_dependency "rspec", "~> 2.14.0"
|
35
|
+
spec.add_development_dependency "rspec-rails", "~> 2.14.0"
|
36
|
+
spec.add_development_dependency "capybara", "1.1.4"
|
37
|
+
spec.add_development_dependency "nokogiri", "1.5.9"
|
38
|
+
spec.add_development_dependency "rubyzip", "0.9.9"
|
39
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Adminpanel
|
2
2
|
class GalleriesController < Adminpanel::ApplicationController
|
3
3
|
def index
|
4
|
-
@galleries = Gallery.all
|
4
|
+
@galleries = Gallery.find(:all)
|
5
5
|
end
|
6
6
|
|
7
7
|
def show
|
@@ -22,11 +22,47 @@ module Adminpanel
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
def move_better
|
26
|
+
@gallery = Gallery.find(params[:id])
|
27
|
+
if @gallery.move_to_better_position
|
28
|
+
flash[:success] = t("gallery.moved")
|
29
|
+
else
|
30
|
+
flash[:warning] = t("gallery.not-moved")
|
31
|
+
end
|
32
|
+
respond_to do |format|
|
33
|
+
format.html do
|
34
|
+
redirect_to galleries_path
|
35
|
+
end
|
36
|
+
format.js do
|
37
|
+
@galleries = Gallery.all
|
38
|
+
render :locals => { :galleries => @galleries }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def move_worst
|
44
|
+
@gallery = Gallery.find(params[:id])
|
45
|
+
if @gallery.move_to_worst_position
|
46
|
+
flash[:success] = t("gallery.moved")
|
47
|
+
else
|
48
|
+
flash[:warning] = t("gallery.not-moved")
|
49
|
+
end
|
50
|
+
respond_to do |format|
|
51
|
+
format.html do
|
52
|
+
redirect_to galleries_path
|
53
|
+
end
|
54
|
+
format.js do
|
55
|
+
@galleries = Gallery.all
|
56
|
+
render :locals => { :galleries => @galleries }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
25
61
|
def destroy
|
26
62
|
@gallery = Gallery.find(params[:id])
|
27
63
|
@gallery.destroy
|
28
64
|
|
29
|
-
redirect_to galleries_path, :notice => "
|
65
|
+
redirect_to galleries_path, :notice => t("gallery.deleted")
|
30
66
|
end
|
31
67
|
|
32
68
|
def update
|
@@ -6,5 +6,56 @@ module Adminpanel
|
|
6
6
|
|
7
7
|
mount_uploader :file, Adminpanel::GalleryUploader
|
8
8
|
validates_presence_of :file
|
9
|
+
before_create :set_position
|
10
|
+
before_destroy :rearrange_positions
|
11
|
+
|
12
|
+
|
13
|
+
default_scope { order("position ASC")}
|
14
|
+
|
15
|
+
|
16
|
+
def move_to_better_position
|
17
|
+
if position > 1
|
18
|
+
conflicting_gallery = Gallery.find_by_position(position - 1)
|
19
|
+
update_attribute(:position, position - 1)
|
20
|
+
conflicting_gallery.update_attribute(
|
21
|
+
:position, conflicting_gallery.position + 1
|
22
|
+
)
|
23
|
+
true
|
24
|
+
else
|
25
|
+
false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def move_to_worst_position
|
30
|
+
records = Gallery.count
|
31
|
+
if position < records
|
32
|
+
conflicting_gallery = Gallery.find_by_position(position + 1)
|
33
|
+
update_attribute(:position, position + 1)
|
34
|
+
conflicting_gallery.update_attribute(
|
35
|
+
:position, conflicting_gallery.position - 1
|
36
|
+
)
|
37
|
+
true
|
38
|
+
else
|
39
|
+
false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def rearrange_positions
|
45
|
+
unarranged_galleries = Gallery.where("position > ?", position)
|
46
|
+
unarranged_galleries.each do |gallery|
|
47
|
+
gallery.update_attribute(:position, gallery.position - 1)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def set_position
|
53
|
+
last_record = Gallery.last
|
54
|
+
if last_record.nil?
|
55
|
+
self.position = 1
|
56
|
+
else
|
57
|
+
self.position = last_record.position + 1
|
58
|
+
end
|
59
|
+
end
|
9
60
|
end
|
10
61
|
end
|
@@ -2,7 +2,7 @@ require 'carrierwave'
|
|
2
2
|
require 'carrierwave/orm/activerecord'
|
3
3
|
module Adminpanel
|
4
4
|
class Section < ActiveRecord::Base
|
5
|
-
attr_accessible :description, :has_image, :key, :name, :has_description, :images_attributes
|
5
|
+
attr_accessible :description, :has_image, :key, :page, :name, :has_description, :images_attributes
|
6
6
|
has_many :images, :foreign_key => "foreign_key", :conditions => { :model => "Section" }
|
7
7
|
accepts_nested_attributes_for :images, :allow_destroy => true
|
8
8
|
validates_length_of :description, :minimum => 10, :maximum => 10, :on => :update, :if => lambda{|section| section.key == "telephone"}
|
@@ -10,6 +10,11 @@ module Adminpanel
|
|
10
10
|
validates :description, :numericality => { :only_integer => true }, :on => :update, :if => lambda{|section| section.key == "telephone"}
|
11
11
|
validates_presence_of :key
|
12
12
|
validates_presence_of :name
|
13
|
+
validates_presence_of :page
|
14
|
+
|
15
|
+
default_scope { order("page ASC")}
|
16
|
+
|
17
|
+
scope :of_page, lambda{|page| where(:page => page)}
|
13
18
|
|
14
19
|
def simple_name
|
15
20
|
"Section"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% @galleries.each do |gallery| %>
|
2
|
+
<tr>
|
3
|
+
<td><%= link_to image_tag(gallery.file_url(:thumb)), gallery_path(gallery) %></td>
|
4
|
+
<td>
|
5
|
+
<%= link_to content_tag(:i, nil, :class => "icon-chevron-up"), move_to_better_gallery_path(gallery), :method => :put, :remote => true %>
|
6
|
+
<%= link_to content_tag(:i, nil, :class => "icon-chevron-down"), move_to_worst_gallery_path(gallery), :method => :put, :remote => true %>
|
7
|
+
</td>
|
8
|
+
<td>
|
9
|
+
<%= link_to content_tag(:i, nil, :class => 'icon-pencil'), edit_gallery_path(gallery), :title => t("action.edit") %>
|
10
|
+
<%= link_to content_tag(:i, nil, :class => 'icon-remove'), gallery_path(gallery), :title => t("action.delete"), :method => :delete,
|
11
|
+
:data => { :confirm => t("action.delete confirmation") }
|
12
|
+
%>
|
13
|
+
</td>
|
14
|
+
</tr>
|
15
|
+
<% end %>
|
@@ -29,25 +29,16 @@
|
|
29
29
|
</div>
|
30
30
|
<div class="widget-body">
|
31
31
|
<div class="dataTables_wrapper form-inline">
|
32
|
-
<table
|
32
|
+
<table class="table table-striped table-bordered dataTable">
|
33
33
|
<thead>
|
34
34
|
<tr>
|
35
|
-
<th
|
36
|
-
<th
|
35
|
+
<th><%= t("gallery.image") %></th>
|
36
|
+
<th><%= t("gallery.position") %></th>
|
37
|
+
<th><%= t("gallery.action") %></th>
|
37
38
|
</tr>
|
38
39
|
</thead>
|
39
|
-
<tbody>
|
40
|
-
|
41
|
-
<tr>
|
42
|
-
<td><%= link_to image_tag(gallery.file_url(:thumb)), gallery_path(gallery) %></td>
|
43
|
-
<td>
|
44
|
-
<%= link_to content_tag(:i, nil, :class => 'icon-pencil'), edit_gallery_path(gallery), :title => t("action.edit") %>
|
45
|
-
<%= link_to content_tag(:i, nil, :class => 'icon-remove'), gallery_path(gallery), :title => t("action.delete"), :method => :delete,
|
46
|
-
:data => { :confirm => t("action.delete confirmation") }
|
47
|
-
%>
|
48
|
-
</td>
|
49
|
-
</tr>
|
50
|
-
<% end %>
|
40
|
+
<tbody id = "galleries-content">
|
41
|
+
<%= render 'galleries_table', :galleries => @galleries %>
|
51
42
|
</tbody>
|
52
43
|
</table>
|
53
44
|
<div class="row-fluid">
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#galleries-content").html("<%= escape_javascript(render 'galleries_table', :locals => { :galleries => @galleries } ) %>");
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#galleries-content").html("<%= escape_javascript(render 'galleries_table', :locals => { :galleries => @galleries } ) %>");
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<table class="table table-striped table-bordered">
|
2
|
+
<tr>
|
3
|
+
<th><%= t("section.name") %></th>
|
4
|
+
<th><%= t("section.description") %></th>
|
5
|
+
<th><%= t("actions") %></th>
|
6
|
+
</tr>
|
7
|
+
<% sections.each do |section| %>
|
8
|
+
<tr>
|
9
|
+
<td><%= link_to section.name, section_path(section) %></td>
|
10
|
+
<td><%= strip_tags section.description %></td>
|
11
|
+
<td>
|
12
|
+
<%= link_to content_tag(:i, nil, :class => 'icon-pencil'), edit_section_path(section), :title => "Editar" %>
|
13
|
+
</td>
|
14
|
+
</tr>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
</table>
|
@@ -1,38 +1,44 @@
|
|
1
1
|
<%= provide(:page_title, "Secciones") %>
|
2
2
|
|
3
3
|
<div class="row-fluid">
|
4
|
-
<div class="widget widget-padding span12">
|
4
|
+
<div class="widget widget-padding span12" id="wizard">
|
5
5
|
<div class="widget-header">
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
<ul class="nav nav-tabs">
|
7
|
+
<% current_page = "no-page" %>
|
8
|
+
<% @sections.each_with_index do |section, index| %>
|
9
|
+
<% if current_page != section.page %>
|
10
|
+
<% if index == 0 %>
|
11
|
+
<li class = "active">
|
12
|
+
<% else %>
|
13
|
+
<li>
|
14
|
+
<% end %>
|
15
|
+
<%= link_to (section.page.capitalize), "#tab#{index}", "data-toggle" => "tab" %></li>
|
16
|
+
<% current_page = section.page %>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
19
|
+
</ul>
|
20
|
+
</div>
|
21
|
+
|
9
22
|
<div class="widget-body">
|
10
|
-
<div class="
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
</tr>
|
28
|
-
<% end %>
|
29
|
-
</tbody>
|
30
|
-
</table>
|
31
|
-
<div class="row-fluid">
|
32
|
-
<div class="span6"></div>
|
33
|
-
<div class="span6"></div>
|
34
|
-
</div>
|
35
|
-
</div>
|
23
|
+
<div class="tab-content">
|
24
|
+
<% current_page = "no-page" %>
|
25
|
+
<% @sections.each_with_index do |section, index| %>
|
26
|
+
<% if current_page != section.page %>
|
27
|
+
<% if index == 0 %>
|
28
|
+
<div class="tab-pane active" id="tab<%= index %>">
|
29
|
+
<% else %>
|
30
|
+
<div class="tab-pane" id="tab<%= index %>">
|
31
|
+
<% end %>
|
32
|
+
<% section_pages = Adminpanel::Section.of_page section.page %>
|
33
|
+
<%= render "sections_table", :sections => section_pages %>
|
34
|
+
</div>
|
35
|
+
<% current_page = section.page %>
|
36
|
+
<% end %>
|
37
|
+
<% end %>
|
38
|
+
</div>
|
39
|
+
|
36
40
|
</div>
|
37
41
|
</div>
|
38
42
|
</div>
|
43
|
+
|
44
|
+
|
@@ -4,13 +4,12 @@
|
|
4
4
|
<meta charset="utf-8">
|
5
5
|
<title><%= full_title(yield(:page_title)) %></title>
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
7
|
-
<meta name="author" content="Bluth Company">
|
8
7
|
<%= stylesheet_link_tag "application-admin", :media => "all" %>
|
9
8
|
<%= javascript_include_tag "application-admin" %>
|
10
9
|
<%= csrf_meta_tags %>
|
11
|
-
|
10
|
+
<%= favicon_link_tag "favicon.ico" %>
|
12
11
|
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet" type="text/css">
|
13
|
-
|
12
|
+
|
14
13
|
<%= render 'layouts/shim' %>
|
15
14
|
</head>
|
16
15
|
|
data/config/locales/es.yml
CHANGED
@@ -89,6 +89,7 @@ es:
|
|
89
89
|
Write description here: "Escriba la descripción aquí"
|
90
90
|
Panel title: "Panel Administrativo"
|
91
91
|
New: "Nuevo"
|
92
|
+
actions: "Acciones"
|
92
93
|
action:
|
93
94
|
submiting: "Enviando..."
|
94
95
|
save: "Guardar"
|
@@ -108,11 +109,20 @@ es:
|
|
108
109
|
gallery:
|
109
110
|
new: "Agregar Imagen"
|
110
111
|
success: "La imagen ha sido guardada"
|
112
|
+
deleted: "La imagen ha sido eliminada"
|
113
|
+
moved : "Se ha actualizado la posición de la galería"
|
114
|
+
not-moved: "No se pudo mover la Imagen"
|
115
|
+
image: "Imagen"
|
116
|
+
position: "Posición"
|
117
|
+
action: "Acción"
|
111
118
|
user:
|
112
119
|
new: "Agregar Usuario"
|
113
120
|
success: "El usuario ha sido guardado"
|
114
121
|
section:
|
122
|
+
name: "Nombre"
|
123
|
+
description: "Descripción"
|
115
124
|
edit: "Editar Sección"
|
125
|
+
default: "Sin Sección"
|
116
126
|
session:
|
117
127
|
password: "Contraseña"
|
118
128
|
email: "Correo electrónico"
|
data/config/routes.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
Adminpanel::Engine.routes.draw do
|
2
2
|
resources :sections, :except => [:new]
|
3
3
|
resources :users
|
4
|
-
resources :galleries
|
4
|
+
resources :galleries do
|
5
|
+
member do
|
6
|
+
put :move_better, :as => "move_to_better"
|
7
|
+
put :move_worst, :as => "move_to_worst"
|
8
|
+
end
|
9
|
+
end
|
5
10
|
resources :sessions, :only => [:new, :create, :destroy]
|
6
11
|
resources :products
|
7
12
|
resources :categories
|
data/lib/adminpanel.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require "adminpanel/version"
|
2
|
-
require "adminpanel/engine"
|
3
|
-
|
4
|
-
module Adminpanel
|
5
|
-
class AccessDenied < StandardError
|
6
|
-
end
|
7
|
-
end
|
1
|
+
require "adminpanel/version"
|
2
|
+
require "adminpanel/engine"
|
3
|
+
|
4
|
+
module Adminpanel
|
5
|
+
class AccessDenied < StandardError
|
6
|
+
end
|
7
|
+
end
|
data/lib/adminpanel/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
module Adminpanel
|
2
|
-
VERSION = "0.1.
|
3
|
-
end
|
1
|
+
module Adminpanel
|
2
|
+
VERSION = "0.1.1"
|
3
|
+
end
|
@@ -1,4 +1,12 @@
|
|
1
1
|
class CreateAdminpanelTables < ActiveRecord::Migration
|
2
|
+
def migrate(direction)
|
3
|
+
super
|
4
|
+
# Create a default user
|
5
|
+
if direction == :up
|
6
|
+
Adminpanel::User.new(:email => 'admin@admin.com', :name => "Admin", :password => 'password', :password_confirmation => 'password').save
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
2
10
|
def change
|
3
11
|
create_table :adminpanel_products do |t|
|
4
12
|
t.integer :category_id
|
@@ -20,6 +28,7 @@ class CreateAdminpanelTables < ActiveRecord::Migration
|
|
20
28
|
|
21
29
|
create_table :adminpanel_galleries do |t|
|
22
30
|
t.string :file
|
31
|
+
t.integer :position
|
23
32
|
t.timestamps
|
24
33
|
end
|
25
34
|
|
@@ -35,9 +44,17 @@ class CreateAdminpanelTables < ActiveRecord::Migration
|
|
35
44
|
t.boolean :has_description
|
36
45
|
t.text :description
|
37
46
|
t.string :key
|
47
|
+
t.string :page
|
38
48
|
t.boolean :has_image
|
39
49
|
t.timestamps
|
40
50
|
end
|
51
|
+
|
52
|
+
create_table :adminpanel_clients do |t|
|
53
|
+
t.string :name
|
54
|
+
t.string :logo
|
55
|
+
t.timestamps
|
56
|
+
end
|
57
|
+
|
41
58
|
add_index :adminpanel_sections, [:key]
|
42
59
|
|
43
60
|
create_table :adminpanel_categories do |t|
|
data/spec/dummy/db/schema.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
# This file is auto-generated from the current state of the database. Instead
|
3
2
|
# of editing this file, please use the migrations feature of Active Record to
|
4
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
@@ -11,55 +10,6 @@
|
|
11
10
|
#
|
12
11
|
# It's strongly recommended to check this file into your version control system.
|
13
12
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
15
|
-
|
16
|
-
create_table "adminpanel_users", :force => true do |t|
|
17
|
-
t.string "name"
|
18
|
-
t.string "email"
|
19
|
-
t.string "password_digest"
|
20
|
-
t.string "remember_token"
|
21
|
-
t.datetime "created_at", :null => false
|
22
|
-
t.datetime "updated_at", :null => false
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table "adminpanel_categories", :force => true do |t|
|
26
|
-
t.string "name"
|
27
|
-
t.datetime "created_at", :null => false
|
28
|
-
t.datetime "updated_at", :null => false
|
29
|
-
end
|
30
|
-
|
31
|
-
create_table "adminpanel_galleries", :force => true do |t|
|
32
|
-
t.string "file"
|
33
|
-
t.datetime "created_at", :null => false
|
34
|
-
t.datetime "updated_at", :null => false
|
35
|
-
end
|
36
|
-
|
37
|
-
create_table "adminpanel_images", :force => true do |t|
|
38
|
-
t.string "file"
|
39
|
-
t.integer "foreign_key"
|
40
|
-
t.datetime "created_at", :null => false
|
41
|
-
t.datetime "updated_at", :null => false
|
42
|
-
t.string "model"
|
43
|
-
end
|
44
|
-
|
45
|
-
create_table "adminpanel_products", :force => true do |t|
|
46
|
-
t.string "name"
|
47
|
-
t.text "description"
|
48
|
-
t.datetime "created_at", :null => false
|
49
|
-
t.datetime "updated_at", :null => false
|
50
|
-
t.integer "category_id"
|
51
|
-
t.string "brief"
|
52
|
-
end
|
53
|
-
|
54
|
-
create_table "adminpanel_sections", :force => true do |t|
|
55
|
-
t.string "name"
|
56
|
-
t.text "description"
|
57
|
-
t.string "key"
|
58
|
-
t.boolean "has_image"
|
59
|
-
t.string "file"
|
60
|
-
t.datetime "created_at", :null => false
|
61
|
-
t.datetime "updated_at", :null => false
|
62
|
-
t.boolean "has_description"
|
63
|
-
end
|
13
|
+
ActiveRecord::Schema.define(:version => 0) do
|
64
14
|
|
65
15
|
end
|
@@ -11,7 +11,7 @@ describe "Gallery pages" do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
describe "galleries" do
|
14
|
-
|
14
|
+
let(:gallery) { Factory(:gallery) }
|
15
15
|
before do
|
16
16
|
visit adminpanel.galleries_path
|
17
17
|
end
|
@@ -19,6 +19,74 @@ describe "Gallery pages" do
|
|
19
19
|
it { should have_link(I18n.t("gallery.new"), adminpanel.new_gallery_path)}
|
20
20
|
it { should have_link("i", adminpanel.gallery_path(gallery)) }
|
21
21
|
it { should have_link("i", adminpanel.edit_gallery_path(gallery)) }
|
22
|
+
it { should have_link("i", adminpanel.move_to_better_gallery_path(gallery)) }
|
23
|
+
it { should have_link("i", adminpanel.move_to_worst_gallery_path(gallery)) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "when creating" do
|
27
|
+
describe "a single image" do
|
28
|
+
let(:gallery) { Factory(:gallery)}
|
29
|
+
it { gallery.position.should eq 1 }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "3 images" do
|
33
|
+
let!(:gallery_1) { Factory(:gallery) }
|
34
|
+
let!(:gallery_2) { Factory(:gallery) }
|
35
|
+
let!(:gallery_3) { Factory(:gallery) }
|
36
|
+
|
37
|
+
it { gallery_2.position.should eq 2 }
|
38
|
+
it { gallery_3.position.should eq 3 }
|
39
|
+
describe "when moving down the image in position 1" do
|
40
|
+
before do
|
41
|
+
gallery_1.move_to_worst_position
|
42
|
+
gallery_2.reload
|
43
|
+
gallery_3.reload
|
44
|
+
end
|
45
|
+
|
46
|
+
it { gallery_1.move_to_worst_position.should eq true}
|
47
|
+
it { gallery_3.move_to_worst_position.should eq false}
|
48
|
+
it { gallery_1.position.should eq 2}
|
49
|
+
it { gallery_2.position.should eq 1}
|
50
|
+
it { gallery_3.position.should eq 3}
|
51
|
+
|
52
|
+
after do
|
53
|
+
gallery_1.position = 1
|
54
|
+
gallery_2.position = 2
|
55
|
+
gallery_3.position = 3
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "when moving up the image in position 2" do
|
60
|
+
before do
|
61
|
+
gallery_2.move_to_better_position
|
62
|
+
gallery_1.reload
|
63
|
+
gallery_3.reload
|
64
|
+
end
|
65
|
+
|
66
|
+
it { gallery_1.move_to_better_position.should eq true}
|
67
|
+
it { gallery_2.move_to_better_position.should eq false}
|
68
|
+
it { gallery_1.position.should eq 2}
|
69
|
+
it { gallery_2.position.should eq 1}
|
70
|
+
it { gallery_3.position.should eq 3}
|
71
|
+
|
72
|
+
after do
|
73
|
+
gallery_1.position = 1
|
74
|
+
gallery_2.position = 2
|
75
|
+
gallery_3.position = 3
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "when deleting the image in position 1" do
|
80
|
+
before do
|
81
|
+
gallery_1.destroy
|
82
|
+
gallery_2.reload
|
83
|
+
gallery_3.reload
|
84
|
+
end
|
85
|
+
|
86
|
+
it { gallery_2.position.should eq 1}
|
87
|
+
it { gallery_3.position.should eq 2}
|
88
|
+
end
|
89
|
+
end
|
22
90
|
end
|
23
91
|
|
24
92
|
describe "new" do
|
data/spec/models/gallery_spec.rb
CHANGED
@@ -15,4 +15,8 @@ describe Adminpanel::Gallery do
|
|
15
15
|
before {@gallery.file = " "}
|
16
16
|
it {should_not be_valid}
|
17
17
|
end
|
18
|
+
|
19
|
+
describe "default scope" do
|
20
|
+
it { expect(Adminpanel::Gallery.scoped.to_sql).to eq Adminpanel::Gallery.reorder('').order('position ASC').to_sql}
|
21
|
+
end
|
18
22
|
end
|
data/spec/models/section_spec.rb
CHANGED
@@ -3,10 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Adminpanel::Section do
|
4
4
|
before do
|
5
5
|
@section = Adminpanel::Section.new(
|
6
|
-
:
|
6
|
+
:name => "Section name",
|
7
|
+
:description => "Test description for index",
|
7
8
|
:has_image => true,
|
8
9
|
:key => "example_key",
|
9
|
-
:has_description => true
|
10
|
+
:has_description => true,
|
11
|
+
:page => "index"
|
10
12
|
)
|
11
13
|
end
|
12
14
|
|
@@ -17,39 +19,49 @@ describe Adminpanel::Section do
|
|
17
19
|
it { should respond_to(:key) }
|
18
20
|
it { should respond_to(:name) }
|
19
21
|
it { should respond_to(:has_description) }
|
22
|
+
it { should respond_to(:page) }
|
20
23
|
|
21
24
|
describe "when key is telephone and has less than 10 chars" do
|
22
|
-
before
|
23
|
-
|
24
|
-
|
25
|
+
before do
|
26
|
+
@section.key = "telephone"
|
27
|
+
@section.description = "1" * 9
|
28
|
+
end
|
29
|
+
it { @section.valid? eq false}
|
25
30
|
end
|
26
31
|
|
27
32
|
describe "when key is telephone and has more than 10 chars" do
|
28
|
-
before
|
29
|
-
|
30
|
-
|
33
|
+
before do
|
34
|
+
@section.key = "telephone"
|
35
|
+
@section.description = "1" * 11
|
36
|
+
end
|
37
|
+
it { @section.valid? eq false}
|
31
38
|
end
|
32
39
|
|
33
40
|
describe "when key is telephone and has 10 chars" do
|
34
|
-
before
|
41
|
+
before do
|
35
42
|
@section.key = "telephone"
|
36
43
|
@section.description = "1" * 10
|
37
|
-
|
38
|
-
it {@section.
|
44
|
+
end
|
45
|
+
it { @section.valid? eq true}
|
46
|
+
|
39
47
|
end
|
40
48
|
|
41
49
|
describe "when key is blank" do
|
42
50
|
before {@section.key = " "}
|
43
|
-
it {
|
51
|
+
it { @section.valid? eq false}
|
44
52
|
end
|
45
53
|
|
46
54
|
describe "when name is blank" do
|
47
55
|
before {@section.name = " "}
|
48
|
-
it {
|
56
|
+
it { @section.valid? eq false}
|
49
57
|
end
|
50
58
|
|
51
59
|
describe "when description is blank" do
|
52
60
|
before {@section.description = " "}
|
53
|
-
it {
|
54
|
-
end
|
61
|
+
it { @section.valid? eq false}
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "default scope" do
|
65
|
+
it { expect(Adminpanel::Section.scoped.to_sql).to eq Adminpanel::Section.reorder('').order('page ASC').to_sql}
|
66
|
+
end
|
55
67
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,6 +9,8 @@ ENV["RAILS_ENV"] ||= 'test'
|
|
9
9
|
require File.expand_path("../dummy/config/environment", __FILE__)
|
10
10
|
require "rspec/rails"
|
11
11
|
require "factory_girl"
|
12
|
+
require "carrierwave/test/matchers"
|
13
|
+
require "active_record"
|
12
14
|
|
13
15
|
Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
|
14
16
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "active_record"
|
2
|
-
|
3
1
|
ActiveRecord::Migration.create_table :adminpanel_users do |t|
|
4
2
|
t.string :name
|
5
3
|
t.string :email
|
@@ -15,6 +13,7 @@ ActiveRecord::Migration.create_table :adminpanel_categories do |t|
|
|
15
13
|
end
|
16
14
|
ActiveRecord::Migration.create_table :adminpanel_galleries do |t|
|
17
15
|
t.string :file
|
16
|
+
t.integer :position
|
18
17
|
t.datetime :created_at, :null => false
|
19
18
|
t.datetime :updated_at, :null => false
|
20
19
|
end
|
@@ -38,7 +37,7 @@ ActiveRecord::Migration.create_table :adminpanel_sections do |t|
|
|
38
37
|
t.text :description
|
39
38
|
t.string :key
|
40
39
|
t.boolean :has_image
|
41
|
-
t.string :
|
40
|
+
t.string :page
|
42
41
|
t.datetime :created_at, :null => false
|
43
42
|
t.datetime :updated_at, :null => false
|
44
43
|
t.boolean :has_description
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adminpanel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jose Ramon Camacho
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2014-01-11 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -282,10 +282,13 @@ files:
|
|
282
282
|
- app/views/adminpanel/categories/index.html.erb
|
283
283
|
- app/views/adminpanel/categories/new.html.erb
|
284
284
|
- app/views/adminpanel/categories/show.html.erb
|
285
|
+
- app/views/adminpanel/galleries/_galleries_table.html.erb
|
285
286
|
- app/views/adminpanel/galleries/create.html.erb
|
286
287
|
- app/views/adminpanel/galleries/delete.html.erb
|
287
288
|
- app/views/adminpanel/galleries/edit.html.erb
|
288
289
|
- app/views/adminpanel/galleries/index.html.erb
|
290
|
+
- app/views/adminpanel/galleries/move_better.js.erb
|
291
|
+
- app/views/adminpanel/galleries/move_worst.js.erb
|
289
292
|
- app/views/adminpanel/galleries/new.html.erb
|
290
293
|
- app/views/adminpanel/galleries/show.html.erb
|
291
294
|
- app/views/adminpanel/galleries/update.html.erb
|
@@ -297,6 +300,7 @@ files:
|
|
297
300
|
- app/views/adminpanel/products/new.html.erb
|
298
301
|
- app/views/adminpanel/products/show.html.erb
|
299
302
|
- app/views/adminpanel/sections/_image_fields.html.erb
|
303
|
+
- app/views/adminpanel/sections/_sections_table.html.erb
|
300
304
|
- app/views/adminpanel/sections/create.html.erb
|
301
305
|
- app/views/adminpanel/sections/destroy.html.erb
|
302
306
|
- app/views/adminpanel/sections/edit.html.erb
|
@@ -364,9 +368,6 @@ files:
|
|
364
368
|
- spec/dummy/public/favicon.ico
|
365
369
|
- spec/dummy/public/uploads/gallery/file/1/hipster.jpg
|
366
370
|
- spec/dummy/public/uploads/gallery/file/1/thumb_hipster.jpg
|
367
|
-
- spec/dummy/public/uploads/image/file/1/hipster.jpg
|
368
|
-
- spec/dummy/public/uploads/image/file/1/portfolio_hipster.jpg
|
369
|
-
- spec/dummy/public/uploads/image/file/1/thumb_hipster.jpg
|
370
371
|
- spec/dummy/script/rails
|
371
372
|
- spec/features/authentication_pages_spec.rb
|
372
373
|
- spec/features/categories_pages_spec.rb
|
@@ -380,11 +381,10 @@ files:
|
|
380
381
|
- spec/models/section_spec.rb
|
381
382
|
- spec/models/user_spec.rb
|
382
383
|
- spec/spec_helper.rb
|
383
|
-
- spec/support/active_record.rb
|
384
384
|
- spec/support/define_factory_models.rb
|
385
385
|
- spec/support/helper_methods.rb
|
386
|
-
- spec/support/schema.rb
|
387
386
|
- spec/support/submit_forms_without_button.rb
|
387
|
+
- spec/support/test_database.rb
|
388
388
|
- spec/uploaders/gallery_uploader_spec.rb
|
389
389
|
- spec/uploaders/image_uploader_spec.rb
|
390
390
|
homepage: https://github.com/joseramonc/adminpanel
|
@@ -450,9 +450,6 @@ test_files:
|
|
450
450
|
- spec/dummy/public/favicon.ico
|
451
451
|
- spec/dummy/public/uploads/gallery/file/1/hipster.jpg
|
452
452
|
- spec/dummy/public/uploads/gallery/file/1/thumb_hipster.jpg
|
453
|
-
- spec/dummy/public/uploads/image/file/1/hipster.jpg
|
454
|
-
- spec/dummy/public/uploads/image/file/1/portfolio_hipster.jpg
|
455
|
-
- spec/dummy/public/uploads/image/file/1/thumb_hipster.jpg
|
456
453
|
- spec/dummy/script/rails
|
457
454
|
- spec/features/authentication_pages_spec.rb
|
458
455
|
- spec/features/categories_pages_spec.rb
|
@@ -466,10 +463,9 @@ test_files:
|
|
466
463
|
- spec/models/section_spec.rb
|
467
464
|
- spec/models/user_spec.rb
|
468
465
|
- spec/spec_helper.rb
|
469
|
-
- spec/support/active_record.rb
|
470
466
|
- spec/support/define_factory_models.rb
|
471
467
|
- spec/support/helper_methods.rb
|
472
|
-
- spec/support/schema.rb
|
473
468
|
- spec/support/submit_forms_without_button.rb
|
469
|
+
- spec/support/test_database.rb
|
474
470
|
- spec/uploaders/gallery_uploader_spec.rb
|
475
471
|
- spec/uploaders/image_uploader_spec.rb
|
Binary file
|
Binary file
|
Binary file
|
data/spec/support/schema.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
# This file is auto-generated from the current state of the database. Instead
|
3
|
-
# of editing this file, please use the migrations feature of Active Record to
|
4
|
-
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
-
#
|
6
|
-
# Note that this schema.rb definition is the authoritative source for your
|
7
|
-
# database schema. If you need to create the application database on another
|
8
|
-
# system, you should be using db:schema:load, not running all the migrations
|
9
|
-
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
-
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
-
#
|
12
|
-
# It's strongly recommended to check this file into your version control system.
|
13
|
-
|
14
|
-
ActiveRecord::Schema.define(:version => 20131120070259) do
|
15
|
-
|
16
|
-
create_table "adminpanel_users", :force => true do |t|
|
17
|
-
t.string "name"
|
18
|
-
t.string "email"
|
19
|
-
t.string "password_digest"
|
20
|
-
t.string "remember_token"
|
21
|
-
t.datetime "created_at", :null => false
|
22
|
-
t.datetime "updated_at", :null => false
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table "adminpanel_categories", :force => true do |t|
|
26
|
-
t.string "name"
|
27
|
-
t.datetime "created_at", :null => false
|
28
|
-
t.datetime "updated_at", :null => false
|
29
|
-
end
|
30
|
-
|
31
|
-
create_table "adminpanel_galleries", :force => true do |t|
|
32
|
-
t.string "file"
|
33
|
-
t.datetime "created_at", :null => false
|
34
|
-
t.datetime "updated_at", :null => false
|
35
|
-
end
|
36
|
-
|
37
|
-
create_table "adminpanel_images", :force => true do |t|
|
38
|
-
t.string "file"
|
39
|
-
t.integer "foreign_key"
|
40
|
-
t.datetime "created_at", :null => false
|
41
|
-
t.datetime "updated_at", :null => false
|
42
|
-
t.string "model"
|
43
|
-
end
|
44
|
-
|
45
|
-
create_table "adminpanel_products", :force => true do |t|
|
46
|
-
t.string "name"
|
47
|
-
t.text "description"
|
48
|
-
t.datetime "created_at", :null => false
|
49
|
-
t.datetime "updated_at", :null => false
|
50
|
-
t.integer "category_id"
|
51
|
-
t.string "brief"
|
52
|
-
end
|
53
|
-
|
54
|
-
create_table "adminpanel_sections", :force => true do |t|
|
55
|
-
t.string "name"
|
56
|
-
t.text "description"
|
57
|
-
t.string "key"
|
58
|
-
t.boolean "has_image"
|
59
|
-
t.datetime "created_at", :null => false
|
60
|
-
t.datetime "updated_at", :null => false
|
61
|
-
t.boolean "has_description"
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|