Class: ApiMaker::MemoryStorage

Inherits:
Object
  • Object
show all
Defined in:
lib/api_maker/memory_storage.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMemoryStorage

Returns a new instance of MemoryStorage.



8
9
10
11
# File 'lib/api_maker/memory_storage.rb', line 8

def initialize
  @model_class_for_data = {}
  @storage = {}
end

Instance Attribute Details

#model_class_for_dataObject (readonly)

Returns the value of attribute model_class_for_data.



2
3
4
# File 'lib/api_maker/memory_storage.rb', line 2

def model_class_for_data
  @model_class_for_data
end

#storageObject (readonly)

Returns the value of attribute storage.



2
3
4
# File 'lib/api_maker/memory_storage.rb', line 2

def storage
  @storage
end

Class Method Details

.currentObject



4
5
6
# File 'lib/api_maker/memory_storage.rb', line 4

def self.current
  @current ||= ApiMaker::MemoryStorage.new
end

Instance Method Details

#add(klass, mode, data, args = {}) ⇒ Object



17
18
19
20
21
# 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_resourcesObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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:) ⇒ Object



44
45
46
# 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) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
# 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) ⇒ Object



62
63
64
# 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?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/api_maker/memory_storage.rb', line 40

def resources_loaded?
  @resources_loaded
end

#storage_for(klass, mode) ⇒ Object



13
14
15
# File 'lib/api_maker/memory_storage.rb', line 13

def storage_for(klass, mode)
  @storage.dig(klass, mode) || {}
end