har 0.0.8 → 0.0.9
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/LICENSE +1 -1
- data/README.mdown +7 -2
- data/har.gemspec +2 -1
- data/lib/har.rb +3 -1
- data/lib/har/archive.rb +27 -14
- data/lib/har/extensions/jschematic/attributes/format.rb +21 -0
- data/lib/har/schemas/{browserType → browserType.json} +0 -1
- data/lib/har/schemas/{cacheEntryType → cacheEntryType.json} +0 -1
- data/lib/har/schemas/{cacheType → cacheType.json} +0 -0
- data/lib/har/schemas/{contentType → contentType.json} +0 -0
- data/lib/har/schemas/{cookieType → cookieType.json} +0 -0
- data/lib/har/schemas/{creatorType → creatorType.json} +0 -0
- data/lib/har/schemas/{entryType → entryType.json} +1 -2
- data/lib/har/schemas/{logType → logType.json} +0 -0
- data/lib/har/schemas/{pageTimingsType → pageTimingsType.json} +2 -2
- data/lib/har/schemas/{pageType → pageType.json} +0 -2
- data/lib/har/schemas/{postDataType → postDataType.json} +0 -1
- data/lib/har/schemas/{recordType → recordType.json} +0 -0
- data/lib/har/schemas/{requestType → requestType.json} +0 -0
- data/lib/har/schemas/{responseType → responseType.json} +0 -0
- data/lib/har/schemas/{timingsType → timingsType.json} +7 -7
- data/lib/har/version.rb +1 -1
- data/spec/spec_helper.rb +2 -1
- metadata +129 -123
data/LICENSE
CHANGED
data/README.mdown
CHANGED
@@ -4,8 +4,13 @@ HAR
|
|
4
4
|
Ruby library to work with and view HTTP archives.
|
5
5
|
This includes [harviewer][viewer], which can be launched through the "har" command.
|
6
6
|
|
7
|
+
Install
|
8
|
+
=======
|
9
|
+
|
10
|
+
gem install har
|
11
|
+
|
7
12
|
Usage
|
8
|
-
|
13
|
+
=====
|
9
14
|
|
10
15
|
HAR::Archive.from_string(json) #=> #<Har::Archive:0x5e7cac>
|
11
16
|
HAR::Archive.from_file(path) #=> #<Har::Archive:0x5e7cac>
|
@@ -28,6 +33,6 @@ Note on Patches/Pull Requests
|
|
28
33
|
Copyright
|
29
34
|
=========
|
30
35
|
|
31
|
-
Copyright (c) 2011 Jari Bakken. See LICENSE for details.
|
36
|
+
Copyright (c) 2011-2012 Jari Bakken. See LICENSE for details.
|
32
37
|
|
33
38
|
[viewer]: http://code.google.com/p/harviewer/
|
data/har.gemspec
CHANGED
@@ -15,12 +15,13 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rubyforge_project = "har"
|
16
16
|
|
17
17
|
s.add_dependency "json"
|
18
|
-
s.add_dependency "
|
18
|
+
s.add_dependency "jschematic", ">= 0.1.0"
|
19
19
|
s.add_dependency "launchy", ">= 0.3.7"
|
20
20
|
|
21
21
|
s.add_development_dependency "rspec", "~> 2.0"
|
22
22
|
s.add_development_dependency "simplecov"
|
23
23
|
s.add_development_dependency "rake", "~> 0.9.2"
|
24
|
+
s.add_development_dependency "pry"
|
24
25
|
|
25
26
|
s.files = `git ls-files`.split("\n")
|
26
27
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/har.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'json'
|
2
|
-
require '
|
2
|
+
require 'jschematic'
|
3
3
|
require 'time'
|
4
4
|
|
5
5
|
require 'har/error'
|
@@ -9,6 +9,8 @@ require 'har/schema_type'
|
|
9
9
|
require 'har/page'
|
10
10
|
require 'har/archive'
|
11
11
|
require 'har/viewer'
|
12
|
+
require 'har/extensions/jschematic/attributes/format'
|
13
|
+
|
12
14
|
|
13
15
|
module Enumerable
|
14
16
|
def group_by
|
data/lib/har/archive.rb
CHANGED
@@ -34,6 +34,23 @@ module HAR
|
|
34
34
|
result
|
35
35
|
end
|
36
36
|
|
37
|
+
# @api private
|
38
|
+
def self.schemas
|
39
|
+
@schemas ||= {}
|
40
|
+
end
|
41
|
+
|
42
|
+
# @api private
|
43
|
+
def self.add_schema(path)
|
44
|
+
data = JSON.parse(File.read(path))
|
45
|
+
id = data.fetch('id')
|
46
|
+
|
47
|
+
schemas[id] = data
|
48
|
+
end
|
49
|
+
|
50
|
+
Dir[File.expand_path("../schemas/*.json", __FILE__)].each do |path|
|
51
|
+
add_schema path
|
52
|
+
end
|
53
|
+
|
37
54
|
attr_reader :uri
|
38
55
|
|
39
56
|
def initialize(input, uri = nil)
|
@@ -81,26 +98,23 @@ module HAR
|
|
81
98
|
end
|
82
99
|
|
83
100
|
def valid?
|
84
|
-
|
101
|
+
Jschematic.validate @data, log_type_schema, :debug => true, :context => self.class.schemas.values
|
85
102
|
end
|
86
103
|
|
87
104
|
def validate!
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
else
|
94
|
-
raise ValidationError, ex.message
|
95
|
-
end
|
96
|
-
end
|
105
|
+
Jschematic.validate! @data, log_type_schema, :debug => true, :context => self.class.schemas.values
|
106
|
+
nil
|
107
|
+
rescue Jschematic::ValidationError => ex
|
108
|
+
msg = ex.message
|
109
|
+
msg = "#{@uri}: #{msg}" if @uri
|
97
110
|
|
98
|
-
|
111
|
+
raise ValidationError, msg
|
112
|
+
end
|
99
113
|
|
100
114
|
private
|
101
115
|
|
102
|
-
def
|
103
|
-
@
|
116
|
+
def log_type_schema
|
117
|
+
@schema ||= self.class.schemas.fetch('logType')
|
104
118
|
end
|
105
119
|
|
106
120
|
def merge_data(left, right, uri)
|
@@ -160,4 +174,3 @@ module HAR
|
|
160
174
|
|
161
175
|
end # Archive
|
162
176
|
end # HAR
|
163
|
-
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Jschematic
|
2
|
+
module Attributes
|
3
|
+
module Format
|
4
|
+
|
5
|
+
# Looks like HAR files have slightly non-compliant dates,
|
6
|
+
# so we override DateTime#accepts? to also check for that
|
7
|
+
class DateTime
|
8
|
+
alias_method :accepts_orig?, :accepts?
|
9
|
+
|
10
|
+
def accepts?(date_time)
|
11
|
+
accepts_orig?(date_time) || accepts_har_date?(date_time)
|
12
|
+
end
|
13
|
+
|
14
|
+
def accepts_har_date?(date_time)
|
15
|
+
# taken from harSchema.js
|
16
|
+
date_time =~ /^(\d{4})(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,7 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"id": "entryType",
|
3
3
|
"description": "Request and Response related info",
|
4
|
-
"optional": true,
|
5
4
|
"properties": {
|
6
5
|
"pageref": {
|
7
6
|
"type": "string"
|
@@ -14,7 +13,7 @@
|
|
14
13
|
},
|
15
14
|
"time": {
|
16
15
|
"type": "integer",
|
17
|
-
"
|
16
|
+
"minimum": 0,
|
18
17
|
"required": true
|
19
18
|
},
|
20
19
|
"request": {
|
File without changes
|
@@ -1,7 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"id": "pageType",
|
3
3
|
"description": "Exported web page",
|
4
|
-
"optional": true,
|
5
4
|
"properties": {
|
6
5
|
"startedDateTime": {
|
7
6
|
"type": "string",
|
@@ -11,7 +10,6 @@
|
|
11
10
|
},
|
12
11
|
"id": {
|
13
12
|
"type": "string",
|
14
|
-
"unique": true,
|
15
13
|
"required": true
|
16
14
|
},
|
17
15
|
"title": {
|
File without changes
|
File without changes
|
File without changes
|
@@ -4,37 +4,37 @@
|
|
4
4
|
"properties": {
|
5
5
|
"dns": {
|
6
6
|
"type": "integer",
|
7
|
-
"
|
7
|
+
"minimum": -1,
|
8
8
|
"required": true
|
9
9
|
},
|
10
10
|
"connect": {
|
11
11
|
"type": "integer",
|
12
|
-
"
|
12
|
+
"minimum": -1,
|
13
13
|
"required": true
|
14
14
|
},
|
15
15
|
"blocked": {
|
16
16
|
"type": "integer",
|
17
|
-
"
|
17
|
+
"minimum": -1,
|
18
18
|
"required": true
|
19
19
|
},
|
20
20
|
"send": {
|
21
21
|
"type": "integer",
|
22
|
-
"
|
22
|
+
"minimum": -1,
|
23
23
|
"required": true
|
24
24
|
},
|
25
25
|
"wait": {
|
26
26
|
"type": "integer",
|
27
|
-
"
|
27
|
+
"minimum": -1,
|
28
28
|
"required": true
|
29
29
|
},
|
30
30
|
"receive": {
|
31
31
|
"type": "integer",
|
32
|
-
"
|
32
|
+
"minimum": -1,
|
33
33
|
"required": true
|
34
34
|
},
|
35
35
|
"ssl": {
|
36
36
|
"type": "integer",
|
37
|
-
"
|
37
|
+
"minimum": -1
|
38
38
|
},
|
39
39
|
"comment": {
|
40
40
|
"type": "string"
|
data/lib/har/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,123 +1,136 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: har
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 8
|
10
|
-
version: 0.0.8
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Jari Bakken
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-08-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: json
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: json-schema
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: jschematic
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
38
33
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 1
|
46
|
-
- 12
|
47
|
-
version: 0.1.12
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.1.0
|
48
38
|
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: launchy
|
52
39
|
prerelease: false
|
53
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
41
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.1.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: launchy
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
63
53
|
version: 0.3.7
|
64
54
|
type: :runtime
|
65
|
-
version_requirements: *id003
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: rspec
|
68
55
|
prerelease: false
|
69
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
70
57
|
none: false
|
71
|
-
requirements:
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.3.7
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
72
67
|
- - ~>
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
segments:
|
76
|
-
- 2
|
77
|
-
- 0
|
78
|
-
version: "2.0"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.0'
|
79
70
|
type: :development
|
80
|
-
version_requirements: *id004
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: simplecov
|
83
71
|
prerelease: false
|
84
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: simplecov
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
85
81
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
|
90
|
-
segments:
|
91
|
-
- 0
|
92
|
-
version: "0"
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
93
86
|
type: :development
|
94
|
-
|
95
|
-
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
96
95
|
name: rake
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.9.2
|
102
|
+
type: :development
|
97
103
|
prerelease: false
|
98
|
-
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
105
|
none: false
|
100
|
-
requirements:
|
106
|
+
requirements:
|
101
107
|
- - ~>
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
hash: 63
|
104
|
-
segments:
|
105
|
-
- 0
|
106
|
-
- 9
|
107
|
-
- 2
|
108
|
+
- !ruby/object:Gem::Version
|
108
109
|
version: 0.9.2
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: pry
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
109
118
|
type: :development
|
110
|
-
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
111
126
|
description: Ruby library to work with HTTP archives
|
112
|
-
email:
|
127
|
+
email:
|
113
128
|
- jari.bakken@gmail.com
|
114
|
-
executables:
|
129
|
+
executables:
|
115
130
|
- har
|
116
131
|
extensions: []
|
117
|
-
|
118
132
|
extra_rdoc_files: []
|
119
|
-
|
120
|
-
files:
|
133
|
+
files:
|
121
134
|
- .gitignore
|
122
135
|
- .rspec
|
123
136
|
- .travis.yml
|
@@ -130,23 +143,24 @@ files:
|
|
130
143
|
- lib/har.rb
|
131
144
|
- lib/har/archive.rb
|
132
145
|
- lib/har/error.rb
|
146
|
+
- lib/har/extensions/jschematic/attributes/format.rb
|
133
147
|
- lib/har/page.rb
|
134
148
|
- lib/har/schema_type.rb
|
135
|
-
- lib/har/schemas/browserType
|
136
|
-
- lib/har/schemas/cacheEntryType
|
137
|
-
- lib/har/schemas/cacheType
|
138
|
-
- lib/har/schemas/contentType
|
139
|
-
- lib/har/schemas/cookieType
|
140
|
-
- lib/har/schemas/creatorType
|
141
|
-
- lib/har/schemas/entryType
|
142
|
-
- lib/har/schemas/logType
|
143
|
-
- lib/har/schemas/pageTimingsType
|
144
|
-
- lib/har/schemas/pageType
|
145
|
-
- lib/har/schemas/postDataType
|
146
|
-
- lib/har/schemas/recordType
|
147
|
-
- lib/har/schemas/requestType
|
148
|
-
- lib/har/schemas/responseType
|
149
|
-
- lib/har/schemas/timingsType
|
149
|
+
- lib/har/schemas/browserType.json
|
150
|
+
- lib/har/schemas/cacheEntryType.json
|
151
|
+
- lib/har/schemas/cacheType.json
|
152
|
+
- lib/har/schemas/contentType.json
|
153
|
+
- lib/har/schemas/cookieType.json
|
154
|
+
- lib/har/schemas/creatorType.json
|
155
|
+
- lib/har/schemas/entryType.json
|
156
|
+
- lib/har/schemas/logType.json
|
157
|
+
- lib/har/schemas/pageTimingsType.json
|
158
|
+
- lib/har/schemas/pageType.json
|
159
|
+
- lib/har/schemas/postDataType.json
|
160
|
+
- lib/har/schemas/recordType.json
|
161
|
+
- lib/har/schemas/requestType.json
|
162
|
+
- lib/har/schemas/responseType.json
|
163
|
+
- lib/har/schemas/timingsType.json
|
150
164
|
- lib/har/serializable.rb
|
151
165
|
- lib/har/version.rb
|
152
166
|
- lib/har/viewer.rb
|
@@ -274,40 +288,31 @@ files:
|
|
274
288
|
- spec/har/page_spec.rb
|
275
289
|
- spec/har/viewer_spec.rb
|
276
290
|
- spec/spec_helper.rb
|
277
|
-
homepage:
|
291
|
+
homepage: ''
|
278
292
|
licenses: []
|
279
|
-
|
280
293
|
post_install_message:
|
281
294
|
rdoc_options: []
|
282
|
-
|
283
|
-
require_paths:
|
295
|
+
require_paths:
|
284
296
|
- lib
|
285
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
297
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
286
298
|
none: false
|
287
|
-
requirements:
|
288
|
-
- -
|
289
|
-
- !ruby/object:Gem::Version
|
290
|
-
|
291
|
-
|
292
|
-
- 0
|
293
|
-
version: "0"
|
294
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
299
|
+
requirements:
|
300
|
+
- - ! '>='
|
301
|
+
- !ruby/object:Gem::Version
|
302
|
+
version: '0'
|
303
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
295
304
|
none: false
|
296
|
-
requirements:
|
297
|
-
- -
|
298
|
-
- !ruby/object:Gem::Version
|
299
|
-
|
300
|
-
segments:
|
301
|
-
- 0
|
302
|
-
version: "0"
|
305
|
+
requirements:
|
306
|
+
- - ! '>='
|
307
|
+
- !ruby/object:Gem::Version
|
308
|
+
version: '0'
|
303
309
|
requirements: []
|
304
|
-
|
305
310
|
rubyforge_project: har
|
306
|
-
rubygems_version: 1.8.
|
311
|
+
rubygems_version: 1.8.24
|
307
312
|
signing_key:
|
308
313
|
specification_version: 3
|
309
314
|
summary: Ruby library to work with HTTP archives
|
310
|
-
test_files:
|
315
|
+
test_files:
|
311
316
|
- spec/fixtures/entry1.json
|
312
317
|
- spec/fixtures/hars/bad.har
|
313
318
|
- spec/fixtures/hars/browser-blocking-time.har
|
@@ -319,3 +324,4 @@ test_files:
|
|
319
324
|
- spec/har/page_spec.rb
|
320
325
|
- spec/har/viewer_spec.rb
|
321
326
|
- spec/spec_helper.rb
|
327
|
+
has_rdoc:
|