Class: WT::JSONObject
- Inherits:
-
Object
show all
- Defined in:
- lib/json_object.rb
Class Method Summary
collapse
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# File 'lib/json_object.rb', line 11
def method_missing(name, *args)
raise "Invalid number of params. To create new attribute you show pass exactly one parameter." unless args.length == 1
self.instance_eval %{
def #{name}=(val)
@#{name} = JSONObject.parse(val)
end
def #{name}
@#{name}
end
}
self.method("#{name}=").call(args[0])
end
|
Class Method Details
.parse(data) ⇒ Object
3
4
5
6
7
8
9
|
# File 'lib/json_object.rb', line 3
def self.parse(data)
if data.is_a?(Array) or data.is_a?(Hash)
return JSONObject.new(data)
else
return data
end
end
|
Instance Method Details
#delete(url) ⇒ Object
35
36
37
|
# File 'lib/json_object.rb', line 35
def delete(url)
http_request("DELETE", url, nil)
end
|
#http_request(type, url, data) ⇒ Object
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/json_object.rb', line 39
def http_request(type, url, data)
args = []
url_parts = url.split("/")
mounted_url = url
url_parts.each do |part|
p = part.to_s
if p[0] == ':'
p[":"] = ''
begin
mounted_url[":#{p}"] = self.method(p).call.to_s
rescue NameError
mounted_url["/:#{p}"] = ''
end
end
end
request = WT::Request.new(type, mounted_url, data)
request.['User-Agent'] = 'Ruby; WebTester API'
request.['Content-Type'] = 'application/json; charset=utf-8'
return request
end
|
#post(url) ⇒ Object
27
28
29
|
# File 'lib/json_object.rb', line 27
def post(url)
http_request("POST", url, self.to_s)
end
|
#put(url) ⇒ Object
31
32
33
|
# File 'lib/json_object.rb', line 31
def put(url)
http_request("PUT", url, self.to_s)
end
|
#to_s ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/json_object.rb', line 66
def to_s
result = ""
if @__items__ and @__items__.length > 0 result = "["
@__items__.each do |item|
result += "," unless result[-1] == '['
result += "#{item.to_s}"
end
result += "]"
else result += "{"
self.instance_variables.each do |iv|
if iv.to_s != "@__items__"
v_name = iv.to_s
v_name['@'] = ''
v_value = self.method(v_name).call
non_quoted_condition = (v_value.is_a?(JSONObject) or
v_value.is_a?(Integer) or
v_value.is_a?(TrueClass) or
v_value.is_a?(FalseClass) or
v_value.is_a?(Float))
result += "," unless result[-1] == '{'
result += "\"#{v_name}\":"
result += "\"" unless non_quoted_condition
result += v_value.to_s
result += "\"" unless non_quoted_condition
end
end
result += "}"
end
result
end
|