Class: Blueprinter::Base
- Inherits:
-
Object
- Object
- Blueprinter::Base
- Extended by:
- Reflection
- Includes:
- BaseHelpers
- Defined in:
- lib/blueprinter/base.rb
Class Method Summary collapse
-
.association(method, options = {}) {|object, options| ... } ⇒ Association
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: 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) ⇒ Array<Symbol>
Specify additional views 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.
-
.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.
-
.view?(view_name) ⇒ Boolean
Check whether or not a Blueprint supports the supplied view.
Methods included from Reflection
Methods included from BaseHelpers
Class Method Details
.association(method, options = {}) {|object, options| ... } ⇒ Association
Specify an associated object to be included for serialization. Takes a required method and an option.
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/blueprinter/base.rb', line 151 def self.association(method, = {}, &block) raise ArgumentError, ':blueprint must be provided when defining an association' unless [:blueprint] current_view << Association.new( method: method, name: .fetch(:name) { method }, extractor: .fetch(:extractor) { AssociationExtractor.new }, blueprint: .fetch(:blueprint), parent_blueprint: self, view: .fetch(:view, :default), options: .except( :name, :extractor, :blueprint, :view ).merge(block: block) ) end |
.exclude(field_name) ⇒ Array<Symbol>
Exclude a field that was mixed into the current view.
378 379 380 |
# File 'lib/blueprinter/base.rb', line 378 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
401 402 403 |
# File 'lib/blueprinter/base.rb', line 401 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.
111 112 113 114 115 116 117 118 119 |
# File 'lib/blueprinter/base.rb', line 111 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.
273 274 275 276 277 |
# File 'lib/blueprinter/base.rb', line 273 def self.fields(*field_names) field_names.each do |field_name| field(field_name) end 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.
46 47 48 49 50 51 52 53 54 |
# File 'lib/blueprinter/base.rb', line 46 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.
332 333 334 |
# File 'lib/blueprinter/base.rb', line 332 def self.include_view(view_name) current_view.include_view(view_name) end |
.include_views(*view_names) ⇒ Array<Symbol>
Specify additional views that should be mixed into the current view.
@param view_name [Array<Symbol>] the views to mix into the current view.
358 359 360 |
# File 'lib/blueprinter/base.rb', line 358 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
252 253 254 255 256 257 258 |
# File 'lib/blueprinter/base.rb', line 252 def self.prepare(object, view_name:, local_options:, root: nil, meta: nil) raise BlueprinterError, "View '#{view_name}' is not defined" unless view_collection.view? view_name object = Blueprinter.configuration.extensions.pre_render(object, self, view_name, ) 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.
191 192 193 |
# File 'lib/blueprinter/base.rb', line 191 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.
216 217 218 |
# File 'lib/blueprinter/base.rb', line 216 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.
241 242 243 |
# File 'lib/blueprinter/base.rb', line 241 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
310 311 312 |
# File 'lib/blueprinter/base.rb', line 310 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.
420 421 422 423 424 425 |
# File 'lib/blueprinter/base.rb', line 420 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 |
.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.view?(:custom) => true
ExampleBlueprint.view?(:doesnt_exist) => false
supported by this Blueprint.
444 445 446 |
# File 'lib/blueprinter/base.rb', line 444 def self.view?(view_name) view_collection.view? view_name end |