Module: Alba
- Defined in:
- lib/alba.rb,
lib/alba/type.rb,
lib/alba/errors.rb,
lib/alba/layout.rb,
lib/alba/railtie.rb,
lib/alba/resource.rb,
lib/alba/constants.rb,
lib/alba/association.rb,
lib/alba/deprecation.rb,
lib/alba/typed_attribute.rb,
lib/alba/nested_attribute.rb,
lib/alba/default_inflector.rb,
lib/alba/conditional_attribute.rb more...
Overview
This file includes public constants to prevent circular dependencies.
Defined Under Namespace
Modules: DefaultInflector, Deprecation, Resource Classes: Association, ConditionalAttribute, Error, Layout, NestedAttribute, Railtie, Type, TypedAttribute, UnsupportedBackend, UnsupportedType
Constant Summary collapse
- Serializer =
Resource
- REMOVE_KEY =
A constant to remove key from serialized JSON
Object.new.freeze
Class Attribute Summary collapse
-
.backend ⇒ Object
Returns the value of attribute backend.
-
.encoder ⇒ Object
Returns the value of attribute encoder.
-
.inflector ⇒ Object
Getter for inflector, a module responsible for inflecting strings.
Class Method Summary collapse
-
.collection?(object) ⇒ Boolean
private
Detect if object is a collection or not.
-
.disable_inference! ⇒ Object
deprecated
Deprecated.
Use Alba.inflector= instead
-
.enable_inference!(with:) ⇒ Object
deprecated
Deprecated.
Use Alba.inflector= instead
-
.find_type(name) ⇒ Alba::Type
Find type by name.
-
.hashify(object = nil, with: :inference, root_key: nil, &block) ⇒ String
Hashify the object with inline definitions.
-
.infer_resource_class(name, nesting: nil) ⇒ Class<Alba::Resource>
Resource class.
-
.inferring ⇒ Boolean
deprecated
Deprecated.
Use Alba.inflector instead
-
.register_type(name, check: false, converter: nil, auto_convert: false) ⇒ void
Register types, used for both builtin and custom types.
-
.regularize_key(key) ⇒ Symbol, ...
Regularize key to be either Symbol or String depending on @symbolize_keys Returns nil if key is nil.
-
.reset! ⇒ Object
Reset config variables Useful for test cleanup.
-
.resource_class(&block) ⇒ Class<Alba::Resource>
Resource class.
-
.resource_with(object, with: :inference, &block) ⇒ Alba::Resource
Get a resource object from arguments If block is given, it creates a resource class with the block Otherwise, it behaves depending on ‘with` argument.
-
.serialize(object = nil, with: :inference, root_key: nil, &block) ⇒ String
Serialize the object with inline definitions.
-
.stringify_keys! ⇒ Object
Configure Alba to stringify (not symbolize) keys.
-
.symbolize_keys! ⇒ Object
Configure Alba to symbolize keys.
-
.transform_key(key, transform_type:) ⇒ String
Transform a key with given transform_type.
Class Attribute Details
permalink .backend ⇒ Object
Returns the value of attribute backend.
14 15 16 |
# File 'lib/alba.rb', line 14 def backend @backend end |
permalink .encoder ⇒ Object
Returns the value of attribute encoder.
14 15 16 |
# File 'lib/alba.rb', line 14 def encoder @encoder end |
permalink .inflector ⇒ Object
Getter for inflector, a module responsible for inflecting strings
17 18 19 |
# File 'lib/alba.rb', line 17 def inflector @inflector end |
Class Method Details
permalink .collection?(object) ⇒ 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.
Detect if object is a collection or not. When object is a Struct, it’s Enumerable but not a collection
85 86 87 |
# File 'lib/alba.rb', line 85 def collection?(object) object.is_a?(Enumerable) && !object.is_a?(Struct) end |
permalink .disable_inference! ⇒ Object
Use inflector= instead
Disable inference for key and resource name
104 105 106 107 108 |
# File 'lib/alba.rb', line 104 def disable_inference! Alba::Deprecation.warn('Alba.disable_inference! is deprecated. Use `Alba.inflector = nil` instead.') @inferring = false @inflector = nil end |
permalink .enable_inference!(with:) ⇒ Object
Use inflector= instead
Enable inference for key and resource name
95 96 97 98 99 |
# File 'lib/alba.rb', line 95 def enable_inference!(with:) Alba::Deprecation.warn('Alba.enable_inference! is deprecated. Use `Alba.inflector=` instead.') @inflector = inflector_from(with) @inferring = true end |
permalink .find_type(name) ⇒ Alba::Type
Find type by name
208 209 210 211 212 |
# File 'lib/alba.rb', line 208 def find_type(name) @types.fetch(name) do raise(Alba::UnsupportedType, "Unknown type: #{name}") end end |
permalink .hashify(object = nil, with: :inference, root_key: nil, &block) ⇒ String
Hashify the object with inline definitions
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/alba.rb', line 70 def hashify(object = nil, with: :inference, root_key: nil, &block) raise ArgumentError, 'Either object or block must be given' if object.nil? && block.nil? if collection?(object) hashify_collection(object, with, &block) else resource = resource_with(object, &block) resource.as_json(root_key: root_key) end end |
permalink .infer_resource_class(name, nesting: nil) ⇒ Class<Alba::Resource>
Returns resource class.
139 140 141 142 143 144 145 146 147 148 |
# File 'lib/alba.rb', line 139 def infer_resource_class(name, nesting: nil) raise Alba::Error, 'Inference is disabled so Alba cannot infer resource name. Set inflector before use.' unless Alba.inflector const_parent = nesting.nil? ? Object : Object.const_get(nesting) begin const_parent.const_get("#{inflector.classify(name)}Resource") rescue NameError # Retry for serializer const_parent.const_get("#{inflector.classify(name)}Serializer") end end |
permalink .inferring ⇒ Boolean
Use inflector instead
Returns whether inference is enabled or not.
112 113 114 115 |
# File 'lib/alba.rb', line 112 def inferring Alba::Deprecation.warn('Alba.inferring is deprecated. Use `Alba.inflector` instead.') @inferring end |
permalink .register_type(name, check: false, converter: nil, auto_convert: false) ⇒ void
This method returns an undefined value.
Register types, used for both builtin and custom types
201 202 203 |
# File 'lib/alba.rb', line 201 def register_type(name, check: false, converter: nil, auto_convert: false) @types[name] = Type.new(name, check: check, converter: converter, auto_convert: auto_convert) end |
permalink .regularize_key(key) ⇒ Symbol, ...
Regularize key to be either Symbol or String depending on @symbolize_keys Returns nil if key is nil
167 168 169 170 171 172 |
# File 'lib/alba.rb', line 167 def regularize_key(key) return if key.nil? return key.to_sym if @symbolize_keys key.is_a?(Symbol) ? key.name : key.to_s end |
permalink .reset! ⇒ Object
Reset config variables Useful for test cleanup
216 217 218 219 220 221 222 223 224 |
# File 'lib/alba.rb', line 216 def reset! @encoder = default_encoder @symbolize_keys = false @_on_error = :raise @_on_nil = nil @types = {} reset_transform_keys register_default_types end |
permalink .resource_class(&block) ⇒ Class<Alba::Resource>
Returns resource class.
129 130 131 132 133 134 |
# File 'lib/alba.rb', line 129 def resource_class(&block) klass = Class.new klass.include(Alba::Resource) klass.class_eval(&block) if block klass end |
permalink .resource_with(object, with: :inference, &block) ⇒ Alba::Resource
Get a resource object from arguments If block is given, it creates a resource class with the block Otherwise, it behaves depending on ‘with` argument
238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'lib/alba.rb', line 238 def resource_with(object, with: :inference, &block) # rubocop:disable Metrics/MethodLength klass = if block resource_class(&block) else case with when :inference then infer_resource_class(object.class.name) when Class then with when Proc then with.call(object) else raise ArgumentError, '`with` argument must be either :inference, Proc or Class' end end klass.new(object) end |
permalink .serialize(object = nil, with: :inference, root_key: nil, &block) ⇒ String
Serialize the object with inline definitions
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/alba.rb', line 50 def serialize(object = nil, with: :inference, root_key: nil, &block) raise ArgumentError, 'Either object or block must be given' if object.nil? && block.nil? if collection?(object) h = hashify_collection(object, with, &block) Alba.encoder.call(h) else resource = resource_with(object, &block) resource.serialize(root_key: root_key) end end |
permalink .stringify_keys! ⇒ Object
Configure Alba to stringify (not symbolize) keys
157 158 159 160 |
# File 'lib/alba.rb', line 157 def stringify_keys! reset_transform_keys if @symbolize_keys @symbolize_keys = false end |
permalink .symbolize_keys! ⇒ Object
Configure Alba to symbolize keys
151 152 153 154 |
# File 'lib/alba.rb', line 151 def symbolize_keys! reset_transform_keys unless @symbolize_keys @symbolize_keys = true end |
permalink .transform_key(key, transform_type:) ⇒ String
Transform a key with given transform_type
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/alba.rb', line 179 def transform_key(key, transform_type:) # rubocop:disable Metrics/MethodLength raise Alba::Error, 'Inflector is nil. You must set inflector before transforming keys.' unless inflector @_transformed_keys[transform_type][key] ||= begin key = key.to_s k = case transform_type when :camel then inflector.camelize(key) when :lower_camel then inflector.camelize_lower(key) when :dash then inflector.dasherize(key) when :snake then inflector.underscore(key) else raise Alba::Error, "Unknown transform type: #{transform_type}" end regularize_key(k) end end |