Class: Blueprinter::Base
- Inherits:
-
Object
- Object
- Blueprinter::Base
- Includes:
- ActiveRecordHelpers
- Defined in:
- lib/blueprinter/base.rb
Class Method Summary collapse
-
.association(method, options = {}) ⇒ Field
Specify an associated object to be included for serialization.
- .associations(view_name = :default) ⇒ Object private
-
.exclude(field_name) ⇒ Array<Symbol>
Exclude a field that was mixed into the current view.
-
.field(method, options = {}) {|Object| ... } ⇒ 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) ⇒ 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.
-
.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 = {}) ⇒ Field
Specify an associated object to be included for serialization. Takes a required method and an option.
104 105 106 107 108 109 110 111 |
# File 'lib/blueprinter/base.rb', line 104 def self.association(method, = {}) raise BlueprinterError, 'blueprint required' unless [:blueprint] name = .delete(:name) || method current_view << Field.new(method, name, AssociationExtractor, .merge(association: true)) end |
.associations(view_name = :default) ⇒ 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.
201 202 203 |
# File 'lib/blueprinter/base.rb', line 201 def self.associations(view_name = :default) view_collection.fields_for(view_name).select { |f| f.[:association] } end |
.exclude(field_name) ⇒ Array<Symbol>
Exclude a field that was mixed into the current view.
244 245 246 |
# File 'lib/blueprinter/base.rb', line 244 def self.exclude(field_name) current_view.exclude_field(field_name) end |
.field(method, options = {}) {|Object| ... } ⇒ Field
Specify a field or method name to be included for serialization. Takes a required method and an option.
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/blueprinter/base.rb', line 72 def self.field(method, = {}, &block) = if block_given? {name: method, extractor: BlockExtractor, block: {method => block}} else {name: method, extractor: AutoExtractor} end.merge() current_view << Field.new(method, [:name], [:extractor], ) 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.
194 195 196 197 198 |
# File 'lib/blueprinter/base.rb', line 194 def self.fields(*field_names) field_names.each do |field_name| current_view << Field.new(field_name, field_name, AutoExtractor) end end |
.identifier(method, name: method, extractor: AutoExtractor) ⇒ 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.
39 40 41 |
# File 'lib/blueprinter/base.rb', line 39 def self.identifier(method, name: method, extractor: AutoExtractor) view_collection[:identifier] << Field.new(method, name, extractor) end |
.include_view(view_name) ⇒ Array<Symbol>
Specify another view that should be mixed into the current view.
223 224 225 |
# File 'lib/blueprinter/base.rb', line 223 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
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/blueprinter/base.rb', line 162 def self.prepare(object, view_name:, local_options:) unless view_collection.has_view? view_name raise BlueprinterError, "View '#{view_name}' is not defined" end fields = view_collection.fields_for(view_name) 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.
129 130 131 132 |
# File 'lib/blueprinter/base.rb', line 129 def self.render(object, = {}) view_name = .delete(:view) || :default jsonify(prepare(object, view_name: view_name, local_options: )) end |
.render_as_hash(object, options = {}) ⇒ Hash
Generates a hash. Takes a required object and an optional view.
150 151 152 153 |
# File 'lib/blueprinter/base.rb', line 150 def self.render_as_hash(object, = {}) view_name = .delete(:view) || :default prepare(object, view_name: view_name, local_options: ) 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.
263 264 265 266 267 |
# File 'lib/blueprinter/base.rb', line 263 def self.view(view_name) @current_view = view_collection[view_name] yield @current_view = view_collection[:default] end |