adminpanel 1.2.8 → 1.2.9
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/adminpanel.gemspec +2 -2
- data/app/controllers/adminpanel/{pages_controller.rb → analytics_controller.rb} +11 -6
- data/app/controllers/adminpanel/application_controller.rb +5 -6
- data/app/controllers/adminpanel/galleries_controller.rb +23 -23
- data/app/controllers/adminpanel/sections_controller.rb +5 -1
- data/app/controllers/adminpanel/sessions_controller.rb +7 -3
- data/app/helpers/adminpanel/application_helper.rb +7 -3
- data/app/helpers/adminpanel/rest_actions_helper.rb +20 -0
- data/app/helpers/adminpanel/router_helper.rb +2 -32
- data/app/helpers/adminpanel/shared_pages_helper.rb +8 -8
- data/app/models/adminpanel/analytic.rb +12 -0
- data/app/models/adminpanel/gallery.rb +48 -43
- data/app/models/adminpanel/section.rb +6 -2
- data/app/models/adminpanel/user.rb +4 -0
- data/app/views/adminpanel/{pages → analytics}/index.html.erb +0 -0
- data/app/views/adminpanel/sessions/new.html.erb +1 -1
- data/app/views/layouts/_side_menu.html.erb +7 -89
- data/app/views/shared/_gallery_entries.html.erb +11 -0
- data/app/views/shared/gallery_entries.js.erb +1 -0
- data/app/views/shared/show.html.erb +21 -9
- data/config/routes.rb +28 -22
- data/lib/adminpanel/active_record/adminpanel_extension.rb +63 -4
- data/lib/adminpanel/engine.rb +7 -2
- data/lib/adminpanel/version.rb +1 -1
- data/lib/generators/adminpanel/gallery/gallery_generator.rb +1 -1
- data/lib/generators/adminpanel/gallery/templates/gallery_template.rb +6 -0
- data/lib/generators/adminpanel/gallery/templates/uploader.rb +2 -2
- data/lib/generators/adminpanel/initialize/initialize_generator.rb +23 -7
- data/lib/generators/adminpanel/initialize/templates/adminpanel_setup.rb +8 -3
- data/lib/generators/adminpanel/initialize/templates/category_template.rb +22 -9
- data/lib/generators/adminpanel/resource/resource_generator.rb +8 -4
- data/lib/tasks/adminpanel/adminpanel.rake +9 -23
- data/spec/dummy/.gitignore +1 -0
- data/spec/dummy/app/models/adminpanel/category.rb +3 -3
- data/spec/dummy/app/models/adminpanel/product.rb +3 -3
- data/spec/dummy/config/initializers/adminpanel_setup.rb +22 -0
- data/spec/features/galleries_pages_spec.rb +3 -28
- data/spec/generators/gallery_generator_spec.rb +40 -44
- data/spec/generators/initialize_generator_spec.rb +46 -19
- data/spec/generators/resource_generator_spec.rb +101 -129
- data/spec/spec_helper.rb +1 -2
- data/spec/tasks/adminpanel_rake_spec.rb +4 -4
- metadata +21 -14
@@ -10,7 +10,12 @@ Adminpanel.setup do |config|
|
|
10
10
|
# # Path to the key file, defaults to config/analytics
|
11
11
|
# config.analytics_key_path = "config/analytics"
|
12
12
|
|
13
|
-
# #
|
14
|
-
#
|
15
|
-
#
|
13
|
+
# # This are the modules that are going to be displayed and order that are going to be displayed
|
14
|
+
# config.displayable_resources = [
|
15
|
+
# :analytics,
|
16
|
+
# :users,
|
17
|
+
# :galleries,
|
18
|
+
# :sections,
|
19
|
+
# :categories
|
20
|
+
# ]
|
16
21
|
end
|
@@ -1,30 +1,43 @@
|
|
1
1
|
module Adminpanel
|
2
2
|
class Category < ActiveRecord::Base
|
3
|
-
attr_accessible :name, :model
|
3
|
+
attr_accessible :name, :model #, :product_ids
|
4
4
|
|
5
5
|
validates_presence_of :model
|
6
6
|
validates_presence_of :name
|
7
7
|
validates_uniqueness_of :name
|
8
8
|
|
9
9
|
|
10
|
-
has_many :categorizations
|
11
|
-
has_many :products, :through => :categorizations, :dependent => :destroy
|
10
|
+
# has_many :categorizations
|
11
|
+
# has_many :products, :through => :categorizations, :dependent => :destroy
|
12
12
|
|
13
13
|
|
14
14
|
def self.form_attributes
|
15
15
|
[
|
16
|
-
|
17
|
-
|
16
|
+
# {
|
17
|
+
# 'product_ids' => {
|
18
|
+
# 'type' => 'has_many',
|
19
|
+
# 'model' => 'Adminpanel::Product',
|
20
|
+
# 'name' => 'product_ids'
|
21
|
+
# }
|
22
|
+
# },
|
23
|
+
{
|
24
|
+
'name' => {
|
25
|
+
'type' => 'text_field',
|
26
|
+
'name' => 'name',
|
27
|
+
'label' => 'name',
|
28
|
+
'placeholder' => 'name'
|
29
|
+
}
|
30
|
+
},
|
18
31
|
]
|
19
32
|
end
|
20
33
|
|
21
34
|
def self.display_name
|
22
|
-
"
|
35
|
+
"Categorías"
|
23
36
|
end
|
24
37
|
|
25
|
-
|
26
|
-
|
27
|
-
|
38
|
+
def self.icon
|
39
|
+
"icon-bookmark"
|
40
|
+
end
|
28
41
|
|
29
42
|
default_scope { order("model ASC")}
|
30
43
|
scope :of_model, lambda{|model| where(:model => model)}
|
@@ -34,6 +34,10 @@ module Adminpanel
|
|
34
34
|
false
|
35
35
|
end
|
36
36
|
|
37
|
+
def gallery_name
|
38
|
+
"#{lower_name}file"
|
39
|
+
end
|
40
|
+
|
37
41
|
def lower_name
|
38
42
|
name.singularize.downcase
|
39
43
|
end
|
@@ -83,7 +87,7 @@ module Adminpanel
|
|
83
87
|
assign_attributes_variables(attribute)
|
84
88
|
|
85
89
|
if @attr_type == "images"
|
86
|
-
attr_string = attr_string + ":#{
|
90
|
+
attr_string = attr_string + ":#{gallery_name.pluralize}_attributes, "
|
87
91
|
elsif @attr_type == "belongs_to"
|
88
92
|
attr_string = "#{attr_string}:#{belongs_to_field(@attr_field)}, "
|
89
93
|
elsif @attr_type == "has_many" || @attr_type == "has_many_through"
|
@@ -142,7 +146,7 @@ module Adminpanel
|
|
142
146
|
end
|
143
147
|
|
144
148
|
def file_field_hash
|
145
|
-
"#{starting_hash(
|
149
|
+
"#{starting_hash(gallery_name.pluralize)} => {#{form_type('adminpanel_file_field')}," +
|
146
150
|
"#{label_type}," +
|
147
151
|
"#{placeholder_type}}\n\t\t\t},"
|
148
152
|
end
|
@@ -246,11 +250,11 @@ module Adminpanel
|
|
246
250
|
|
247
251
|
def image_association
|
248
252
|
generate_gallery
|
249
|
-
return "\n\t\tmount_images :#{
|
253
|
+
return "\n\t\tmount_images :#{gallery_name.pluralize}\n"
|
250
254
|
end
|
251
255
|
|
252
256
|
def generate_gallery
|
253
|
-
|
257
|
+
generate "adminpanel:gallery", lower_name
|
254
258
|
end
|
255
259
|
|
256
260
|
end
|
@@ -84,7 +84,6 @@ namespace :adminpanel do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
task :populate, [:times, :model, :attributes] => :environment do |t, args|
|
87
|
-
|
88
87
|
puts "Generating #{args[:times]} records of #{args[:model]}"
|
89
88
|
|
90
89
|
@model = "adminpanel/#{args[:model]}".classify.constantize
|
@@ -107,26 +106,27 @@ namespace :adminpanel do
|
|
107
106
|
when "category" || "category_name" #generate a category name
|
108
107
|
value = @things.sample.pluralize
|
109
108
|
|
110
|
-
when
|
109
|
+
when 'lorem_short'
|
111
110
|
value = generate_lorem_name #lorem random short sentence
|
112
111
|
|
113
|
-
when "
|
112
|
+
when "lorem" || "description" #large paragraph.
|
114
113
|
value = generate_lorem
|
115
114
|
|
116
115
|
when "number" #generate a number
|
117
116
|
value = [*1..5000].sample
|
118
117
|
|
119
118
|
when "id" #assign field_id it to a random instance of Adminpanel::field
|
120
|
-
|
121
|
-
field
|
119
|
+
field = field.downcase.singularize
|
120
|
+
if field != 'category'
|
121
|
+
value = "adminpanel/#{field}".classify.constantize.order("RAND()").first.id
|
122
|
+
else
|
123
|
+
value = "adminpanel/#{field}".classify.constantize.of_model(@model.display_name).order("RAND()").first.id
|
124
|
+
end
|
125
|
+
field = "#{field}_id"
|
122
126
|
|
123
127
|
when "email" #generates a random email
|
124
128
|
value = generate_email
|
125
129
|
|
126
|
-
when "image" #force an image...
|
127
|
-
has_image = true
|
128
|
-
@file_url = "http://placehold.it/#{field}"
|
129
|
-
|
130
130
|
else #no type
|
131
131
|
value = "#{time + 1} Lorem ipsum dolor sit amec"
|
132
132
|
|
@@ -141,10 +141,6 @@ namespace :adminpanel do
|
|
141
141
|
|
142
142
|
change_dates(instance)
|
143
143
|
|
144
|
-
if(has_image) #forcing the image into the db
|
145
|
-
create_image_of(instance.id)
|
146
|
-
end
|
147
|
-
|
148
144
|
end
|
149
145
|
|
150
146
|
end
|
@@ -170,16 +166,6 @@ private
|
|
170
166
|
").save\n"
|
171
167
|
end
|
172
168
|
|
173
|
-
def create_image_of(model_id)
|
174
|
-
image_instance = Adminpanel::Image.new(
|
175
|
-
:model => @model.display_name,
|
176
|
-
:foreign_key => model_id
|
177
|
-
)
|
178
|
-
image_instance.save(:validate => false)
|
179
|
-
image_instance.update_column(:file, @file_url)
|
180
|
-
change_dates(image_instance)
|
181
|
-
end
|
182
|
-
|
183
169
|
def generate_lorem
|
184
170
|
value = "#{@lorem.sample}"
|
185
171
|
[*60..80].sample.times do
|
data/spec/dummy/.gitignore
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
Adminpanel.setup do |config|
|
2
|
+
# # You get this from the Google Analytics Dashboard, this configuration is required.
|
3
|
+
# config.analytics_profile_id = '12341234'
|
4
|
+
|
5
|
+
# # The next configuration is the file used to establish server to server authentication/authorization
|
6
|
+
# # you need to download this file from the Google Developers Console
|
7
|
+
# # and place it inside your application, this configuration is required.
|
8
|
+
# config.analytics_key_filename = '12345ABCDE.p12'
|
9
|
+
|
10
|
+
# # Path to the key file, defaults to config/analytics
|
11
|
+
# config.analytics_key_path = "config/analytics"
|
12
|
+
|
13
|
+
# # This are the modules that are going to be displayed and order that are going to be displayed
|
14
|
+
config.displayable_resources = [
|
15
|
+
:analytics,
|
16
|
+
:galleries,
|
17
|
+
:sections,
|
18
|
+
:categories,
|
19
|
+
:products,
|
20
|
+
:users
|
21
|
+
]
|
22
|
+
end
|
@@ -4,12 +4,12 @@ describe "Gallery pages" do
|
|
4
4
|
subject {page}
|
5
5
|
|
6
6
|
let(:user) { Factory(:user) }
|
7
|
-
before do
|
7
|
+
before do
|
8
8
|
visit adminpanel.signin_path
|
9
9
|
valid_signin(user)
|
10
10
|
clean_uploads_folder
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
describe "galleries" do
|
14
14
|
let(:gallery) { Factory(:gallery) }
|
15
15
|
before do
|
@@ -89,31 +89,6 @@ describe "Gallery pages" do
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
describe "new" do
|
93
|
-
before do
|
94
|
-
visit adminpanel.new_gallery_path
|
95
|
-
end
|
96
|
-
|
97
|
-
it { should have_title(I18n.t("gallery.new")) }
|
98
|
-
|
99
|
-
describe "with invalid information" do
|
100
|
-
before { find("form#new_gallery").submit_form! }
|
101
|
-
|
102
|
-
it { should have_title(I18n.t("gallery.new")) }
|
103
|
-
it { should have_selector("div#alerts") }
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "with valid information" do
|
107
|
-
before do
|
108
|
-
attach_file('gallery_file', File.join(Rails.root, '/app/assets/images/hipster.jpg'))
|
109
|
-
find("form#new_gallery").submit_form!
|
110
|
-
end
|
111
|
-
|
112
|
-
it { should have_content(I18n.t("gallery.success"))}
|
113
|
-
it { File.exists? File.join(Rails.root, '/public/uploads/gallery/file/1/thumb_hipster.jpg') }
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
92
|
describe "show" do
|
118
93
|
let(:gallery) { Factory(:gallery) }
|
119
94
|
before do
|
@@ -122,4 +97,4 @@ describe "Gallery pages" do
|
|
122
97
|
|
123
98
|
it { page.should have_selector("img", :src => gallery.file_url) }
|
124
99
|
end
|
125
|
-
end
|
100
|
+
end
|
@@ -1,53 +1,49 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'generators/adminpanel/gallery/gallery_generator'
|
2
3
|
|
3
|
-
describe
|
4
|
+
describe Adminpanel::Generators::GalleryGenerator do
|
5
|
+
destination File.expand_path("../../dummy/tmp", __FILE__)
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
before do
|
8
|
+
Rails::Generators.options[:rails][:orm] = :active_record
|
9
|
+
end
|
10
|
+
|
11
|
+
# after do
|
12
|
+
# prepare_destination
|
13
|
+
# end
|
14
|
+
|
15
|
+
describe 'with "product" as argument' do
|
16
|
+
before do
|
17
|
+
prepare_destination
|
18
|
+
run_generator %w(Product)
|
11
19
|
end
|
12
20
|
|
13
|
-
it 'should generate the
|
14
|
-
|
21
|
+
it 'should generate the productfile migration' do
|
22
|
+
migration_file('db/migrate/create_adminpanel_productfiles_table.rb').should
|
23
|
+
be_a_migration
|
15
24
|
end
|
16
25
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
# subject.should_not generate("db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_create_adminpanel_categories_table.rb")
|
40
|
-
# end
|
41
|
-
#
|
42
|
-
# it "should generate the initialization migration" do
|
43
|
-
# subject.should generate("db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_create_adminpanel_tables.rb")
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# end
|
47
|
-
#
|
48
|
-
# it 'should generate the configuration initializer' do
|
49
|
-
# subject.should generate('config/initializers/adminpanel_setup.rb'){ |content|
|
50
|
-
# content.should =~ /Adminpanel.setup do |config|/
|
51
|
-
# }
|
26
|
+
|
27
|
+
it 'should migrate the correct fields' do
|
28
|
+
migration_file('db/migrate/create_adminpanel_productfiles_table.rb').should(
|
29
|
+
contain(/t.integer :product_id/) &&
|
30
|
+
contain(/create_table :adminpanel_productfiles/)
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should generate the productfile model with uploader and attr_accessible' do
|
35
|
+
file('app/models/adminpanel/productfile.rb').should(
|
36
|
+
contain(/attr_accessible :product_id, :file/) &&
|
37
|
+
contain(/mount_uploader :file, ProductfileUploader/)
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should generate the productfile model with uploader and attr_accessible' do
|
42
|
+
file('app/models/adminpanel/productfile.rb').should exist
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should the produfile uploader' do
|
46
|
+
file('app/uploaders/adminpanel/productfile_uploader.rb').should exist
|
47
|
+
end
|
52
48
|
end
|
53
49
|
end
|
@@ -1,41 +1,68 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'generators/adminpanel/initialize/initialize_generator'
|
2
3
|
|
3
|
-
describe
|
4
|
+
describe Adminpanel::Generators::InitializeGenerator do
|
5
|
+
destination File.expand_path("../../dummy/tmp", __FILE__)
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
7
|
+
before do
|
8
|
+
Rails::Generators.options[:rails][:orm] = :active_record
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
prepare_destination
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'with no arguments' do
|
16
|
+
before do
|
17
|
+
prepare_destination
|
18
|
+
run_generator
|
8
19
|
end
|
9
20
|
|
10
|
-
it
|
11
|
-
|
21
|
+
it 'should generate the initial migration' do
|
22
|
+
migration_file('db/migrate/create_adminpanel_tables.rb').should be_a_migration
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should generate the adminpanel_setup file' do
|
26
|
+
file('config/initializers/adminpanel_setup.rb').should exist
|
12
27
|
end
|
13
28
|
|
14
29
|
it 'should generate the categories migration' do
|
15
|
-
|
30
|
+
migration_file('db/migrate/create_adminpanel_categories_table.rb').should be_a_migration
|
16
31
|
end
|
17
32
|
|
18
|
-
it 'should generate the
|
19
|
-
|
20
|
-
|
21
|
-
|
33
|
+
it 'should generate the category file' do
|
34
|
+
file('app/models/adminpanel/category.rb').should exist
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should generate the section uploader' do
|
38
|
+
file('app/uploaders/adminpanel/section_uploader.rb').should exist
|
22
39
|
end
|
23
40
|
end
|
24
41
|
|
25
|
-
|
42
|
+
describe 'with arguments -c true -u true -m true -p true' do
|
43
|
+
before do
|
44
|
+
prepare_destination
|
45
|
+
run_generator %w(-c true -u true -m true -p true)
|
46
|
+
end
|
26
47
|
|
27
|
-
it
|
28
|
-
|
48
|
+
it 'should\'t generate the adminpanel_setup' do
|
49
|
+
file('config/initializers/adminpanel_setup.rb').should_not exist
|
29
50
|
end
|
30
51
|
|
31
|
-
it
|
32
|
-
|
52
|
+
it 'should\'t generate the initial migration' do
|
53
|
+
migration_file('db/migrate/create_adminpanel_categories_table.rb').should_not exist
|
33
54
|
end
|
34
55
|
|
35
|
-
it
|
36
|
-
|
56
|
+
it 'should\'t genearte the section uploader' do
|
57
|
+
file('app/uploaders/adminpanel/section_uploader.rb').should_not exist
|
37
58
|
end
|
38
59
|
|
39
|
-
|
60
|
+
it 'should\'t generate the categories migration' do
|
61
|
+
migration_file('db/migrate/create_adminpanel_categories_table.rb').should_not exist
|
62
|
+
end
|
40
63
|
|
64
|
+
it 'should\'t generate the category file' do
|
65
|
+
file('app/models/adminpanel/category.rb').should_not exist
|
66
|
+
end
|
67
|
+
end
|
41
68
|
end
|