Class: CC::Yaml::Serializer::Generic

Inherits:
Object
  • Object
show all
Defined in:
lib/cc/yaml/serializer/generic.rb

Direct Known Subclasses

Json

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = nil) ⇒ Generic

Returns a new instance of Generic.



12
13
14
# File 'lib/cc/yaml/serializer/generic.rb', line 12

def initialize(options = nil)
  @options = options || {}
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



6
7
8
# File 'lib/cc/yaml/serializer/generic.rb', line 6

def options
  @options
end

Class Method Details

.serialize(node, options = nil) ⇒ Object



8
9
10
# File 'lib/cc/yaml/serializer/generic.rb', line 8

def self.serialize(node, options = nil)
  new(options).serialize(node)
end

Instance Method Details

#serialize(node) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/cc/yaml/serializer/generic.rb', line 20

def serialize(node)
  case node
  when Nodes::Root     then serialize_root(node)
  when Nodes::Scalar   then serialize_scalar(node)
  when Nodes::Mapping  then serialize_mapping(node)
  when Nodes::Sequence then serialize_sequence(node)
  else raise NotSupportedError, "do not know how to serialize %p" % node.class
  end
end

#serialize_binary(value) ⇒ Object



87
88
89
# File 'lib/cc/yaml/serializer/generic.rb', line 87

def serialize_binary(value)
  serialize_str(value)
end

#serialize_bool(value) ⇒ Object



45
46
47
# File 'lib/cc/yaml/serializer/generic.rb', line 45

def serialize_bool(value)
  serialize_value(value)
end

#serialize_decrypted(value) ⇒ Object



75
76
77
# File 'lib/cc/yaml/serializer/generic.rb', line 75

def serialize_decrypted(value)
  serialize_value(value)
end

#serialize_encrypted(value) ⇒ Object



71
72
73
# File 'lib/cc/yaml/serializer/generic.rb', line 71

def serialize_encrypted(value)
  serialize_value(value)
end

#serialize_float(value) ⇒ Object



49
50
51
# File 'lib/cc/yaml/serializer/generic.rb', line 49

def serialize_float(value)
  serialize_value(value)
end

#serialize_key(value) ⇒ Object



111
112
113
# File 'lib/cc/yaml/serializer/generic.rb', line 111

def serialize_key(value)
  symbol_keys? ? value.to_sym : value.to_s
end

#serialize_mapping(node) ⇒ Object



103
104
105
# File 'lib/cc/yaml/serializer/generic.rb', line 103

def serialize_mapping(node)
  node.map { |key, value| [serialize_key(key), serialize(value)] }
end

#serialize_regexp(value) ⇒ Object



79
80
81
# File 'lib/cc/yaml/serializer/generic.rb', line 79

def serialize_regexp(value)
  serialize_value(value)
end

#serialize_root(node) ⇒ Object



99
100
101
# File 'lib/cc/yaml/serializer/generic.rb', line 99

def serialize_root(node)
  serialize_mapping(node)
end

#serialize_scalar(node) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cc/yaml/serializer/generic.rb', line 30

def serialize_scalar(node)
  case value = node.value
  when true, false  then serialize_bool(value)
  when Float        then serialize_float(value)
  when Integer      then serialize_integer(value)
  when Time         then serialize_time(value)
  when SecureString then serialize_secure(value)
  when Regexp       then serialize_regexp(value)
  when String
    value.encoding == Encoding::BINARY ? serialize_binary(value) : serialize_str(value)
  else
    serialize_value(node)
  end
end

#serialize_secure(value) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/cc/yaml/serializer/generic.rb', line 57

def serialize_secure(value)
  case options[:secure]
  when :decrypted
    raise ArgumentError, "secure option is set decrypted, but a secure value is not decrypted" unless value.decrypted?
    serialize_decrypted(value)
  when :encrypted
    raise ArgumentError, "secure option is set encrypted, but a secure value is not encrypted" unless value.encrypted?
    serialize_encrypted(value)
  else
    raise ArgumentError, "unexpected value for secure option: %p" % options[:secure] if options[:secure]
    value.encrypted? ? serialize_encrypted(value) : serialize_decrypted(value)
  end
end

#serialize_sequence(node) ⇒ Object



107
108
109
# File 'lib/cc/yaml/serializer/generic.rb', line 107

def serialize_sequence(node)
  node.map { |value| serialize(value) }
end

#serialize_str(value) ⇒ Object



83
84
85
# File 'lib/cc/yaml/serializer/generic.rb', line 83

def serialize_str(value)
  serialize_value(value)
end

#serialize_time(value) ⇒ Object



53
54
55
# File 'lib/cc/yaml/serializer/generic.rb', line 53

def serialize_time(value)
  serialize_value(value)
end

#serialize_value(node) ⇒ Object

Raises:



95
96
97
# File 'lib/cc/yaml/serializer/generic.rb', line 95

def serialize_value(node)
  raise NotSupportedError, "cannot serialize %p with %p" % [node.class, self.class]
end

#symbol_keys?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/cc/yaml/serializer/generic.rb', line 16

def symbol_keys?
  !!options[:symbol_keys]
end