adminpanel 2.6.1 → 3.0.0

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/adminpanel.gemspec +6 -6
  4. data/app/assets/images/adminpanel/magnifier.png +0 -0
  5. data/app/assets/javascripts/adminpanel/bootstrap-data-confirm.coffee.erb +142 -0
  6. data/app/assets/javascripts/adminpanel/dom-filter.coffee +15 -0
  7. data/app/assets/javascripts/adminpanel/dropzone.js +1728 -0
  8. data/app/assets/javascripts/adminpanel/filter-side-menu.coffee +4 -0
  9. data/app/assets/javascripts/adminpanel/gallery.js.coffee.erb +79 -0
  10. data/app/assets/javascripts/adminpanel/realm.js +0 -3
  11. data/app/assets/stylesheets/adminpanel/_search-input.scss.erb +11 -0
  12. data/app/assets/stylesheets/adminpanel/bootstrap.css.erb +1 -1
  13. data/app/assets/stylesheets/adminpanel/dropzone.css +515 -0
  14. data/app/assets/stylesheets/adminpanel/theme.css.scss.erb +1 -1
  15. data/app/controllers/adminpanel/analytics_controller.rb +7 -51
  16. data/app/controllers/adminpanel/application_controller.rb +1 -0
  17. data/app/controllers/adminpanel/roles_controller.rb +4 -1
  18. data/app/controllers/adminpanel/sections_controller.rb +1 -7
  19. data/app/controllers/concerns/adminpanel/facebook_actions.rb +3 -0
  20. data/app/controllers/concerns/adminpanel/gallery_actions.rb +31 -0
  21. data/app/controllers/concerns/adminpanel/rest_actions.rb +4 -1
  22. data/app/helpers/adminpanel/analytics_helper.rb +8 -18
  23. data/app/helpers/adminpanel/application_helper.rb +10 -2
  24. data/app/helpers/adminpanel/router_helper.rb +6 -2
  25. data/app/helpers/adminpanel/shared_pages_helper.rb +5 -3
  26. data/app/models/adminpanel/analytic.rb +4 -0
  27. data/app/models/adminpanel/image.rb +31 -0
  28. data/app/models/adminpanel/sectionfile.rb +1 -3
  29. data/app/models/concerns/adminpanel/base.rb +51 -7
  30. data/app/models/concerns/adminpanel/sortable_gallery.rb +12 -17
  31. data/app/views/adminpanel/analytics/_header.html.erb +1 -1
  32. data/app/views/adminpanel/form/_adminpanel_file_field.html.erb +27 -23
  33. data/app/views/adminpanel/icons/_delete.html.erb +1 -0
  34. data/app/views/adminpanel/sections/edit.html.erb +1 -12
  35. data/app/views/adminpanel/shared/_form_fields.html.erb +1 -0
  36. data/app/views/adminpanel/templates/destroy.js.erb +3 -0
  37. data/app/views/adminpanel/templates/index.html.erb +4 -4
  38. data/app/views/adminpanel/templates/show.html.erb +57 -52
  39. data/app/views/layouts/adminpanel/_side_menu.html.erb +18 -3
  40. data/config/initializers/adminpanel/assets.rb +4 -0
  41. data/config/locales/en.yml +24 -9
  42. data/config/locales/es.yml +18 -33
  43. data/config/routes.rb +10 -5
  44. data/lib/adminpanel/version.rb +1 -1
  45. data/lib/generators/adminpanel/gallery/gallery_generator.rb +0 -8
  46. data/lib/generators/adminpanel/gallery/templates/gallery_template.rb +7 -18
  47. data/lib/generators/adminpanel/gallery/templates/uploader.rb +1 -1
  48. data/lib/generators/adminpanel/initialize/templates/create_adminpanel_tables.rb +9 -5
  49. data/lib/generators/adminpanel/resource/resource_generator.rb +12 -16
  50. data/lib/generators/adminpanel/resource/resource_generator_helper.rb +23 -16
  51. data/test/dummy/.gitignore +2 -2
  52. data/test/dummy/app/controllers/adminpanel/products_controller.rb +1 -1
  53. data/test/dummy/app/models/adminpanel/galleryfile.rb +1 -13
  54. data/test/dummy/app/models/adminpanel/photo.rb +2 -9
  55. data/test/dummy/app/models/adminpanel/product.rb +1 -0
  56. data/test/dummy/config/initializers/carrierwave.rb +5 -0
  57. data/test/dummy/db/schema.rb +10 -18
  58. data/test/dummy/test/fixtures/adminpanel/galleries.yml +3 -3
  59. data/test/dummy/test/fixtures/adminpanel/images.yml +60 -0
  60. data/test/dummy/test/fixtures/adminpanel/products.yml +2 -2
  61. data/test/dummy/test/fixtures/{dog fries.png → attachments/dog-fries.png} +0 -0
  62. data/test/dummy/test/fixtures/attachments/hipster.jpg +0 -0
  63. data/test/dummy/test/fixtures/attachments/thumb_hipster.jpg +0 -0
  64. data/test/features/shared/form/belongs_to_remote_test.rb +1 -4
  65. data/test/features/shared/form/resource_field_test.rb +1 -1
  66. data/test/features/shared/resource/edit_test.rb +2 -5
  67. data/test/features/shared/resource/new_test.rb +5 -2
  68. data/test/features/shared/ui/dropzone_element_generation_test.rb +27 -0
  69. data/test/features/shared/ui/filtering_test.rb +29 -0
  70. data/test/generators/gallery_generator_test.rb +0 -10
  71. data/test/generators/resource_generator_test.rb +30 -6
  72. data/test/helpers/shared_pages_helper_test.rb +22 -43
  73. data/test/models/adminpanel/image_test.rb +31 -0
  74. data/test/models/adminpanel/sortable_gallery_unit_test.rb +8 -8
  75. data/test/support/view_case.rb +2 -2
  76. metadata +53 -43
  77. data/app/assets/images/adminpanel/dialogs.png +0 -0
  78. data/app/assets/images/adminpanel/icons-big.png +0 -0
  79. data/app/assets/images/adminpanel/icons-small.png +0 -0
  80. data/app/assets/images/adminpanel/select2.png +0 -0
  81. data/app/assets/images/adminpanel/select2x2.png +0 -0
  82. data/app/assets/images/adminpanel/toolbar.png +0 -0
  83. data/app/assets/javascripts/adminpanel/jquery.knob.js +0 -652
  84. data/app/assets/javascripts/adminpanel/jquery.masonry.min.js +0 -10
  85. data/app/assets/javascripts/adminpanel/jquery.slimscroll.min.js +0 -14
  86. data/app/views/adminpanel/analytics/_fb_statistic_widget.html.erb +0 -63
  87. data/app/views/adminpanel/analytics/fb.html.erb +0 -106
  88. data/test/dummy/config/carrierwave.rb +0 -6
  89. data/test/dummy/public/favicon.ico +0 -0
  90. data/test/dummy/test/fixtures/adminpanel/galleryfiles.yml +0 -42
  91. data/test/features/shared/ui/max_images_gallery_test.rb +0 -51
@@ -0,0 +1,60 @@
1
+ first:
2
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
3
+ type: Adminpanel::Galleryfile
4
+ position: 1
5
+ model: one(Adminpanel::Gallery)
6
+ created_at: <%= Date.today %>
7
+ updated_at: <%= Date.today %>
8
+ second:
9
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
10
+ type: Adminpanel::Galleryfile
11
+ model: one(Adminpanel::Gallery)
12
+ position: 2
13
+ created_at: <%= Date.today %>
14
+ updated_at: <%= Date.today %>
15
+ third:
16
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
17
+ type: Adminpanel::Galleryfile
18
+ model: one(Adminpanel::Gallery)
19
+ position: 3
20
+ created_at: <%= Date.today %>
21
+ updated_at: <%= Date.today %>
22
+ fourth:
23
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
24
+ type: Adminpanel::Galleryfile
25
+ model: one(Adminpanel::Gallery)
26
+ position: 4
27
+ created_at: <%= Date.today %>
28
+ updated_at: <%= Date.today %>
29
+ fifth:
30
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
31
+ type: Adminpanel::Galleryfile
32
+ model: one(Adminpanel::Gallery)
33
+ position: 5
34
+ created_at: <%= Date.today %>
35
+ updated_at: <%= Date.today %>
36
+ first_2:
37
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
38
+ type: Adminpanel::Galleryfile
39
+ model: two(Adminpanel::Gallery)
40
+ position: 1
41
+ created_at: <%= Date.today %>
42
+ updated_at: <%= Date.today %>
43
+ second_2:
44
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
45
+ type: Adminpanel::Galleryfile
46
+ model: two(Adminpanel::Gallery)
47
+ position: 2
48
+ created_at: <%= Date.today %>
49
+ updated_at: <%= Date.today %>
50
+ unassigned:
51
+ type: Adminpanel::Galleryfile
52
+ created_at: <%= Date.yesterday %>
53
+ updated_at: <%= Date.yesterday %>
54
+ first_product_photo:
55
+ file: <%= File.open(Rails.root.join("test", "fixtures", 'attachments', 'dog-fries.png')) %>
56
+ type: Adminpanel::Photo
57
+ model: first(Adminpanel::Product)
58
+ position: 1
59
+ created_at: <%= Date.today %>
60
+ updated_at: <%= Date.today %>
@@ -1,6 +1,6 @@
1
1
  first:
2
2
  name: "Product saved"
3
- price: 123.45
3
+ price: "123.45"
4
4
  description: lorem ipsum dolor sit amec
5
5
  created_at: <%= Date.today %>
6
6
  updated_at: <%= Date.today %>
@@ -8,7 +8,7 @@ first:
8
8
 
9
9
  limit_images:
10
10
  name: Product with limit
11
- price: 123.45
11
+ price: "123.45"
12
12
  description: lorem ipsum dolor sit amec
13
13
  created_at: <%= Date.today %>
14
14
  updated_at: <%= Date.today %>
@@ -24,10 +24,7 @@ class BelongsToRemoteTest < ViewCase
24
24
  fill_in 'product_description', with: 'remote description lorem'
25
25
  fill_in 'product_price', with: '12.3'
26
26
  submit_modal 'Agregar Producto'
27
- # remote_product = Adminpanel::Product.last
28
- # assert_equal 'remote_product', remote_product.name
29
- # assert_equal 'remote descrpition lorem', remote_product.description
30
- # assert_equal '12.3', remote_product.price
27
+
31
28
  assert_xpath("//option[contains(text(), 'remote product' )]")
32
29
  end
33
30
 
@@ -12,7 +12,7 @@ class ResourceFieldTest < ViewCase
12
12
 
13
13
  assert selector.find('option', text: 'Categoria')
14
14
  assert selector.find('option', text: 'Producto')
15
- assert selector.find('option', text: 'Google Analytics')
15
+ assert selector.find('option', text: 'Analytics')
16
16
  assert selector.find('option', text: 'Usuario')
17
17
  assert selector.find('option', text: 'Rol')
18
18
  assert selector.find('option', text: 'Permiso')
@@ -6,11 +6,9 @@ class EditTest < ViewCase
6
6
  setup :visit_adminpanel_new_product_path
7
7
  teardown :teardown
8
8
 
9
- def test_shared_new_page_messages
10
- assert_button("Actualizar #{adminpanel_products(:first).name}")
11
- end
12
-
13
9
  def test_submitting_with_same_information
10
+ sleep 0.2
11
+ assert_button("Actualizar #{adminpanel_products(:first).name}")
14
12
  click_button("Actualizar #{adminpanel_products(:first).name}")
15
13
  assert_content( adminpanel_products(:first).name )
16
14
  assert_content( adminpanel_products(:first).price )
@@ -21,7 +19,6 @@ class EditTest < ViewCase
21
19
  fill_in 'product_price', with: ''
22
20
  click_button("Actualizar #{adminpanel_products(:first).name}")
23
21
  assert_content('Producto no pudo guardarse debido a 2 errores')
24
- saved_product = Adminpanel::Product.last
25
22
  end
26
23
 
27
24
  protected
@@ -10,13 +10,16 @@ class NewTest < ViewCase
10
10
  end
11
11
 
12
12
  def test_submitting_with_invalid_information
13
+ sleep 0.2
13
14
  click_button('Agregar Producto')
14
15
  assert_content('Producto no pudo guardarse debido a 3 errores')
15
16
  end
16
17
 
17
18
  def test_submitting_with_valid_information
18
- fill_in 'product_name', :with => 'product name'
19
- fill_in 'product_price', :with => '855.5'
19
+ fill_in 'product_name', with: 'product name'
20
+ fill_in 'product_price', with: '855.5'
21
+
22
+
20
23
  page.execute_script(
21
24
  %Q(
22
25
  $('#product_description').data('wysihtml5').editor.setValue('que pepsi');
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class DropzoneElementGenerationTest < ViewCase
4
+ fixtures :all
5
+
6
+ setup :sign_in
7
+
8
+ test "rendering the form should display the dropzone element" do
9
+ visit adminpanel.new_product_path
10
+
11
+ assert_selector '#photo_dropzone'
12
+ end
13
+
14
+ test "render the form should add a hidden input for each existing photos" do
15
+ product = adminpanel_products(:first)
16
+ visit adminpanel.edit_product_path(product)
17
+
18
+ assert_selector '#photo_dropzone'
19
+ assert_selector "input[type='hidden'][name='product[photo_ids][]']", count: product.photos.count
20
+ end
21
+
22
+ protected
23
+ def sign_in
24
+ visit adminpanel.signin_path
25
+ login
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class FilteringTest < ViewCase
4
+ fixtures :all
5
+
6
+ setup :sign_in
7
+
8
+ def test_input_is_present
9
+ assert_selector '#search-input'
10
+ end
11
+
12
+ def test_filters_all_elements_when_nothing_matched
13
+ fill_in 'search-input', with: 'abcdeffj nothing matches this'
14
+ # 1 since search-input is inside an .accordion-group
15
+ assert_selector '.accordion-group', count: 1
16
+ end
17
+
18
+ def test_filter_to_only_matched_element
19
+ fill_in 'search-input', with: 'pRODuct'
20
+ # 2 since search-input is inside an .accordion-group
21
+ assert_selector '.accordion-group', count: 2
22
+ end
23
+
24
+ protected
25
+ def sign_in
26
+ visit adminpanel.signin_path
27
+ login
28
+ end
29
+ end
@@ -8,11 +8,6 @@ class GalleryGeneratorTest < Rails::Generators::TestCase
8
8
 
9
9
  def test_the_generation_of_the_productfiles_migration
10
10
  run_generator ['Product']
11
- assert_migration(
12
- 'db/migrate/create_adminpanel_productfiles.rb',
13
- /t.integer :product_id/,
14
- /create_table :adminpanel_productfiles/
15
- )
16
11
  assert_file(
17
12
  'app/models/adminpanel/productfile.rb',
18
13
  /mount_uploader :file, ProductfileUploader/
@@ -24,11 +19,6 @@ class GalleryGeneratorTest < Rails::Generators::TestCase
24
19
 
25
20
  def test_the_generation_of_the_snake_cases_migration
26
21
  run_generator ['snake_case']
27
- assert_migration(
28
- 'db/migrate/create_adminpanel_snake_casefiles.rb',
29
- /t.integer :snake_case_id/,
30
- /create_table :adminpanel_snake_casefiles/
31
- )
32
22
  assert_file(
33
23
  'app/models/adminpanel/snake_casefile.rb',
34
24
  /mount_uploader :file, SnakeCasefileUploader/
@@ -41,7 +41,6 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
41
41
  --no-skip-gallery
42
42
  )
43
43
  assert_file 'app/models/adminpanel/postfile.rb'
44
- assert_migration 'db/migrate/create_adminpanel_postfiles.rb'
45
44
  end
46
45
 
47
46
  def test_initializer_update
@@ -94,6 +93,27 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
94
93
  )
95
94
  end
96
95
 
96
+ def test_multiple_files
97
+ run_generator %w(
98
+ fily_resource
99
+ pdf1:file
100
+ pdf2:file
101
+ pdf3:file
102
+ img1:image
103
+ )
104
+ assert_file(
105
+ 'app/models/adminpanel/fily_resource.rb',
106
+ /'pdf1' => {/,
107
+ /'pdf2' => {/,
108
+ /'pdf3' => {/,
109
+ /mount_uploader :pdf1, FilyResourcePdf1Uploader/,
110
+ /mount_uploader :pdf2, FilyResourcePdf2Uploader/,
111
+ /mount_uploader :pdf3, FilyResourcePdf3Uploader/,
112
+ /mount_uploader :img1, FilyResourceImg1Uploader/,
113
+ /'type' => 'file_field'/,
114
+ )
115
+ end
116
+
97
117
  def test_model_generation
98
118
  run_generator %w(
99
119
  post
@@ -115,7 +135,8 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
115
135
  description:wysiwyg
116
136
  number:float
117
137
  flag:boolean
118
- avatar:file
138
+ avatar:image
139
+ user:belongs_to
119
140
  quantity:integer
120
141
  date:datepicker
121
142
  categories:has_many
@@ -136,10 +157,12 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
136
157
  /'flag' => {/,
137
158
  /'type' => 'boolean',/,
138
159
  /'avatar' => {/,
139
- /'type' => 'file_field',/,
160
+ /'type' => 'image_field',/,
140
161
  /'quantity' => {/,
141
162
  /'type' => 'number_field',/,
142
163
  /'date' => {/,
164
+ /'user_id' => {/,
165
+ /Adminpanel::User.all/,
143
166
  /'type' => 'date',/,
144
167
  /'admin_postfiles' => {/,
145
168
  /'type' => 'adminpanel_file_field',/,
@@ -187,19 +210,20 @@ class ResourceGeneratorTest < Rails::Generators::TestCase
187
210
  def test_generating_with_single_attachment_file
188
211
  run_generator %w(
189
212
  monkey
190
- avatar:file
213
+ avatar:image
214
+ user:belongs_to
191
215
  )
192
216
  assert_file(
193
217
  'app/models/adminpanel/monkey.rb',
194
218
  /def name/,
195
219
  /mount_uploader :avatar, MonkeyAvatarUploader/,
196
220
  /'avatar' => {/,
197
- /'type' => 'file_field'/
221
+ /'type' => 'image_field'/
198
222
  )
199
223
  assert_file(
200
224
  'app/uploaders/adminpanel/monkey_avatar_uploader.rb',
201
225
  /class MonkeyAvatarUploader </
202
- )
226
+ )
203
227
  end
204
228
 
205
229
  def test_that_runs_without_errors
@@ -35,14 +35,10 @@ class SharedPagesHelperTest < ActionView::TestCase
35
35
  def test_string_in_field_value
36
36
  test_object = adminpanel_test_objects(:first)
37
37
  attribute = 'name'
38
- properties = {
39
- 'type' => 'text_field',
40
- 'label' => 'name'
41
- }
42
38
  assert_equal(
43
39
  'John Doe',
44
40
  field_value(
45
- properties,
41
+ 'text_field',
46
42
  attribute,
47
43
  test_object
48
44
  ),
@@ -53,14 +49,10 @@ class SharedPagesHelperTest < ActionView::TestCase
53
49
  def test_boolean_in_field_value
54
50
  test_object = adminpanel_test_objects(:first)
55
51
  attribute = 'boolean'
56
- properties = {
57
- 'type' => 'boolean',
58
- 'label' => 'boolean'
59
- }
60
52
  assert_equal(
61
53
  I18n.t('action.is_true'),
62
54
  field_value(
63
- properties,
55
+ 'boolean',
64
56
  attribute,
65
57
  test_object
66
58
  ),
@@ -72,17 +64,10 @@ class SharedPagesHelperTest < ActionView::TestCase
72
64
  @model = Adminpanel::Salesman # simulating salesman controller
73
65
  test_object = adminpanel_salesmen(:one)
74
66
  attribute = 'product_id'
75
- properties = {
76
- 'type' => 'select',
77
- 'label' => 'product',
78
- 'model' => Proc.new { |object|
79
- Adminpanel::Product.all
80
- }
81
- }
82
67
  assert_equal(
83
68
  'Product saved',
84
69
  field_value(
85
- properties,
70
+ 'select',
86
71
  attribute,
87
72
  test_object
88
73
  )
@@ -92,13 +77,6 @@ class SharedPagesHelperTest < ActionView::TestCase
92
77
  def test_has_many_in_field_value
93
78
  test_object = adminpanel_test_objects(:first)
94
79
  attribute = 'category_ids'
95
- properties = {
96
- 'type' => 'checkbox',
97
- 'label' => 'checkbox label',
98
- 'options' => Proc.new { |object|
99
- Adminpanel::Category.all
100
- },
101
- }
102
80
  assert_equal(
103
81
  content_tag(:ul, nil) do
104
82
  content_tag(:li, nil, class: 'priority-low') do
@@ -109,7 +87,7 @@ class SharedPagesHelperTest < ActionView::TestCase
109
87
  end
110
88
  end,
111
89
  field_value(
112
- properties,
90
+ 'checkbox',
113
91
  attribute,
114
92
  test_object
115
93
  ),
@@ -120,17 +98,10 @@ class SharedPagesHelperTest < ActionView::TestCase
120
98
  def test_enum_in_field_value
121
99
  test_object = adminpanel_permissions(:publish)
122
100
  attribute = 'action'
123
- properties = {
124
- 'type' => 'enum_field',
125
- 'label' => 'hasmany',
126
- 'options' => Proc.new { |object|
127
- Adminpanel::Category.all
128
- },
129
- }
130
101
  assert_equal(
131
102
  'Publicar en Redes Sociales',
132
103
  field_value(
133
- properties,
104
+ 'enum_field',
134
105
  attribute,
135
106
  test_object
136
107
  ),
@@ -141,25 +112,33 @@ class SharedPagesHelperTest < ActionView::TestCase
141
112
  def test_file_field_in_field_value
142
113
  test_object = adminpanel_galleries(:one)
143
114
  attribute = 'file'
144
- properties = {
145
- 'type' => 'file_field',
146
- 'label' => 'file'
147
- }
148
115
  assert_equal(
149
- content_tag(:ul) do
116
+ test_object[attribute],
117
+ field_value(
118
+ 'file_field',
119
+ attribute,
120
+ test_object
121
+ )
122
+ )
123
+ end
124
+
125
+ def test_image_field_in_field_value
126
+ test_object = adminpanel_galleries(:one)
127
+ attribute = 'file'
128
+ assert_equal(
129
+ content_tag(:ul) {
150
130
  image_tag(
151
131
  test_object.send(
152
132
  "#{attribute}_url",
153
133
  :thumb
154
134
  )
155
135
  )
156
- end,
136
+ },
157
137
  field_value(
158
- properties,
138
+ 'image_field',
159
139
  attribute,
160
140
  test_object
161
- ),
162
- 'regex didn\'t matched :('
141
+ )
163
142
  )
164
143
  end
165
144