Files
sure/lib/generators/provider/global/templates/global_adapter.rb.tt
soky srm 5d6c1bc280 Provider generator (#364)
* 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>
2025-12-08 22:52:30 +01:00

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