Sha256: 0f2813489829a9d78cf913a53edc49d3d2b4c856b57aaf5ed7f4a5d19493871c

Contents?: true

Size: 1.26 KB

Versions: 6

Compression:

Stored size: 1.26 KB

Contents

module Cms
  module UsersService
    class UsersFactory
      class << self
        delegate :guest_user, :user, :extend_user, to: :factory
      end

      def self.factory
        @factory || new
      end

      def guest_user
        load_guest_user
      end

      def user(login, group_codes: nil)
        load_user(login).tap do |user|
          extend_user(user, group_codes: group_codes)
        end
      end

      def extend_user(user, group_codes: nil)
        user.send :extend, CmsUserCompatibilityModule unless user.try :cms_user_compatible?
        user.send :extend, UserGroupsByCodesModule unless user.respond_to? :group_codes=
        add_groups_to_user(user, group_codes) if group_codes
        user
      end

      private
      def add_groups_to_user(user, group_codes)
        user.group_codes = Array(group_codes)
      end

      def load_user(login)
        Cms.user_class.where(Cms.user_key_field => login).first!
      end

      def load_guest_user
        params = {
          Cms.user_key_field  => Cms::Group::GUEST_CODE,
          Cms.user_name_field => GUEST_NAME
        }

        Cms.user_class.new(params).tap do |guest_user|
          extend_user guest_user
          guest_user.send :extend, GuestUserModule
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
browsercms-artirix-4.0.4 lib/cms/users_service/users_factory.rb
browsercms-artirix-4.0.3.3 lib/cms/users_service/users_factory.rb
browsercms-artirix-4.0.3.2 lib/cms/users_service/users_factory.rb
browsercms-artirix-4.0.3.1 lib/cms/users_service/users_factory.rb
browsercms-artirix-4.0.3 lib/cms/users_service/users_factory.rb
browsercms-artirix-4.0.2 lib/cms/users_service/users_factory.rb