Class: Pod::Specification::DSL::Attribute

Inherits:
Object
  • Object
show all
Defined in:
lib/cocoapods-core/specification/dsl/attribute.rb

Overview

A Specification attribute stores the information of an attribute. It also provides logic to implement any required logic.

Options collapse

Instance Attribute Summary collapse

Options collapse

Accessors support collapse

Values validation collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options) ⇒ Attribute

Returns a new attribute initialized with the given options.

Attributes by default are:

  • inherited

  • multi-platform

Parameters:

  • name (Symbol)

    @see name

  • options (Hash{Symbol=>Object})

    The options for configuring the attribute (see Options group).

Raises:

  • If there are unrecognized options.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 31

def initialize(name, options)
  @name = name

  @multi_platform = options.delete(:multi_platform) { true      }
  @inherited      = options.delete(:inherited)      { false     }
  @root_only      = options.delete(:root_only)      { false     }
  @required       = options.delete(:required)       { false     }
  @singularize    = options.delete(:singularize)    { false     }
  @file_patterns  = options.delete(:file_patterns)  { false     }
  @container      = options.delete(:container)      { nil       }
  @keys           = options.delete(:keys)           { nil       }
  @default_value  = options.delete(:default_value)  { nil       }
  @ios_default    = options.delete(:ios_default)    { nil       }
  @osx_default    = options.delete(:osx_default)    { nil       }
  @types          = options.delete(:types)          { [String ] }

  unless options.empty?
    raise StandardError, "Unrecognized options: #{options} for #{to_s}"
  end
end

Instance Attribute Details

#containerClass (readonly)

Returns if defined it can be #Array or #Hash. It is used as default initialization value and to automatically wrap other values to arrays.

Returns:

  • (Class)

    if defined it can be #Array or #Hash. It is used as default initialization value and to automatically wrap other values to arrays.



86
87
88
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 86

def container
  @container
end

#default_valueObject (readonly)

Note:

The default value is not automatically wrapped and should be specified within the container if any.

Returns if the attribute follows configuration over convention it can specify a default value.

Returns:

  • (Object)

    if the attribute follows configuration over convention it can specify a default value.



102
103
104
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 102

def default_value
  @default_value
end

#ios_defaultObject (readonly)

Returns similar to ##default_value but for iOS.

Returns:



106
107
108
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 106

def ios_default
  @ios_default
end

#keysArray, Hash (readonly)

Note:

A hash is accepted to group the keys associated only with certain keys (see the source attribute of a Spec).

Returns the list of the accepted keys for an attribute wrapped by a Hash.

Returns:

  • (Array, Hash)

    the list of the accepted keys for an attribute wrapped by a Hash.



94
95
96
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 94

def keys
  @keys
end

#nameSymbol (readonly)

Returns the name of the attribute.

Returns:

  • (Symbol)

    the name of the attribute.



14
15
16
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 14

def name
  @name
end

#osx_defaultObject (readonly)

Returns similar to ##default_value but for OS X.

Returns:



110
111
112
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 110

def osx_default
  @osx_default
end

#typesArray<Class> (readonly)

Returns the list of the classes of the values supported by the attribute writer. If not specified defaults to #String.

Returns:

  • (Array<Class>)

    the list of the classes of the values supported by the attribute writer. If not specified defaults to #String.



73
74
75
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 73

def types
  @types
end

Instance Method Details

#allowed_keysArray

hash of a given specification.

Returns:

  • (Array)

    the flattened list of the allowed keys for the



227
228
229
230
231
232
233
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 227

def allowed_keys
  if keys.is_a?(Hash)
    keys.keys.concat(keys.values.flatten.compact)
  else
    keys
  end
end

#default(platform = nil) ⇒ Object

Returns the default value for the attribute.

Parameters:

  • platform (Symbol) (defaults to: nil)

    the platform for which the default value is requested.

Returns:

  • (Object)

    The default value.



158
159
160
161
162
163
164
165
166
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 158

def default(platform = nil)
  if platform && multi_platform?
    platform_value = ios_default if platform == :ios
    platform_value = osx_default if platform == :osx
    platform_value || default_value
  else
    default_value
  end
end

#file_patterns?Bool

Note:

This is mostly used by the linter.

Returns whether the attribute describes file patterns.

Returns:

  • (Bool)

    whether the attribute describes file patterns.



136
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 136

def file_patterns?; @file_patterns; end

#inherited?Bool

Note:

Attributes stored in wrappers are always inherited.

values with the parent.

Returns:

  • (Bool)

    defines whether the attribute reader should join the



143
144
145
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 143

def inherited?
  !root_only? && @inherited
end

#inspectString

Returns A string representation suitable for debugging.

Returns:

  • (String)

    A string representation suitable for debugging.



60
61
62
63
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 60

def inspect
  "<#{self.class} name=#{self.name} types=#{types} " \
  "multi_platform=#{multi_platform?}>"
end

#multi_platform?Bool

Returns whether the attribute is multi-platform and should work in conjunction with #PlatformProxy.

Returns:

  • (Bool)

    whether the attribute is multi-platform and should work in conjunction with #PlatformProxy.



125
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 125

def multi_platform?; @multi_platform; end

#required?Bool

Returns whether the specification should be considered invalid if a value for the attribute is not specified.

Returns:

  • (Bool)

    whether the specification should be considered invalid if a value for the attribute is not specified.



115
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 115

def required?; @required; end

#root_only?Bool

Returns whether the attribute should be specified only on the root specification.

Returns:

  • (Bool)

    whether the attribute should be specified only on the root specification.



120
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 120

def root_only?; @root_only; end

#singularize?Bool

Returns whether there should be a singular alias for the attribute writer.

Returns:

  • (Bool)

    whether there should be a singular alias for the attribute writer.



130
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 130

def singularize?; @singularize; end

#supported_typesArray<Class>

Returns the list of the classes of the values supported by the attribute, including the container.

Returns:

  • (Array<Class>)

    the list of the classes of the values supported by the attribute, including the container.



78
79
80
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 78

def supported_types
  @supported_types ||= @types.dup.push(container).compact
end

#to_sString

Returns A string representation suitable for UI.

Returns:

  • (String)

    A string representation suitable for UI.



54
55
56
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 54

def to_s
  "Specification attribute `#{name}`"
end

#validate_for_writing(spec, value) ⇒ void

This method returns an undefined value.

Validates a value before storing.

Raises:

  • If a root only attribute is set in a subspec.

  • If a unknown key is added to a hash.



210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 210

def validate_for_writing(spec, value)
  if root_only? && !spec.root?
    raise StandardError, "Can't set `#{name}` attribute for subspecs (in `#{spec.name}`)."
  end

  if keys
    value.keys.each do |key|
      unless allowed_keys.include?(key)
        raise StandardError, "Unknown key `#{key}` for "\
          "#{to_s}. Allowed keys: `#{allowed_keys.inspect}`"
      end
    end
  end

  # @return [Array] the flattened list of the allowed keys for the
  # hash of a given specification.
  #
  def allowed_keys
    if keys.is_a?(Hash)
      keys.keys.concat(keys.values.flatten.compact)
    else
      keys
    end
  end
end

#validate_type(value) ⇒ void

Note:

The this is called before preparing the value.

This method returns an undefined value.

Validates the value for an attribute. This validation should be performed before the value is prepared or wrapped.

Raises:

  • If the type is not in the allowed list.



194
195
196
197
198
199
200
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 194

def validate_type(value)
  return if value.nil?
  unless supported_types.any? { |klass| value.class == klass }
    raise StandardError, "Non acceptable type `#{value.class}` for "\
      "#{to_s}. Allowed values: `#{types.inspect}`"
  end
end

#writer_nameString

Returns the name of the setter method for the attribute.

Returns:

  • (String)

    the name of the setter method for the attribute.



170
171
172
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 170

def writer_name
  "#{name}="
end

#writer_singular_formString

Returns an aliased attribute writer offered for convenience on the DSL.

Returns:

  • (String)

    an aliased attribute writer offered for convenience on the DSL.



177
178
179
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 177

def writer_singular_form
  "#{name.to_s.singularize}=" if singularize?
end