Class: TJSON::DataType
- Inherits:
-
Object
show all
- Defined in:
- lib/tjson/datatype.rb,
lib/tjson/datatype/set.rb,
lib/tjson/datatype/array.rb,
lib/tjson/datatype/float.rb,
lib/tjson/datatype/value.rb,
lib/tjson/datatype/binary.rb,
lib/tjson/datatype/object.rb,
lib/tjson/datatype/string.rb,
lib/tjson/datatype/integer.rb,
lib/tjson/datatype/timestamp.rb
Overview
Defined Under Namespace
Classes: Array, Binary, Binary16, Binary32, Binary64, Float, Integer, NonScalar, Number, Object, Scalar, Set, SignedInt, String, Timestamp, UnsignedInt, Value
Constant Summary
collapse
- TAGS =
TJSON does not presently support user-extensible types
{
"O" => TJSON::DataType::Object.new(nil).freeze,
"A" => TJSON::DataType::Array,
"S" => TJSON::DataType::Set,
"b" => TJSON::DataType::Binary64.new.freeze,
"b16" => TJSON::DataType::Binary16.new.freeze,
"b32" => TJSON::DataType::Binary32.new.freeze,
"b64" => TJSON::DataType::Binary64.new.freeze,
"f" => TJSON::DataType::Float.new.freeze,
"i" => TJSON::DataType::SignedInt.new.freeze,
"s" => TJSON::DataType::String.new.freeze,
"t" => TJSON::DataType::Timestamp.new.freeze,
"u" => TJSON::DataType::UnsignedInt.new.freeze,
"v" => TJSON::DataType::Value.new.freeze
}.freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
7
8
9
|
# File 'lib/tjson/datatype.rb', line 7
def self.[](tag)
TAGS[tag] || raise(TJSON::TypeError, "unknown tag: #{tag.inspect}")
end
|
.generate(obj) ⇒ Object
44
45
46
|
# File 'lib/tjson/datatype.rb', line 44
def self.generate(obj)
identify_type(obj).generate(obj)
end
|
.identify_type(obj) ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
# File 'lib/tjson/datatype.rb', line 29
def self.identify_type(obj)
case obj
when Hash then self["O"]
when ::Array then TJSON::DataType::Array.identify_type(obj)
when ::Set then TJSON::DataType::Set.identify_type(obj)
when ::String, Symbol then obj.encoding == Encoding::BINARY ? self["b"] : self["s"]
when ::Integer then self["i"]
when ::Float then self["f"]
when ::TrueClass then self["v"]
when ::FalseClass then self["v"]
when ::Time, ::DateTime then self["t"]
else raise TypeError, "don't know how to serialize #{obj.class} as TJSON"
end
end
|
.parse(tag) ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/tjson/datatype.rb', line 11
def self.parse(tag)
raise TJSON::TypeError, "expected String, got #{tag.class}" unless tag.is_a?(::String)
if tag == "O"
TJSON::DataType[tag]
elsif (result = tag.match(/\A(?<type>[A-Z][a-z0-9]*)\<(?<inner>.*)\>\z/))
inner = parse(result[:inner]) unless result[:inner].empty?
TJSON::DataType[result[:type]].new(inner).freeze
elsif tag =~ /\A[a-z][a-z0-9]*\z/
TJSON::DataType[tag]
else
raise TJSON::ParseError, "couldn't parse tag: #{tag.inspect}" unless result
end
end
|
Instance Method Details
#convert(_value) ⇒ Object
52
53
54
|
# File 'lib/tjson/datatype.rb', line 52
def convert(_value)
raise NotImplementedError, "#{self.class} does not implement #convert"
end
|
#generate(_value) ⇒ Object
56
57
58
|
# File 'lib/tjson/datatype.rb', line 56
def generate(_value)
raise NotImplementedError, "#{self.class} does not implement #genreate"
end
|
48
49
50
|
# File 'lib/tjson/datatype.rb', line 48
def tag
raise NotImplementError, "no #tag defined for #{self.class}"
end
|