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
@@ -1,13 +1,23 @@
1
- <% flash.each do |key, value| %>
2
- <div class="flash">
3
- <div class="flash__icon flash__icon--<%= key %>">
4
- <%= get_flash_icon(key) %>
1
+ <div id="flash">
2
+
3
+ <% flash.each do |key, value| %>
4
+
5
+ <div class="flash">
6
+
7
+ <div class="flash__icon flash__icon--<%= key %>">
8
+ <%= get_flash_icon(key) %>
9
+ </div>
10
+
11
+ <div class="flash__message">
12
+ <%= value %>
13
+ </div>
14
+
15
+ <div class="flash__close">
16
+ <%= inline_svg_tag 'icons/flash_close.svg' %>
17
+ </div>
18
+
5
19
  </div>
6
- <div class="flash__message">
7
- <%= value %>
8
- </div>
9
- <div class="flash__close">
10
- <%= inline_svg_tag 'icons/flash_close.svg' %>
11
- </div>
12
- </div>
13
- <% end %>
20
+
21
+ <% end %>
22
+
23
+ </div>
@@ -0,0 +1,8 @@
1
+ <% if show_locale_switch? && !is_cockpit_app? %>
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 %>
@@ -0,0 +1,31 @@
1
+ <% if menu_content? %>
2
+
3
+ <div class="menu">
4
+
5
+ <div class="menu--left">
6
+ <%= render 'beyond_canvas/shared/logo' %>
7
+ </div>
8
+
9
+ <div class="menu--center">
10
+
11
+ <% BeyondCanvas.configuration.menu_items.each do |menu_item| %>
12
+ <% name, url, options = menu_item.name.to_s, menu_item.url.to_s, menu_item.options %>
13
+
14
+ <% url, external_url = respond_to?(url) ? [send(url), false] : [url, true] %>
15
+ <% name = defined?(I18n) && I18n.exists?(name) ? I18n.t(name) : name %>
16
+
17
+ <% path = Rails.application.routes.recognize_path(url) %>
18
+
19
+ <% options = options.merge(class: 'menu__item--active') { |_key, old_val, new_val| [new_val, old_val].join(' ') if !external_url && path[:controller] == params[:controller] } %>
20
+ <% options = options.merge(class: 'menu__item') { |_key, old_val, new_val| [new_val, old_val].join(' ') } %>
21
+
22
+ <%= link_to name, url, options %>
23
+ <% end %>
24
+
25
+ </div>
26
+
27
+ <div class="menu--right"></div>
28
+
29
+ </div>
30
+
31
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <div class="modal__background" id="modal">
2
+ <div class="relative card card--padding">
3
+ <span onClick= "$.closeModal()"><%= inline_svg_tag 'icons/close.svg', class: 'modal__close' %></span>
4
+ <div id="modal__content"></div>
5
+ </div>
6
+ </div>
@@ -0,0 +1,16 @@
1
+ <% if is_cockpit_app? && Rails.env.development? %>
2
+ <div class="sidebar">
3
+ <div class="sidebar__header">
4
+ <div class="sidebar__logo"></div>
5
+ </div>
6
+ <div class="sidebar__item sidebar__item--selected"></div>
7
+ <div class="sidebar__item"></div>
8
+ <div class="sidebar__item"></div>
9
+ <div class="sidebar__item"></div>
10
+ <div class="sidebar__footer">
11
+ <div class="sidebar__icon"></div>
12
+ <div class="sidebar__icon"></div>
13
+ <div class="sidebar__icon"></div>
14
+ </div>
15
+ </div>
16
+ <% end %>
@@ -0,0 +1,31 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <%= render 'beyond_canvas/shared/head' %>
5
+
6
+ <body class="body--application"<% if is_cockpit_app? && Rails.env.development? %> style="display: flex;"<% end %>>
7
+
8
+ <%= render 'beyond_canvas/shared/sidebar' %>
9
+
10
+ <main class="main <%= params[:controller].gsub(/[\/_]/, "-") %>--<%= params[:action] %>">
11
+
12
+ <%= render 'beyond_canvas/shared/flash' %>
13
+ <%= render 'beyond_canvas/shared/locales' %>
14
+ <%= render 'beyond_canvas/shared/modal' %>
15
+ <%= render 'beyond_canvas/shared/menu' %>
16
+ <%= render 'beyond_canvas/shared/action_bar' %>
17
+
18
+ <div class="main-wrapper<% if action_bar_content? %> main-wrapper--action_bar<% end %>"<% if content_for?(:max_width)%> style="max-width: <%= yield :max_width %>"<% end %>>
19
+
20
+ <%= render 'beyond_canvas/shared/breadcrumbs' %>
21
+
22
+ <%= yield %>
23
+
24
+ <%= debug(params) if debug_mode? %>
25
+
26
+ </div>
27
+
28
+ </main>
29
+
30
+ </body>
31
+ </html>
@@ -4,13 +4,22 @@
4
4
  <%= render 'beyond_canvas/shared/head' %>
5
5
 
6
6
  <body class="body--public">
7
+
7
8
  <main class="main <%= params[:controller].gsub(/[\/_]/, "-") %>--<%= params[:action] %>">
9
+
8
10
  <%= render 'beyond_canvas/shared/flash' %>
9
- <%= render 'beyond_canvas/locales/edit' %>
11
+ <%= render 'beyond_canvas/shared/locales' %>
12
+
10
13
  <div class="main-wrapper">
14
+
11
15
  <%= render 'beyond_canvas/shared/logo' %>
16
+
12
17
  <%= yield %>
18
+
13
19
  </div>
20
+
21
+ <%= debug(params) if debug_mode? %>
22
+
14
23
  </main>
15
24
  </body>
16
25
  </html>
@@ -0,0 +1,9 @@
1
+ en:
2
+ beyond_canvas:
3
+ authentications:
4
+ new:
5
+ headline: Install %{app_name} in your shop
6
+ body: You are about to install %{app_name} in your shop. For continuing with this process, press the install button below.
7
+ actions:
8
+ install: Install
9
+ failure: Shop could not be saved
@@ -1,5 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  BeyondCanvas::Engine.routes.draw do
4
- put '/locale', to: 'system#update_locale', as: :update_locale
4
+ put 'locale', to: 'system#update_locale', as: :update_locale
5
+
6
+ def create_default_routes
7
+ get 'callback', to: 'authentications#new'
8
+ post 'callback', to: 'authentications#install'
9
+ end
10
+
11
+ create_default_routes unless BeyondCanvas.use_rails_app_controller
5
12
  end
@@ -8,14 +8,30 @@ require 'jquery-rails'
8
8
  require 'bourbon'
9
9
  require 'sassc-rails'
10
10
  require 'inline_svg'
11
+ require 'loaf'
11
12
  require 'http/accept'
12
13
  require 'premailer/rails'
13
14
 
14
15
  require 'beyond_api'
16
+ require 'attr_encrypted'
15
17
 
16
18
  module BeyondCanvas # :nodoc:
17
- autoload :AssetRegistration, 'beyond_canvas/asset_registration'
18
- autoload :Configuration, 'beyond_canvas/configuration'
19
+ autoload :AssetRegistration, 'beyond_canvas/asset_registration'
20
+ autoload :Configuration, 'beyond_canvas/configuration'
21
+ autoload :MenuItemRegistration, 'beyond_canvas/menu_item_registration'
22
+ autoload :ParameterSanitizer, 'beyond_canvas/parameter_sanitizer'
23
+
24
+ module Models # :nodoc:
25
+ autoload :Shop, 'models/shop'
26
+
27
+ module Concerns
28
+ autoload :Authentication, 'models/concerns/authentication'
29
+ autoload :Utils, 'models/concerns/utils'
30
+ end
31
+ end
32
+
33
+ mattr_accessor :use_rails_app_controller
34
+ @@use_rails_app_controller = false
19
35
 
20
36
  class << self
21
37
  def configuration
@@ -2,14 +2,22 @@
2
2
 
3
3
  module BeyondCanvas
4
4
  class Configuration # :nodoc:
5
- attr_accessor :site_title, :site_logo, :favicon, :skip_webpacker
5
+ attr_accessor :site_title, :site_logo, :favicon, :skip_webpacker, :encryption_key, :namespace, :cockpit_app,
6
+ :open_app_url, :preinstalled, :debug_mode
6
7
 
7
8
  include AssetRegistration
9
+ include MenuItemRegistration
8
10
 
9
11
  def initialize
10
- @site_title = ::Rails.application.class.name.split('::').first.humanize
11
- @site_logo = nil
12
+ @cockpit_app = false
13
+ @debug_mode = false
14
+ @encryption_key = nil
12
15
  @favicon = nil
16
+ @namespace = '/'
17
+ @open_app_url = nil
18
+ @preinstalled = false
19
+ @site_logo = nil
20
+ @site_title = ::Rails.application.class.name.split('::').first.humanize
13
21
  @skip_webpacker = false
14
22
  end
15
23
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'beyond_canvas/rails/routes'
4
+
3
5
  module BeyondCanvas
4
6
  class Engine < ::Rails::Engine # :nodoc:
5
7
  isolate_namespace BeyondCanvas
@@ -11,6 +13,8 @@ module BeyondCanvas
11
13
  BeyondCanvas.configuration.javascripts.each do |path|
12
14
  app.config.assets.precompile << path
13
15
  end
16
+
17
+ app.config.assets.precompile << 'beyond_canvas_manifest.js'
14
18
  end
15
19
 
16
20
  config.before_initialize do
@@ -18,6 +22,8 @@ module BeyondCanvas
18
22
  include ::BeyondCanvas::LocaleManagement
19
23
  include ::BeyondCanvas::RequestValidation
20
24
  include ::BeyondCanvas::StatusCodes
25
+ include ::BeyondCanvas::AuthenticationsHelper
26
+ include ::BeyondCanvas::DebugHelper
21
27
 
22
28
  ::ActionController::Base.helper BeyondCanvas::Engine.helpers
23
29
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BeyondCanvas
4
+ module MenuItemRegistration # :nodoc:
5
+ MenuItem = Struct.new(:name, :url, :options)
6
+
7
+ def register_menu_item(name, url, options = {})
8
+ menu_items.add MenuItem.new(name, url, options)
9
+ end
10
+
11
+ def menu_items
12
+ @menu_items ||= Set.new
13
+ end
14
+
15
+ def clear_menu_items!
16
+ menu_items.clear
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BeyondCanvas
4
+ class ParameterSanitizer # :nodoc:
5
+ DEFAULT_PERMITTED_ATTRIBUTES = %i[code signature return_url api_url access_token_url]
6
+
7
+ def initialize(resource_name, params)
8
+ @params = params
9
+ @resource_name = resource_name
10
+ @permitted = DEFAULT_PERMITTED_ATTRIBUTES
11
+ end
12
+
13
+ def sanitize
14
+ permit_keys(default_params)
15
+ end
16
+
17
+ def permit(*keys)
18
+ @permitted.concat(keys)
19
+ end
20
+
21
+ private
22
+
23
+ def default_params
24
+ if hashable_resource_params?
25
+ @params.fetch(@resource_name)
26
+ else
27
+ empty_params
28
+ end
29
+ end
30
+
31
+ def hashable_resource_params?
32
+ @params[@resource_name].respond_to?(:permit)
33
+ end
34
+
35
+ def empty_params
36
+ ActionController::Parameters.new({})
37
+ end
38
+
39
+ def permit_keys(parameters)
40
+ parameters.permit(*@permitted)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionDispatch
4
+ module Routing
5
+ class Mapper # :nodoc:
6
+ def beyond_canvas_routes(options = nil)
7
+ mount BeyondCanvas::Engine => BeyondCanvas.configuration.namespace
8
+
9
+ BeyondCanvas.use_rails_app_controller = options.present? && options[:custom_controller].present?
10
+
11
+ set_routes if BeyondCanvas.use_rails_app_controller
12
+ end
13
+
14
+ def set_routes
15
+ scope BeyondCanvas.configuration.namespace do
16
+ get 'callback', controller: :authentications, action: :new
17
+ post 'callback', controller: :authentications, action: :install
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BeyondCanvas
4
- VERSION = '0.15.2.pre'
4
+ VERSION = '0.17.0.pre'
5
5
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators/active_record'
4
+
5
+ module BeyondCanvas
6
+ module Generators
7
+ class ControllerGenerator < Rails::Generators::Base # :nodoc:
8
+ desc 'Creates an inherited Beyond Canvas controller in the app/controllers folder'
9
+
10
+ argument :scope, required: true, desc: 'The scope to create the controller, e.g. shops, users'
11
+
12
+ source_root File.expand_path('templates', __dir__)
13
+
14
+ def create_controller
15
+ template 'controller.erb', "app/controllers/#{scope}_controller.rb"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class <%= scope.camelize %>Controller < BeyondCanvas::AuthenticationsController
4
+ # before_action :configure_params, only: [:install]
5
+
6
+ # def new
7
+ # super
8
+ # end
9
+
10
+ # def install
11
+ # super
12
+ # end
13
+
14
+ # private
15
+
16
+ # If you have extra params to permit, append them to the sanitizer.
17
+ # def configure_params
18
+ # beyond_canvas_parameter_sanitizer.permit(:attribute1, :attribute2)
19
+ # end
20
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BeyondCanvas
4
+ module Generators
5
+ class CustomMenuGenerator < Rails::Generators::Base # :nodoc:
6
+ source_root File.expand_path('templates', __dir__)
7
+
8
+ def copy_initializer
9
+ copy_file 'beyond_canvas_custom_menu.html.erb', 'app/views/beyond_canvas/shared/_menu.html.erb'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ <div class="menu">
2
+
3
+ <div class="menu--left">
4
+ <%= render 'beyond_canvas/shared/logo' %>
5
+ </div>
6
+
7
+ <div class="menu--center">
8
+
9
+ <%
10
+ =begin
11
+ Add here your menu links. You can use `menu__item` as class name and add
12
+ `menu__item--selected` as secondary class for selected menu item. E.g:
13
+
14
+ <%= link_to 'About us', about_us_path, class: "menu__item #{ 'menu__item--selected' if params[:controller] == 'about_us' }" %>
15
+ <%= link_to 'Support', support_path, class: "menu__item #{ 'menu__item--selected' if params[:controller] == 'support' }" %>
16
+ =end
17
+ %>
18
+
19
+ </div>
20
+
21
+ <div class="menu--right">
22
+
23
+ <%
24
+ =begin
25
+ You can also add here some content that will be right-aligned, like a user
26
+ avatar image or a dropdown account menu.
27
+ =end
28
+ %>
29
+
30
+ </div>
31
+
32
+ </div>