mirror of
https://github.com/we-promise/sure.git
synced 2026-04-12 08:37:22 +00:00
* Move provider config to family * Update schema.rb * Add provier generator * Add table creation also * FIX generator namespace * Add support for global providers also * Remove over-engineered stuff * FIX parser * FIX linter * Some generator fixes * Update generator with fixes * Update item_model.rb.tt * Add missing linkable concern * Add missing routes * Update adapter.rb.tt * Update connectable_concern.rb.tt * Update unlinking_concern.rb.tt * Update family_generator.rb * Update family_generator.rb * Delete .claude/settings.local.json Signed-off-by: soky srm <sokysrm@gmail.com> * Move docs under API related folder * Rename Rails generator doc * Light edits to LLM generated doc * Small Lunch Flow config panel regressions. --------- Signed-off-by: soky srm <sokysrm@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
106 lines
3.3 KiB
Plaintext
106 lines
3.3 KiB
Plaintext
class Provider::<%= class_name %>Adapter < Provider::Base
|
|
include Provider::Syncable
|
|
include Provider::InstitutionMetadata
|
|
include Provider::Configurable
|
|
|
|
# Register this adapter with the factory
|
|
Provider::Factory.register("<%= class_name %>Account", self)
|
|
<%= configure_block_content %>
|
|
def provider_name
|
|
"<%= file_name %>"
|
|
end
|
|
|
|
# Thread-safe lazy loading of <%= class_name %> configuration
|
|
def self.ensure_configuration_loaded
|
|
# Fast path: return immediately if already loaded (no lock needed)
|
|
return if Rails.application.config.<%= file_name %>.present?
|
|
|
|
# Slow path: acquire lock and reload if still needed
|
|
@config_mutex ||= Mutex.new
|
|
@config_mutex.synchronize do
|
|
return if Rails.application.config.<%= file_name %>.present?
|
|
reload_configuration
|
|
end
|
|
end
|
|
|
|
# Reload <%= class_name %> configuration when settings are updated
|
|
def self.reload_configuration
|
|
<% parsed_fields.each do |field| -%>
|
|
<%= field[:name] %> = config_value(:<%= field[:name] %>).presence || ENV["<%= field[:env_key] %>"]<% if field[:default] %> || "<%= field[:default] %>"<% end %>
|
|
<% end -%>
|
|
|
|
<% first_required_field = parsed_fields.find { |f| f[:secret] } -%>
|
|
<% if first_required_field -%>
|
|
if <%= first_required_field[:name] %>.present?
|
|
<% end -%>
|
|
Rails.application.config.<%= file_name %> = OpenStruct.new(
|
|
<% parsed_fields.each_with_index do |field, index| -%>
|
|
<%= field[:name] %>: <%= field[:name] %><%= index < parsed_fields.length - 1 ? ',' : '' %>
|
|
<% end -%>
|
|
)
|
|
<% if first_required_field -%>
|
|
else
|
|
Rails.application.config.<%= file_name %> = nil
|
|
end
|
|
<% end -%>
|
|
end
|
|
|
|
# Build a <%= class_name %> provider instance using GLOBAL credentials
|
|
# @return [Provider::<%= class_name %>, nil] Returns nil if credentials are not configured
|
|
def self.build_provider
|
|
<% first_secret_field = parsed_fields.find { |f| f[:secret] } -%>
|
|
<% if first_secret_field -%>
|
|
<%= first_secret_field[:name] %> = config_value(:<%= first_secret_field[:name] %>)
|
|
return nil unless <%= first_secret_field[:name] %>.present?
|
|
<% end -%>
|
|
|
|
# TODO: Implement provider initialization
|
|
# Provider::<%= class_name %>.new(
|
|
<% parsed_fields.each_with_index do |field, index| -%>
|
|
# <%= field[:name] %>: config_value(:<%= field[:name] %>)<%= index < parsed_fields.length - 1 ? ',' : '' %>
|
|
<% end -%>
|
|
# )
|
|
raise NotImplementedError, "Implement build_provider in #{__FILE__}"
|
|
end
|
|
|
|
def sync_path
|
|
Rails.application.routes.url_helpers.sync_<%= file_name %>_item_path(item)
|
|
end
|
|
|
|
def item
|
|
provider_account.<%= file_name %>_item
|
|
end
|
|
|
|
def can_delete_holdings?
|
|
false
|
|
end
|
|
|
|
def institution_domain
|
|
# TODO: Implement institution domain extraction
|
|
metadata = provider_account.institution_metadata
|
|
return nil unless metadata.present?
|
|
|
|
metadata["domain"]
|
|
end
|
|
|
|
def institution_name
|
|
# TODO: Implement institution name extraction
|
|
metadata = provider_account.institution_metadata
|
|
return nil unless metadata.present?
|
|
|
|
metadata["name"] || item&.institution_name
|
|
end
|
|
|
|
def institution_url
|
|
# TODO: Implement institution URL extraction
|
|
metadata = provider_account.institution_metadata
|
|
return nil unless metadata.present?
|
|
|
|
metadata["url"] || item&.institution_url
|
|
end
|
|
|
|
def institution_color
|
|
item&.institution_color
|
|
end
|
|
end
|