Class: Blueprinter::Base
- Inherits:
-
Object
- Object
- Blueprinter::Base
- Includes:
- ActiveRecordHelpers
- 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.
-
.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:) ⇒ 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 ActiveRecordHelpers
#active_record_relation?, included
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.
151 152 153 154 155 156 157 158 159 |
# File 'lib/blueprinter/base.rb', line 151 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.
304 305 306 |
# File 'lib/blueprinter/base.rb', line 304 def self.exclude(field_name) current_view.exclude_field(field_name) 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.
112 113 114 115 116 117 118 119 120 |
# File 'lib/blueprinter/base.rb', line 112 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.
259 260 261 262 263 |
# File 'lib/blueprinter/base.rb', line 259 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 considerered their own view, similar to the :default view.
50 51 52 53 54 55 56 57 58 |
# File 'lib/blueprinter/base.rb', line 50 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.
283 284 285 |
# File 'lib/blueprinter/base.rb', line 283 def self.include_view(view_name) current_view.include_view(view_name) end |
.prepare(object, view_name:, local_options:) ⇒ 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
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/blueprinter/base.rb', line 228 def self.prepare(object, view_name:, local_options:) unless view_collection.has_view? view_name raise BlueprinterError, "View '#{view_name}' is not defined" end prepared_object = include_associations(object, view_name: view_name) if array_like?(object) prepared_object.map do |obj| object_to_hash(obj, view_name: view_name, local_options: ) end else object_to_hash(prepared_object, view_name: view_name, local_options: ) end end |
.render(object, options = {}) ⇒ String
Generates a JSON formatted String. Takes a required object and an optional view.
177 178 179 |
# File 'lib/blueprinter/base.rb', line 177 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.
197 198 199 |
# File 'lib/blueprinter/base.rb', line 197 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.
217 218 219 |
# File 'lib/blueprinter/base.rb', line 217 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.
323 324 325 326 327 |
# File 'lib/blueprinter/base.rb', line 323 def self.view(view_name) @current_view = view_collection[view_name] yield @current_view = view_collection[:default] end |