Class: Hypertemplate::Builder::Json
- Inherits:
-
Base
- Object
- Base
- Hypertemplate::Builder::Json
show all
- Defined in:
- lib/hypertemplate/builder/json.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Base
build, build_dsl, collection_helper_default_options, copy_internal_variables, #each, extend_media_types, generic_helper, helper, media_types, member_helper_default_options, #method_missing, #ns, #write
Constructor Details
#initialize(obj, options = {}) ⇒ Json
Returns a new instance of Json.
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/hypertemplate/builder/json.rb', line 9
def initialize(obj, options = {})
initialize_library
if options[:root]
@raw = { options[:root] => {} }
@current = @raw[options[:root]]
else
@current = @raw = {}
end
@obj = obj
end
|
Instance Attribute Details
#raw ⇒ Object
Returns the value of attribute raw.
7
8
9
|
# File 'lib/hypertemplate/builder/json.rb', line 7
def raw
@raw
end
|
Instance Method Details
#initialize_library ⇒ Object
20
21
22
23
|
# File 'lib/hypertemplate/builder/json.rb', line 20
def initialize_library
return if defined?(::JSON)
require "json/pure"
end
|
#insert_value(name, prefix, *args, &block) ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/hypertemplate/builder/json.rb', line 63
def insert_value(name, prefix, *args, &block)
node = create_element(block_given?, *args)
if block_given?
parent = @current
@current = node
block.call
@current = parent
end
add_to(@current, name, node)
end
|
#link(relationship, uri, options = {}) ⇒ Object
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/hypertemplate/builder/json.rb', line 52
def link(relationship, uri, options = {})
@current["link"] ||= []
stringify_keys(options)
options["rel"] = relationship.to_s
options["href"] = uri
options["type"] ||= "application/json"
insert_value("link", nil, options)
end
|
#members(options = {}, &block) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/hypertemplate/builder/json.rb', line 25
def members(options = {}, &block)
collection = options[:collection] || @obj
raise Hypertemplate::BuilderError.new("Members method require a collection to execute") unless collection.respond_to?(:each)
root = options[:root] || "members"
add_to(@current, root, [])
collection.each do |member|
parent = @current
@current = {}
if block.arity==1
block.call(member)
else
block.call(self, member)
end
add_to(parent, root, @current)
@current = parent
end
end
|
#representation ⇒ Object
77
78
79
|
# File 'lib/hypertemplate/builder/json.rb', line 77
def representation
@raw.to_json
end
|
#values(options = {}) {|Values.new(self)| ... } ⇒ Object
48
49
50
|
# File 'lib/hypertemplate/builder/json.rb', line 48
def values(options = {}, &block)
yield Values.new(self)
end
|