Module: Rison
- Defined in:
- lib/rison.rb,
lib/rison/dump.rb,
lib/rison/parslet_parser.rb,
lib/rison/parslet_transform.rb
Defined Under Namespace
Classes: DumpError, ParseError, ParsletParser, ParsletTransform
Constant Summary
collapse
- NIL =
'!n'.freeze
- TRUE =
'!t'.freeze
- FALSE =
'!f'.freeze
Class Method Summary
collapse
Class Method Details
.dump(object) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/rison/dump.rb', line 12
def self.dump(object)
case object
when NilClass then NIL
when TrueClass then TRUE
when FalseClass then FALSE
when Symbol then object.to_s
when Rational then object.to_f.to_s
when Numeric then object.to_s
when String then "'#{escape(object)}'"
when Hash then '(%s)' % object.map { |(k, v)| dump_pair(k, v) }.join(?,)
when Array then '!(%s)' % object.map { |member| dump(member) }.join(?,)
else
raise DumpError, "Cannot encode #{object.class} objects"
end
end
|
.dump_pair(key, value) ⇒ Object
37
38
39
|
# File 'lib/rison/dump.rb', line 37
def self.dump_pair(key, value)
key.is_a?(Symbol) ? "#{key}:#{dump(value)}" : "#{dump(key.to_s)}:#{dump(value)}"
end
|
.escape(string) ⇒ Object
41
42
43
|
# File 'lib/rison/dump.rb', line 41
def self.escape(string)
string.gsub('!', '!!').gsub("'", "!'")
end
|
.load(string) ⇒ Object
8
9
10
11
12
|
# File 'lib/rison.rb', line 8
def self.load(string)
ParsletTransform.new.apply(ParsletParser.new.parse(string))
rescue Parslet::ParseFailed => exception
raise ParseError, "Invalid Rison input. #{exception.message}"
end
|
.Number(int, frac = nil, exp = nil) ⇒ Object
39
40
41
42
43
|
# File 'lib/rison/parslet_transform.rb', line 39
def self.Number(int, frac = nil, exp = nil)
base = frac ? int.to_i + Rational(frac.to_i, 10 ** frac.to_s.length) : int.to_i
exp ? base * 10 ** exp.to_i : base
end
|