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

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.



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

def initialize(name, options)
  @name = name

  @multi_platform = options.delete(:multi_platform) { true       }
  @root_only      = options.delete(:root_only)      { false      }
  @test_only      = options.delete(:test_only)      { false      }
  @inherited      = options.delete(:inherited)      { @root_only }
  @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 #{self}"
  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.



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

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.



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

def default_value
  @default_value
end

#ios_defaultObject (readonly)

Returns similar to ##default_value but for iOS.

Returns:



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

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.



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

def keys
  @keys
end

#nameSymbol (readonly)

Returns the name of the attribute.

Returns:

  • (Symbol)

    the name of the attribute.



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

def name
  @name
end

#osx_defaultObject (readonly)

Returns similar to ##default_value but for OS X.

Returns:



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

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.



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

def types
  @types
end

Instance Method Details

#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.



174
175
176
177
178
179
180
181
182
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 174

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.



150
151
152
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 150

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



159
160
161
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 159

def inherited?
  @inherited
end

#inspectString

Returns A string representation suitable for debugging.

Returns:

  • (String)

    A string representation suitable for debugging.



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

def inspect
  "<#{self.class} name=#{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.



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

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.



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

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.



121
122
123
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 121

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.



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

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.



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

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

#test_only?Bool

Returns whether the attribute should be specified only on test specifications.

Returns:

  • (Bool)

    whether the attribute should be specified only on test specifications.



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

def test_only?
  @test_only
end

#to_sString

Returns A string representation suitable for UI.

Returns:

  • (String)

    A string representation suitable for UI.



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

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

#writer_nameString

Returns the name of the setter method for the attribute.

Returns:

  • (String)

    the name of the setter method for the attribute.



186
187
188
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 186

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.



193
194
195
# File 'lib/cocoapods-core/specification/dsl/attribute.rb', line 193

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