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.
-
.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.
-
.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.
155 156 157 158 159 160 161 162 163 |
# File 'lib/blueprinter/base.rb', line 155 def self.association(method, = {}, &block) raise BlueprinterError, 'blueprint required' unless [:blueprint] field( method, .merge(association: true, extractor: AssociationExtractor.new), &block ) end |
.exclude(field_name) ⇒ Array<Symbol>
Exclude a field that was mixed into the current view.
313 314 315 |
# File 'lib/blueprinter/base.rb', line 313 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
336 337 338 |
# File 'lib/blueprinter/base.rb', line 336 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.
116 117 118 119 120 121 122 123 124 |
# File 'lib/blueprinter/base.rb', line 116 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.
268 269 270 271 272 |
# File 'lib/blueprinter/base.rb', line 268 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.
51 52 53 54 55 56 57 58 59 |
# File 'lib/blueprinter/base.rb', line 51 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.
292 293 294 |
# File 'lib/blueprinter/base.rb', line 292 def self.include_view(view_name) current_view.include_view(view_name) 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
247 248 249 250 251 252 253 |
# File 'lib/blueprinter/base.rb', line 247 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.
186 187 188 |
# File 'lib/blueprinter/base.rb', line 186 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.
211 212 213 |
# File 'lib/blueprinter/base.rb', line 211 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.
236 237 238 |
# File 'lib/blueprinter/base.rb', line 236 def self.render_as_json(object, = {}) prepare_for_render(object, ).as_json 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.
355 356 357 358 359 |
# File 'lib/blueprinter/base.rb', line 355 def self.view(view_name) @current_view = view_collection[view_name] yield @current_view = view_collection[:default] end |