Module: Contentful::Support

Defined in:
lib/contentful/support.rb

Overview

Utility methods used by the contentful gem

Class Method Summary collapse

Class Method Details

.includes_from_response(json, raw = true) ⇒ Array

Returns combined include array from an API Response

Parameters:

  • json (Hash)

    JSON Response

  • raw (Bool) (defaults to: true)

    Response pre-proccessed?

Returns:



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/contentful/support.rb', line 70

def includes_from_response(json, raw = true)
  includes = if raw
               json['items'].dup
             else
               json['items'].map(&:raw)
             end

  %w[Entry Asset].each do |type|
    if json.fetch('includes', {}).key?(type)
      includes.concat(json['includes'].fetch(type, []))
    end
  end

  includes
end

.link?(value) ⇒ true, false

Checks if value is a link

Parameters:

  • value

Returns:

  • (true, false)


35
36
37
38
# File 'lib/contentful/support.rb', line 35

def link?(value)
  value.is_a?(::Hash) &&
    value.fetch('sys', {}).fetch('type', '') == 'Link'
end

Checks if value is an array of links

Parameters:

  • value

Returns:

  • (true, false)


45
46
47
48
49
# File 'lib/contentful/support.rb', line 45

def link_array?(value)
  return link?(value[0]) if value.is_a?(::Array) && !value.empty?

  false
end

Returns the resource that matches the link

Parameters:

  • link (Hash)
  • includes (::Array)

Returns:

  • (Hash)


57
58
59
60
61
62
# File 'lib/contentful/support.rb', line 57

def resource_for_link(link, includes)
  includes.detect do |i|
    i['sys']['id'] == link['sys']['id'] &&
      i['sys']['type'] == link['sys']['linkType']
  end
end

.snakify(object, skip = false) ⇒ String

Transforms CamelCase into snake_case (taken from zucker)

Parameters:

  • object (String)

    camelCaseName

  • skip (Boolean) (defaults to: false)

    if true, skips returns original object

Returns:

  • (String)

    snake_case_name



13
14
15
16
17
18
19
20
21
22
# File 'lib/contentful/support.rb', line 13

def snakify(object, skip = false)
  return object if skip

  String(object)
    .gsub(/::/, '/')
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .tr('-', '_')
    .downcase
end

.unresolvable?(value, errors) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
28
# File 'lib/contentful/support.rb', line 24

def unresolvable?(value, errors)
  return true if value.nil?

  errors.any? { |i| i.fetch('details', {}).fetch('id', nil) == value['sys']['id'] }
end