beyond_canvas 0.15.2.pre → 0.17.0.pre

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -6
  3. data/Rakefile +3 -3
  4. data/app/assets/config/beyond_canvas_manifest.js +1 -0
  5. data/app/assets/images/icons/arrow_right.svg +1 -0
  6. data/app/assets/images/icons/close.svg +1 -0
  7. data/app/assets/images/icons/home.svg +1 -0
  8. data/app/assets/javascripts/beyond_canvas/base.js +120 -246
  9. data/app/assets/stylesheets/beyond_canvas/base.scss +8 -1
  10. data/app/assets/stylesheets/beyond_canvas/components/_action_bar.scss +28 -0
  11. data/app/assets/stylesheets/beyond_canvas/components/_breadcrumbs.scss +29 -0
  12. data/app/assets/stylesheets/beyond_canvas/components/_buttons.scss +1 -1
  13. data/app/assets/stylesheets/beyond_canvas/components/_debug.scss +10 -0
  14. data/app/assets/stylesheets/beyond_canvas/components/_forms.scss +11 -14
  15. data/app/assets/stylesheets/beyond_canvas/components/_main.scss +12 -13
  16. data/app/assets/stylesheets/beyond_canvas/components/_margins.scss +8 -0
  17. data/app/assets/stylesheets/beyond_canvas/components/_menu.scss +40 -0
  18. data/app/assets/stylesheets/beyond_canvas/components/_modals.scss +27 -0
  19. data/app/assets/stylesheets/beyond_canvas/components/_sidebar.scss +53 -0
  20. data/app/assets/stylesheets/beyond_canvas/components/_titles.scss +7 -0
  21. data/app/assets/stylesheets/beyond_canvas/settings/_breakpoints.scss +6 -6
  22. data/app/assets/stylesheets/beyond_canvas/settings/_variables.scss +77 -22
  23. data/app/controllers/beyond_canvas/application_controller.rb +2 -0
  24. data/app/controllers/beyond_canvas/authentications_controller.rb +69 -0
  25. data/app/controllers/concerns/beyond_canvas/authentication.rb +13 -0
  26. data/app/controllers/concerns/beyond_canvas/locale_management.rb +5 -4
  27. data/app/controllers/concerns/beyond_canvas/request_validation.rb +1 -1
  28. data/app/helpers/beyond_canvas/authentications_helper.rb +28 -0
  29. data/app/helpers/beyond_canvas/cockpit_app_helper.rb +17 -0
  30. data/app/helpers/beyond_canvas/debug_helper.rb +9 -0
  31. data/app/helpers/beyond_canvas/locale_switch_helper.rb +5 -1
  32. data/app/javascript/beyond_canvas/base.js +3 -0
  33. data/app/javascript/beyond_canvas/initializers/buttons.js +65 -19
  34. data/app/javascript/beyond_canvas/initializers/flash.js +9 -2
  35. data/app/javascript/beyond_canvas/initializers/inputs.js +4 -1
  36. data/app/javascript/beyond_canvas/initializers/modals.js +14 -0
  37. data/app/views/beyond_canvas/authentications/new.html.erb +27 -0
  38. data/app/views/beyond_canvas/shared/_action_bar.html.erb +15 -0
  39. data/app/views/beyond_canvas/shared/_breadcrumbs.html.erb +14 -0
  40. data/app/views/beyond_canvas/shared/_flash.html.erb +22 -12
  41. data/app/views/beyond_canvas/shared/_locales.html.erb +8 -0
  42. data/app/views/beyond_canvas/shared/_menu.html.erb +31 -0
  43. data/app/views/beyond_canvas/shared/_modal.html.erb +6 -0
  44. data/app/views/beyond_canvas/shared/_sidebar.html.erb +16 -0
  45. data/app/views/layouts/beyond_canvas/application.html.erb +31 -0
  46. data/app/views/layouts/beyond_canvas/public.html.erb +10 -1
  47. data/config/locales/en.yml +9 -0
  48. data/config/routes.rb +8 -1
  49. data/lib/beyond_canvas.rb +18 -2
  50. data/lib/beyond_canvas/configuration.rb +11 -3
  51. data/lib/beyond_canvas/engine.rb +6 -0
  52. data/lib/beyond_canvas/menu_item_registration.rb +19 -0
  53. data/lib/beyond_canvas/parameter_sanitizer.rb +43 -0
  54. data/lib/beyond_canvas/rails/routes.rb +22 -0
  55. data/lib/beyond_canvas/version.rb +1 -1
  56. data/lib/generators/beyond_canvas/controller/controller_generator.rb +19 -0
  57. data/lib/generators/beyond_canvas/controller/templates/controller.erb +20 -0
  58. data/lib/generators/beyond_canvas/custom_menu/custom_menu_generator.rb +13 -0
  59. data/lib/generators/beyond_canvas/custom_menu/templates/beyond_canvas_custom_menu.html.erb +32 -0
  60. data/lib/generators/beyond_canvas/custom_styles/custom_styles_generator.rb +1 -1
  61. data/lib/generators/beyond_canvas/custom_styles/templates/beyond_canvas_custom_styles.scss +199 -0
  62. data/lib/generators/beyond_canvas/install/install_generator.rb +13 -5
  63. data/lib/generators/beyond_canvas/install/templates/beyond_canvas.rb.erb +55 -6
  64. data/lib/generators/beyond_canvas/model/model_generator.rb +49 -0
  65. data/lib/generators/beyond_canvas/model/templates/migration.erb +18 -0
  66. data/lib/generators/beyond_canvas/model/templates/model.erb +5 -0
  67. data/lib/generators/beyond_canvas/views/views_generator.rb +17 -0
  68. data/lib/models/concerns/authentication.rb +57 -0
  69. data/lib/models/concerns/utils.rb +79 -0
  70. data/lib/models/shop.rb +12 -0
  71. metadata +95 -12
  72. data/app/javascript/beyond_canvas/initializers/functions.js +0 -41
  73. data/app/views/beyond_canvas/locales/_edit.html.erb +0 -8
  74. data/lib/generators/beyond_canvas/custom_styles/templates/beyond_canvas_custom_styles.sass +0 -123
@@ -6,7 +6,7 @@ module BeyondCanvas
6
6
  source_root File.expand_path('templates', __dir__)
7
7
 
8
8
  def copy_initializer
9
- template 'beyond_canvas_custom_styles.sass', 'app/assets/stylesheets/_beyond_canvas_custom_styles.sass'
9
+ template 'beyond_canvas_custom_styles.scss', 'app/assets/stylesheets/_beyond_canvas_custom_styles.scss'
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,199 @@
1
+ // ************************************************************
2
+ // Colors
3
+ // ************************************************************
4
+
5
+ // $palette-primary: rgb(78, 183, 168);
6
+ // $palette-secondary: rgb(28, 53, 69);
7
+ // $palette-cancel: rgb(153, 153, 153);
8
+ // $palette-danger: rgb(218, 60, 60);
9
+
10
+ // ************************************************************
11
+ // General styles
12
+ // ************************************************************
13
+
14
+ // $main-background-public: rgb(233, 232, 220);
15
+ // $main-background-application: rgb(233, 232, 220);
16
+
17
+ // ************************************************************
18
+ // Typography
19
+ // ************************************************************
20
+
21
+ // $main-color: rgb(62, 62, 62);
22
+
23
+ // ************************************************************
24
+ // Headlines
25
+ // ************************************************************
26
+
27
+ // $headline-color: rgb(122, 118, 76);
28
+
29
+ // ************************************************************
30
+ // Links
31
+ // ************************************************************
32
+
33
+ // $link-primary-color: darken($palette-primary, 10%);
34
+ // $link-secondary-color: darken($palette-cancel, 10%);
35
+ // $link-danger-color: darken($palette-danger, 10%);
36
+
37
+ // ************************************************************
38
+ // Buttons
39
+ // ************************************************************
40
+
41
+ // $button-primary-background: $palette-primary;
42
+ // $button-primary-color: $white;
43
+
44
+ // $button-secondary-background: $palette-cancel;
45
+ // $button-secondary-color: $white;
46
+
47
+ // $button-danger-background: $palette-danger;
48
+ // $button-danger-color: $white;
49
+
50
+ // $button-border-radius: 3px;
51
+ // $button-box-shadow: true;
52
+
53
+ // ************************************************************
54
+ // Cards
55
+ // ************************************************************
56
+
57
+ // $card-border-radius: 3px;
58
+ // $card-box-shadow: 0 2px 7px rgba($black, 0.2);
59
+ // $card-separator-color: rgb(222, 222, 222);
60
+ // $card-title-color: rgb(247, 133, 96);
61
+
62
+ // ************************************************************
63
+ // Containers
64
+ // ************************************************************
65
+
66
+
67
+ // ************************************************************
68
+ // Labels
69
+ // ************************************************************
70
+
71
+ // $label-color: rgb(128, 128, 128);
72
+
73
+ // ************************************************************
74
+ // Inputs
75
+ // ************************************************************
76
+
77
+ // $input-border-color: rgb(217, 216, 195);
78
+ // $input-border-color-focus: $palette-primary;
79
+ // $input-errors-color: $palette-danger;
80
+
81
+ // ************************************************************
82
+ // Checkboxes
83
+ // ************************************************************
84
+
85
+ // $checkbox-checked-color: #97C344; // This value MUST be HEX
86
+ // $checkbox-checked-background: #ffffff; // This value MUST be HEX
87
+ // $checkbox-unchecked-color: #C2BF9D; // This value MUST be HEX
88
+ // $checkbox-unchecked-background: #ffffff; // This value MUST be HEX
89
+
90
+ // ************************************************************
91
+ // Radiobuttons
92
+ // ************************************************************
93
+
94
+ // $radio-checked-color: #97C344; // This value MUST be HEX
95
+ // $radio-checked-background: #ffffff; // This value MUST be HEX
96
+ // $radio-unchecked-color: #C2BF9D; // This value MUST be HEX
97
+ // $radio-unchecked-background: #ffffff; // This value MUST be HEX
98
+
99
+ // ************************************************************
100
+ // Hints
101
+ // ************************************************************
102
+
103
+ // $hint-color: rgb(158, 158, 158);
104
+
105
+ // ************************************************************
106
+ // Logo
107
+ // ************************************************************
108
+
109
+ // $logo-margin-top-public: 0;
110
+ // $logo-margin-bottom-public: 34px;
111
+
112
+ // ************************************************************
113
+ // Flash
114
+ // ************************************************************
115
+
116
+ // $flash-success: rgb(123, 170, 81);
117
+ // $flash-notice: rgb(123, 170, 81);
118
+ // $flash-info: rgb(153, 153, 153);
119
+ // $flash-warning: rgb(243, 181, 71);
120
+ // $flash-error: rgb(218, 60, 60);
121
+ // $flash-border-radius: 4px;
122
+ // $flash-box-shadow: 0 1px 2px 0 rgba($black, 0.2);
123
+ // $flash-color: rgb(128, 128, 128);
124
+
125
+ // ************************************************************
126
+ // Tables
127
+ // ************************************************************
128
+
129
+ // $table-header-background: rgb(243, 242, 236);
130
+ // $table-border-color: rgb(233, 232, 220);
131
+
132
+ // ************************************************************
133
+ // Comments
134
+ // ************************************************************
135
+
136
+ // $comment-background: rgb(246, 246, 243);
137
+ // $comment-color: rgb(170, 169, 156);
138
+
139
+ // ************************************************************
140
+ // Notices
141
+ // ************************************************************
142
+
143
+ // $notice-success-background: rgb(123, 170, 81);
144
+ // $notice-notice-background: rgb(123, 170, 81);
145
+ // $notice-info-background: rgb(153, 153, 153);
146
+ // $notice-warning-background: rgb(243, 181, 71);
147
+ // $notice-error-background: rgb(218, 60, 60);
148
+ // $notice-border-radius: 4px;
149
+ // $notice-color: rgb(153, 153, 153);
150
+
151
+ // ************************************************************
152
+ // Breadcrums
153
+ // ************************************************************
154
+
155
+ // $breadcrum-color: rgb(122, 118, 76);
156
+ // $breadcrum-color-current: rgb(61, 149, 137);
157
+
158
+ // ************************************************************
159
+ // Titles
160
+ // ************************************************************
161
+
162
+ // $title-color: rgb(122, 118, 76);
163
+
164
+ // ************************************************************
165
+ // Menu
166
+ // ************************************************************
167
+
168
+ // $menu-background: #1c3445;
169
+ // $menu-height: 60px;
170
+ // $menu-logo-height: 30px;
171
+ // $menu-item-color: #9ab5c6;
172
+ // $menu-item-hover-color: lighten($menu-item-color, 13%);
173
+ // $menu-item-selected-color: #4eb7a8;
174
+ // $menu-item-selected-hover-color: lighten($menu-item-selected-color, 13%);
175
+
176
+ // ************************************************************
177
+ // Action bar
178
+ // ************************************************************
179
+
180
+ // $action-bar-background: rgb(255, 255, 255);
181
+ // $action-bar-shadow: 1px solid rgba(0, 0, 0, 0.2);
182
+ // $action-bar-height: 73px;
183
+
184
+ // ************************************************************
185
+ // Markdown
186
+ // ************************************************************
187
+
188
+
189
+ // ************************************************************
190
+ // Sidebar
191
+ // ************************************************************
192
+
193
+
194
+ // ************************************************************
195
+ // Modals
196
+ // ************************************************************
197
+
198
+ // $modal-close-icon-color: #8b8b8b;
199
+ // $modal-background-color: rgba(0, 0, 0, 0.5);
@@ -15,10 +15,6 @@ module BeyondCanvas
15
15
  template 'beyond_canvas.rb.erb', 'config/initializers/beyond_canvas.rb'
16
16
  end
17
17
 
18
- def setup_routes
19
- route "mount BeyondCanvas::Engine => '/'"
20
- end
21
-
22
18
  def create_assets
23
19
  if options[:skip_webpacker]
24
20
  generate 'beyond_canvas:assets'
@@ -28,7 +24,19 @@ module BeyondCanvas
28
24
  end
29
25
 
30
26
  def install_beyond_api
31
- generate 'beyond_api:install'
27
+ generate 'beyond_canvas:beyond_api'
28
+ end
29
+
30
+ def generate_model
31
+ generate 'beyond_canvas:model shop'
32
+ end
33
+
34
+ def setup_routes
35
+ route 'beyond_canvas_routes'
36
+ end
37
+
38
+ def copy_locale
39
+ copy_file '../../../../../config/locales/en.yml', 'config/locales/beyond_canvas.en.yml'
32
40
  end
33
41
  end
34
42
  end
@@ -1,9 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  BeyondCanvas.setup do |config|
4
+ # Carefully read and fill this configuration file.
5
+ #
6
+ # All uncommented configuration parameters are necessary for proper operation
7
+ # of Beyond Canvas.
8
+
9
+ # ==> Engine configuration
10
+
11
+ # Set the namespace where the Engine is going to be mounted.
12
+ #
13
+ # config.namespace = '/'
14
+
15
+ # Set the url or path where a shop is going to be redirected after a
16
+ # succesful authentication.
17
+ #
18
+ config.open_app_url = nil
19
+
20
+ # Set if your app ig going to run as a cockpit app. If you are not sure about
21
+ # this, please contact apps@epages.com.
22
+ #
23
+ # config.cockpit_app = false
24
+
25
+ # Set if your app is going to be preinstalled on packages. If you are not sure
26
+ # about this, please contact apps@epages.com.
27
+ #
28
+ # config.preinstalled = false
29
+
30
+ # Set if you want to enable the available debug mode Beyond Canvas offers.
31
+ # This options displays a parameter debug as well as some custom Beyond Canvas
32
+ # logs.
33
+ #
34
+ # config.debug_mode = false
35
+
4
36
  # ==> Site configuration
5
37
 
6
- # Set the title that is displayed on the main layout..
38
+ # Set the title that is displayed on the main layout.
7
39
  #
8
40
  config.site_title = '<%= Rails.application.class.name.split("::").first.humanize %>'
9
41
 
@@ -17,24 +49,41 @@ BeyondCanvas.setup do |config|
17
49
  #
18
50
  # config.favicon = 'favicon.ico'
19
51
 
52
+ # Set the menu items that will be displayed on the top of your app.
53
+ # It accepts 3 parameters:
54
+ # 1. name: the text displayed on the link tag. Supports any string or an I18n compatible path.
55
+ # 2. url: the href of the link tag. Supports any string or a symbolized route.
56
+ # 3. options: any html attributes that will be added to the link tag.
57
+ # You can also run `rails g beyond_canvas:custom_menu` to generate a menu template you can override.
58
+ # See examples:
59
+ #
60
+ # config.register_menu_item 'Contact', '/contact/, class: 'contact'
61
+ # config.register_menu_item 'menu_item.about_us', :root_path, class: 'about-us', id: 'about-us'
62
+ # config.register_menu_item 'Our website', 'https://epages.com', target: :_blank
63
+
20
64
  # ==> Stylesheets & Javascripts
21
65
 
22
66
  # We recommend using the built in Beyond Canvas layout and loading up your own
23
67
  # stylesheets / javascripts to customize the look and feel.
24
68
  #
25
69
  # To load a stylesheet:
26
- # config.register_stylesheet 'my_stylesheet.css'
70
+ # config.register_stylesheet 'my_stylesheet.css'
27
71
  #
28
- # You can provide an options hash for more control, which is passed along to stylesheet_link_tag():
29
- # config.register_stylesheet 'my_print_stylesheet.css', media: :print
72
+ # You can provide an options hash for more control, which is passed along
73
+ # to stylesheet_link_tag():
74
+ # config.register_stylesheet 'my_print_stylesheet.css', media: :print
30
75
  #
31
76
  # To load a javascript file:
32
- # config.register_javascript 'my_javascript.js'
77
+ # config.register_javascript 'my_javascript.js'
33
78
 
34
79
  # ==> Webpacker
35
80
 
36
- # By default, Active Admin uses Webpacker.
81
+ # By default, Beyond Canvas uses Webpacker.
37
82
  # You can switch to using Sprocket's asset pipeline here.
38
83
  #
39
84
  <% unless @skip_webpacker %># <% end %>config.skip_webpacker = <%= @skip_webpacker %>
85
+
86
+ # ==> Authentication with ePages Beyond API
87
+
88
+ config.encryption_key = '<%= SecureRandom.hex(32) %>'
40
89
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators/active_record'
4
+
5
+ module BeyondCanvas
6
+ module Generators
7
+ class ModelGenerator < ActiveRecord::Generators::Base # :nodoc:
8
+ desc 'Generates a model with the given name and provides a method to authenticate in Beyond Backend'
9
+
10
+ argument :attributes, type: :array, default: [], banner: 'field:type field:type'
11
+
12
+ source_root File.expand_path('templates', __dir__)
13
+
14
+ def copy_beyond_canvas_migration
15
+ migration_path = File.join('db', 'migrate')
16
+ migration_template 'migration.erb',
17
+ "#{migration_path}/beyond_canvas_create_#{table_name}.rb",
18
+ migration_version: migration_version
19
+ end
20
+
21
+ def generate_model
22
+ template 'model.erb', File.join("app/models/#{file_path}.rb")
23
+ end
24
+
25
+ private
26
+
27
+ def rails5_and_up?
28
+ Rails::VERSION::MAJOR >= 5
29
+ end
30
+
31
+ def migration_version
32
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if rails5_and_up?
33
+ end
34
+
35
+ def migration_data
36
+ <<RUBY
37
+ t.string :beyond_api_url, null: false
38
+
39
+ t.text :encrypted_beyond_access_token, null: true
40
+ t.text :encrypted_beyond_access_token_iv, null: true
41
+
42
+ t.text :encrypted_beyond_refresh_token, null: true
43
+ t.text :encrypted_beyond_refresh_token_iv, null: true
44
+
45
+ RUBY
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class BeyondCanvasCreate<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
4
+ def change
5
+ create_table :<%= table_name %><%= primary_key_type %> do |t|
6
+ <%= migration_data -%>
7
+ <% attributes.each do |attribute| -%>
8
+ t.<%= attribute.type %> :<%= attribute.name %>
9
+
10
+ <% end -%>
11
+ t.timestamps null: false
12
+ end
13
+
14
+ add_index :<%= table_name %>, :beyond_api_url, unique: true
15
+ add_index :<%= table_name %>, :encrypted_beyond_access_token_iv, unique: true
16
+ add_index :<%= table_name %>, :encrypted_beyond_refresh_token_iv, unique: true
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class <%= file_path.classify %> < ApplicationRecord
4
+ include BeyondCanvas::Models::Shop
5
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators/active_record'
4
+
5
+ module BeyondCanvas
6
+ module Generators
7
+ class ViewsGenerator < Rails::Generators::Base # :nodoc:
8
+ desc 'Creates all Beyond Canvas views to overwrite them'
9
+
10
+ source_root File.expand_path('../../../../app/views/beyond_canvas', __dir__)
11
+
12
+ def copy_views
13
+ directory 'authentications', 'app/views/beyond_canvas/authentications'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BeyondCanvas
4
+ module Models
5
+ module Concerns
6
+ module Authentication # :nodoc:
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+ attr_accessor :code, :signature, :access_token_url, :api_url, :return_url, :terms
11
+
12
+ ##############################################################################
13
+ # Encrypted attribute configuration
14
+ ##############################################################################
15
+
16
+ attr_encrypted :beyond_access_token, key: [BeyondCanvas.configuration.encryption_key].pack('H*')
17
+ attr_encrypted :beyond_refresh_token, key: [BeyondCanvas.configuration.encryption_key].pack('H*')
18
+
19
+ ##############################################################################
20
+ # Validations
21
+ ##############################################################################
22
+
23
+ # Database fields
24
+
25
+ validates :beyond_api_url,
26
+ presence: true
27
+ validates :beyond_access_token,
28
+ presence: true,
29
+ unless: -> { encrypted_beyond_access_token_was.blank? }
30
+ validates :beyond_refresh_token,
31
+ presence: true,
32
+ unless: -> { encrypted_beyond_refresh_token_was.blank? }
33
+
34
+ ##############################################################################
35
+ # Instance methods
36
+ ##############################################################################
37
+
38
+ #
39
+ # Get and save access_token and refresh_token using the authentication code
40
+ # NOTE: This method is used during the shop creation, as it is the only point
41
+ # we know about the authentication code
42
+ #
43
+ def authenticate(params_code)
44
+ session = BeyondApi::Session.new(api_url: beyond_api_url)
45
+ session.token.create(params_code)
46
+ update(beyond_access_token: session.access_token,
47
+ beyond_refresh_token: session.refresh_token)
48
+ end
49
+
50
+ def authenticated?
51
+ beyond_access_token.present? && beyond_refresh_token.present?
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end