Class: ApiMaker::MemoryStorage
- Inherits:
-
Object
- Object
- ApiMaker::MemoryStorage
- Defined in:
- lib/api_maker/memory_storage.rb
Instance Attribute Summary collapse
-
#model_class_for_data ⇒ Object
readonly
Returns the value of attribute model_class_for_data.
-
#storage ⇒ Object
readonly
Returns the value of attribute storage.
Class Method Summary collapse
Instance Method Summary collapse
- #add(klass, mode, data, args = {}) ⇒ Object
-
#initialize ⇒ MemoryStorage
constructor
A new instance of MemoryStorage.
- #load_all_resources ⇒ Object
- #model_class_for(resource:, klass:) ⇒ Object
- #resource_for_model(model_class) ⇒ Object
- #resource_name_for_model(model_class) ⇒ Object
- #resources_loaded? ⇒ Boolean
- #storage_for(klass, mode) ⇒ Object
Constructor Details
#initialize ⇒ MemoryStorage
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_data ⇒ Object (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 |
#storage ⇒ Object (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
.current ⇒ Object
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_resources ⇒ Object
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
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 |