dandify 0.0.1 → 3.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -8
- data/Rakefile +2 -2
- data/app/assets/stylesheets/spree/backend/dandify.scss +55 -0
- data/app/controllers/spree/admin/stylesheets_controller.rb +17 -8
- data/app/controllers/spree/stylesheets_controller.rb +3 -3
- data/app/helpers/spree/admin/navigation_helper_decorator.rb +20 -4
- data/app/helpers/spree/admin/stylesheet_helper.rb +12 -2
- data/app/models/spree/stylesheet_version.rb +2 -1
- data/app/models/spree/unknown_user.rb +11 -0
- data/app/models/spree/user_decorator.rb +1 -1
- data/app/models/spree/user_identifier.rb +13 -0
- data/app/overrides/spree/admin/shared/{_configuration_menu → sub_menu/_configuration}/add_dandify_to_admin_configuration_sidebar.html.erb.deface +1 -1
- data/app/views/spree/admin/stylesheets/_form.html.erb +29 -7
- data/app/views/spree/admin/stylesheets/_versions.html.erb +16 -19
- data/app/views/spree/admin/stylesheets/edit.html.erb +4 -5
- data/app/views/spree/admin/stylesheets/new.html.erb +4 -5
- data/app/views/spree/admin/stylesheets/show.html.erb +22 -8
- data/config/locales/en.yml +39 -27
- data/config/routes.rb +1 -1
- data/db/migrate/20140617221725_add_paper_trail_versions.rb +5 -5
- data/lib/dandify.rb +0 -1
- data/lib/dandify/version.rb +1 -1
- data/lib/generators/dandify/install/install_generator.rb +10 -9
- data/spec/controllers/spree/admin/stylesheets_controller_spec.rb +109 -55
- data/spec/controllers/spree/stylesheets_controller_spec.rb +26 -22
- data/spec/features/buttons_spec.rb +69 -0
- data/spec/features/dandy_style_spec.rb +1 -0
- data/spec/features/managing_stylesheet_spec.rb +86 -0
- data/spec/features/sidebar_spec.rb +17 -9
- data/spec/helpers/admin/navigation_helper_spec.rb +13 -7
- data/spec/helpers/admin/stylesheet_helper_spec.rb +47 -0
- data/spec/models/spree/blank_stylesheet_spec.rb +5 -3
- data/spec/models/spree/stylesheet_spec.rb +73 -69
- data/spec/spec_helper.rb +13 -12
- metadata +47 -59
- data/app/assets/stylesheets/spree/backend/dandify.css +0 -42
- data/config/spring.rb +0 -1
- data/lib/tasks/dandify_tasks.rake +0 -4
- data/spec/features/managing_stylsheet_spec.rb +0 -80
- data/spec/features/viewing_admin_spec.rb +0 -49
data/config/locales/en.yml
CHANGED
@@ -1,37 +1,49 @@
|
|
1
1
|
---
|
2
2
|
en:
|
3
|
-
activerecord:
|
4
|
-
attributes:
|
5
|
-
spree/stylesheet:
|
6
|
-
style_raw: Styles
|
7
3
|
spree:
|
8
4
|
dandify:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
admin:
|
6
|
+
action:
|
7
|
+
create: Created
|
8
|
+
update: Revised
|
9
|
+
destroy: Deleted
|
10
|
+
unknown: Unknown
|
11
|
+
no_resource_found: No stylesheet found
|
12
|
+
create_one: Let's get dandy
|
13
|
+
sidebar: Store Stylesheet
|
14
|
+
confirm:
|
15
|
+
restore: Are you sure you want to restore this version of the stylesheet?
|
16
|
+
destroy: Are you sure you want to delete your stylesheet?
|
13
17
|
buttons:
|
14
|
-
new: Create
|
15
|
-
edit: Edit
|
16
|
-
|
18
|
+
new: Create Stylesheet
|
19
|
+
edit: Edit
|
20
|
+
destroy: Delete
|
21
|
+
icons:
|
22
|
+
restore: Restore
|
23
|
+
destroy: Destroy
|
24
|
+
title:
|
25
|
+
show: Custom Styles
|
26
|
+
new: Creating Custom Styles
|
27
|
+
edit: Editing Custom Styles
|
28
|
+
flash:
|
29
|
+
success:
|
30
|
+
new: New stylesheet has been created.
|
31
|
+
edit: Stylesheet has been updated. A new revision has been created.
|
32
|
+
restore: Stylesheet has been restored. A new revision has been created.
|
33
|
+
destroyed: Stylesheet has been destroyed. A new revision has been created.
|
34
|
+
error:
|
35
|
+
restore: Unable to restore stylesheet.
|
17
36
|
headers:
|
18
|
-
|
37
|
+
on: On
|
19
38
|
author: Author
|
20
39
|
action: Action
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
edit:
|
25
|
-
title: Editing Custom Styles
|
26
|
-
success: Stylesheet has been updated. A new revision has been created.
|
27
|
-
restore:
|
28
|
-
name: Restore
|
29
|
-
success: Stylesheet has been restored. A new revision has been created.
|
30
|
-
error: Unable to restore stylesheet.
|
31
|
-
form:
|
32
|
-
fieldset: Stylesheet
|
33
|
-
label: Styles
|
40
|
+
revision: Revisions
|
41
|
+
labels: &dandify_labels
|
42
|
+
style_raw: Styles
|
34
43
|
notes:
|
35
44
|
sass: Stylesheets are compiled and minified using a CSS preprocessor. Valid SCSS can be used here.
|
36
|
-
|
37
|
-
|
45
|
+
|
46
|
+
activerecord:
|
47
|
+
attributes:
|
48
|
+
spree/stylesheet:
|
49
|
+
<<: *dandify_labels
|
data/config/routes.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
class AddPaperTrailVersions < ActiveRecord::Migration
|
2
2
|
def change
|
3
3
|
create_table :versions do |t|
|
4
|
-
t.string
|
5
|
-
t.integer
|
6
|
-
t.string
|
7
|
-
t.string
|
8
|
-
t.text
|
4
|
+
t.string :item_type, null: false
|
5
|
+
t.integer :item_id, null: false
|
6
|
+
t.string :event, null: false
|
7
|
+
t.string :whodunnit
|
8
|
+
t.text :object
|
9
9
|
t.datetime :created_at
|
10
10
|
end
|
11
11
|
add_index :versions, [:item_type, :item_id]
|
data/lib/dandify.rb
CHANGED
data/lib/dandify/version.rb
CHANGED
@@ -3,21 +3,22 @@ module Dandify
|
|
3
3
|
class InstallGenerator < Rails::Generators::Base
|
4
4
|
class_option :auto_run_migrations, type: :boolean, default: true
|
5
5
|
|
6
|
-
def
|
7
|
-
|
6
|
+
def add_javascripts
|
7
|
+
append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/dandify\n"
|
8
|
+
append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/dandify\n"
|
8
9
|
end
|
9
10
|
|
10
11
|
def add_stylesheets
|
11
|
-
inject_into_file 'vendor/assets/stylesheets/spree/
|
12
|
+
inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', "*= require spree/frontend/dandify\n ", before: /\*\//, verbose: true
|
13
|
+
inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', "*= require spree/backend/dandify\n ", before: /\*\//, verbose: true
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_migrations
|
17
|
+
run 'bundle exec rake railties:install:migrations FROM=dandify'
|
12
18
|
end
|
13
19
|
|
14
20
|
def run_migrations
|
15
|
-
|
16
|
-
if ['', 'y'].include?(res)
|
17
|
-
run 'bundle exec rake db:migrate'
|
18
|
-
else
|
19
|
-
logger 'Skipping rake db:migrate, don\'t forget to run it!'
|
20
|
-
end
|
21
|
+
run 'bundle exec rake db:migrate'
|
21
22
|
end
|
22
23
|
end
|
23
24
|
end
|
@@ -1,71 +1,125 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
module Spree
|
4
|
+
module Admin
|
5
|
+
describe StylesheetsController, type: :controller do
|
6
|
+
stub_authorization!
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
let(:show_path) { spree.admin_stylesheets_path }
|
9
|
+
let(:good_style) { 'body {color:#ffff00;}' }
|
10
|
+
let(:bad_style) { 'body {color:#ffff00;' }
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
before do
|
13
|
+
user = create :admin_user
|
14
|
+
controller.stub(try_spree_current_user: user)
|
15
|
+
end
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
expect(assigns[:style]).to be_new_record
|
19
|
-
end
|
17
|
+
describe 'GET #show' do
|
18
|
+
it 'assigns new instance when none is found' do
|
19
|
+
spree_get :show
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
spree_get :show
|
24
|
-
expect(assigns[:style]).to eq style
|
25
|
-
end
|
26
|
-
end
|
21
|
+
expect(assigns[:style]).to be_new_record
|
22
|
+
end
|
27
23
|
|
28
|
-
|
29
|
-
|
30
|
-
style = create :stylesheet
|
31
|
-
spree_get :show
|
32
|
-
expect(assigns[:style]).to eq style
|
33
|
-
expect(response).to render_template(:show)
|
34
|
-
end
|
24
|
+
it 'assigns existing' do
|
25
|
+
style = create :stylesheet
|
35
26
|
|
36
|
-
|
37
|
-
spree_post :create, stylesheet: { style_raw: bad_style }
|
38
|
-
expect(response).to render_template(:new)
|
39
|
-
end
|
40
|
-
end
|
27
|
+
spree_get :show
|
41
28
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
spree_get :show
|
46
|
-
expect(response).to render_template(:show)
|
47
|
-
end
|
29
|
+
expect(assigns[:style]).to eq style
|
30
|
+
end
|
31
|
+
end
|
48
32
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
33
|
+
describe 'GET #new' do
|
34
|
+
it 'renders template' do
|
35
|
+
spree_get :new
|
54
36
|
|
55
|
-
|
56
|
-
|
37
|
+
expect(response).to render_template(:new)
|
38
|
+
end
|
39
|
+
end
|
57
40
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
41
|
+
describe 'POST #create' do
|
42
|
+
it 'redirects to show with good data' do
|
43
|
+
spree_post :create,
|
44
|
+
stylesheet: { style_raw: '#main { display: inline; }' }
|
45
|
+
|
46
|
+
expect(response).to redirect_to(admin_stylesheets_path)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'renders new with bad data' do
|
50
|
+
spree_post :create, stylesheet: { style_raw: bad_style }
|
51
|
+
|
52
|
+
expect(response).to render_template(:new)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'GET #edit' do
|
57
|
+
it 'can create a revision' do
|
58
|
+
stylesheet = create :stylesheet
|
59
|
+
|
60
|
+
spree_get :edit
|
61
|
+
|
62
|
+
expect(assigns[:style]).to eq stylesheet
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'PUT #update' do
|
67
|
+
before { create :stylesheet }
|
68
|
+
|
69
|
+
it 'redirects to show with good data' do
|
70
|
+
spree_post :update,
|
71
|
+
stylesheet: { style_raw: '#main { display: inline; }' }
|
72
|
+
|
73
|
+
expect(response).to redirect_to(admin_stylesheets_path)
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'renders edit with bad data' do
|
77
|
+
spree_post :update, stylesheet: { style_raw: bad_style }
|
78
|
+
|
79
|
+
expect(response).to render_template(:edit)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe 'POST #restore', versioning: true do
|
84
|
+
before { create :stylesheet }
|
85
|
+
|
86
|
+
it 'fails to reify when there is only one revision' do
|
87
|
+
spree_post :restore
|
88
|
+
|
89
|
+
expect(flash[:error]).to eq(
|
90
|
+
Spree.t('dandify.admin.flash.error.restore')
|
91
|
+
)
|
92
|
+
|
93
|
+
expect(response).to redirect_to show_path
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'able to reify when there is more than one revision' do
|
97
|
+
style = Spree::Stylesheet.first
|
98
|
+
|
99
|
+
style.update_attributes style_raw: '#main { display: block; }'
|
100
|
+
style.update_attributes style_raw: '#main { display: none; }'
|
101
|
+
|
102
|
+
spree_post :restore, id: PaperTrail::Version.second.id
|
103
|
+
|
104
|
+
expect(flash[:success]).to eq(
|
105
|
+
Spree.t('dandify.admin.flash.success.restore')
|
106
|
+
)
|
107
|
+
expect(response).to redirect_to show_path
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe 'DELETE #destroy' do
|
112
|
+
it 'sends #destroy to returned model from #first_or_initialize' do
|
113
|
+
fake_stylesheet = instance_double(Spree::Stylesheet, destroy: true)
|
114
|
+
allow(Spree::Stylesheet).to receive(:first_or_initialize).
|
115
|
+
and_return fake_stylesheet
|
116
|
+
|
117
|
+
spree_delete :destroy
|
63
118
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
expect(response).to redirect_to show_path
|
119
|
+
expect(fake_stylesheet).to have_received(:destroy)
|
120
|
+
expect(response).to redirect_to admin_stylesheets_path
|
121
|
+
end
|
122
|
+
end
|
69
123
|
end
|
70
124
|
end
|
71
125
|
end
|
@@ -1,36 +1,40 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
spree_get :show, format: :xml
|
3
|
+
module Spree
|
4
|
+
describe StylesheetsController, '#show', type: :controller do
|
5
|
+
stub_authorization!
|
7
6
|
|
8
|
-
|
9
|
-
|
7
|
+
context 'with a bad format' do
|
8
|
+
it 'responds with blank sheet' do
|
9
|
+
spree_get :show, format: :xml
|
10
|
+
|
11
|
+
expect(response.header['Content-Type']).to include 'text/css'
|
12
|
+
end
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
it 'responds with found sheet' do
|
15
|
+
css = create(:stylesheet).style_compressed
|
16
|
+
spree_get :show, format: :atom
|
14
17
|
|
15
|
-
|
16
|
-
|
18
|
+
expect(response.header['Content-Type']).to include 'text/css'
|
19
|
+
expect(assigns[:style].style_compressed).to eq css
|
20
|
+
end
|
17
21
|
end
|
18
|
-
end
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
context 'when there is no stylesheet' do
|
24
|
+
it 'displays a blank stylesheet' do
|
25
|
+
spree_get :show, format: :css
|
23
26
|
|
24
|
-
|
27
|
+
expect(assigns[:style]).to be_a Spree::BlankStylesheet
|
28
|
+
end
|
25
29
|
end
|
26
|
-
end
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
31
|
+
context 'when there is a stylesheet' do
|
32
|
+
it 'assigns the stored sheet' do
|
33
|
+
create :stylesheet
|
34
|
+
spree_get :show, format: :css
|
32
35
|
|
33
|
-
|
36
|
+
expect(assigns[:style]).to be_a Spree::Stylesheet
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
feature 'Managing stylesheet' do
|
4
|
+
stub_authorization!
|
5
|
+
|
6
|
+
let(:show_path) { spree.admin_stylesheets_path }
|
7
|
+
let(:new_path) { spree.new_admin_stylesheets_path }
|
8
|
+
let(:edit_path) { spree.edit_admin_stylesheets_path }
|
9
|
+
|
10
|
+
context 'create stylesheet link' do
|
11
|
+
it 'is available when there are no stylesheets' do
|
12
|
+
visit show_path
|
13
|
+
|
14
|
+
expect(page).to have_link(
|
15
|
+
Spree.t('dandify.admin.buttons.new'), href: new_path
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'is not available when there are stylesheets' do
|
20
|
+
create(:stylesheet)
|
21
|
+
|
22
|
+
visit show_path
|
23
|
+
|
24
|
+
expect(page).to_not have_link(
|
25
|
+
Spree.t('dandify.admin.buttons.new'), href: new_path
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'edit stylesheet link' do
|
31
|
+
it 'is not available when there are stylesheets' do
|
32
|
+
visit show_path
|
33
|
+
|
34
|
+
expect(page).to_not have_link(
|
35
|
+
Spree.t('dandify.admin.buttons.edit'), href: edit_path
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'is available when there are stylesheets' do
|
40
|
+
create(:stylesheet)
|
41
|
+
|
42
|
+
visit show_path
|
43
|
+
|
44
|
+
expect(page).to have_link(
|
45
|
+
Spree.t('dandify.admin.buttons.edit'), href: edit_path
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'cancel button' do
|
51
|
+
it 'is available on `new` page' do
|
52
|
+
visit new_path
|
53
|
+
|
54
|
+
expect(page).to have_link(Spree.t('actions.cancel'), href: show_path)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'is available on `edit` page' do
|
58
|
+
visit edit_path
|
59
|
+
|
60
|
+
expect(page).to have_link(Spree.t('actions.cancel'), href: show_path)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'is not available on listing page' do
|
64
|
+
visit show_path
|
65
|
+
|
66
|
+
expect(page).not_to have_link(Spree.t('actions.cancel'), href: show_path)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|