beyond_canvas 0.16.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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/beyond_canvas_manifest.js +1 -0
  3. data/app/assets/images/icons/arrow_right.svg +1 -0
  4. data/app/assets/images/icons/close.svg +1 -0
  5. data/app/assets/images/icons/home.svg +1 -0
  6. data/app/assets/javascripts/beyond_canvas/base.js +120 -246
  7. data/app/assets/stylesheets/beyond_canvas/base.scss +8 -1
  8. data/app/assets/stylesheets/beyond_canvas/components/_action_bar.scss +28 -0
  9. data/app/assets/stylesheets/beyond_canvas/components/_breadcrumbs.scss +29 -0
  10. data/app/assets/stylesheets/beyond_canvas/components/_buttons.scss +1 -1
  11. data/app/assets/stylesheets/beyond_canvas/components/_debug.scss +10 -0
  12. data/app/assets/stylesheets/beyond_canvas/components/_forms.scss +11 -14
  13. data/app/assets/stylesheets/beyond_canvas/components/_main.scss +12 -13
  14. data/app/assets/stylesheets/beyond_canvas/components/_margins.scss +8 -0
  15. data/app/assets/stylesheets/beyond_canvas/components/_menu.scss +40 -0
  16. data/app/assets/stylesheets/beyond_canvas/components/_modals.scss +27 -0
  17. data/app/assets/stylesheets/beyond_canvas/components/_sidebar.scss +53 -0
  18. data/app/assets/stylesheets/beyond_canvas/components/_titles.scss +7 -0
  19. data/app/assets/stylesheets/beyond_canvas/settings/_variables.scss +64 -9
  20. data/app/controllers/beyond_canvas/application_controller.rb +2 -0
  21. data/app/controllers/beyond_canvas/authentications_controller.rb +37 -30
  22. data/app/controllers/concerns/beyond_canvas/authentication.rb +1 -12
  23. data/app/controllers/concerns/beyond_canvas/locale_management.rb +5 -4
  24. data/app/helpers/beyond_canvas/authentications_helper.rb +28 -0
  25. data/app/helpers/beyond_canvas/cockpit_app_helper.rb +17 -0
  26. data/app/helpers/beyond_canvas/debug_helper.rb +9 -0
  27. data/app/helpers/beyond_canvas/locale_switch_helper.rb +5 -1
  28. data/app/javascript/beyond_canvas/base.js +3 -0
  29. data/app/javascript/beyond_canvas/initializers/buttons.js +65 -19
  30. data/app/javascript/beyond_canvas/initializers/flash.js +9 -2
  31. data/app/javascript/beyond_canvas/initializers/inputs.js +4 -1
  32. data/app/javascript/beyond_canvas/initializers/modals.js +14 -0
  33. data/app/views/beyond_canvas/authentications/new.html.erb +19 -10
  34. data/app/views/beyond_canvas/shared/_action_bar.html.erb +15 -0
  35. data/app/views/beyond_canvas/shared/_breadcrumbs.html.erb +14 -0
  36. data/app/views/beyond_canvas/shared/_flash.html.erb +22 -12
  37. data/app/views/beyond_canvas/shared/_locales.html.erb +8 -0
  38. data/app/views/beyond_canvas/shared/_menu.html.erb +31 -0
  39. data/app/views/beyond_canvas/shared/_modal.html.erb +6 -0
  40. data/app/views/beyond_canvas/shared/_sidebar.html.erb +16 -0
  41. data/app/views/layouts/beyond_canvas/application.html.erb +31 -0
  42. data/app/views/layouts/beyond_canvas/public.html.erb +11 -4
  43. data/config/locales/en.yml +5 -0
  44. data/config/routes.rb +5 -4
  45. data/lib/beyond_canvas.rb +12 -12
  46. data/lib/beyond_canvas/configuration.rb +11 -6
  47. data/lib/beyond_canvas/engine.rb +4 -2
  48. data/lib/beyond_canvas/menu_item_registration.rb +19 -0
  49. data/lib/beyond_canvas/parameter_sanitizer.rb +1 -1
  50. data/lib/beyond_canvas/rails/routes.rb +8 -7
  51. data/lib/beyond_canvas/version.rb +1 -1
  52. data/lib/generators/beyond_canvas/controller/controller_generator.rb +1 -2
  53. data/lib/generators/beyond_canvas/controller/templates/controller.erb +2 -19
  54. data/lib/generators/beyond_canvas/custom_menu/custom_menu_generator.rb +13 -0
  55. data/lib/generators/beyond_canvas/custom_menu/templates/beyond_canvas_custom_menu.html.erb +32 -0
  56. data/lib/generators/beyond_canvas/custom_styles/custom_styles_generator.rb +1 -1
  57. data/lib/generators/beyond_canvas/custom_styles/templates/beyond_canvas_custom_styles.scss +55 -9
  58. data/lib/generators/beyond_canvas/install/install_generator.rb +3 -5
  59. data/lib/generators/beyond_canvas/install/templates/beyond_canvas.rb.erb +51 -13
  60. data/lib/generators/beyond_canvas/{auth_model/auth_model_generator.rb → model/model_generator.rb} +4 -5
  61. data/lib/generators/beyond_canvas/{auth_model → model}/templates/migration.erb +2 -4
  62. data/lib/generators/beyond_canvas/{auth_model → model}/templates/model.erb +0 -0
  63. data/lib/generators/beyond_canvas/views/views_generator.rb +4 -6
  64. data/lib/models/concerns/authentication.rb +57 -0
  65. data/lib/models/concerns/utils.rb +79 -0
  66. data/lib/models/shop.rb +12 -0
  67. metadata +69 -30
  68. data/app/controllers/concerns/beyond_canvas/resource_management.rb +0 -33
  69. data/app/javascript/beyond_canvas/initializers/functions.js +0 -41
  70. data/app/views/beyond_canvas/locales/_edit.html.erb +0 -8
  71. data/lib/beyond_canvas/models/authentication.rb +0 -66
  72. data/lib/beyond_canvas/models/shop.rb +0 -28
  73. data/lib/beyond_canvas/models/utils.rb +0 -55
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BeyondCanvas
4
- module ResourceManagement # :nodoc:
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- # Share some methods defined in the controller to make them available for the view
9
- if respond_to?(:helper_method)
10
- helpers = %w[resource resource_name resource_class]
11
- helper_method(*helpers)
12
- end
13
- end
14
-
15
- protected
16
-
17
- def resource_name
18
- BeyondCanvas.auth_model
19
- end
20
-
21
- def resource
22
- instance_variable_get(:"@#{resource_name}")
23
- end
24
-
25
- def resource=(new_resource)
26
- instance_variable_set(:"@#{resource_name}", new_resource)
27
- end
28
-
29
- def resource_class
30
- resource_name.classify.constantize
31
- end
32
- end
33
- end
@@ -1,41 +0,0 @@
1
- const SPINNER_ANIMATION_TIMEOUT = 125;
2
-
3
- export function showSpinner(button) {
4
- // Adjust the width of the button
5
- button.width(button.width() + $('.spinner').outerWidth(true));
6
- // Show the spinner
7
- setTimeout(function () {
8
- button.find('.spinner').css('display', 'flex');
9
- }, SPINNER_ANIMATION_TIMEOUT);
10
- }
11
-
12
- export function hideSpinner() {
13
- $('button[class^="button"]').each(function (_, button) {
14
- setTimeout(function () {
15
- // Hide the spinner
16
- $(button).find('.spinner').hide();
17
- // Adjust the width of the button
18
- $(button).width($(button).data('oldWidth'));
19
- }, SPINNER_ANIMATION_TIMEOUT);
20
- });
21
- }
22
-
23
- export function disableActionElements() {
24
- $('a, input[type="submit"], input[type="button"], input[type="reset"], button').each(function (_, button) {
25
- $(button).addClass('actions--disabled');
26
- });
27
- }
28
- export function enableActionElements() {
29
- $('a, input[type="submit"], input[type="button"], input[type="reset"], button').each(function (_, button) {
30
- $(button).removeClass('actions--disabled');
31
- });
32
- }
33
-
34
- export function closeAlert() {
35
- $('.flash')
36
- .removeClass('flash--shown')
37
- .delay(700)
38
- .queue(function () {
39
- $(this).remove();
40
- });
41
- }
@@ -1,8 +0,0 @@
1
- <% if defined?(I18n) && I18n.available_locales.count > 1 %>
2
- <%= form_for :system, url: beyond_canvas.update_locale_path, method: :put do |f| %>
3
- <%= f.select :locale, I18n.available_locales.collect { |l| [translate_locale(l), l] },
4
- { selected: cookies[:locale] },
5
- class: 'select--locale',
6
- onchange: 'this.form.submit()' %>
7
- <% end %>
8
- <% end %>
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BeyondCanvas
4
- module Models
5
- module Authentication # :nodoc:
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- attr_accessor :code, :signature, :access_token_url
10
-
11
- ##############################################################################
12
- # Encrypted attribute configuration
13
- ##############################################################################
14
-
15
- attr_encrypted :beyond_api_url, key: [BeyondCanvas.configuration.encryption_key].pack('H*')
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
- blind_index :beyond_api_url, key: [BeyondCanvas.configuration.blind_index_key].pack('H*')
20
-
21
- ##############################################################################
22
- # Validations
23
- ##############################################################################
24
-
25
- # Callback url params
26
-
27
- validates :code,
28
- presence: true,
29
- on: :create
30
- validates :signature,
31
- presence: true,
32
- on: :create
33
- validates :access_token_url,
34
- presence: true,
35
- on: :create
36
-
37
- # Database fields
38
-
39
- validates :beyond_api_url,
40
- presence: true
41
- validates :beyond_access_token,
42
- presence: true,
43
- unless: -> { encrypted_beyond_access_token_was.blank? }
44
- validates :beyond_refresh_token,
45
- presence: true,
46
- unless: -> { encrypted_beyond_refresh_token_was.blank? }
47
-
48
- ##############################################################################
49
- # Instance methods
50
- ##############################################################################
51
-
52
- #
53
- # Get and save access_token and refresh_token using the authentication code
54
- # NOTE: This method is used during the shop creation, as it is the only point
55
- # we know about the authentication code
56
- #
57
- def authenticate
58
- session = BeyondApi::Session.new(api_url: beyond_api_url)
59
- session.token.create(code)
60
- update(beyond_access_token: session.access_token,
61
- beyond_refresh_token: session.refresh_token)
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BeyondCanvas
4
- module Models
5
- module Shop # :nodoc:
6
- extend ActiveSupport::Concern
7
- include BeyondCanvas::Models::Authentication
8
- include BeyondCanvas::Models::Utils
9
-
10
- included do
11
- attr_accessor :api_url, :return_url
12
-
13
- ##############################################################################
14
- # Validations
15
- ##############################################################################
16
-
17
- # Callback url params
18
-
19
- validates :api_url,
20
- presence: true,
21
- on: :create
22
- validates :return_url,
23
- presence: true,
24
- on: :create
25
- end
26
- end
27
- end
28
- end
@@ -1,55 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module BeyondCanvas
4
- module Models
5
- module Utils # :nodoc:
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- ##############################################################################
10
- # Instance methods
11
- ##############################################################################
12
-
13
- #
14
- # Generates a new access_token and refresh_token
15
- #
16
- def refresh_token
17
- beyond_session = BeyondApi::Session.new(api_url: beyond_api_url, refresh_token: beyond_refresh_token)
18
- beyond_session.token.refresh
19
-
20
- update(beyond_access_token: beyond_session.access_token,
21
- beyond_refresh_token: beyond_session.refresh_token)
22
- end
23
-
24
- #
25
- # Generates a new access_token and refresh_token if they have expired
26
- #
27
- def refresh_token_if_needed
28
- token_timestamp = JWT.decode(beyond_access_token, nil, false).first['exp']
29
- current_timestamp = DateTime.now.to_i
30
- return unless token_timestamp - current_timestamp <= 3600
31
-
32
- refresh_token
33
- end
34
-
35
- #
36
- # Returns a BeyondApi::Session object with api_url, access_token and refresh_token attributes
37
- #
38
- def to_session
39
- BeyondApi::Session.new(api_url: beyond_api_url,
40
- access_token: beyond_access_token,
41
- refresh_token: beyond_refresh_token)
42
- end
43
-
44
- ##############################################################################
45
- # Class methods
46
- ##############################################################################
47
-
48
- def self.find_session(id)
49
- shop = find(id)
50
- shop.to_session
51
- end
52
- end
53
- end
54
- end
55
- end