class Contentful::FieldsResource

Base definition of a Contentful Resource containing Field properties

Attributes

localized[R]

Public Class Methods

new(item, _configuration, localized = false, includes = Includes.new, entries = {}, depth = 0, errors = []) click to toggle source

rubocop:disable Metrics/ParameterLists

Calls superclass method Contentful::BaseResource::new
# File lib/contentful/fields_resource.rb, line 13
def initialize(item, _configuration, localized = false, includes = Includes.new, entries = {}, depth = 0, errors = [])
  super

  @configuration[:errors] = errors
  @localized = localized
  @fields = hydrate_fields(includes, entries, errors)
  define_fields_methods!
end

Public Instance Methods

fields(wanted_locale = nil) click to toggle source

Returns all fields of the asset

@return [Hash] fields for Resource on selected locale

# File lib/contentful/fields_resource.rb, line 25
def fields(wanted_locale = nil)
  wanted_locale = internal_resource_locale if wanted_locale.nil?
  @fields.fetch(wanted_locale.to_s, {})
end
fields_with_locales() click to toggle source

Returns all fields of the asset with locales nested by field

@return [Hash] fields for Resource grouped by field name

# File lib/contentful/fields_resource.rb, line 33
def fields_with_locales
  remapped_fields = {}
  locales.each do |locale|
    fields(locale).each do |name, value|
      remapped_fields[name] ||= {}
      remapped_fields[name][locale.to_sym] = value
    end
  end

  remapped_fields
end
locales() click to toggle source

Provides a list of the available locales for a Resource

# File lib/contentful/fields_resource.rb, line 46
def locales
  @fields.keys
end
marshal_dump() click to toggle source

@private

Calls superclass method Contentful::BaseResource#marshal_dump
# File lib/contentful/fields_resource.rb, line 51
def marshal_dump
  super.merge(raw: raw_with_links, localized: localized)
end
marshal_load(raw_object) click to toggle source

@private

Calls superclass method Contentful::BaseResource#marshal_load
# File lib/contentful/fields_resource.rb, line 56
def marshal_load(raw_object)
  super(raw_object)
  @localized = raw_object[:localized]
  @fields = hydrate_fields(
    raw_object[:configuration].fetch(:includes_for_single, Includes.new),
    {},
    raw_object[:configuration].fetch(:errors, [])
  )
  define_fields_methods!
end

Protected Instance Methods

coerce(_field_id, value, _includes, _errors, _entries) click to toggle source
# File lib/contentful/fields_resource.rb, line 137
def coerce(_field_id, value, _includes, _errors, _entries)
  value
end

Private Instance Methods

define_fields_methods!() click to toggle source
# File lib/contentful/fields_resource.rb, line 82
def define_fields_methods!
  fields.each do |k, v|
    define_singleton_method(k) { v } unless self.class.method_defined?(k)
  end
end
hydrate_fields(includes, entries, errors) click to toggle source
# File lib/contentful/fields_resource.rb, line 125
def hydrate_fields(includes, entries, errors)
  return {} unless raw.key?('fields')

  if localized
    hydrate_localized_fields(includes, errors, entries)
  else
    hydrate_nonlocalized_fields(includes, errors, entries)
  end
end
hydrate_localized_fields(includes, errors, entries) click to toggle source
# File lib/contentful/fields_resource.rb, line 88
def hydrate_localized_fields(includes, errors, entries)
  locale = internal_resource_locale
  result = { locale => {} }
  raw['fields'].each do |name, locales|
    locales.each do |loc, value|
      result[loc] ||= {}
      name = Support.snakify(name, @configuration[:use_camel_case])
      result[loc][name.to_sym] = coerce(
        name,
        value,
        includes,
        errors,
        entries
      )
    end
  end

  result
end
hydrate_nonlocalized_fields(includes, errors, entries) click to toggle source
# File lib/contentful/fields_resource.rb, line 108
def hydrate_nonlocalized_fields(includes, errors, entries)
  locale = internal_resource_locale
  result = { locale => {} }
  raw['fields'].each do |name, value|
    name = Support.snakify(name, @configuration[:use_camel_case])
    result[locale][name.to_sym] = coerce(
      name,
      value,
      includes,
      errors,
      entries
    )
  end

  result
end