Class: Ask::Auth::Providers::RailsCredentials
- Inherits:
-
Object
- Object
- Ask::Auth::Providers::RailsCredentials
- Defined in:
- lib/ask/auth/providers/rails_credentials.rb
Overview
Resolves credentials from Rails encrypted credentials.
Supports two lookup modes determined by the name argument type:
Symbol/String → flat key, looked up literally
resolve(:opencode_api_key) → credentials.opencode_api_key
resolve("opencode_api_key") → credentials.opencode_api_key
Array → path segments, navigated in order
resolve([:opencode, :api_key]) → credentials.opencode.api_key
resolve([:opencode, :go, :api_key]) → credentials.opencode.go.api_key
No splitting, no guessing. The caller determines the lookup path.
Safely returns nil when Rails is not loaded.
Instance Method Summary collapse
Instance Method Details
#call(name, user: nil) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/ask/auth/providers/rails_credentials.rb', line 22 def call(name, user: nil) return nil unless defined?(::Rails) && ::Rails.application.respond_to?(:credentials) creds = ::Rails.application.credentials parts = Array(name).map { |p| p.to_s.strip } return nil if parts.empty? || parts.any?(&:empty?) # Navigate the path segments. Must check the VALUE, not just # respond_to?, because ActiveSupport::OrderedOptions#respond_to? # returns true for any method name, even when the key doesn't exist. value = parts.reduce(creds) do |obj, part| begin val = obj.public_send(part) break nil if val.nil? val rescue NoMethodError break nil end end value end |