Class: Representative::Json
- Inherits:
-
Base
- Object
- Base
- Representative::Json
show all
- Defined in:
- lib/representative/json.rb
Constant Summary
collapse
- DEFAULT_ATTRIBUTE_PREFIX =
"@".freeze
- DEFAULT_INDENTATION =
2
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Base
#current_subject, #representing
Constructor Details
#initialize(subject = nil, options = {}) {|_self| ... } ⇒ Json
Returns a new instance of Json.
12
13
14
15
16
17
18
19
20
|
# File 'lib/representative/json.rb', line 12
def initialize(subject = nil, options = {})
super(subject, options)
@buffer = []
@indent_level = 0
@indent_string = resolve_indentation(options.fetch(:indentation, DEFAULT_INDENTATION))
@attribute_prefix = options.fetch(:attribute_prefix, DEFAULT_ATTRIBUTE_PREFIX)
now_at :beginning_of_buffer
yield self if block_given?
end
|
Instance Attribute Details
#attribute_prefix ⇒ Object
Returns the value of attribute attribute_prefix.
22
23
24
|
# File 'lib/representative/json.rb', line 22
def attribute_prefix
@attribute_prefix
end
|
Instance Method Details
#attribute(name, value_generator = name) ⇒ Object
42
43
44
|
# File 'lib/representative/json.rb', line 42
def attribute(name, value_generator = name)
element(attribute_prefix + name.to_s, value_generator)
end
|
80
81
82
83
84
|
# File 'lib/representative/json.rb', line 80
def (text)
new_item
emit("// " + text)
now_at :end_of_comment
end
|
#element(name, *args, &block) ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/representative/json.rb', line 24
def element(name, *args, &block)
metadata = @inspector.get_metadata(current_subject, name)
attributes = args..merge(metadata)
subject_of_element = if args.empty?
@inspector.get_value(current_subject, name)
else
args.shift
end
raise ArgumentError, "too many arguments" unless args.empty?
label(name)
value(subject_of_element, attributes, &block)
end
|
#list_of(name, *args, &block) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/representative/json.rb', line 46
def list_of(name, *args, &block)
options = args.
list_subject = args.empty? ? name : args.shift
raise ArgumentError, "too many arguments" unless args.empty?
list_attributes = options[:list_attributes]
raise ArgumentError, "list_attributes #{list_attributes} not supported for json representation" if list_attributes
item_attributes = options[:item_attributes] || {}
items = resolve_value(list_subject)
label(name)
inside "[", "]" do
items.each do |item|
new_item
value(item, item_attributes, &block)
end
end
end
|
#to_json ⇒ Object
86
87
88
89
|
# File 'lib/representative/json.rb', line 86
def to_json
emit("\n") if indenting?
@buffer.join
end
|
#to_s ⇒ Object
91
92
93
|
# File 'lib/representative/json.rb', line 91
def to_s
to_json
end
|
#value(subject, attributes = {}) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/representative/json.rb', line 64
def value(subject, attributes = {})
representing(subject) do
if block_given? && !current_subject.nil?
inside "{", "}" do
attributes.each do |name, value_generator|
attribute(name, value_generator)
end
yield current_subject
end
else
emit(encode(current_subject))
end
end
now_at :end_of_item
end
|