Module: ActiveProject

Defined in:
lib/activeproject.rb,
lib/active_project/async.rb,
lib/active_project/errors.rb,
lib/active_project/railtie.rb,
lib/active_project/version.rb,
lib/active_project/error_mapper.rb,
lib/active_project/adapters/base.rb,
lib/active_project/configuration.rb,
lib/active_project/status_mapper.rb,
lib/active_project/webhook_event.rb,
lib/active_project/resources/user.rb,
lib/active_project/resources/issue.rb,
lib/active_project/connections/base.rb,
lib/active_project/connections/rest.rb,
lib/active_project/resource_factory.rb,
lib/active_project/association_proxy.rb,
lib/active_project/resources/comment.rb,
lib/active_project/resources/project.rb,
lib/active_project/adapters/jira/issues.rb,
lib/active_project/connections/graph_ql.rb,
lib/active_project/adapters/fizzy/issues.rb,
lib/active_project/adapters/jira_adapter.rb,
lib/active_project/adapters/trello/lists.rb,
lib/active_project/adapters/fizzy/columns.rb,
lib/active_project/adapters/fizzy_adapter.rb,
lib/active_project/adapters/jira/comments.rb,
lib/active_project/adapters/jira/projects.rb,
lib/active_project/adapters/jira/webhooks.rb,
lib/active_project/adapters/trello/issues.rb,
lib/active_project/connections/pagination.rb,
lib/active_project/adapters/basecamp/lists.rb,
lib/active_project/adapters/fizzy/comments.rb,
lib/active_project/adapters/fizzy/projects.rb,
lib/active_project/adapters/github_project.rb,
lib/active_project/adapters/trello_adapter.rb,
lib/active_project/connections/http_client.rb,
lib/active_project/resources/base_resource.rb,
lib/active_project/adapters/basecamp/issues.rb,
lib/active_project/adapters/jira/connection.rb,
lib/active_project/adapters/trello/comments.rb,
lib/active_project/adapters/trello/projects.rb,
lib/active_project/adapters/trello/webhooks.rb,
lib/active_project/adapters/basecamp_adapter.rb,
lib/active_project/adapters/fizzy/connection.rb,
lib/active_project/adapters/jira/transitions.rb,
lib/active_project/adapters/basecamp/comments.rb,
lib/active_project/adapters/basecamp/projects.rb,
lib/active_project/adapters/basecamp/webhooks.rb,
lib/active_project/adapters/trello/connection.rb,
lib/active_project/adapters/github_repo/issues.rb,
lib/active_project/adapters/basecamp/connection.rb,
lib/active_project/adapters/github_repo_adapter.rb,
lib/active_project/adapters/github_repo/projects.rb,
lib/active_project/adapters/github_repo/webhooks.rb,
lib/active_project/adapters/github_project/issues.rb,
lib/active_project/resources/persistable_resource.rb,
lib/active_project/adapters/github_project/helpers.rb,
lib/active_project/adapters/github_project_adapter.rb,
lib/active_project/adapters/github_repo/connection.rb,
lib/active_project/adapters/github_project/comments.rb,
lib/active_project/adapters/github_project/projects.rb,
lib/active_project/adapters/github_project/webhooks.rb,
lib/active_project/configurations/jira_configuration.rb,
lib/active_project/adapters/github_project/connection.rb,
lib/active_project/adapters/jira/attribute_normalizer.rb,
lib/active_project/configurations/fizzy_configuration.rb,
lib/active_project/configurations/github_configuration.rb,
lib/active_project/configurations/trello_configuration.rb,
lib/active_project/configurations/basecamp_configuration.rb,
lib/active_project/configurations/base_adapter_configuration.rb

Defined Under Namespace

Modules: Adapters, Async, Configurations, Connections, ErrorMapper, Resources Classes: ApiError, AssociationProxy, AuthenticationError, Configuration, ConfigurationError, ConnectionError, Error, NotFoundError, NotImplementedError, Railtie, RateLimitError, ResourceFactory, StatusMapper, ValidationError, WebhookEvent

Constant Summary collapse

VERSION =
"0.5.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject



15
16
17
# File 'lib/activeproject.rb', line 15

def configuration
  @configuration ||= Configuration.new
end

Class Method Details

.adapter(adapter_type, instance_name = :primary) ⇒ ActiveProject::Adapters::Base

Returns a memoized instance of the requested adapter. Thread-safe implementation using Concurrent::Map for the adapter registry.

Parameters:

  • adapter_type (Symbol)

    The name of the adapter (e.g., :jira, :trello).

  • instance_name (Symbol) (defaults to: :primary)

    The name of the adapter instance (default: :primary).

Returns:

Raises:

  • (ArgumentError)

    if the adapter configuration is missing or invalid.

  • (LoadError)

    if the adapter class cannot be found.

  • (NameError)

    if the adapter class cannot be found after loading the file.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/activeproject.rb', line 44

def adapter(adapter_type, instance_name = :primary)
  key = "#{adapter_type}_#{instance_name}".to_sym

  adapter_registry.fetch_or_store(key) do
    config = configuration.adapter_config(adapter_type, instance_name)

    unless config.is_a?(ActiveProject::Configurations::BaseAdapterConfiguration)
      available_configs = list_available_configurations

      error_message = "Configuration for adapter ':#{adapter_type}' (instance ':#{instance_name}') not found or invalid.\n\n"

      if available_configs.empty?
        error_message += "No adapters are currently configured. "
      else
        error_message += "Available configurations:\n"
        available_configs.each do |adapter_key, config_type|
          error_message += "  * #{adapter_key} (#{config_type})\n"
        end
      end

      error_message += "\nTo configure, use:\n"
      error_message += "  ActiveProject.configure do |config|\n"
      error_message += "    config.add_adapter :#{adapter_type}, :#{instance_name}, { your_options_here }\n"
      error_message += "  end"

      raise ArgumentError, error_message
    end

    adapter_class_name = "ActiveProject::Adapters::#{adapter_type.to_s.classify}Adapter"

    begin
      require "active_project/adapters/#{adapter_type}_adapter"
    rescue LoadError
      raise LoadError, "Could not load adapter '#{adapter_type}'. " \
                      "Expected class #{adapter_class_name} in adapters/#{adapter_type}_adapter.rb"
    end

    begin
      adapter_class = Object.const_get(adapter_class_name)
    rescue NameError
      error_message = "Could not find adapter class #{adapter_class_name}.\n"
      error_message += "Make sure you have defined the class correctly in active_project/adapters/#{adapter_type}_adapter.rb"
      raise NameError, error_message
    end

    adapter_class.new(config: config)
  end
end

.adapter_registryConcurrent::Map

Returns a thread-safe map that stores adapter instances

Returns:

  • (Concurrent::Map)

    Thread-safe hash implementation



106
107
108
# File 'lib/activeproject.rb', line 106

def adapter_registry
  @adapter_registry ||= Concurrent::Map.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



19
20
21
# File 'lib/activeproject.rb', line 19

def configure
  yield(configuration)
end

.list_available_configurationsHash

Lists all available configurations in the format adapter_name:instance_name

Returns:

  • (Hash)

    A hash mapping configuration keys to their configuration types



95
96
97
98
99
100
101
102
# File 'lib/activeproject.rb', line 95

def list_available_configurations
  result = {}
  configuration.adapter_configs.each do |key, config|
    config_type = config.class.name.split("::").last
    result[key] = config_type
  end
  result
end

.reset_adaptersvoid

This method returns an undefined value.

Resets all cached adapters, forcing them to be re-initialized with current configuration



25
26
27
# File 'lib/activeproject.rb', line 25

def reset_adapters
  adapter_registry.clear if defined?(@adapter_registry) && @adapter_registry
end

.user_agentString

Returns the configured User-Agent string, including the gem version.

Returns:

  • (String)

    The User-Agent string.



31
32
33
34
# File 'lib/activeproject.rb', line 31

def user_agent
  base_agent = configuration.user_agent || "ActiveProject Gem (github.com/seuros/activeproject)"
  "#{base_agent} v#{ActiveProject::VERSION}"
end