Module: Poodle::Rails

Defined in:
lib/poodle/rails.rb,
lib/poodle/rails/railtie.rb

Overview

Rails integration module for Poodle SDK

Examples:

Rails initializer (config/initializers/poodle.rb)

Poodle::Rails.configure do |config|
  config.api_key = Rails.application.credentials.poodle_api_key
  config.debug = Rails.env.development?
end

Using in Rails controllers

class NotificationController < ApplicationController
  def send_welcome_email
    response = Poodle::Rails.client.send(
      from: "[email protected]",
      to: params[:email],
      subject: "Welcome!",
      html: render_to_string("welcome_email")
    )

    if response.success?
      render json: { status: "sent" }
    else
      render json: { error: response.message }, status: :unprocessable_entity
    end
  end
end

Defined Under Namespace

Classes: Railtie

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationConfiguration? (readonly)



35
36
37
# File 'lib/poodle/rails.rb', line 35

def configuration
  @configuration
end

Class Method Details

.auto_configure!Configuration

Auto-configure from Rails credentials and environment

Examples:

In Rails initializer

Poodle::Rails.auto_configure!


103
104
105
106
107
108
109
110
111
112
# File 'lib/poodle/rails.rb', line 103

def auto_configure!
  config_hash = rails_config

  configure do |config|
    configure_api_key(config, config_hash)
    configure_base_url(config, config_hash)
    configure_timeout(config, config_hash)
    configure_debug_mode(config, config_hash)
  end
end

.clientClient

Get the global Poodle client for Rails

Examples:

client = Poodle::Rails.client
response = client.send(email_params)

Raises:

  • (RuntimeError)

    if not configured



63
64
65
66
67
# File 'lib/poodle/rails.rb', line 63

def client
  raise "Poodle not configured. Call Poodle::Rails.configure first." unless @configuration

  @client ||= Client.new(@configuration)
end

.configure {|Configuration| ... } ⇒ Configuration

Configure Poodle for Rails applications

Examples:

Poodle::Rails.configure do |config|
  config.api_key = Rails.application.credentials.poodle_api_key
  config.base_url = "https://api.usepoodle.com"
  config.timeout = 30
  config.debug = Rails.env.development?
end

Yields:



49
50
51
52
53
# File 'lib/poodle/rails.rb', line 49

def configure
  @configuration = Configuration.new
  yield(@configuration) if block_given?
  @configuration
end

.configure_api_key(config, config_hash) ⇒ Object (private)

Configure API key from various sources



120
121
122
123
124
125
126
127
# File 'lib/poodle/rails.rb', line 120

def configure_api_key(config, config_hash)
  # Try Rails credentials first, then environment variables
  if defined?(::Rails) && ::Rails.application.credentials.respond_to?(:poodle_api_key)
    config.api_key = ::Rails.application.credentials.poodle_api_key
  end

  config.api_key ||= config_hash[:api_key] || ENV.fetch("POODLE_API_KEY", nil)
end

.configure_base_url(config, config_hash) ⇒ Object (private)

Configure base URL from various sources



133
134
135
# File 'lib/poodle/rails.rb', line 133

def configure_base_url(config, config_hash)
  config.base_url = config_hash[:base_url] || ENV["POODLE_BASE_URL"] || config.base_url
end

.configure_debug_mode(config, config_hash) ⇒ Object (private)

Configure debug mode from various sources



149
150
151
152
# File 'lib/poodle/rails.rb', line 149

def configure_debug_mode(config, config_hash)
  config.debug = config_hash[:debug] || ENV["POODLE_DEBUG"] == "true" ||
                 (defined?(::Rails) && ::Rails.env.development?)
end

.configure_timeout(config, config_hash) ⇒ Object (private)

Configure timeout from various sources



141
142
143
# File 'lib/poodle/rails.rb', line 141

def configure_timeout(config, config_hash)
  config.timeout = config_hash[:timeout] || ENV["POODLE_TIMEOUT"]&.to_i || config.timeout
end

.configured?Boolean

Check if Poodle is configured



80
81
82
# File 'lib/poodle/rails.rb', line 80

def configured?
  !@configuration.nil?
end

.rails_configHash

Get configuration from Rails environment



87
88
89
90
91
92
93
94
95
# File 'lib/poodle/rails.rb', line 87

def rails_config
  return {} unless defined?(::Rails)

  begin
    ::Rails.application.config_for(:poodle)
  rescue StandardError
    {}
  end
end

.reset!void

This method returns an undefined value.

Reset the configuration and client (useful for testing)



72
73
74
75
# File 'lib/poodle/rails.rb', line 72

def reset!
  @configuration = nil
  @client = nil
end