class ApiMaker::MemoryStorage

Attributes

model_class_for_data[R]
storage[R]

Public Class Methods

current() click to toggle source
# File lib/api_maker/memory_storage.rb, line 4
def self.current
  @current ||= ApiMaker::MemoryStorage.new
end
new() click to toggle source
# File lib/api_maker/memory_storage.rb, line 8
def initialize
  @model_class_for_data = {}
  @storage = {}
end

Public Instance Methods

add(klass, mode, data, args = {}) click to toggle source
# File lib/api_maker/memory_storage.rb, line 17
def add(klass, mode, data, args = {})
  @storage[klass] ||= {}
  @storage[klass][mode] ||= {}
  @storage[klass][mode][data] = {data: data, args: args} unless @storage[klass][mode].key?(data)
end
load_all_resources() click to toggle source
# File lib/api_maker/memory_storage.rb, line 23
def load_all_resources
  resources_path = Rails.root.join("app", "api_maker", "resources")

  Dir.foreach(resources_path) do |file|
    match = file.match(/\A((.+)_resource)\.rb\Z/)
    next unless match

    resource_name = match[1]
    resource_class_name = "Resources::#{resource_name.camelize}"

    # Load the resource by constantizing it to support auto loading
    resource_class_name.safe_constantize
  end

  @resources_loaded = true
end
model_class_for(resource:, klass:) click to toggle source
# File lib/api_maker/memory_storage.rb, line 44
def model_class_for(resource:, klass:)
  model_class_for_data[klass.name] = resource.name
end
resource_for_model(model_class) click to toggle source
# File lib/api_maker/memory_storage.rb, line 48
def resource_for_model(model_class)
  class_name = resource_name_for_model(model_class)
  resource_class = class_name.safe_constantize

  if !resource_class && !resources_loaded?
    load_all_resources # Some resources with custom model class won't have been loaded at this point
    return resource_for_model(model_class)
  end

  raise "Resource couldn't be found from model: #{model_class}" unless resource_class

  resource_class
end
resource_name_for_model(model_class) click to toggle source
# File lib/api_maker/memory_storage.rb, line 62
def resource_name_for_model(model_class)
  model_class_for_data[model_class.name] || "Resources::#{model_class.name.gsub("::", "")}Resource"
end
resources_loaded?() click to toggle source
# File lib/api_maker/memory_storage.rb, line 40
def resources_loaded?
  @resources_loaded
end
storage_for(klass, mode) click to toggle source
# File lib/api_maker/memory_storage.rb, line 13
def storage_for(klass, mode)
  @storage.dig(klass, mode) || {}
end