class Thumbtack::Types::Tags

Handles conversion and validation of tag lists to values supported by Pinboard

@api private

Constants

INVALID_CHARACTER

Tags cannot have commas

MAXIMUM_LENGTH

The maximum tag length

SEPARATOR

Tag parameters are separated by spaces

Public Class Methods

deserialize(parameter) click to toggle source

Convert a parameter from Pinboard to a list of tags

@param [String] parameter

space-separated list of tags

@return [Array<String>]

# File lib/thumbtack/types/tags.rb, line 53
def self.deserialize(parameter)
  parameter.split(SEPARATOR)
end
serialize(value) click to toggle source

Convert a tag value to a parameter acceptable to Pinboard

@param [String, Array<String>] value

a single tag or an array of many tags

@return [String]

space-separated list of tags
# File lib/thumbtack/types/tags.rb, line 43
def self.serialize(value)
  Array(value).map(&:strip).join(SEPARATOR)
end
validate(value) click to toggle source

Validate a tags value

@param [String, Array<String>] value

a single tag or an array of many tags

@return [self]

@raise [Types::ValidationError]

if any tags contain commas or are longer than 255 characters
# File lib/thumbtack/types/tags.rb, line 26
def self.validate(value)
  Array(value).each do |tag|
    next if tag_valid?(tag)

    raise ValidationError,
          "#{tag} cannot contain commas or be longer than 255 characters"
  end
  self
end

Private Class Methods

tag_valid?(tag) click to toggle source

If true, the tag is valid

@param [String] tag

a tag to validate

@return [Boolean]

@api private

# File lib/thumbtack/types/tags.rb, line 65
def self.tag_valid?(tag)
  tag.length < MAXIMUM_LENGTH && !tag.include?(INVALID_CHARACTER)
end