microservice 0.0.1
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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +37 -0
- data/app/assets/config/microservice_manifest.js +2 -0
- data/app/assets/images/microservice/favicon.ico +0 -0
- data/app/assets/images/microservice/logo.svg +51 -0
- data/app/assets/javascripts/microservice/application.js +21 -0
- data/app/assets/javascripts/microservice/microservice.js +0 -0
- data/app/assets/stylesheets/microservice/application.css +16 -0
- data/app/assets/stylesheets/microservice/microservice.css +0 -0
- data/app/controllers/microservice/application_controller.rb +58 -0
- data/app/controllers/microservice/entities_controller.rb +138 -0
- data/app/controllers/microservice/omniauth_callbacks_controller.rb +36 -0
- data/app/controllers/microservice/welcome_controller.rb +8 -0
- data/app/helpers/microservice/application_helper.rb +216 -0
- data/app/helpers/microservice/breadcrumbs_helper.rb +89 -0
- data/app/jobs/microservice/application_job.rb +5 -0
- data/app/mailers/microservice/application_mailer.rb +13 -0
- data/app/mailers/microservice/devise_mailer.rb +13 -0
- data/app/models/microservice/concerns/entity_cloneable.rb +40 -0
- data/app/models/microservice/concerns/entity_model.rb +118 -0
- data/app/models/microservice/concerns/entity_movable.rb +27 -0
- data/app/models/microservice/concerns/entity_naming.rb +95 -0
- data/app/models/microservice/concerns/user_model.rb +36 -0
- data/app/views/layouts/microservice/application.html.erb +26 -0
- data/app/views/layouts/microservice/mailer.html.erb +13 -0
- data/app/views/layouts/microservice/mailer.text.erb +1 -0
- data/app/views/microservice/common/_no_data.html.erb +6 -0
- data/app/views/microservice/common/error.html.erb +7 -0
- data/app/views/microservice/common/error.json.jbuilder +3 -0
- data/app/views/microservice/entities/_card.html.erb +17 -0
- data/app/views/microservice/entities/_form.html.erb +0 -0
- data/app/views/microservice/entities/edit.html.erb +16 -0
- data/app/views/microservice/entities/index.html.erb +7 -0
- data/app/views/microservice/entities/new.html.erb +19 -0
- data/app/views/microservice/entities/show.html.erb +3 -0
- data/app/views/microservice/welcome/index.html.erb +1 -0
- data/config/initializers/devise.rb +270 -0
- data/config/initializers/microservice.rb +5 -0
- data/config/initializers/sso.rb +78 -0
- data/config/locales/en.yml +55 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20170618202500_create_users.rb +51 -0
- data/lib/microservice.rb +27 -0
- data/lib/microservice/engine.rb +16 -0
- data/lib/microservice/settings.rb +62 -0
- data/lib/microservice/version.rb +3 -0
- data/lib/tasks/microservice_tasks.rake +4 -0
- metadata +330 -0
| @@ -0,0 +1,89 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              module BreadcrumbsHelper
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                def render_breadcrumb(*args)
         | 
| 5 | 
            +
                  flatten_args = args.flatten.compact
         | 
| 6 | 
            +
                  content_tag :div, class: 'ui huge breadcrumb' do
         | 
| 7 | 
            +
                    flatten_args.map.with_index do |element, idx|
         | 
| 8 | 
            +
                      if flatten_args.size == idx + 1
         | 
| 9 | 
            +
                        content_tag(:span, element.html_safe, class: 'section active')
         | 
| 10 | 
            +
                      else
         | 
| 11 | 
            +
                        content_tag(:span, element.html_safe, class: 'section') +
         | 
| 12 | 
            +
                          content_tag(:i, '', class: 'right chevron icon divider')
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
                    end.join.html_safe
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def render_entity_breadcrumb
         | 
| 19 | 
            +
                  if @entity
         | 
| 20 | 
            +
                    case action_name
         | 
| 21 | 
            +
                    when 'show'
         | 
| 22 | 
            +
                      render_breadcrumb_show @entity
         | 
| 23 | 
            +
                    when 'new', 'create'
         | 
| 24 | 
            +
                      render_breadcrumb_new @entity
         | 
| 25 | 
            +
                    when 'edit', 'update'
         | 
| 26 | 
            +
                      render_breadcrumb_edit @entity
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  elsif controller.entity_class
         | 
| 29 | 
            +
                    render_breadcrumb_index controller.entity_class
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def render_breadcrumb_index(entity_class)
         | 
| 34 | 
            +
                  links = [home_link(entity_class.namespace)]
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  if @parent_entity
         | 
| 37 | 
            +
                    links << link_to_entity(@parent_entity.class, :index, no_icon: true)
         | 
| 38 | 
            +
                    links << link_to_entity(@parent_entity, :show, no_icon: true)
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  links << link_to_entity(entity_class, :index, no_icon: true)
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  render_breadcrumb links
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def render_breadcrumb_show(entity)
         | 
| 47 | 
            +
                  links = [home_link(entity.namespace)]
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  if @parent_entity
         | 
| 50 | 
            +
                    links << link_to_entity(@parent_entity.class, :index, no_icon: true)
         | 
| 51 | 
            +
                    links << link_to_entity(@parent_entity, :show, no_icon: true)
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  links << link_to_entity(entity.class, :index, no_icon: true)
         | 
| 55 | 
            +
                  links << link_to_entity(entity, :show, no_icon: true)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  render_breadcrumb links
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                def render_breadcrumb_new(entity)
         | 
| 61 | 
            +
                  links = [home_link(entity.namespace)]
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  if @parent_entity
         | 
| 64 | 
            +
                    links << link_to_entity(@parent_entity.class, :index, no_icon: true)
         | 
| 65 | 
            +
                    links << link_to_entity(@parent_entity, :show, no_icon: true)
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  links << link_to_entity(entity.class, :index, no_icon: true)
         | 
| 69 | 
            +
                  links << link_to_entity(entity.class, :new, no_icon: true)
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  render_breadcrumb links
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                def render_breadcrumb_edit(entity)
         | 
| 75 | 
            +
                  links = [home_link(entity.namespace)]
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  if @parent_entity
         | 
| 78 | 
            +
                    links << link_to_entity(@parent_entity.class, :index, no_icon: true)
         | 
| 79 | 
            +
                    links << link_to_entity(@parent_entity, :show, no_icon: true)
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  links << link_to_entity(entity.class, :index, no_icon: true)
         | 
| 83 | 
            +
                  links << link_to_entity(entity, :edit, no_icon: true)
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  render_breadcrumb links
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              class ApplicationMailer < ::ActionMailer::Base
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                default from: Microservice::Settings.email_default_from
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                layout 'microservice/mailer'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def self.default_url_options
         | 
| 9 | 
            +
                  {host: Microservice::Settings.host_name, protocol: Microservice::Settings.protocol}
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              class DeviseMailer < ::Devise::Mailer
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                default from: Microservice::Settings.email_default_from
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                layout 'microservice/mailer'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def self.default_url_options
         | 
| 9 | 
            +
                  {host: Microservice::Settings.host_name, protocol: Microservice::Settings.protocol}
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              module Concerns
         | 
| 3 | 
            +
                module EntityCloneable
         | 
| 4 | 
            +
                  extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  included do
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    after_create :copy_associations, if: -> {self.copied_from.present?}
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    attr_accessor :copied_from, :copy_options
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  class_methods do
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    def copy_from(arg, options = {})
         | 
| 17 | 
            +
                      source = arg.is_a?(::ApplicationRecord) ? arg : self.class.find(arg)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      copy = self.new
         | 
| 20 | 
            +
                      copy.attributes = source.attributes.dup.except(*copy_attributes_exceptions)
         | 
| 21 | 
            +
                      copy.copied_from = source
         | 
| 22 | 
            +
                      copy.copy_options = options
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                      copy
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    def copy_attributes_exceptions
         | 
| 28 | 
            +
                      %w(id created_at updated_at)
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  protected
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  def copy_associations
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
| @@ -0,0 +1,118 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              module Concerns
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                # Example of migration:
         | 
| 5 | 
            +
                #
         | 
| 6 | 
            +
                #   create_table :table_name, force: true do |t|
         | 
| 7 | 
            +
                #     t.string :name, null: false
         | 
| 8 | 
            +
                #     t.text :description, null: true
         | 
| 9 | 
            +
                #     t.boolean :active, null: false, default: true
         | 
| 10 | 
            +
                #
         | 
| 11 | 
            +
                #     t.references :author, null: false
         | 
| 12 | 
            +
                #     t.references :updated_by, null: true
         | 
| 13 | 
            +
                #     t.timestamps null: false
         | 
| 14 | 
            +
                #  end
         | 
| 15 | 
            +
                #
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                module EntityModel
         | 
| 18 | 
            +
                  extend ActiveSupport::Concern
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  included do
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    class_attribute :namespace, :search_fields, :sort_field, :parent_entity_symbol
         | 
| 23 | 
            +
                    class_attribute :hide_top_menu_new, :hide_top_menu_search
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    scope :sorted, -> {order(sort_field || :name)}
         | 
| 26 | 
            +
                    scope :search, -> (text) {where(Array(search_fields || default_search_fields).map {|f| arel_table[f].matches("%#{text}%")}.inject(:or))}
         | 
| 27 | 
            +
                    scope :active, -> {where(active: true) if column_names.include?('active')}
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    belongs_to :author, optional: true, class_name: 'User'
         | 
| 30 | 
            +
                    belongs_to :updated_by, optional: true, class_name: 'User'
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  class_methods do
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    def belongs_to_parent(name, options={})
         | 
| 37 | 
            +
                      self.parent_entity_symbol = name
         | 
| 38 | 
            +
                      belongs_to(name, options={})
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    def default_search_fields
         | 
| 42 | 
            +
                      f = []
         | 
| 43 | 
            +
                      f << :name if self.column_names.include?('name')
         | 
| 44 | 
            +
                      f << :description if self.column_names.include?('description')
         | 
| 45 | 
            +
                      f
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    def css_class(_options = {})
         | 
| 49 | 
            +
                      ''
         | 
| 50 | 
            +
                    end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                    def description
         | 
| 53 | 
            +
                      I18n.t(self.model_name.i18n_key, scope: [:text_entity_description])
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    def parent_entity_id_symbol
         | 
| 57 | 
            +
                      @parent_entity_id_symbol ||= (parent_entity_symbol.to_s + '_id').to_sym if parent_entity_symbol
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    def parent_entity_class
         | 
| 61 | 
            +
                      @parent_entity_class ||= self.reflect_on_association(parent_entity_symbol).klass if parent_entity_symbol
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    def class_route_array(parent_entity = nil)
         | 
| 65 | 
            +
                      if parent_entity_symbol
         | 
| 66 | 
            +
                        [parent_entity, self.namespace, self.base_class]
         | 
| 67 | 
            +
                      else
         | 
| 68 | 
            +
                        [self.namespace, self.base_class]
         | 
| 69 | 
            +
                      end
         | 
| 70 | 
            +
                    end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    def _to_form_path #:nodoc:
         | 
| 73 | 
            +
                      @_to_form_path ||= begin
         | 
| 74 | 
            +
                        n = ''
         | 
| 75 | 
            +
                        n = "#{self.namespace}/" if self.namespace
         | 
| 76 | 
            +
                        collection = ActiveSupport::Inflector.tableize(name)
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                        "#{n}#{collection}/form".freeze
         | 
| 79 | 
            +
                      end
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  def css_class(options = {})
         | 
| 85 | 
            +
                    self.class.css_class(options)
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  def parent_entity
         | 
| 89 | 
            +
                    send(parent_entity_symbol) if parent_entity_symbol
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  def parent_entity=(value)
         | 
| 93 | 
            +
                    send(parent_entity_symbol.to_s + '=', value) if parent_entity_symbol
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                  def polymorphic_class
         | 
| 97 | 
            +
                    self.becomes(self.class.base_class)
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  def model_route_array
         | 
| 101 | 
            +
                    [self.namespace, self.parent_entity, polymorphic_class]
         | 
| 102 | 
            +
                  end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  def class_route_array
         | 
| 105 | 
            +
                    self.class.class_route_array
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  def to_form_path
         | 
| 109 | 
            +
                    self.class._to_form_path
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  def last_touch_by
         | 
| 113 | 
            +
                    updated_by || author
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                end
         | 
| 117 | 
            +
              end
         | 
| 118 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              module Concerns
         | 
| 3 | 
            +
                module EntityMovable
         | 
| 4 | 
            +
                  extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  included do
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    after_save :do_move, if: -> {self.move_attributes.present?}
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    attr_accessor :move_attributes
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  protected
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def do_move
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def create_target_entity_from(move_to_params)
         | 
| 20 | 
            +
                    return nil if move_to_params.blank?
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    move_to_params['target_class'].constantize.find(move_to_params['target_id'])
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              module Concerns
         | 
| 3 | 
            +
                module EntityNaming
         | 
| 4 | 
            +
                  extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  included do
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  class_methods do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def heading_index
         | 
| 12 | 
            +
                      I18n.t(:heading_entity_index, entities: self.base_class.model_name.plural.humanize)
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def button_index
         | 
| 16 | 
            +
                      I18n.t(:button_entity_index, entities: self.base_class.model_name.plural.humanize)
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def title_index
         | 
| 20 | 
            +
                      I18n.t(:title_entity_index, entities: self.base_class.model_name.plural)
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def heading_show
         | 
| 24 | 
            +
                      self.model_name.human
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    def heading_new
         | 
| 28 | 
            +
                      I18n.t(:heading_entity_new, entity: self.model_name.human)
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    def button_new
         | 
| 32 | 
            +
                      I18n.t(:button_entity_new, entity: self.model_name.human)
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    def title_new
         | 
| 36 | 
            +
                      I18n.t(:title_entity_new, entity: self.model_name.human)
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  def heading_index
         | 
| 42 | 
            +
                    self.class.heading_index
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  def button_index
         | 
| 46 | 
            +
                    self.class.button_index
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  def title_index
         | 
| 50 | 
            +
                    self.class.title_index
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                  def heading_show
         | 
| 54 | 
            +
                    I18n.t(:heading_entity_show, entity: self.name)
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  def button_show
         | 
| 58 | 
            +
                    name
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  def title_show
         | 
| 62 | 
            +
                    I18n.t(:title_entity_show, entity: self.name)
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  def heading_new
         | 
| 66 | 
            +
                    self.class.heading_new
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  def button_new
         | 
| 70 | 
            +
                    self.class.button_new
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def title_new
         | 
| 74 | 
            +
                    self.class.title_new
         | 
| 75 | 
            +
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  def heading_edit
         | 
| 78 | 
            +
                    I18n.t(:heading_entity_edit, entity: self.class.model_name.human)
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  def button_edit
         | 
| 82 | 
            +
                    I18n.t(:button_entity_edit, entity: self.class.model_name.human)
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  def title_edit
         | 
| 86 | 
            +
                    I18n.t(:title_entity_edit, entity: self.name)
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  def title_delete
         | 
| 90 | 
            +
                    I18n.t(:title_entity_delete, entity: self.name)
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            module Microservice
         | 
| 2 | 
            +
              module Concerns
         | 
| 3 | 
            +
                module UserModel
         | 
| 4 | 
            +
                  extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  included do
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    enum status: [:active]
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    devise :database_authenticatable, :trackable, :validatable,
         | 
| 11 | 
            +
                           :registerable, :recoverable, :rememberable, :confirmable, :lockable, :timeoutable,
         | 
| 12 | 
            +
                           :token_authenticatable,
         | 
| 13 | 
            +
                           :omniauthable, omniauth_providers: Microservice::Settings.omniauth_providers_keys
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    scope :admins, -> {where(admin: true)}
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    store :preferences, coder: JSON
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    thread_mattr_accessor :current
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    before_save :ensure_name
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  class_methods do
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  protected
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def ensure_name
         | 
| 31 | 
            +
                    self.name = "#{first_name} #{last_name}"
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         |