module Challah::UserProvideable

Public Instance Methods

method_missing(method, *args) click to toggle source
Calls superclass method
# File lib/challah/concerns/user/provideable.rb, line 10
def method_missing(method, *args)
  method_name = method.to_s

  if method_name =~ /^([a-z]*)_provider\?$/
    return provider?($1)
  elsif method_name =~ /^([a-z]*)_provider$/
    return provider($1)
  end

  super
end
provider(provider_name) click to toggle source
# File lib/challah/concerns/user/provideable.rb, line 50
def provider(provider_name)
  providers[provider_name.to_sym]
end
provider?(provider_name) click to toggle source

Does this user have the given provider name

# File lib/challah/concerns/user/provideable.rb, line 46
def provider?(provider_name)
  !!provider(provider_name)
end
provider_attributes() click to toggle source
# File lib/challah/concerns/user/provideable.rb, line 54
def provider_attributes
  @provider_attributes ||= Challah.providers.keys.inject({}) { |h, m| h[m] = nil; h }
end
provider_attributes=(value) click to toggle source
# File lib/challah/concerns/user/provideable.rb, line 58
def provider_attributes=(value)
  if Hash === value
    @provider_attributes = value.keys.inject({}) do |h, m|
      h[m.to_sym] = (value[m].respond_to?(:symbolize_keys) ? value[m].symbolize_keys : value[m])
      h
    end
  end
end
providers() click to toggle source
# File lib/challah/concerns/user/provideable.rb, line 22
def providers
  return @providers if @providers

  @providers = {}

  attributes = self.class.authorization_model.hashable_attributes

  # Grab providers from existing authorization records
  @providers = authorizations.inject({}) do |hash, m|
    hash[m.provider.to_sym] = attributes.inject({}) { |p, a| p[a.to_sym] = m.send(a); p }
    hash
  end

  # Then, grab any provider attributes provided
  provider_attributes.each do |k, v|
    if v.respond_to?(:fetch)
      @providers[k] = v
    end
  end

  @providers
end
valid_provider?(provider_name) click to toggle source
# File lib/challah/concerns/user/provideable.rb, line 67
def valid_provider?(provider_name)
  name = provider_name.to_sym

  if Challah.providers.keys.include?(name)
    Challah.providers[name].valid?(self)
  else
    false
  end
end

Protected Instance Methods

clear_cached_providers_after_save() click to toggle source
# File lib/challah/concerns/user/provideable.rb, line 79
def clear_cached_providers_after_save
  @providers = nil
end
update_modified_providers_after_save() click to toggle source

If password or username was changed, update the authorization record

# File lib/challah/concerns/user/provideable.rb, line 84
def update_modified_providers_after_save
  # Save password provider
  if @password_updated or @username_updated
    Challah.providers[:password].save(self)
    @password_updated = false
    @username_updated = false
    @password = nil
  end

  # Save any other providers
  Challah.custom_providers.each do |name, klass|
    custom_provider_attributes = provider_attributes[name]

    if custom_provider_attributes.respond_to?(:fetch)
      if klass.valid?(self)
        klass.save(self)
      end
    end
  end
end