deja-vu 0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Change.log +4 -0
- data/LICENSE +19 -0
- data/Makefile +0 -0
- data/README +22 -0
- data/Rakefile +31 -0
- data/example-playback/README +6 -0
- data/example-playback/analysis.rb +7 -0
- data/example-playback/playback.rb +7 -0
- data/example-playback/repo/recordings/DejaVuNS/DejaVu/recordings +1 -0
- data/example-playback/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79 +1 -0
- data/example/Makefile +6 -0
- data/example/config.ru +9 -0
- data/example/deja-vu-recordings/6b44093baa40d257106bae6dbcda53af9a57e61f.session +53 -0
- data/example/deja-vu-recordings/BAh7AA==/n--ab7689c618445bb17b626741588b50c0500c8f79.session +598 -0
- data/example/deja-vu-recordings/README +1 -0
- data/example/myapp.rb +15 -0
- data/example/repo/recordings/DejaVuNS/DejaVu/recordings +1 -0
- data/example/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79 +1 -0
- data/example/views/index.haml +0 -0
- data/example/views/layout.haml +0 -0
- data/lib/deja-vu.rb +72 -0
- data/lib/deja-vu/analyzer.rb +133 -0
- data/lib/deja-vu/init.rb +3 -0
- data/lib/deja-vu/model/dejavu.rb +42 -0
- data/lib/deja-vu/model/generated_model/DejaVuNS.rb +1536 -0
- data/lib/deja-vu/model/init.rb +3 -0
- data/lib/deja-vu/model/record.rb +58 -0
- data/lib/deja-vu/model/recording.rb +55 -0
- data/lib/deja-vu/model/xampl-gen.rb +39 -0
- data/lib/deja-vu/model/xml/dejavu.xml +28 -0
- data/lib/deja-vu/player.rb +241 -0
- data/lib/deja-vu/recorder.rb +93 -0
- data/lib/rack-session-listener.rb +29 -0
- metadata +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
This directory is where the recordings will go
|
data/example/myapp.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'sinatra/base'
|
|
2
|
+
require 'haml'
|
|
3
|
+
require 'dirge'
|
|
4
|
+
require 'deja-vu' unless require ~'../lib/deja-vu'
|
|
5
|
+
|
|
6
|
+
class MyApp < Sinatra::Base
|
|
7
|
+
|
|
8
|
+
use SoldierOfCode::DejaVu::Middleware, {:cookie_name=>"a-stupid-cookie-name",:enable_record=>true}
|
|
9
|
+
|
|
10
|
+
get '*' do
|
|
11
|
+
puts "#{__FILE__}:#{__LINE__} #{__method__} HERE"
|
|
12
|
+
"Hello"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<dejavu:deja-vu pid="recordings" xmlns:dejavu="http://soldierofcode.com/deja-vu"><dejavu:recording pid="bah7aa== --ab7689c618445bb17b626741588b50c0500c8f79"/></dejavu:deja-vu>
|
data/example/repo/recordings/DejaVuNS/Recording/bah7aa==/n--ab7689c618445bb17b626741588b50c0500c8f79
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<dejavu:recording pid="bah7aa== --ab7689c618445bb17b626741588b50c0500c8f79" stamp="1260219390" agent="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en; rv:1.9.0.16) Gecko/2009120123 Camino/2.0.1 (like Firefox/3.0.16)" ip="127.0.0.1" xmlns:dejavu="http://soldierofcode.com/deja-vu"><dejavu:record id="1260219390" stamp="1260219390" status="200" httpmethod="GET" url="http://localhost:9999/favicon.ico" request-time="0.00220799446105957"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260219395" stamp="1260219395" status="200" httpmethod="GET" url="http://localhost:9999/one" request-time="0.00183606147766113"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260219397" stamp="1260219397" status="200" httpmethod="GET" url="http://localhost:9999/one/two" request-time="0.000412940979003906"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260219400" stamp="1260219400" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three" request-time="0.000966072082519531"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260219403" stamp="1260219403" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four" request-time="0.00429487228393555"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260219408" stamp="1260219408" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true" request-time="0.0016019344329834"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/></dejavu:record><dejavu:record id="1260219416" stamp="1260219416" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven" request-time="0.00183486938476562"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/></dejavu:record><dejavu:record id="1260219422" stamp="1260219422" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.00100898742675781"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260221769" stamp="1260221769" status="200" httpmethod="GET" url="http://localhost:9999/favicon.ico" request-time="0.000567913055419922"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260221787" stamp="1260221787" status="200" httpmethod="GET" url="http://localhost:9999/favicon.ico" request-time="0.000334978103637695"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260221818" stamp="1260221818" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.000411033630371094"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260221824" stamp="1260221824" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.000397920608520508"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260221844" stamp="1260221844" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.000352859497070312"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260221866" stamp="1260221866" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.000344038009643555"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260221911" stamp="1260221911" status="200" httpmethod="GET" url="http://localhost:9999/one" request-time="0.000502824783325195"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260221916" stamp="1260221916" status="200" httpmethod="GET" url="http://localhost:9999/one/two" request-time="0.00030517578125"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260221918" stamp="1260221918" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three" request-time="0.000346183776855469"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260221921" stamp="1260221921" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four" request-time="0.000700950622558594"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260221924" stamp="1260221924" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true" request-time="0.0004119873046875"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/></dejavu:record><dejavu:record id="1260221929" stamp="1260221929" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven" request-time="0.000627994537353516"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/></dejavu:record><dejavu:record id="1260221937" stamp="1260221937" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.00176286697387695"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260221967" stamp="1260221967" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.000349044799804688"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record><dejavu:record id="1260222028" stamp="1260222028" status="200" httpmethod="GET" url="http://localhost:9999/one" request-time="0.000318050384521484"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260222033" stamp="1260222033" status="200" httpmethod="GET" url="http://localhost:9999/one/two" request-time="0.000352144241333008"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260222035" stamp="1260222035" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three" request-time="0.000670194625854492"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260222038" stamp="1260222038" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four" request-time="0.00086212158203125"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body></dejavu:record><dejavu:record id="1260222041" stamp="1260222041" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true" request-time="0.000391006469726562"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/></dejavu:record><dejavu:record id="1260222046" stamp="1260222046" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven" request-time="0.000481843948364258"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/></dejavu:record><dejavu:record id="1260222054" stamp="1260222054" status="200" httpmethod="GET" url="http://localhost:9999/one/two/three/four?five=true&six=seven&eight=9" request-time="0.000367164611816406"><dejavu:header name="Content-Type" value="text/html"/><dejavu:header name="Content-Length" value="5"/><dejavu:body><![CDATA[["Hello"]]]></dejavu:body><dejavu:param name="five" value="true"/><dejavu:param name="six" value="seven"/><dejavu:param name="eight" value="9"/></dejavu:record></dejavu:recording>
|
|
File without changes
|
|
File without changes
|
data/lib/deja-vu.rb
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require ~'deja-vu/init'
|
|
2
|
+
require ~'rack-session-listener'
|
|
3
|
+
require 'digest/sha1'
|
|
4
|
+
require 'xampl'
|
|
5
|
+
|
|
6
|
+
module SoldierOfCode
|
|
7
|
+
module DejaVu
|
|
8
|
+
class Middleware
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
#
|
|
12
|
+
#
|
|
13
|
+
#
|
|
14
|
+
# Possible Options:
|
|
15
|
+
# ----------------------
|
|
16
|
+
#
|
|
17
|
+
# :cookie_name => optional - name of the cookie to watch for and use as identifier - defaults to deja-vu
|
|
18
|
+
# :enable_record => optional - (true|false)
|
|
19
|
+
# :session_items => optional - [array of session keys] if present will capture
|
|
20
|
+
#
|
|
21
|
+
def initialize(app, opt={:enable_record=>true, :cookie_name=>'deja-vu'})
|
|
22
|
+
@app = app
|
|
23
|
+
@opt = opt
|
|
24
|
+
@identifier = opt[:cookie_name]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def call(env)
|
|
28
|
+
|
|
29
|
+
if @opt[:enable_record] then
|
|
30
|
+
user_identifier_before = get_user_identifier(env)
|
|
31
|
+
env_before = env
|
|
32
|
+
t_start = Time.new
|
|
33
|
+
resp = @app.call(env) # would be nice to capture all log output from the downstream as well.... TODO add log object as logger
|
|
34
|
+
t_stop = Time.new
|
|
35
|
+
user_identifier_after = get_user_identifier(env)
|
|
36
|
+
|
|
37
|
+
current_request = Rack::Request.new(env)
|
|
38
|
+
|
|
39
|
+
dejavu_recorder = nil
|
|
40
|
+
if user_identifier_before != user_identifier_after then
|
|
41
|
+
# something changed the identifier
|
|
42
|
+
dejavu_recorder = Recorder.new(@opt)
|
|
43
|
+
dejavu_recorder.identifier_change(user_identifier_after)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
dejavu_recorder = Recorder.new(@opt) unless dejavu_recorder
|
|
47
|
+
|
|
48
|
+
dejavu_recorder.record(env, resp, current_request, t_start, t_stop, user_identifier_after)
|
|
49
|
+
|
|
50
|
+
resp
|
|
51
|
+
else
|
|
52
|
+
@app.call(env)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
#
|
|
57
|
+
#
|
|
58
|
+
# will use the identified cookie if available
|
|
59
|
+
# otherwise will create a hash based on the env data available
|
|
60
|
+
#
|
|
61
|
+
def get_user_identifier(env) # => a string representing a specific browser client user
|
|
62
|
+
|
|
63
|
+
http_accept = env['HTTP_ACCEPT']
|
|
64
|
+
http_agent = env['HTTP_USER_AGENT']
|
|
65
|
+
user_ip = env['REMOTE_ADDR']
|
|
66
|
+
|
|
67
|
+
Rack::Request.new(env).cookies[@identifier] || Digest::SHA1.hexdigest("#{user_ip}#{http_agent}#{http_accept}")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
require ~'model/init'
|
|
2
|
+
|
|
3
|
+
module SoldierOfCode
|
|
4
|
+
module DejaVu
|
|
5
|
+
class Analyzer
|
|
6
|
+
|
|
7
|
+
def initialize
|
|
8
|
+
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def overview_formatted(specific_recording_pid=nil, start_stamp=nil, end_stamp=nil)
|
|
12
|
+
ovr = overview(specific_recording_pid, start_stamp, end_stamp)
|
|
13
|
+
|
|
14
|
+
puts "==================================================================================================="
|
|
15
|
+
puts " Overview: #{ovr.analysis_title}"
|
|
16
|
+
puts "==================================================================================================="
|
|
17
|
+
puts " Number Of Requests: #{ovr.number_of_requests}"
|
|
18
|
+
puts " Number Of Errors: #{ovr.number_of_errors}"
|
|
19
|
+
puts " Percentage Success: #{ovr.success_percentile}%"
|
|
20
|
+
puts " Average Response Time: #{ovr.avg_response_time}"
|
|
21
|
+
puts " Number Of Unique Requests: #{ovr.number_of_unique_requests}"
|
|
22
|
+
puts " Number Of Unique Users: #{ovr.number_of_unique_users}"
|
|
23
|
+
|
|
24
|
+
#:number_of_requests, :number_of_errors, :success_percentile, :analysis_title, :avg_response_time, :number_of_unique_requests, :number_of_unique_users
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def overview(specific_recording_pid=nil, start_stamp=nil, end_stamp=nil)
|
|
28
|
+
|
|
29
|
+
recordings = []
|
|
30
|
+
unless specific_recording_pid
|
|
31
|
+
# anlyize all the recordings as a mass
|
|
32
|
+
DejaVuNS::Recording.all_recordings.each do |rec|
|
|
33
|
+
recordings << rec
|
|
34
|
+
end
|
|
35
|
+
else
|
|
36
|
+
# only analyize overview of the provided pid
|
|
37
|
+
recordings << DejaVuNS::Recording.find_by_pid(specific_recording_pid)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
perform_overview(recordings, start_stamp, end_stamp)
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def perform_overview(recordings, start_stamp=nil, end_stamp=nil)
|
|
45
|
+
|
|
46
|
+
analysis = Analysis.new
|
|
47
|
+
|
|
48
|
+
analysis.analysis_title = "Single User: #{recordings.first.ip}"
|
|
49
|
+
|
|
50
|
+
records = []
|
|
51
|
+
recordings.each do |rec|
|
|
52
|
+
|
|
53
|
+
analysis.add_user
|
|
54
|
+
|
|
55
|
+
rec.record.each do |record|
|
|
56
|
+
if start_stamp && !end_stamp && record.stamp.to_i >= start_stamp # only a start stamp is provided so add all upto this date
|
|
57
|
+
records << record
|
|
58
|
+
elsif start_stamp && end_stamp && record.stamp.to_i >= start_stamp && record.stamp.to_i <= end_stamp # start and end stamps provided (envelope of time)
|
|
59
|
+
records << record
|
|
60
|
+
elsif !start_stamp && end_stamp && record.stamp.to_i <= end_stamp # Just an end time provided - everthing upto this time stamp
|
|
61
|
+
records << record
|
|
62
|
+
elsif !start_stamp && !end_stamp
|
|
63
|
+
records << record
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# these are vetted against the stamps
|
|
69
|
+
urls_seen = []
|
|
70
|
+
records.each do |record|
|
|
71
|
+
|
|
72
|
+
analysis.add_request(record.request_time.to_f)
|
|
73
|
+
|
|
74
|
+
unless urls_seen.include?(record.url)
|
|
75
|
+
analysis.add_unique
|
|
76
|
+
urls_seen << record.url
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
analysis.add_error if record.status.to_i >= 400
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
analysis
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class Analysis
|
|
89
|
+
attr_accessor :number_of_requests, :number_of_errors, :success_percentile, :analysis_title, :avg_response_time, :number_of_unique_requests, :number_of_unique_users
|
|
90
|
+
|
|
91
|
+
def initialize
|
|
92
|
+
@number_of_requests = 0
|
|
93
|
+
@number_of_errors = 0
|
|
94
|
+
@success_percentile = 1
|
|
95
|
+
@analysis_title = "Untitled"
|
|
96
|
+
@avg_response_time = 0.0
|
|
97
|
+
@number_of_unique_requests = 0
|
|
98
|
+
@number_of_unique_users = 0
|
|
99
|
+
@total_request_time = 0
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def add_request(rep_time)
|
|
103
|
+
@number_of_requests += 1
|
|
104
|
+
recalculate_succes_error_percentile
|
|
105
|
+
@total_request_time += rep_time
|
|
106
|
+
puts "#{__FILE__}:#{__LINE__} #{__method__} #{rep_time}"
|
|
107
|
+
recalculate_avg_resp_time
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def add_unique
|
|
111
|
+
@number_of_unique_requests += 1
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def add_user
|
|
115
|
+
@number_of_unique_users += 1
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def add_error
|
|
119
|
+
@number_of_errors += 1
|
|
120
|
+
recalculate_succes_error_percentile
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def recalculate_avg_resp_time
|
|
124
|
+
@avg_response_time = @total_request_time / @number_of_requests
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def recalculate_succes_error_percentile
|
|
128
|
+
@success_percentile = ((@number_of_requests - @number_of_errors) / @number_of_requests) * 100 if @number_of_requests > 0
|
|
129
|
+
@success_percentile = 100 if @number_of_requests == 0
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
data/lib/deja-vu/init.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require ~'generated_model/DejaVuNS'
|
|
2
|
+
|
|
3
|
+
module DejaVuNS
|
|
4
|
+
Xampl.set_default_persister_kind(:filesystem)
|
|
5
|
+
Xampl.set_default_persister_format(:xml_format)
|
|
6
|
+
|
|
7
|
+
def self.persistence_type
|
|
8
|
+
Xampl.default_persister_kind
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.root
|
|
12
|
+
root = nil
|
|
13
|
+
DejaVuNS.transaction do
|
|
14
|
+
root = DejaVu['recordings']
|
|
15
|
+
|
|
16
|
+
unless root
|
|
17
|
+
|
|
18
|
+
root = DejaVu.lookup('recordings')
|
|
19
|
+
|
|
20
|
+
unless root
|
|
21
|
+
|
|
22
|
+
root = DejaVu.new('recordings') do | it |
|
|
23
|
+
#it.setup_defaults
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
root
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.transaction
|
|
32
|
+
result = nil
|
|
33
|
+
Xampl.transaction('recordings') do
|
|
34
|
+
result = yield
|
|
35
|
+
end
|
|
36
|
+
result
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.pid_from_string(string)
|
|
40
|
+
string.downcase.gsub(/[ \/\\:\?'"%!@#\$\^&\*\(\)\+]/, '')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,1536 @@
|
|
|
1
|
+
module DejaVuNS
|
|
2
|
+
|
|
3
|
+
require "xamplr"
|
|
4
|
+
include Xampl
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
XamplObject.ns_preferred_prefix("http://soldierofcode.com/deja-vu", "dejavu")
|
|
8
|
+
|
|
9
|
+
module DejaVuAsChild
|
|
10
|
+
require "xamplr/indexed-array"
|
|
11
|
+
|
|
12
|
+
def deja_vu_child
|
|
13
|
+
accessed
|
|
14
|
+
@deja_vu_child
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def deja_vu_child=(v)
|
|
18
|
+
accessed
|
|
19
|
+
@deja_vu_child = v
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
alias deja_vu deja_vu_child
|
|
23
|
+
alias deja_vu= deja_vu_child=
|
|
24
|
+
|
|
25
|
+
def init_deja_vu_as_child
|
|
26
|
+
@deja_vu_child = IndexedArray.new
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def add_deja_vu(deja_vu)
|
|
30
|
+
accessed
|
|
31
|
+
index = deja_vu.get_the_index
|
|
32
|
+
if(nil == index) then
|
|
33
|
+
raise Xampl::XamplException.new("no value for the index 'pid' of deja_vu defined in : " << deja_vu.pp_xml)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
existing = @deja_vu_child[index]
|
|
37
|
+
|
|
38
|
+
return existing if existing == deja_vu
|
|
39
|
+
|
|
40
|
+
self.remove_deja_vu(index) if existing
|
|
41
|
+
|
|
42
|
+
@children << deja_vu
|
|
43
|
+
@deja_vu_child[index] = deja_vu
|
|
44
|
+
|
|
45
|
+
deja_vu.add_parent(self)
|
|
46
|
+
|
|
47
|
+
changed
|
|
48
|
+
return deja_vu
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def new_deja_vu(index)
|
|
52
|
+
accessed
|
|
53
|
+
|
|
54
|
+
deja_vu = nil
|
|
55
|
+
deja_vu = DejaVu.lookup(index) if Xampl.persister and Xampl.persister.automatic
|
|
56
|
+
deja_vu = DejaVu.new(index) unless deja_vu
|
|
57
|
+
|
|
58
|
+
yield(deja_vu) if block_given?
|
|
59
|
+
return add_deja_vu(deja_vu)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def ensure_deja_vu(index)
|
|
63
|
+
accessed
|
|
64
|
+
|
|
65
|
+
deja_vu = @deja_vu_child[index]
|
|
66
|
+
return deja_vu if deja_vu
|
|
67
|
+
|
|
68
|
+
deja_vu = DejaVu.lookup(index) if Xampl.persister and Xampl.persister.automatic
|
|
69
|
+
deja_vu = DejaVu.new(index) unless deja_vu
|
|
70
|
+
|
|
71
|
+
yield(deja_vu) if block_given?
|
|
72
|
+
return add_deja_vu(deja_vu)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def remove_deja_vu(index)
|
|
76
|
+
accessed
|
|
77
|
+
changed
|
|
78
|
+
unless String === index or Symbol === index then
|
|
79
|
+
index = index.get_the_index
|
|
80
|
+
end
|
|
81
|
+
deja_vu = @deja_vu_child.delete(index) if index
|
|
82
|
+
@children.delete(deja_vu)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
module RecordingAsChild
|
|
87
|
+
require "xamplr/indexed-array"
|
|
88
|
+
|
|
89
|
+
def recording_child
|
|
90
|
+
accessed
|
|
91
|
+
@recording_child
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def recording_child=(v)
|
|
95
|
+
accessed
|
|
96
|
+
@recording_child = v
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
alias recording recording_child
|
|
100
|
+
alias recording= recording_child=
|
|
101
|
+
|
|
102
|
+
def init_recording_as_child
|
|
103
|
+
@recording_child = IndexedArray.new
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def add_recording(recording)
|
|
107
|
+
accessed
|
|
108
|
+
index = recording.get_the_index
|
|
109
|
+
if(nil == index) then
|
|
110
|
+
raise Xampl::XamplException.new("no value for the index 'pid' of recording defined in : " << recording.pp_xml)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
existing = @recording_child[index]
|
|
114
|
+
|
|
115
|
+
return existing if existing == recording
|
|
116
|
+
|
|
117
|
+
self.remove_recording(index) if existing
|
|
118
|
+
|
|
119
|
+
@children << recording
|
|
120
|
+
@recording_child[index] = recording
|
|
121
|
+
|
|
122
|
+
recording.add_parent(self)
|
|
123
|
+
|
|
124
|
+
changed
|
|
125
|
+
return recording
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def new_recording(index)
|
|
129
|
+
accessed
|
|
130
|
+
|
|
131
|
+
recording = nil
|
|
132
|
+
recording = Recording.lookup(index) if Xampl.persister and Xampl.persister.automatic
|
|
133
|
+
recording = Recording.new(index) unless recording
|
|
134
|
+
|
|
135
|
+
yield(recording) if block_given?
|
|
136
|
+
return add_recording(recording)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def ensure_recording(index)
|
|
140
|
+
accessed
|
|
141
|
+
|
|
142
|
+
recording = @recording_child[index]
|
|
143
|
+
return recording if recording
|
|
144
|
+
|
|
145
|
+
recording = Recording.lookup(index) if Xampl.persister and Xampl.persister.automatic
|
|
146
|
+
recording = Recording.new(index) unless recording
|
|
147
|
+
|
|
148
|
+
yield(recording) if block_given?
|
|
149
|
+
return add_recording(recording)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def remove_recording(index)
|
|
153
|
+
accessed
|
|
154
|
+
changed
|
|
155
|
+
unless String === index or Symbol === index then
|
|
156
|
+
index = index.get_the_index
|
|
157
|
+
end
|
|
158
|
+
recording = @recording_child.delete(index) if index
|
|
159
|
+
@children.delete(recording)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
module RecordAsChild
|
|
164
|
+
require "xamplr/indexed-array"
|
|
165
|
+
|
|
166
|
+
def record_child
|
|
167
|
+
accessed
|
|
168
|
+
@record_child
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def record_child=(v)
|
|
172
|
+
accessed
|
|
173
|
+
@record_child = v
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
alias record record_child
|
|
177
|
+
alias record= record_child=
|
|
178
|
+
|
|
179
|
+
def init_record_as_child
|
|
180
|
+
@record_child = IndexedArray.new
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def add_record(record)
|
|
184
|
+
accessed
|
|
185
|
+
index = record.get_the_index
|
|
186
|
+
if(nil == index) then
|
|
187
|
+
raise Xampl::XamplException.new("no value for the index 'id' of record defined in : " << record.pp_xml)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
existing = @record_child[index]
|
|
191
|
+
|
|
192
|
+
return existing if existing == record
|
|
193
|
+
|
|
194
|
+
self.remove_record(index) if existing
|
|
195
|
+
|
|
196
|
+
@children << record
|
|
197
|
+
@record_child[index] = record
|
|
198
|
+
|
|
199
|
+
record.add_parent(self)
|
|
200
|
+
|
|
201
|
+
changed
|
|
202
|
+
return record
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def new_record(index)
|
|
206
|
+
accessed
|
|
207
|
+
|
|
208
|
+
record = nil
|
|
209
|
+
record = Record.new(index) unless record
|
|
210
|
+
|
|
211
|
+
yield(record) if block_given?
|
|
212
|
+
return add_record(record)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def ensure_record(index)
|
|
216
|
+
accessed
|
|
217
|
+
|
|
218
|
+
record = @record_child[index]
|
|
219
|
+
return record if record
|
|
220
|
+
|
|
221
|
+
record = Record.new(index) unless record
|
|
222
|
+
|
|
223
|
+
yield(record) if block_given?
|
|
224
|
+
return add_record(record)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def remove_record(index)
|
|
228
|
+
accessed
|
|
229
|
+
changed
|
|
230
|
+
unless String === index or Symbol === index then
|
|
231
|
+
index = index.get_the_index
|
|
232
|
+
end
|
|
233
|
+
record = @record_child.delete(index) if index
|
|
234
|
+
@children.delete(record)
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
module HeaderAsChild
|
|
239
|
+
def header_child
|
|
240
|
+
accessed
|
|
241
|
+
@header_child
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def header_child=(v)
|
|
245
|
+
accessed
|
|
246
|
+
@header_child = v
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
alias header header_child
|
|
250
|
+
alias header= header_child=
|
|
251
|
+
|
|
252
|
+
def init_header_as_child
|
|
253
|
+
@header_child = []
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def add_header(header)
|
|
257
|
+
accessed
|
|
258
|
+
@children << header
|
|
259
|
+
@header_child << header
|
|
260
|
+
header.add_parent(self)
|
|
261
|
+
changed
|
|
262
|
+
return header
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
def new_header
|
|
266
|
+
accessed
|
|
267
|
+
header = Header.new
|
|
268
|
+
yield(header) if block_given?
|
|
269
|
+
return add_header(header)
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def ensure_header
|
|
273
|
+
accessed
|
|
274
|
+
new_header if 0 == header.size
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def remove_header(header)
|
|
278
|
+
accessed
|
|
279
|
+
changed
|
|
280
|
+
@header_child.delete(header)
|
|
281
|
+
@children.delete(header)
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
module BodyAsChild
|
|
286
|
+
def body_child
|
|
287
|
+
accessed
|
|
288
|
+
@body_child
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def body_child=(v)
|
|
292
|
+
accessed
|
|
293
|
+
@body_child = v
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
alias body body_child
|
|
297
|
+
alias body= body_child=
|
|
298
|
+
|
|
299
|
+
def init_body_as_child
|
|
300
|
+
@body_child = []
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
def add_body(body)
|
|
304
|
+
accessed
|
|
305
|
+
@children << body
|
|
306
|
+
@body_child << body
|
|
307
|
+
body.add_parent(self)
|
|
308
|
+
changed
|
|
309
|
+
return body
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def new_body
|
|
313
|
+
accessed
|
|
314
|
+
body = Body.new
|
|
315
|
+
yield(body) if block_given?
|
|
316
|
+
return add_body(body)
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
def ensure_body
|
|
320
|
+
accessed
|
|
321
|
+
new_body if 0 == body.size
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def remove_body(body)
|
|
325
|
+
accessed
|
|
326
|
+
changed
|
|
327
|
+
@body_child.delete(body)
|
|
328
|
+
@children.delete(body)
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
module ParamAsChild
|
|
333
|
+
def param_child
|
|
334
|
+
accessed
|
|
335
|
+
@param_child
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def param_child=(v)
|
|
339
|
+
accessed
|
|
340
|
+
@param_child = v
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
alias param param_child
|
|
344
|
+
alias param= param_child=
|
|
345
|
+
|
|
346
|
+
def init_param_as_child
|
|
347
|
+
@param_child = []
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
def add_param(param)
|
|
351
|
+
accessed
|
|
352
|
+
@children << param
|
|
353
|
+
@param_child << param
|
|
354
|
+
param.add_parent(self)
|
|
355
|
+
changed
|
|
356
|
+
return param
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def new_param
|
|
360
|
+
accessed
|
|
361
|
+
param = Param.new
|
|
362
|
+
yield(param) if block_given?
|
|
363
|
+
return add_param(param)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
def ensure_param
|
|
367
|
+
accessed
|
|
368
|
+
new_param if 0 == param.size
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def remove_param(param)
|
|
372
|
+
accessed
|
|
373
|
+
changed
|
|
374
|
+
@param_child.delete(param)
|
|
375
|
+
@children.delete(param)
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
module MultipartReferenceAsChild
|
|
380
|
+
def multipart_reference_child
|
|
381
|
+
accessed
|
|
382
|
+
@multipart_reference_child
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def multipart_reference_child=(v)
|
|
386
|
+
accessed
|
|
387
|
+
@multipart_reference_child = v
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
alias multipart_reference multipart_reference_child
|
|
391
|
+
alias multipart_reference= multipart_reference_child=
|
|
392
|
+
|
|
393
|
+
def init_multipart_reference_as_child
|
|
394
|
+
@multipart_reference_child = []
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
def add_multipart_reference(multipart_reference)
|
|
398
|
+
accessed
|
|
399
|
+
@children << multipart_reference
|
|
400
|
+
@multipart_reference_child << multipart_reference
|
|
401
|
+
multipart_reference.add_parent(self)
|
|
402
|
+
changed
|
|
403
|
+
return multipart_reference
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
def new_multipart_reference
|
|
407
|
+
accessed
|
|
408
|
+
multipart_reference = MultipartReference.new
|
|
409
|
+
yield(multipart_reference) if block_given?
|
|
410
|
+
return add_multipart_reference(multipart_reference)
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
def ensure_multipart_reference
|
|
414
|
+
accessed
|
|
415
|
+
new_multipart_reference if 0 == multipart_reference.size
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def remove_multipart_reference(multipart_reference)
|
|
419
|
+
accessed
|
|
420
|
+
changed
|
|
421
|
+
@multipart_reference_child.delete(multipart_reference)
|
|
422
|
+
@children.delete(multipart_reference)
|
|
423
|
+
end
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
class DejaVu
|
|
427
|
+
include Xampl::XamplPersistedObject
|
|
428
|
+
|
|
429
|
+
@@default_persister_format = nil
|
|
430
|
+
|
|
431
|
+
def default_persister_format
|
|
432
|
+
@@default_persister_format
|
|
433
|
+
end
|
|
434
|
+
def DejaVu.default_persister_format
|
|
435
|
+
@@default_persister_format
|
|
436
|
+
end
|
|
437
|
+
def DejaVu.set_default_persister_format(format)
|
|
438
|
+
@@default_persister_format = format
|
|
439
|
+
end
|
|
440
|
+
|
|
441
|
+
def DejaVu.find_by_query
|
|
442
|
+
things = Xampl.find_xampl do | q |
|
|
443
|
+
q.add_condition('class', :equals, self.name)
|
|
444
|
+
yield(q)
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
include Xampl::XamplWithDataContent
|
|
450
|
+
|
|
451
|
+
@@tag = "deja-vu"
|
|
452
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
453
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}deja-vu"
|
|
454
|
+
@@module_name = "DejaVuNS"
|
|
455
|
+
@@safe_name = "DejaVuNS_deja_vu"
|
|
456
|
+
@@attributes = [
|
|
457
|
+
[ :@pid, "pid" ],
|
|
458
|
+
[ :@scheduled_for_deletion_at, "scheduled-for-deletion-at" ],
|
|
459
|
+
]
|
|
460
|
+
include DejaVuNS::RecordingAsChild
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
def DejaVu.lookup(pid)
|
|
464
|
+
Xampl.lookup(DejaVu, pid)
|
|
465
|
+
end
|
|
466
|
+
|
|
467
|
+
def DejaVu.[](pid)
|
|
468
|
+
Xampl.lookup(DejaVu, pid)
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
def pid
|
|
472
|
+
@pid
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
def pid=(v)
|
|
476
|
+
accessed
|
|
477
|
+
# This is kind of optimistic, I think you are in trouble if you do this
|
|
478
|
+
Xampl.auto_uncache(self) if @pid
|
|
479
|
+
@pid = v
|
|
480
|
+
changed
|
|
481
|
+
Xampl.auto_cache(self) if v
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
def scheduled_for_deletion_at
|
|
485
|
+
accessed
|
|
486
|
+
@scheduled_for_deletion_at
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
def scheduled_for_deletion_at=(v)
|
|
490
|
+
accessed
|
|
491
|
+
changed
|
|
492
|
+
@scheduled_for_deletion_at = v
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
def initialize(index=nil)
|
|
496
|
+
@pid = index if index
|
|
497
|
+
super()
|
|
498
|
+
|
|
499
|
+
@pid = nil if not defined? @pid
|
|
500
|
+
@scheduled_for_deletion_at = nil if not defined? @scheduled_for_deletion_at
|
|
501
|
+
|
|
502
|
+
init_xampl_object
|
|
503
|
+
init_data_content
|
|
504
|
+
init_recording_as_child
|
|
505
|
+
|
|
506
|
+
yield(self) if block_given?
|
|
507
|
+
init_hook
|
|
508
|
+
|
|
509
|
+
changed
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
def clear_non_persistent_index_attributes
|
|
513
|
+
@scheduled_for_deletion_at = nil
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
def append_to(other)
|
|
517
|
+
other.add_deja_vu(self)
|
|
518
|
+
end
|
|
519
|
+
|
|
520
|
+
def DejaVu.persisted?
|
|
521
|
+
return :pid
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
def persisted?
|
|
525
|
+
return :pid
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
def DejaVu.tag
|
|
529
|
+
@@tag
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
def DejaVu.ns
|
|
533
|
+
@@ns
|
|
534
|
+
end
|
|
535
|
+
|
|
536
|
+
def DejaVu.ns_tag
|
|
537
|
+
@@ns_tag
|
|
538
|
+
end
|
|
539
|
+
|
|
540
|
+
def DejaVu.safe_name
|
|
541
|
+
@@safe_name
|
|
542
|
+
end
|
|
543
|
+
|
|
544
|
+
def DejaVu.module_name
|
|
545
|
+
@@module_name
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
def tag
|
|
549
|
+
@@tag
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
def ns
|
|
553
|
+
@@ns
|
|
554
|
+
end
|
|
555
|
+
|
|
556
|
+
def ns_tag
|
|
557
|
+
@@ns_tag
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
def safe_name
|
|
561
|
+
@@safe_name
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
def module_name
|
|
565
|
+
@@module_name
|
|
566
|
+
end
|
|
567
|
+
|
|
568
|
+
def attributes
|
|
569
|
+
@@attributes
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
def indexed_by
|
|
573
|
+
:pid
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
def get_the_index
|
|
577
|
+
@pid
|
|
578
|
+
end
|
|
579
|
+
|
|
580
|
+
def set_the_index(index)
|
|
581
|
+
@pid = index
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
def substitute_in_visit(visitor)
|
|
585
|
+
return visitor.substitute_in_visit_deja_vu(self) || self
|
|
586
|
+
end
|
|
587
|
+
|
|
588
|
+
def before_visit(visitor)
|
|
589
|
+
visitor.before_visit_deja_vu(self)
|
|
590
|
+
end
|
|
591
|
+
|
|
592
|
+
def visit(visitor)
|
|
593
|
+
visitor.visit_deja_vu(self)
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
def after_visit(visitor)
|
|
597
|
+
visitor.after_visit_deja_vu(self)
|
|
598
|
+
end
|
|
599
|
+
|
|
600
|
+
Xampl::FromXML::register(DejaVu::tag, DejaVu::ns_tag, DejaVu)
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
class Recording
|
|
604
|
+
include Xampl::XamplPersistedObject
|
|
605
|
+
|
|
606
|
+
@@default_persister_format = nil
|
|
607
|
+
|
|
608
|
+
def default_persister_format
|
|
609
|
+
@@default_persister_format
|
|
610
|
+
end
|
|
611
|
+
def Recording.default_persister_format
|
|
612
|
+
@@default_persister_format
|
|
613
|
+
end
|
|
614
|
+
def Recording.set_default_persister_format(format)
|
|
615
|
+
@@default_persister_format = format
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
def Recording.find_by_query
|
|
619
|
+
things = Xampl.find_xampl do | q |
|
|
620
|
+
q.add_condition('class', :equals, self.name)
|
|
621
|
+
yield(q)
|
|
622
|
+
end
|
|
623
|
+
end
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
include Xampl::XamplWithDataContent
|
|
627
|
+
|
|
628
|
+
@@tag = "recording"
|
|
629
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
630
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}recording"
|
|
631
|
+
@@module_name = "DejaVuNS"
|
|
632
|
+
@@safe_name = "DejaVuNS_recording"
|
|
633
|
+
@@attributes = [
|
|
634
|
+
[ :@pid, "pid" ],
|
|
635
|
+
[ :@cookie, "cookie" ],
|
|
636
|
+
[ :@stamp, "stamp" ],
|
|
637
|
+
[ :@agent, "agent" ],
|
|
638
|
+
[ :@ip, "ip" ],
|
|
639
|
+
[ :@scheduled_for_deletion_at, "scheduled-for-deletion-at" ],
|
|
640
|
+
]
|
|
641
|
+
include DejaVuNS::RecordAsChild
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
def Recording.lookup(pid)
|
|
645
|
+
Xampl.lookup(Recording, pid)
|
|
646
|
+
end
|
|
647
|
+
|
|
648
|
+
def Recording.[](pid)
|
|
649
|
+
Xampl.lookup(Recording, pid)
|
|
650
|
+
end
|
|
651
|
+
|
|
652
|
+
def pid
|
|
653
|
+
@pid
|
|
654
|
+
end
|
|
655
|
+
|
|
656
|
+
def pid=(v)
|
|
657
|
+
accessed
|
|
658
|
+
# This is kind of optimistic, I think you are in trouble if you do this
|
|
659
|
+
Xampl.auto_uncache(self) if @pid
|
|
660
|
+
@pid = v
|
|
661
|
+
changed
|
|
662
|
+
Xampl.auto_cache(self) if v
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
def cookie
|
|
666
|
+
accessed
|
|
667
|
+
@cookie
|
|
668
|
+
end
|
|
669
|
+
|
|
670
|
+
def cookie=(v)
|
|
671
|
+
accessed
|
|
672
|
+
changed
|
|
673
|
+
@cookie = v
|
|
674
|
+
end
|
|
675
|
+
|
|
676
|
+
def stamp
|
|
677
|
+
accessed
|
|
678
|
+
@stamp
|
|
679
|
+
end
|
|
680
|
+
|
|
681
|
+
def stamp=(v)
|
|
682
|
+
accessed
|
|
683
|
+
changed
|
|
684
|
+
@stamp = v
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
def agent
|
|
688
|
+
accessed
|
|
689
|
+
@agent
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
def agent=(v)
|
|
693
|
+
accessed
|
|
694
|
+
changed
|
|
695
|
+
@agent = v
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
def ip
|
|
699
|
+
accessed
|
|
700
|
+
@ip
|
|
701
|
+
end
|
|
702
|
+
|
|
703
|
+
def ip=(v)
|
|
704
|
+
accessed
|
|
705
|
+
changed
|
|
706
|
+
@ip = v
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
def scheduled_for_deletion_at
|
|
710
|
+
accessed
|
|
711
|
+
@scheduled_for_deletion_at
|
|
712
|
+
end
|
|
713
|
+
|
|
714
|
+
def scheduled_for_deletion_at=(v)
|
|
715
|
+
accessed
|
|
716
|
+
changed
|
|
717
|
+
@scheduled_for_deletion_at = v
|
|
718
|
+
end
|
|
719
|
+
|
|
720
|
+
def initialize(index=nil)
|
|
721
|
+
@pid = index if index
|
|
722
|
+
super()
|
|
723
|
+
|
|
724
|
+
@pid = nil if not defined? @pid
|
|
725
|
+
@cookie = nil if not defined? @cookie
|
|
726
|
+
@stamp = nil if not defined? @stamp
|
|
727
|
+
@agent = nil if not defined? @agent
|
|
728
|
+
@ip = nil if not defined? @ip
|
|
729
|
+
@scheduled_for_deletion_at = nil if not defined? @scheduled_for_deletion_at
|
|
730
|
+
|
|
731
|
+
init_xampl_object
|
|
732
|
+
init_data_content
|
|
733
|
+
init_record_as_child
|
|
734
|
+
|
|
735
|
+
yield(self) if block_given?
|
|
736
|
+
init_hook
|
|
737
|
+
|
|
738
|
+
changed
|
|
739
|
+
end
|
|
740
|
+
|
|
741
|
+
def clear_non_persistent_index_attributes
|
|
742
|
+
@cookie = nil
|
|
743
|
+
@stamp = nil
|
|
744
|
+
@agent = nil
|
|
745
|
+
@ip = nil
|
|
746
|
+
@scheduled_for_deletion_at = nil
|
|
747
|
+
end
|
|
748
|
+
|
|
749
|
+
def append_to(other)
|
|
750
|
+
other.add_recording(self)
|
|
751
|
+
end
|
|
752
|
+
|
|
753
|
+
def Recording.persisted?
|
|
754
|
+
return :pid
|
|
755
|
+
end
|
|
756
|
+
|
|
757
|
+
def persisted?
|
|
758
|
+
return :pid
|
|
759
|
+
end
|
|
760
|
+
|
|
761
|
+
def Recording.tag
|
|
762
|
+
@@tag
|
|
763
|
+
end
|
|
764
|
+
|
|
765
|
+
def Recording.ns
|
|
766
|
+
@@ns
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
def Recording.ns_tag
|
|
770
|
+
@@ns_tag
|
|
771
|
+
end
|
|
772
|
+
|
|
773
|
+
def Recording.safe_name
|
|
774
|
+
@@safe_name
|
|
775
|
+
end
|
|
776
|
+
|
|
777
|
+
def Recording.module_name
|
|
778
|
+
@@module_name
|
|
779
|
+
end
|
|
780
|
+
|
|
781
|
+
def tag
|
|
782
|
+
@@tag
|
|
783
|
+
end
|
|
784
|
+
|
|
785
|
+
def ns
|
|
786
|
+
@@ns
|
|
787
|
+
end
|
|
788
|
+
|
|
789
|
+
def ns_tag
|
|
790
|
+
@@ns_tag
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
def safe_name
|
|
794
|
+
@@safe_name
|
|
795
|
+
end
|
|
796
|
+
|
|
797
|
+
def module_name
|
|
798
|
+
@@module_name
|
|
799
|
+
end
|
|
800
|
+
|
|
801
|
+
def attributes
|
|
802
|
+
@@attributes
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
def indexed_by
|
|
806
|
+
:pid
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
def get_the_index
|
|
810
|
+
@pid
|
|
811
|
+
end
|
|
812
|
+
|
|
813
|
+
def set_the_index(index)
|
|
814
|
+
@pid = index
|
|
815
|
+
end
|
|
816
|
+
|
|
817
|
+
def substitute_in_visit(visitor)
|
|
818
|
+
return visitor.substitute_in_visit_recording(self) || self
|
|
819
|
+
end
|
|
820
|
+
|
|
821
|
+
def before_visit(visitor)
|
|
822
|
+
visitor.before_visit_recording(self)
|
|
823
|
+
end
|
|
824
|
+
|
|
825
|
+
def visit(visitor)
|
|
826
|
+
visitor.visit_recording(self)
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
def after_visit(visitor)
|
|
830
|
+
visitor.after_visit_recording(self)
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
Xampl::FromXML::register(Recording::tag, Recording::ns_tag, Recording)
|
|
834
|
+
end
|
|
835
|
+
|
|
836
|
+
class Record
|
|
837
|
+
include Xampl::XamplObject
|
|
838
|
+
include Xampl::XamplWithDataContent
|
|
839
|
+
|
|
840
|
+
@@tag = "record"
|
|
841
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
842
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}record"
|
|
843
|
+
@@module_name = "DejaVuNS"
|
|
844
|
+
@@safe_name = "DejaVuNS_record"
|
|
845
|
+
@@attributes = [
|
|
846
|
+
[ :@id, "id" ],
|
|
847
|
+
[ :@stamp, "stamp" ],
|
|
848
|
+
[ :@status, "status" ],
|
|
849
|
+
[ :@httpmethod, "httpmethod" ],
|
|
850
|
+
[ :@url, "url" ],
|
|
851
|
+
[ :@request_time, "request-time" ],
|
|
852
|
+
]
|
|
853
|
+
include DejaVuNS::HeaderAsChild
|
|
854
|
+
include DejaVuNS::BodyAsChild
|
|
855
|
+
include DejaVuNS::ParamAsChild
|
|
856
|
+
include DejaVuNS::MultipartReferenceAsChild
|
|
857
|
+
|
|
858
|
+
|
|
859
|
+
def id
|
|
860
|
+
accessed
|
|
861
|
+
@id
|
|
862
|
+
end
|
|
863
|
+
|
|
864
|
+
def id=(v)
|
|
865
|
+
accessed
|
|
866
|
+
changed
|
|
867
|
+
@id = v
|
|
868
|
+
end
|
|
869
|
+
|
|
870
|
+
def stamp
|
|
871
|
+
accessed
|
|
872
|
+
@stamp
|
|
873
|
+
end
|
|
874
|
+
|
|
875
|
+
def stamp=(v)
|
|
876
|
+
accessed
|
|
877
|
+
changed
|
|
878
|
+
@stamp = v
|
|
879
|
+
end
|
|
880
|
+
|
|
881
|
+
def status
|
|
882
|
+
accessed
|
|
883
|
+
@status
|
|
884
|
+
end
|
|
885
|
+
|
|
886
|
+
def status=(v)
|
|
887
|
+
accessed
|
|
888
|
+
changed
|
|
889
|
+
@status = v
|
|
890
|
+
end
|
|
891
|
+
|
|
892
|
+
def httpmethod
|
|
893
|
+
accessed
|
|
894
|
+
@httpmethod
|
|
895
|
+
end
|
|
896
|
+
|
|
897
|
+
def httpmethod=(v)
|
|
898
|
+
accessed
|
|
899
|
+
changed
|
|
900
|
+
@httpmethod = v
|
|
901
|
+
end
|
|
902
|
+
|
|
903
|
+
def url
|
|
904
|
+
accessed
|
|
905
|
+
@url
|
|
906
|
+
end
|
|
907
|
+
|
|
908
|
+
def url=(v)
|
|
909
|
+
accessed
|
|
910
|
+
changed
|
|
911
|
+
@url = v
|
|
912
|
+
end
|
|
913
|
+
|
|
914
|
+
def request_time
|
|
915
|
+
accessed
|
|
916
|
+
@request_time
|
|
917
|
+
end
|
|
918
|
+
|
|
919
|
+
def request_time=(v)
|
|
920
|
+
accessed
|
|
921
|
+
changed
|
|
922
|
+
@request_time = v
|
|
923
|
+
end
|
|
924
|
+
|
|
925
|
+
def initialize(index=nil)
|
|
926
|
+
@id = index if index
|
|
927
|
+
super()
|
|
928
|
+
|
|
929
|
+
@id = nil if not defined? @id
|
|
930
|
+
@stamp = nil if not defined? @stamp
|
|
931
|
+
@status = nil if not defined? @status
|
|
932
|
+
@httpmethod = nil if not defined? @httpmethod
|
|
933
|
+
@url = nil if not defined? @url
|
|
934
|
+
@request_time = nil if not defined? @request_time
|
|
935
|
+
|
|
936
|
+
init_xampl_object
|
|
937
|
+
init_data_content
|
|
938
|
+
init_header_as_child
|
|
939
|
+
init_body_as_child
|
|
940
|
+
init_param_as_child
|
|
941
|
+
init_multipart_reference_as_child
|
|
942
|
+
|
|
943
|
+
yield(self) if block_given?
|
|
944
|
+
init_hook
|
|
945
|
+
|
|
946
|
+
changed
|
|
947
|
+
end
|
|
948
|
+
|
|
949
|
+
def clear_non_persistent_index_attributes
|
|
950
|
+
@id = nil
|
|
951
|
+
@stamp = nil
|
|
952
|
+
@status = nil
|
|
953
|
+
@httpmethod = nil
|
|
954
|
+
@url = nil
|
|
955
|
+
@request_time = nil
|
|
956
|
+
end
|
|
957
|
+
|
|
958
|
+
def append_to(other)
|
|
959
|
+
other.add_record(self)
|
|
960
|
+
end
|
|
961
|
+
|
|
962
|
+
def Record.persisted?
|
|
963
|
+
return nil
|
|
964
|
+
end
|
|
965
|
+
|
|
966
|
+
def persisted?
|
|
967
|
+
return nil
|
|
968
|
+
end
|
|
969
|
+
|
|
970
|
+
def Record.tag
|
|
971
|
+
@@tag
|
|
972
|
+
end
|
|
973
|
+
|
|
974
|
+
def Record.ns
|
|
975
|
+
@@ns
|
|
976
|
+
end
|
|
977
|
+
|
|
978
|
+
def Record.ns_tag
|
|
979
|
+
@@ns_tag
|
|
980
|
+
end
|
|
981
|
+
|
|
982
|
+
def Record.safe_name
|
|
983
|
+
@@safe_name
|
|
984
|
+
end
|
|
985
|
+
|
|
986
|
+
def Record.module_name
|
|
987
|
+
@@module_name
|
|
988
|
+
end
|
|
989
|
+
|
|
990
|
+
def tag
|
|
991
|
+
@@tag
|
|
992
|
+
end
|
|
993
|
+
|
|
994
|
+
def ns
|
|
995
|
+
@@ns
|
|
996
|
+
end
|
|
997
|
+
|
|
998
|
+
def ns_tag
|
|
999
|
+
@@ns_tag
|
|
1000
|
+
end
|
|
1001
|
+
|
|
1002
|
+
def safe_name
|
|
1003
|
+
@@safe_name
|
|
1004
|
+
end
|
|
1005
|
+
|
|
1006
|
+
def module_name
|
|
1007
|
+
@@module_name
|
|
1008
|
+
end
|
|
1009
|
+
|
|
1010
|
+
def attributes
|
|
1011
|
+
@@attributes
|
|
1012
|
+
end
|
|
1013
|
+
|
|
1014
|
+
def indexed_by
|
|
1015
|
+
:id
|
|
1016
|
+
end
|
|
1017
|
+
|
|
1018
|
+
def get_the_index
|
|
1019
|
+
@id
|
|
1020
|
+
end
|
|
1021
|
+
|
|
1022
|
+
def set_the_index(index)
|
|
1023
|
+
@id = index
|
|
1024
|
+
end
|
|
1025
|
+
|
|
1026
|
+
def substitute_in_visit(visitor)
|
|
1027
|
+
return visitor.substitute_in_visit_record(self) || self
|
|
1028
|
+
end
|
|
1029
|
+
|
|
1030
|
+
def before_visit(visitor)
|
|
1031
|
+
visitor.before_visit_record(self)
|
|
1032
|
+
end
|
|
1033
|
+
|
|
1034
|
+
def visit(visitor)
|
|
1035
|
+
visitor.visit_record(self)
|
|
1036
|
+
end
|
|
1037
|
+
|
|
1038
|
+
def after_visit(visitor)
|
|
1039
|
+
visitor.after_visit_record(self)
|
|
1040
|
+
end
|
|
1041
|
+
|
|
1042
|
+
Xampl::FromXML::register(Record::tag, Record::ns_tag, Record)
|
|
1043
|
+
end
|
|
1044
|
+
|
|
1045
|
+
class Header
|
|
1046
|
+
include Xampl::XamplObject
|
|
1047
|
+
include Xampl::XamplWithoutContent
|
|
1048
|
+
|
|
1049
|
+
@@tag = "header"
|
|
1050
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
1051
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}header"
|
|
1052
|
+
@@module_name = "DejaVuNS"
|
|
1053
|
+
@@safe_name = "DejaVuNS_header"
|
|
1054
|
+
@@attributes = [
|
|
1055
|
+
[ :@name, "name" ],
|
|
1056
|
+
[ :@value, "value" ],
|
|
1057
|
+
]
|
|
1058
|
+
|
|
1059
|
+
def name
|
|
1060
|
+
accessed
|
|
1061
|
+
@name
|
|
1062
|
+
end
|
|
1063
|
+
|
|
1064
|
+
def name=(v)
|
|
1065
|
+
accessed
|
|
1066
|
+
changed
|
|
1067
|
+
@name = v
|
|
1068
|
+
end
|
|
1069
|
+
|
|
1070
|
+
def value
|
|
1071
|
+
accessed
|
|
1072
|
+
@value
|
|
1073
|
+
end
|
|
1074
|
+
|
|
1075
|
+
def value=(v)
|
|
1076
|
+
accessed
|
|
1077
|
+
changed
|
|
1078
|
+
@value = v
|
|
1079
|
+
end
|
|
1080
|
+
|
|
1081
|
+
def initialize
|
|
1082
|
+
super
|
|
1083
|
+
|
|
1084
|
+
@name = nil if not defined? @name
|
|
1085
|
+
@value = nil if not defined? @value
|
|
1086
|
+
|
|
1087
|
+
init_xampl_object
|
|
1088
|
+
|
|
1089
|
+
yield(self) if block_given?
|
|
1090
|
+
init_hook
|
|
1091
|
+
|
|
1092
|
+
changed
|
|
1093
|
+
end
|
|
1094
|
+
|
|
1095
|
+
def clear_non_persistent_index_attributes
|
|
1096
|
+
@name = nil
|
|
1097
|
+
@value = nil
|
|
1098
|
+
end
|
|
1099
|
+
|
|
1100
|
+
def append_to(other)
|
|
1101
|
+
other.add_header(self)
|
|
1102
|
+
end
|
|
1103
|
+
|
|
1104
|
+
def Header.persisted?
|
|
1105
|
+
return nil
|
|
1106
|
+
end
|
|
1107
|
+
|
|
1108
|
+
def persisted?
|
|
1109
|
+
return nil
|
|
1110
|
+
end
|
|
1111
|
+
|
|
1112
|
+
def Header.tag
|
|
1113
|
+
@@tag
|
|
1114
|
+
end
|
|
1115
|
+
|
|
1116
|
+
def Header.ns
|
|
1117
|
+
@@ns
|
|
1118
|
+
end
|
|
1119
|
+
|
|
1120
|
+
def Header.ns_tag
|
|
1121
|
+
@@ns_tag
|
|
1122
|
+
end
|
|
1123
|
+
|
|
1124
|
+
def Header.safe_name
|
|
1125
|
+
@@safe_name
|
|
1126
|
+
end
|
|
1127
|
+
|
|
1128
|
+
def Header.module_name
|
|
1129
|
+
@@module_name
|
|
1130
|
+
end
|
|
1131
|
+
|
|
1132
|
+
def tag
|
|
1133
|
+
@@tag
|
|
1134
|
+
end
|
|
1135
|
+
|
|
1136
|
+
def ns
|
|
1137
|
+
@@ns
|
|
1138
|
+
end
|
|
1139
|
+
|
|
1140
|
+
def ns_tag
|
|
1141
|
+
@@ns_tag
|
|
1142
|
+
end
|
|
1143
|
+
|
|
1144
|
+
def safe_name
|
|
1145
|
+
@@safe_name
|
|
1146
|
+
end
|
|
1147
|
+
|
|
1148
|
+
def module_name
|
|
1149
|
+
@@module_name
|
|
1150
|
+
end
|
|
1151
|
+
|
|
1152
|
+
def attributes
|
|
1153
|
+
@@attributes
|
|
1154
|
+
end
|
|
1155
|
+
|
|
1156
|
+
def substitute_in_visit(visitor)
|
|
1157
|
+
return visitor.substitute_in_visit_header(self) || self
|
|
1158
|
+
end
|
|
1159
|
+
|
|
1160
|
+
def before_visit(visitor)
|
|
1161
|
+
visitor.before_visit_header(self)
|
|
1162
|
+
end
|
|
1163
|
+
|
|
1164
|
+
def visit(visitor)
|
|
1165
|
+
visitor.visit_header(self)
|
|
1166
|
+
end
|
|
1167
|
+
|
|
1168
|
+
def after_visit(visitor)
|
|
1169
|
+
visitor.after_visit_header(self)
|
|
1170
|
+
end
|
|
1171
|
+
|
|
1172
|
+
Xampl::FromXML::register(Header::tag, Header::ns_tag, Header)
|
|
1173
|
+
end
|
|
1174
|
+
|
|
1175
|
+
class Body
|
|
1176
|
+
include Xampl::XamplObject
|
|
1177
|
+
include Xampl::XamplWithSimpleContent
|
|
1178
|
+
|
|
1179
|
+
@@tag = "body"
|
|
1180
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
1181
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}body"
|
|
1182
|
+
@@module_name = "DejaVuNS"
|
|
1183
|
+
@@safe_name = "DejaVuNS_body"
|
|
1184
|
+
@@attributes = [
|
|
1185
|
+
]
|
|
1186
|
+
|
|
1187
|
+
def initialize
|
|
1188
|
+
super
|
|
1189
|
+
|
|
1190
|
+
init_xampl_object
|
|
1191
|
+
|
|
1192
|
+
yield(self) if block_given?
|
|
1193
|
+
init_hook
|
|
1194
|
+
|
|
1195
|
+
changed
|
|
1196
|
+
end
|
|
1197
|
+
|
|
1198
|
+
def clear_non_persistent_index_attributes
|
|
1199
|
+
end
|
|
1200
|
+
|
|
1201
|
+
def append_to(other)
|
|
1202
|
+
other.add_body(self)
|
|
1203
|
+
end
|
|
1204
|
+
|
|
1205
|
+
def Body.persisted?
|
|
1206
|
+
return nil
|
|
1207
|
+
end
|
|
1208
|
+
|
|
1209
|
+
def persisted?
|
|
1210
|
+
return nil
|
|
1211
|
+
end
|
|
1212
|
+
|
|
1213
|
+
def Body.tag
|
|
1214
|
+
@@tag
|
|
1215
|
+
end
|
|
1216
|
+
|
|
1217
|
+
def Body.ns
|
|
1218
|
+
@@ns
|
|
1219
|
+
end
|
|
1220
|
+
|
|
1221
|
+
def Body.ns_tag
|
|
1222
|
+
@@ns_tag
|
|
1223
|
+
end
|
|
1224
|
+
|
|
1225
|
+
def Body.safe_name
|
|
1226
|
+
@@safe_name
|
|
1227
|
+
end
|
|
1228
|
+
|
|
1229
|
+
def Body.module_name
|
|
1230
|
+
@@module_name
|
|
1231
|
+
end
|
|
1232
|
+
|
|
1233
|
+
def tag
|
|
1234
|
+
@@tag
|
|
1235
|
+
end
|
|
1236
|
+
|
|
1237
|
+
def ns
|
|
1238
|
+
@@ns
|
|
1239
|
+
end
|
|
1240
|
+
|
|
1241
|
+
def ns_tag
|
|
1242
|
+
@@ns_tag
|
|
1243
|
+
end
|
|
1244
|
+
|
|
1245
|
+
def safe_name
|
|
1246
|
+
@@safe_name
|
|
1247
|
+
end
|
|
1248
|
+
|
|
1249
|
+
def module_name
|
|
1250
|
+
@@module_name
|
|
1251
|
+
end
|
|
1252
|
+
|
|
1253
|
+
def attributes
|
|
1254
|
+
@@attributes
|
|
1255
|
+
end
|
|
1256
|
+
|
|
1257
|
+
def substitute_in_visit(visitor)
|
|
1258
|
+
return visitor.substitute_in_visit_body(self) || self
|
|
1259
|
+
end
|
|
1260
|
+
|
|
1261
|
+
def before_visit(visitor)
|
|
1262
|
+
visitor.before_visit_body(self)
|
|
1263
|
+
end
|
|
1264
|
+
|
|
1265
|
+
def visit(visitor)
|
|
1266
|
+
visitor.visit_body(self)
|
|
1267
|
+
end
|
|
1268
|
+
|
|
1269
|
+
def after_visit(visitor)
|
|
1270
|
+
visitor.after_visit_body(self)
|
|
1271
|
+
end
|
|
1272
|
+
|
|
1273
|
+
Xampl::FromXML::register(Body::tag, Body::ns_tag, Body)
|
|
1274
|
+
end
|
|
1275
|
+
|
|
1276
|
+
class Param
|
|
1277
|
+
include Xampl::XamplObject
|
|
1278
|
+
include Xampl::XamplWithoutContent
|
|
1279
|
+
|
|
1280
|
+
@@tag = "param"
|
|
1281
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
1282
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}param"
|
|
1283
|
+
@@module_name = "DejaVuNS"
|
|
1284
|
+
@@safe_name = "DejaVuNS_param"
|
|
1285
|
+
@@attributes = [
|
|
1286
|
+
[ :@name, "name" ],
|
|
1287
|
+
[ :@value, "value" ],
|
|
1288
|
+
]
|
|
1289
|
+
|
|
1290
|
+
def name
|
|
1291
|
+
accessed
|
|
1292
|
+
@name
|
|
1293
|
+
end
|
|
1294
|
+
|
|
1295
|
+
def name=(v)
|
|
1296
|
+
accessed
|
|
1297
|
+
changed
|
|
1298
|
+
@name = v
|
|
1299
|
+
end
|
|
1300
|
+
|
|
1301
|
+
def value
|
|
1302
|
+
accessed
|
|
1303
|
+
@value
|
|
1304
|
+
end
|
|
1305
|
+
|
|
1306
|
+
def value=(v)
|
|
1307
|
+
accessed
|
|
1308
|
+
changed
|
|
1309
|
+
@value = v
|
|
1310
|
+
end
|
|
1311
|
+
|
|
1312
|
+
def initialize
|
|
1313
|
+
super
|
|
1314
|
+
|
|
1315
|
+
@name = nil if not defined? @name
|
|
1316
|
+
@value = nil if not defined? @value
|
|
1317
|
+
|
|
1318
|
+
init_xampl_object
|
|
1319
|
+
|
|
1320
|
+
yield(self) if block_given?
|
|
1321
|
+
init_hook
|
|
1322
|
+
|
|
1323
|
+
changed
|
|
1324
|
+
end
|
|
1325
|
+
|
|
1326
|
+
def clear_non_persistent_index_attributes
|
|
1327
|
+
@name = nil
|
|
1328
|
+
@value = nil
|
|
1329
|
+
end
|
|
1330
|
+
|
|
1331
|
+
def append_to(other)
|
|
1332
|
+
other.add_param(self)
|
|
1333
|
+
end
|
|
1334
|
+
|
|
1335
|
+
def Param.persisted?
|
|
1336
|
+
return nil
|
|
1337
|
+
end
|
|
1338
|
+
|
|
1339
|
+
def persisted?
|
|
1340
|
+
return nil
|
|
1341
|
+
end
|
|
1342
|
+
|
|
1343
|
+
def Param.tag
|
|
1344
|
+
@@tag
|
|
1345
|
+
end
|
|
1346
|
+
|
|
1347
|
+
def Param.ns
|
|
1348
|
+
@@ns
|
|
1349
|
+
end
|
|
1350
|
+
|
|
1351
|
+
def Param.ns_tag
|
|
1352
|
+
@@ns_tag
|
|
1353
|
+
end
|
|
1354
|
+
|
|
1355
|
+
def Param.safe_name
|
|
1356
|
+
@@safe_name
|
|
1357
|
+
end
|
|
1358
|
+
|
|
1359
|
+
def Param.module_name
|
|
1360
|
+
@@module_name
|
|
1361
|
+
end
|
|
1362
|
+
|
|
1363
|
+
def tag
|
|
1364
|
+
@@tag
|
|
1365
|
+
end
|
|
1366
|
+
|
|
1367
|
+
def ns
|
|
1368
|
+
@@ns
|
|
1369
|
+
end
|
|
1370
|
+
|
|
1371
|
+
def ns_tag
|
|
1372
|
+
@@ns_tag
|
|
1373
|
+
end
|
|
1374
|
+
|
|
1375
|
+
def safe_name
|
|
1376
|
+
@@safe_name
|
|
1377
|
+
end
|
|
1378
|
+
|
|
1379
|
+
def module_name
|
|
1380
|
+
@@module_name
|
|
1381
|
+
end
|
|
1382
|
+
|
|
1383
|
+
def attributes
|
|
1384
|
+
@@attributes
|
|
1385
|
+
end
|
|
1386
|
+
|
|
1387
|
+
def substitute_in_visit(visitor)
|
|
1388
|
+
return visitor.substitute_in_visit_param(self) || self
|
|
1389
|
+
end
|
|
1390
|
+
|
|
1391
|
+
def before_visit(visitor)
|
|
1392
|
+
visitor.before_visit_param(self)
|
|
1393
|
+
end
|
|
1394
|
+
|
|
1395
|
+
def visit(visitor)
|
|
1396
|
+
visitor.visit_param(self)
|
|
1397
|
+
end
|
|
1398
|
+
|
|
1399
|
+
def after_visit(visitor)
|
|
1400
|
+
visitor.after_visit_param(self)
|
|
1401
|
+
end
|
|
1402
|
+
|
|
1403
|
+
Xampl::FromXML::register(Param::tag, Param::ns_tag, Param)
|
|
1404
|
+
end
|
|
1405
|
+
|
|
1406
|
+
class MultipartReference
|
|
1407
|
+
include Xampl::XamplObject
|
|
1408
|
+
include Xampl::XamplWithoutContent
|
|
1409
|
+
|
|
1410
|
+
@@tag = "multipart-reference"
|
|
1411
|
+
@@ns = "http://soldierofcode.com/deja-vu"
|
|
1412
|
+
@@ns_tag = "{http://soldierofcode.com/deja-vu}multipart-reference"
|
|
1413
|
+
@@module_name = "DejaVuNS"
|
|
1414
|
+
@@safe_name = "DejaVuNS_multipart_reference"
|
|
1415
|
+
@@attributes = [
|
|
1416
|
+
[ :@name, "name" ],
|
|
1417
|
+
[ :@file_path, "file_path" ],
|
|
1418
|
+
]
|
|
1419
|
+
|
|
1420
|
+
def name
|
|
1421
|
+
accessed
|
|
1422
|
+
@name
|
|
1423
|
+
end
|
|
1424
|
+
|
|
1425
|
+
def name=(v)
|
|
1426
|
+
accessed
|
|
1427
|
+
changed
|
|
1428
|
+
@name = v
|
|
1429
|
+
end
|
|
1430
|
+
|
|
1431
|
+
def file_path
|
|
1432
|
+
accessed
|
|
1433
|
+
@file_path
|
|
1434
|
+
end
|
|
1435
|
+
|
|
1436
|
+
def file_path=(v)
|
|
1437
|
+
accessed
|
|
1438
|
+
changed
|
|
1439
|
+
@file_path = v
|
|
1440
|
+
end
|
|
1441
|
+
|
|
1442
|
+
def initialize
|
|
1443
|
+
super
|
|
1444
|
+
|
|
1445
|
+
@name = nil if not defined? @name
|
|
1446
|
+
@file_path = nil if not defined? @file_path
|
|
1447
|
+
|
|
1448
|
+
init_xampl_object
|
|
1449
|
+
|
|
1450
|
+
yield(self) if block_given?
|
|
1451
|
+
init_hook
|
|
1452
|
+
|
|
1453
|
+
changed
|
|
1454
|
+
end
|
|
1455
|
+
|
|
1456
|
+
def clear_non_persistent_index_attributes
|
|
1457
|
+
@name = nil
|
|
1458
|
+
@file_path = nil
|
|
1459
|
+
end
|
|
1460
|
+
|
|
1461
|
+
def append_to(other)
|
|
1462
|
+
other.add_multipart_reference(self)
|
|
1463
|
+
end
|
|
1464
|
+
|
|
1465
|
+
def MultipartReference.persisted?
|
|
1466
|
+
return nil
|
|
1467
|
+
end
|
|
1468
|
+
|
|
1469
|
+
def persisted?
|
|
1470
|
+
return nil
|
|
1471
|
+
end
|
|
1472
|
+
|
|
1473
|
+
def MultipartReference.tag
|
|
1474
|
+
@@tag
|
|
1475
|
+
end
|
|
1476
|
+
|
|
1477
|
+
def MultipartReference.ns
|
|
1478
|
+
@@ns
|
|
1479
|
+
end
|
|
1480
|
+
|
|
1481
|
+
def MultipartReference.ns_tag
|
|
1482
|
+
@@ns_tag
|
|
1483
|
+
end
|
|
1484
|
+
|
|
1485
|
+
def MultipartReference.safe_name
|
|
1486
|
+
@@safe_name
|
|
1487
|
+
end
|
|
1488
|
+
|
|
1489
|
+
def MultipartReference.module_name
|
|
1490
|
+
@@module_name
|
|
1491
|
+
end
|
|
1492
|
+
|
|
1493
|
+
def tag
|
|
1494
|
+
@@tag
|
|
1495
|
+
end
|
|
1496
|
+
|
|
1497
|
+
def ns
|
|
1498
|
+
@@ns
|
|
1499
|
+
end
|
|
1500
|
+
|
|
1501
|
+
def ns_tag
|
|
1502
|
+
@@ns_tag
|
|
1503
|
+
end
|
|
1504
|
+
|
|
1505
|
+
def safe_name
|
|
1506
|
+
@@safe_name
|
|
1507
|
+
end
|
|
1508
|
+
|
|
1509
|
+
def module_name
|
|
1510
|
+
@@module_name
|
|
1511
|
+
end
|
|
1512
|
+
|
|
1513
|
+
def attributes
|
|
1514
|
+
@@attributes
|
|
1515
|
+
end
|
|
1516
|
+
|
|
1517
|
+
def substitute_in_visit(visitor)
|
|
1518
|
+
return visitor.substitute_in_visit_multipart_reference(self) || self
|
|
1519
|
+
end
|
|
1520
|
+
|
|
1521
|
+
def before_visit(visitor)
|
|
1522
|
+
visitor.before_visit_multipart_reference(self)
|
|
1523
|
+
end
|
|
1524
|
+
|
|
1525
|
+
def visit(visitor)
|
|
1526
|
+
visitor.visit_multipart_reference(self)
|
|
1527
|
+
end
|
|
1528
|
+
|
|
1529
|
+
def after_visit(visitor)
|
|
1530
|
+
visitor.after_visit_multipart_reference(self)
|
|
1531
|
+
end
|
|
1532
|
+
|
|
1533
|
+
Xampl::FromXML::register(MultipartReference::tag, MultipartReference::ns_tag, MultipartReference)
|
|
1534
|
+
end
|
|
1535
|
+
|
|
1536
|
+
end
|