Class: ROM::Struct
- Inherits:
-
Dry::Struct
- Object
- Dry::Struct
- ROM::Struct
- Defined in:
- lib/rom/struct.rb
Overview
Simple data-struct class
ROM structs are plain data structures loaded by repositories. They implement Hash protocol which means that they can be used in places where Hash-like objects are supported.
Repositories define subclasses of ROM::Struct automatically, they are defined in the ROM::Struct namespace by default, but you set it up to use your namespace/module as well.
Structs are based on dry-struct gem, they include schema
with detailed information
about attribute types returned from relations, thus can be introspected to build
additional functionality when desired.
There is a caveat you should know about when working with structs. Struct classes have names but at the same time they're anonymous, i.e. you can't get the User struct class with ROM::Struct::User. ROM will create as many struct classes for User as needed, they all will have the same name and ROM::Struct::User will be the common parent class for them. Combined with the ability to provide your own namespace for structs this enables to pre-define the parent class.
Constant Summary collapse
- MissingAttribute =
Class.new(NameError)
Instance Method Summary collapse
-
#fetch(name) ⇒ Object
Return attribute value.
- #respond_to_missing? ⇒ Boolean private
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing ⇒ Object (private)
93 94 95 96 97 |
# File 'lib/rom/struct.rb', line 93 def method_missing(*) super rescue NameError => e raise MissingAttribute, "#{e.} (attribute not loaded?)" end |
Instance Method Details
#fetch(name) ⇒ Object
Return attribute value
82 83 84 |
# File 'lib/rom/struct.rb', line 82 def fetch(name) __send__(name) end |
#respond_to_missing? ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
87 88 89 |
# File 'lib/rom/struct.rb', line 87 def respond_to_missing?(*) super end |