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