Sha256: fff86c5889a6d8e41cf366aca959d3a1809e417a81aea832f3dab7ec909db958
Contents?: true
Size: 1.35 KB
Versions: 6
Compression:
Stored size: 1.35 KB
Contents
module SwitchUser class DataSources attr_reader :sources def initialize(sources) @sources = sources end def all sources.flat_map { |source| source.all } end def find_scope_id(scope_id) sources.map {|source| source.find_scope_id(scope_id) }.compact.first end end class DataSource attr_reader :loader, :scope, :identifier, :name def initialize(loader, scope, identifier, name) @loader = loader @scope = scope @identifier = identifier @name = name end def all loader.call.map { |user| Record.new(user, self) } end def find_scope_id(scope_id) scope_regexp = /\A#{scope}_/ return unless scope_id =~ scope_regexp user = loader.call.where(identifier => scope_id.sub(scope_regexp, '')).first Record.new(user, self) end end class GuestDataSource def all [ GuestRecord.new ] end def find_scope_id(scope_id) end end class Record attr_reader :user, :source def initialize(user, source) @user = user @source = source end def label user.send(source.name) end def scope source.scope end def scope_id "#{source.scope}_#{user.send(source.identifier)}" end end class GuestRecord def label "Guest" end def scope_id end end end
Version data entries
6 entries across 6 versions & 1 rubygems