adminpanel 2.1.1 → 2.1.2
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.
- checksums.yaml +4 -4
- data/Gemfile +6 -7
- data/Rakefile +8 -7
- data/adminpanel.gemspec +6 -6
- data/app/controllers/adminpanel/application_controller.rb +1 -0
- data/app/controllers/concerns/adminpanel/facebook_actions.rb +1 -1
- data/app/controllers/concerns/adminpanel/sitemap_actions.rb +13 -0
- data/app/models/concerns/adminpanel/base.rb +1 -2
- data/app/models/concerns/adminpanel/facebook.rb +1 -1
- data/app/models/concerns/adminpanel/sitemap.rb +34 -0
- data/lib/adminpanel/version.rb +1 -1
- data/lib/generators/adminpanel/gallery/gallery_generator.rb +26 -28
- data/lib/generators/adminpanel/initialize/initialize_generator.rb +50 -52
- data/lib/generators/adminpanel/resource/resource_generator.rb +190 -193
- data/lib/tasks/adminpanel/adminpanel.rake +4 -4
- data/test/dummy/app/controllers/adminpanel/departments_controller.rb +13 -0
- data/test/dummy/app/models/adminpanel/department.rb +47 -0
- data/test/dummy/app/models/adminpanel/item.rb +38 -0
- data/test/dummy/app/models/adminpanel/mug.rb +1 -1
- data/test/dummy/app/models/adminpanel/salesman.rb +1 -0
- data/test/dummy/config/initializers/adminpanel_setup.rb +1 -0
- data/test/dummy/db/schema.rb +12 -0
- data/test/dummy/test/fixtures/adminpanel/mugs.yml +12 -0
- data/test/dummy/test/fixtures/adminpanel/products.yml +6 -0
- data/test/dummy/test/fixtures/adminpanel/salesmen.yml +12 -0
- data/test/features/shared/action_exclution_test.rb +20 -0
- data/test/features/shared/belongs_to_category_modal_test.rb +35 -0
- data/test/features/shared/belongs_to_non_category_modal_test.rb +41 -0
- data/test/features/shared/edit_test.rb +32 -0
- data/test/features/shared/has_many_through_category_modal_test.rb +35 -0
- data/test/features/shared/has_many_through_non_category_modal_test.rb +37 -0
- data/test/features/shared/index_test.rb +20 -0
- data/test/features/shared/new_test.rb +3 -3
- data/test/features/shared/show_test.rb +20 -0
- data/test/generators/gallery_generator_test.rb +39 -0
- data/test/generators/initialize_generator_test.rb +45 -0
- data/test/generators/resource_generator_test.rb +138 -0
- data/test/tasks/adminpanel_rake_test.rb +32 -0
- data/test/test_helper.rb +16 -23
- metadata +81 -70
- data/app/uploaders/adminpanel/image_uploader.rb +0 -58
- data/spec/features/galleries_pages_spec.rb +0 -110
- data/spec/features/section_pages_spec.rb +0 -36
- data/spec/features/shared_pages/edit_spec.rb +0 -48
- data/spec/features/shared_pages/index_spec.rb +0 -50
- data/spec/features/shared_pages/new_spec.rb +0 -128
- data/spec/features/shared_pages/show_spec.rb +0 -30
- data/spec/generators/gallery_generator_spec.rb +0 -48
- data/spec/generators/initialize_generator_spec.rb +0 -68
- data/spec/generators/resource_generator_spec.rb +0 -169
- data/spec/spec_helper.rb +0 -42
- data/spec/support/capybara_matchers.rb +0 -17
- data/spec/support/factories.rb +0 -52
- data/spec/support/helper_methods.rb +0 -30
- data/spec/support/shared_connection.rb +0 -10
- data/spec/tasks/adminpanel_rake_spec.rb +0 -59
@@ -1,58 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Adminpanel
|
3
|
-
class ImageUploader < CarrierWave::Uploader::Base
|
4
|
-
|
5
|
-
# Include RMagick or MiniMagick support:
|
6
|
-
include CarrierWave::RMagick
|
7
|
-
# include CarrierWave::MiniMagick
|
8
|
-
# Choose what kind of storage to use for this uploader:
|
9
|
-
storage :file
|
10
|
-
# storage :fog
|
11
|
-
|
12
|
-
def root
|
13
|
-
Rails.root.join 'public/'
|
14
|
-
end
|
15
|
-
|
16
|
-
# Override the directory where uploaded files will be stored.
|
17
|
-
# This is a sensible default for uploaders that are meant to be mounted:
|
18
|
-
def store_dir
|
19
|
-
"uploads/image/#{mounted_as}/#{model.id}"
|
20
|
-
end
|
21
|
-
|
22
|
-
# Provide a default URL as a default if there hasn't been a file uploaded:
|
23
|
-
# def default_url
|
24
|
-
# # For Rails 3.1+ asset pipeline compatibility:
|
25
|
-
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
26
|
-
#
|
27
|
-
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
28
|
-
# end
|
29
|
-
|
30
|
-
# Process files as they are uploaded:
|
31
|
-
# process :resize_to_fill => [1366, 768]
|
32
|
-
#
|
33
|
-
# def scale(width, height)
|
34
|
-
# # do something
|
35
|
-
# end
|
36
|
-
version :portfolio do
|
37
|
-
process :resize_to_fill => [468, 312]
|
38
|
-
end
|
39
|
-
|
40
|
-
# Create different versions of your uploaded files:
|
41
|
-
version :thumb do
|
42
|
-
process :resize_to_limit => [220, 220]
|
43
|
-
end
|
44
|
-
|
45
|
-
# Add a white list of extensions which are allowed to be uploaded.
|
46
|
-
# For images you might use something like this:
|
47
|
-
def extension_white_list
|
48
|
-
%w(jpg jpeg png)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Override the filename of the uploaded files:
|
52
|
-
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
53
|
-
# def filename
|
54
|
-
# "something.jpg" if original_filename
|
55
|
-
# end
|
56
|
-
|
57
|
-
end
|
58
|
-
end
|
@@ -1,110 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Gallery pages' do
|
4
|
-
let(:gallery) { FactoryGirl.build(:gallery) }
|
5
|
-
let(:user) { FactoryGirl.build(:user) }
|
6
|
-
|
7
|
-
subject { page }
|
8
|
-
|
9
|
-
before do
|
10
|
-
gallery.save
|
11
|
-
visit adminpanel.signin_path
|
12
|
-
valid_signin_as_admin(user)
|
13
|
-
clean_uploads_folder
|
14
|
-
end
|
15
|
-
|
16
|
-
describe 'galleries' do
|
17
|
-
before do
|
18
|
-
visit adminpanel.galleries_path
|
19
|
-
end
|
20
|
-
|
21
|
-
it { should have_link(I18n.t('gallery.new'), adminpanel.new_gallery_path)}
|
22
|
-
it { should have_link('i', adminpanel.gallery_path(gallery)) }
|
23
|
-
it { should have_link('i', adminpanel.edit_gallery_path(gallery)) }
|
24
|
-
it { should have_link('i', adminpanel.move_to_better_gallery_path(gallery)) }
|
25
|
-
it { should have_link('i', adminpanel.move_to_worst_gallery_path(gallery)) }
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'when creating' do
|
29
|
-
let(:gallery_1) { FactoryGirl.build(:gallery) }
|
30
|
-
let(:gallery_2) { FactoryGirl.build(:gallery) }
|
31
|
-
let(:gallery_3) { FactoryGirl.build(:gallery) }
|
32
|
-
|
33
|
-
before do
|
34
|
-
Adminpanel::Gallery.delete_all
|
35
|
-
gallery_1.save
|
36
|
-
end
|
37
|
-
|
38
|
-
describe 'a single image' do
|
39
|
-
it { gallery_1.position.should eq 1 }
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '3 images' do
|
43
|
-
|
44
|
-
before do
|
45
|
-
gallery_2.save
|
46
|
-
gallery_3.save
|
47
|
-
end
|
48
|
-
it { gallery_2.position.should eq 2 }
|
49
|
-
it { gallery_3.position.should eq 3 }
|
50
|
-
describe "when moving down the image in position 1" do
|
51
|
-
before do
|
52
|
-
gallery_1.move_to_worst_position
|
53
|
-
gallery_2.reload
|
54
|
-
gallery_3.reload
|
55
|
-
end
|
56
|
-
|
57
|
-
it { gallery_1.move_to_worst_position.should eq true}
|
58
|
-
it { gallery_3.move_to_worst_position.should eq false}
|
59
|
-
it { gallery_1.position.should eq 2}
|
60
|
-
it { gallery_2.position.should eq 1}
|
61
|
-
it { gallery_3.position.should eq 3}
|
62
|
-
|
63
|
-
after do
|
64
|
-
gallery_1.position = 1
|
65
|
-
gallery_2.position = 2
|
66
|
-
gallery_3.position = 3
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "when moving up the image in position 2" do
|
71
|
-
before do
|
72
|
-
gallery_2.move_to_better_position
|
73
|
-
gallery_1.reload
|
74
|
-
gallery_3.reload
|
75
|
-
end
|
76
|
-
|
77
|
-
it { gallery_1.move_to_better_position.should eq true}
|
78
|
-
it { gallery_2.move_to_better_position.should eq false}
|
79
|
-
it { gallery_1.position.should eq 2}
|
80
|
-
it { gallery_2.position.should eq 1}
|
81
|
-
it { gallery_3.position.should eq 3}
|
82
|
-
|
83
|
-
after do
|
84
|
-
gallery_1.position = 1
|
85
|
-
gallery_2.position = 2
|
86
|
-
gallery_3.position = 3
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "when deleting the image in position 1" do
|
91
|
-
before do
|
92
|
-
gallery_1.destroy
|
93
|
-
gallery_2.reload
|
94
|
-
gallery_3.reload
|
95
|
-
end
|
96
|
-
|
97
|
-
it { gallery_2.position.should eq 1}
|
98
|
-
it { gallery_3.position.should eq 2}
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "show" do
|
104
|
-
before do
|
105
|
-
visit adminpanel.gallery_path(gallery)
|
106
|
-
end
|
107
|
-
|
108
|
-
it { page.should have_selector("img[src='#{gallery.file_url(:thumb)}']") }
|
109
|
-
end
|
110
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe 'Section pages' do
|
5
|
-
subject { page }
|
6
|
-
|
7
|
-
let(:user) { get_user }
|
8
|
-
before do
|
9
|
-
Adminpanel::Section.delete_all
|
10
|
-
visit adminpanel.signin_path
|
11
|
-
valid_signin_as_admin(user)
|
12
|
-
end
|
13
|
-
|
14
|
-
describe 'index' do
|
15
|
-
let!(:section) { FactoryGirl.create(:section_with_gallery) }
|
16
|
-
before do
|
17
|
-
visit adminpanel.sections_path
|
18
|
-
end
|
19
|
-
|
20
|
-
it { should have_link('i', adminpanel.section_path(section)) }
|
21
|
-
it { should have_link('i', adminpanel.edit_section_path(section)) }
|
22
|
-
end
|
23
|
-
|
24
|
-
describe 'show' do
|
25
|
-
describe 'with gallery' do
|
26
|
-
let(:section) { FactoryGirl.create(:section_with_gallery) }
|
27
|
-
|
28
|
-
before do
|
29
|
-
visit adminpanel.section_path(section)
|
30
|
-
end
|
31
|
-
|
32
|
-
it { should have_content(section.description) }
|
33
|
-
it { should have_link('i', adminpanel.edit_section_path(section)) }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Shared edit', js: true do
|
4
|
-
subject { page }
|
5
|
-
|
6
|
-
let(:user) { get_user }
|
7
|
-
|
8
|
-
before do
|
9
|
-
Adminpanel::User.delete_all
|
10
|
-
visit adminpanel.signin_path
|
11
|
-
valid_signin_as_admin(user)
|
12
|
-
end
|
13
|
-
|
14
|
-
after do
|
15
|
-
Adminpanel::User.delete_all
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'edit' do
|
19
|
-
let!(:product) { FactoryGirl.create(:product) }
|
20
|
-
let!(:category){ FactoryGirl.create(:category) }
|
21
|
-
|
22
|
-
before do
|
23
|
-
product.category_ids = [category.id]
|
24
|
-
visit adminpanel.edit_product_path(product)
|
25
|
-
end
|
26
|
-
|
27
|
-
it { should have_link('Agregar Categoria') }
|
28
|
-
|
29
|
-
it { should have_content('Test Category') }
|
30
|
-
|
31
|
-
it { should have_title(I18n.t('action.update') + " " + Adminpanel::Product.display_name) }
|
32
|
-
|
33
|
-
describe "with invalid information" do
|
34
|
-
before do
|
35
|
-
fill_in "product_name", with: ""
|
36
|
-
fill_in "product_price", with: ""
|
37
|
-
click_button('Guardar Product')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'should have an error alert' do
|
41
|
-
should have_content('Producto no pudo guardarse debido a')
|
42
|
-
end
|
43
|
-
|
44
|
-
it { should have_title(I18n.t('action.update') + " " + Adminpanel::Product.display_name) }
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Shared index' do
|
4
|
-
subject { page }
|
5
|
-
|
6
|
-
let(:user) { get_user }
|
7
|
-
|
8
|
-
before do
|
9
|
-
Adminpanel::User.delete_all
|
10
|
-
visit adminpanel.signin_path
|
11
|
-
valid_signin_as_admin(user)
|
12
|
-
end
|
13
|
-
|
14
|
-
after do
|
15
|
-
Adminpanel::User.delete_all
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'mugs#index excluding every rest action with configurtions but index' do
|
19
|
-
before do
|
20
|
-
Adminpanel::Mug.create
|
21
|
-
visit adminpanel.mugs_path
|
22
|
-
end
|
23
|
-
|
24
|
-
after do
|
25
|
-
Adminpanel::Mug.delete_all
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'should not have create mug button' do
|
29
|
-
should_not have_link('a', href:'/adminpanel/tazas/new')
|
30
|
-
end
|
31
|
-
it 'should not have show or destroy button' do
|
32
|
-
should_not have_link('a', href:'/adminpanel/tazas/1')
|
33
|
-
end
|
34
|
-
it 'should not have edit button' do
|
35
|
-
should_not have_link('a', href:'/adminpanel/tazas/1/edit')
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
context 'index' do
|
41
|
-
let!(:product) { FactoryGirl.create(:product) }
|
42
|
-
before do
|
43
|
-
visit adminpanel.products_path
|
44
|
-
end
|
45
|
-
|
46
|
-
it { should have_link(Adminpanel::Product.display_name, adminpanel.new_product_path)}
|
47
|
-
it { should have_link('i', adminpanel.product_path(product)) }
|
48
|
-
it { should have_link('i', adminpanel.edit_product_path(product)) }
|
49
|
-
end
|
50
|
-
end
|
@@ -1,128 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Shared new', js: true do
|
4
|
-
subject { page }
|
5
|
-
|
6
|
-
let(:user) { get_user }
|
7
|
-
|
8
|
-
before do
|
9
|
-
Adminpanel::User.delete_all
|
10
|
-
visit adminpanel.signin_path
|
11
|
-
valid_signin_as_admin(user)
|
12
|
-
visit adminpanel.new_product_path
|
13
|
-
end
|
14
|
-
|
15
|
-
after do
|
16
|
-
Adminpanel::User.delete_all
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
describe 'when submtting with invalid information' do
|
21
|
-
before do
|
22
|
-
click_button('Agregar Producto')
|
23
|
-
end
|
24
|
-
|
25
|
-
it { should have_title("#{I18n.t('action.create')} #{Adminpanel::Product.display_name}") }
|
26
|
-
|
27
|
-
it 'should have validation alert' do
|
28
|
-
should have_content('Producto no pudo guardarse debido a')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'when submitting with valid information' do
|
33
|
-
before do
|
34
|
-
fill_in 'product_name', :with => 'product name'
|
35
|
-
fill_in 'product_price', :with => '855.5'
|
36
|
-
page.execute_script(
|
37
|
-
%Q(
|
38
|
-
$('#product_description').data('wysihtml5').editor.setValue('que pepsi');
|
39
|
-
)
|
40
|
-
) # to fill the wysiwyg editor
|
41
|
-
|
42
|
-
click_button('Agregar Producto')
|
43
|
-
end
|
44
|
-
|
45
|
-
it { should have_content(I18n.t("action.save_success"))}
|
46
|
-
it { should have_title('Ver Producto')}
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'when clicking create remote category link (has_many through)' do
|
50
|
-
before do
|
51
|
-
click_link('Agregar Categoria')
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'the modal should have the correct title' do
|
55
|
-
sleep 1
|
56
|
-
find('#modal-title').text.should eq('Agregar Categoria')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'should show the cateogry form in a modal' do
|
60
|
-
should have_content('Agregar Categoria')
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'when submitting the remote (checkboxes) category form' do
|
64
|
-
describe 'with valid information' do
|
65
|
-
before do
|
66
|
-
fill_in 'category_name', with: 'remote category'
|
67
|
-
click_button 'Agregar Categoria'
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'should have the created category in the checkboxes options' do
|
71
|
-
should have_content 'remote category'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe 'with invalid information' do
|
76
|
-
before do
|
77
|
-
click_button 'Agregar Categoria'
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'should have the errors' do
|
81
|
-
should have_content I18n.t('errors', model: 'Categoria', count: 1)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context 'new salesman' do
|
88
|
-
before do
|
89
|
-
visit adminpanel.new_salesman_path
|
90
|
-
end
|
91
|
-
|
92
|
-
describe 'when clicking the create remote product link (belongs_to)' do
|
93
|
-
before do
|
94
|
-
click_link 'Agregar Producto'
|
95
|
-
sleep 1
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'the modal should have the correct title' do
|
99
|
-
find('#modal-title').text.should eq('Agregar Producto')
|
100
|
-
end
|
101
|
-
|
102
|
-
context 'submitting the remote (select) product form' do
|
103
|
-
describe 'with valid information' do
|
104
|
-
before do
|
105
|
-
fill_in 'product_name', with: 'remote product'
|
106
|
-
fill_in 'product_description', with: 'remote description lorem'
|
107
|
-
fill_in 'product_price', with: '12.3'
|
108
|
-
click_button 'Agregar Producto'
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'should have the created product in the select options' do
|
112
|
-
should have_xpath "//option[contains(text(), 'remote product' )]"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
describe 'with invalid information' do
|
117
|
-
before do
|
118
|
-
click_button 'Agregar Producto'
|
119
|
-
end
|
120
|
-
|
121
|
-
it 'should have the errors' do
|
122
|
-
should have_content I18n.t('errors', model: 'Producto', count: 3)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Shared show', js: true do
|
4
|
-
subject { page }
|
5
|
-
|
6
|
-
let(:user) { get_user }
|
7
|
-
let!(:category){ FactoryGirl.create(:category) }
|
8
|
-
let!(:product) { FactoryGirl.create(:product) }
|
9
|
-
let!(:photo) { FactoryGirl.create(:photo) }
|
10
|
-
|
11
|
-
before do
|
12
|
-
Adminpanel::User.delete_all
|
13
|
-
visit adminpanel.signin_path
|
14
|
-
valid_signin_as_admin(user)
|
15
|
-
product.category_ids = [category.id]
|
16
|
-
photo.product_id = product.id
|
17
|
-
visit adminpanel.product_path(product)
|
18
|
-
end
|
19
|
-
|
20
|
-
after do
|
21
|
-
Adminpanel::User.delete_all
|
22
|
-
end
|
23
|
-
|
24
|
-
it { page.should have_selector('div', text: product.name) }
|
25
|
-
it { page.should have_selector('div', text: product.price) }
|
26
|
-
it { page.should have_selector('div', text: product.description) }
|
27
|
-
it { should have_content("#{I18n.t("gallery.container")}: #{Adminpanel::Product.display_name}")}
|
28
|
-
it { should have_content("#{category.name}")}
|
29
|
-
it { should have_link('i', adminpanel.edit_product_path(product)) }
|
30
|
-
end
|