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.
-
.has_view?(view_name) ⇒ Boolean
Check whether or not a Blueprint supports the supplied view.
-
.identifier(method, name: method, extractor: Blueprinter.configuration.extractor_default.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.
158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/blueprinter/base.rb', line 158 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.
386 387 388 |
# File 'lib/blueprinter/base.rb', line 386 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
409 410 411 |
# File 'lib/blueprinter/base.rb', line 409 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.
119 120 121 122 123 124 125 126 127 |
# File 'lib/blueprinter/base.rb', line 119 def self.field(method, = {}, &block) current_view << Field.new( method, .fetch(:name) { method }, .fetch(:extractor) { Blueprinter.configuration.extractor_default.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.
275 276 277 278 279 |
# File 'lib/blueprinter/base.rb', line 275 def self.fields(*field_names) field_names.each do |field_name| field(field_name) end end |
.has_view?(view_name) ⇒ Boolean
Check whether or not a Blueprint supports the supplied view. It accepts a view name.
class ExampleBlueprint < Blueprinter::Base
view :custom do
end
end
ExampleBlueprint.has_view?(:custom) => true
ExampleBlueprint.has_view?(:doesnt_exist) => false
supported by this Blueprint.
452 453 454 |
# File 'lib/blueprinter/base.rb', line 452 def self.has_view?(view_name) view_collection.has_view? view_name end |
.identifier(method, name: method, extractor: Blueprinter.configuration.extractor_default.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.
54 55 56 57 58 59 60 61 62 |
# File 'lib/blueprinter/base.rb', line 54 def self.identifier(method, name: method, extractor: Blueprinter.configuration.extractor_default.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.
337 338 339 |
# File 'lib/blueprinter/base.rb', line 337 def self.include_view(view_name) current_view.include_view(view_name) end |
.include_views(*view_names) ⇒ Object
365 366 367 |
# File 'lib/blueprinter/base.rb', line 365 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
253 254 255 256 257 258 259 260 |
# File 'lib/blueprinter/base.rb', line 253 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.
192 193 194 |
# File 'lib/blueprinter/base.rb', line 192 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.
217 218 219 |
# File 'lib/blueprinter/base.rb', line 217 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.
242 243 244 |
# File 'lib/blueprinter/base.rb', line 242 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
314 315 316 |
# File 'lib/blueprinter/base.rb', line 314 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.
428 429 430 431 432 433 |
# File 'lib/blueprinter/base.rb', line 428 def self.view(view_name) @current_view = view_collection[view_name] view_collection[:default].track_definition_order(view_name) yield @current_view = view_collection[:default] end |