Class: Blueprinter::Base
- Inherits:
-
Object
- Object
- Blueprinter::Base
- Includes:
- BaseHelpers
- Defined in:
- lib/blueprinter/base.rb
Class Method Summary collapse
-
.association(method, options = {}) {|object, options| ... } ⇒ Field
Specify an associated object to be included for serialization.
-
.exclude(field_name) ⇒ Array<Symbol>
Exclude a field that was mixed into the current view.
-
.excludes(*field_names) ⇒ Array<Symbol>
When mixing multiple views under a single view, some fields may required to be excluded from current view.
-
.field(method, options = {}) {|object, options| ... } ⇒ Field
Specify a field or method name to be included for serialization.
-
.fields(*field_names) ⇒ Array<Symbol>
Specify one or more field/method names to be included for serialization.
-
.identifier(method, name: method, extractor: AutoExtractor.new) {|object, options| ... } ⇒ Field
Specify a field or method name used as an identifier.
-
.include_view(view_name) ⇒ Array<Symbol>
Specify another view that should be mixed into the current view.
- .include_views(*view_names) ⇒ Object
-
.prepare(object, view_name:, local_options:, root: nil, meta: nil) ⇒ Object
private
This is the magic method that converts complex objects into a simple hash ready for JSON conversion.
-
.render(object, options = {}) ⇒ String
Generates a JSON formatted String.
-
.render_as_hash(object, options = {}) ⇒ Hash
Generates a hash.
-
.render_as_json(object, options = {}) ⇒ Hash
Generates a JSONified hash.
-
.transform(transformer) ⇒ Array<Class>
Specify one transformer to be included for serialization.
-
.view(view_name) ⇒ View
Specify a view and the fields it should have.
Methods included from BaseHelpers
Class Method Details
.association(method, options = {}) {|object, options| ... } ⇒ Field
Specify an associated object to be included for serialization. Takes a required method and an option.
156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/blueprinter/base.rb', line 156 def self.association(method, = {}, &block) raise BlueprinterError, 'blueprint required' unless [:blueprint] field( method, .merge( association: true, extractor: .fetch(:extractor) { AssociationExtractor.new }, ), &block ) end |
.exclude(field_name) ⇒ Array<Symbol>
Exclude a field that was mixed into the current view.
383 384 385 |
# File 'lib/blueprinter/base.rb', line 383 def self.exclude(field_name) current_view.exclude_field(field_name) end |
.excludes(*field_names) ⇒ Array<Symbol>
When mixing multiple views under a single view, some fields may required to be excluded from current view
406 407 408 |
# File 'lib/blueprinter/base.rb', line 406 def self.excludes(*field_names) current_view.exclude_fields(field_names) end |
.field(method, options = {}) {|object, options| ... } ⇒ Field
Specify a field or method name to be included for serialization. Takes a required method and an option.
117 118 119 120 121 122 123 124 125 |
# File 'lib/blueprinter/base.rb', line 117 def self.field(method, = {}, &block) current_view << Field.new( method, .fetch(:name) { method }, .fetch(:extractor) { AutoExtractor.new }, self, .merge(block: block), ) end |
.fields(*field_names) ⇒ Array<Symbol>
Specify one or more field/method names to be included for serialization. Takes at least one field or method names.
272 273 274 275 276 |
# File 'lib/blueprinter/base.rb', line 272 def self.fields(*field_names) field_names.each do |field_name| field(field_name) end end |
.identifier(method, name: method, extractor: AutoExtractor.new) {|object, options| ... } ⇒ Field
Specify a field or method name used as an identifier. Usually, this is something like :id
Note: identifiers are always rendered and considered their own view, similar to the :default view.
52 53 54 55 56 57 58 59 60 |
# File 'lib/blueprinter/base.rb', line 52 def self.identifier(method, name: method, extractor: AutoExtractor.new, &block) view_collection[:identifier] << Field.new( method, name, extractor, self, block: block, ) end |
.include_view(view_name) ⇒ Array<Symbol>
Specify another view that should be mixed into the current view.
334 335 336 |
# File 'lib/blueprinter/base.rb', line 334 def self.include_view(view_name) current_view.include_view(view_name) end |
.include_views(*view_names) ⇒ Object
362 363 364 |
# File 'lib/blueprinter/base.rb', line 362 def self.include_views(*view_names) current_view.include_views(view_names) end |
.prepare(object, view_name:, local_options:, root: nil, meta: nil) ⇒ Object
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.
This is the magic method that converts complex objects into a simple hash ready for JSON conversion.
Note: we accept view (public interface) that is in reality a view_name, so we rename it for clarity
251 252 253 254 255 256 257 |
# File 'lib/blueprinter/base.rb', line 251 def self.prepare(object, view_name:, local_options:, root: nil, meta: nil) unless view_collection.has_view? view_name raise BlueprinterError, "View '#{view_name}' is not defined" end data = prepare_data(object, view_name, ) (data, root, ) end |
.render(object, options = {}) ⇒ String
Generates a JSON formatted String. Takes a required object and an optional view.
190 191 192 |
# File 'lib/blueprinter/base.rb', line 190 def self.render(object, = {}) jsonify(prepare_for_render(object, )) end |
.render_as_hash(object, options = {}) ⇒ Hash
Generates a hash. Takes a required object and an optional view.
215 216 217 |
# File 'lib/blueprinter/base.rb', line 215 def self.render_as_hash(object, = {}) prepare_for_render(object, ) end |
.render_as_json(object, options = {}) ⇒ Hash
Generates a JSONified hash. Takes a required object and an optional view.
240 241 242 |
# File 'lib/blueprinter/base.rb', line 240 def self.render_as_json(object, = {}) prepare_for_render(object, ).as_json end |
.transform(transformer) ⇒ Array<Class>
Specify one transformer to be included for serialization. Takes a class which extends Blueprinter::Transformer
311 312 313 |
# File 'lib/blueprinter/base.rb', line 311 def self.transform(transformer) current_view.add_transformer(transformer) end |
.view(view_name) ⇒ View
Specify a view and the fields it should have. It accepts a view name and a block. The block should specify the fields.
425 426 427 428 429 |
# File 'lib/blueprinter/base.rb', line 425 def self.view(view_name) @current_view = view_collection[view_name] yield @current_view = view_collection[:default] end |