xenon-http 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{xenon-http/lib → lib}/xenon/auth.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/errors.rb +0 -0
- data/lib/xenon/etag.rb +85 -0
- data/{xenon-http/lib → lib}/xenon/headers.rb +7 -1
- data/{xenon-http/lib → lib}/xenon/headers/accept.rb +1 -1
- data/{xenon-http/lib → lib}/xenon/headers/accept_charset.rb +1 -1
- data/{xenon-http/lib → lib}/xenon/headers/accept_encoding.rb +1 -1
- data/{xenon-http/lib → lib}/xenon/headers/accept_language.rb +1 -1
- data/{xenon-http/lib → lib}/xenon/headers/authorization.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/cache_control.rb +0 -0
- data/lib/xenon/headers/content_length.rb +23 -0
- data/{xenon-http/lib → lib}/xenon/headers/content_type.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/if_match.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/if_modified_since.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/if_none_match.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/if_range.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/if_unmodified_since.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/user_agent.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/headers/www_authenticate.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/http.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/http_version.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/media_type.rb +4 -0
- data/{xenon-http/lib → lib}/xenon/parsers/basic_rules.rb +0 -0
- data/lib/xenon/parsers/etag.rb +9 -0
- data/{xenon-http/lib → lib}/xenon/parsers/header_rules.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/parsers/media_type.rb +0 -0
- data/{xenon-http/lib → lib}/xenon/quoted_string.rb +4 -4
- data/{xenon-http/spec → spec}/spec_helper.rb +0 -0
- data/spec/xenon/etag_spec.rb +105 -0
- data/{xenon-http/spec → spec}/xenon/headers/accept_charset_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/accept_encoding_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/accept_language_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/accept_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/authorization_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/cache_control_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/if_match_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/if_modified_since_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/if_none_match_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/if_range_spec.rb +1 -1
- data/{xenon-http/spec → spec}/xenon/headers/if_unmodified_since_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/user_agent_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/headers/www_authenticate_spec.rb +0 -0
- data/{xenon-http/spec → spec}/xenon/media_type_spec.rb +1 -1
- data/{xenon-http/xenon-http.gemspec → xenon-http.gemspec} +2 -2
- metadata +50 -93
- data/.codeclimate.yml +0 -18
- data/.gitignore +0 -25
- data/.rspec +0 -3
- data/.travis.yml +0 -6
- data/Gemfile +0 -20
- data/Guardfile +0 -16
- data/LICENSE +0 -22
- data/README.md +0 -116
- data/Rakefile +0 -40
- data/VERSION +0 -1
- data/examples/hello_world/config.ru +0 -3
- data/examples/hello_world/hello_world.rb +0 -27
- data/xenon-http/lib/xenon/etag.rb +0 -48
- data/xenon-http/spec/xenon/etag_spec.rb +0 -19
- data/xenon-routing/lib/xenon/api.rb +0 -118
- data/xenon-routing/lib/xenon/marshallers.rb +0 -48
- data/xenon-routing/lib/xenon/request.rb +0 -40
- data/xenon-routing/lib/xenon/response.rb +0 -29
- data/xenon-routing/lib/xenon/routing.rb +0 -6
- data/xenon-routing/lib/xenon/routing/context.rb +0 -35
- data/xenon-routing/lib/xenon/routing/directives.rb +0 -14
- data/xenon-routing/lib/xenon/routing/header_directives.rb +0 -32
- data/xenon-routing/lib/xenon/routing/method_directives.rb +0 -26
- data/xenon-routing/lib/xenon/routing/param_directives.rb +0 -22
- data/xenon-routing/lib/xenon/routing/path_directives.rb +0 -37
- data/xenon-routing/lib/xenon/routing/route_directives.rb +0 -51
- data/xenon-routing/lib/xenon/routing/security_directives.rb +0 -34
- data/xenon-routing/lib/xenon/routing_version.rb +0 -3
- data/xenon-routing/spec/spec_helper.rb +0 -94
- data/xenon-routing/xenon-routing.gemspec +0 -25
- data/xenon.gemspec +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f749f567c0d040df9e40e2956abe02d628652ab
|
4
|
+
data.tar.gz: cf94e0a40a8480f6a05d9af9847f7e30073cc6aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ebb97d34011c1ed89471d45d4cca9f6911758092458c8207b0810e5f0947ce13dce825a9e3b5c472fae01445093b19d97edab3e0a7984afb586025de4596cf13
|
7
|
+
data.tar.gz: 2ddd75cc5b4a291df18a9406a28ed3da9847bd1131708d474c1af8bb6247d6fa1eb2f799653e906bb42d22b1b7ffa7451251d79e6783c063b4b7b090b9df4520
|
File without changes
|
File without changes
|
data/lib/xenon/etag.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'xenon/parsers/etag'
|
2
|
+
|
3
|
+
module Xenon
|
4
|
+
# An Etag, see {http://tools.ietf.org/html/rfc7232#section-2.3 RFC 7232 § 2.3}.
|
5
|
+
class ETag
|
6
|
+
attr_reader :tag
|
7
|
+
|
8
|
+
# Initializes a new ETag instance.
|
9
|
+
# @param tag [String] The opaque tag.
|
10
|
+
# @param weak [true, false] Whether the tag is weak.
|
11
|
+
def initialize(tag, weak: false)
|
12
|
+
@tag = tag
|
13
|
+
@weak = weak
|
14
|
+
freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
# Prevents further modifications to the ETag.
|
18
|
+
# @return [ETag] This method returns self.
|
19
|
+
def freeze
|
20
|
+
@tag.freeze
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
# Parses an ETag string.
|
25
|
+
# @param s [String] The ETag string.
|
26
|
+
# @return [ETag] An `ETag` object.
|
27
|
+
def self.parse(s)
|
28
|
+
tree = Parsers::ETag.new.etag.parse(s)
|
29
|
+
Parsers::ETagHeaderTransform.new.apply(tree)
|
30
|
+
rescue Parslet::ParseFailed
|
31
|
+
raise Xenon::ParseError.new("Invalid ETag (#{s}).")
|
32
|
+
end
|
33
|
+
|
34
|
+
# Whether the ETag is weak.
|
35
|
+
# @return [true, false] `true` if the ETag is weak; otherwise `false`.
|
36
|
+
def weak?
|
37
|
+
@weak
|
38
|
+
end
|
39
|
+
|
40
|
+
# Whether the ETag is strong.
|
41
|
+
# @return [true, false] `true` if the ETag is strong; otherwise `false`.
|
42
|
+
def strong?
|
43
|
+
!weak?
|
44
|
+
end
|
45
|
+
|
46
|
+
# The strong equality function, see {http://tools.ietf.org/html/rfc7232#section-2.3.2 RFC 7232 § 2.3.2}.
|
47
|
+
# @return [true, false] `true` if the ETags are both strong and have the same tag; otherwise `false`.
|
48
|
+
def strong_eq?(other)
|
49
|
+
strong? && other.strong? && @tag == other.tag
|
50
|
+
end
|
51
|
+
|
52
|
+
# The weak equality function, see {http://tools.ietf.org/html/rfc7232#section-2.3.2 RFC 7232 § 2.3.2}.
|
53
|
+
# @return [true, false] `true` if the ETags have the same tag; otherwise `false`.
|
54
|
+
def weak_eq?(other)
|
55
|
+
@tag == other.tag
|
56
|
+
end
|
57
|
+
|
58
|
+
# An equality function that checks the ETags have the same strength and tag.
|
59
|
+
# @return [true, false] `true` if the ETags have the same strength and tag; otherwise `false`.
|
60
|
+
def ==(other)
|
61
|
+
strong? == other.strong? && @tag == other.tag
|
62
|
+
end
|
63
|
+
alias_method :eql?, :==
|
64
|
+
|
65
|
+
# A case equality function that uses {strong_eq?} or {weak_eq?} depending on whether the receiving
|
66
|
+
# tag is strong or weak, respectively.
|
67
|
+
# @return [true, false] `true` if the other ETag matches; otherwise `false`.
|
68
|
+
def ===(other)
|
69
|
+
strong? ? strong_eq?(other) : weak_eq?(other)
|
70
|
+
end
|
71
|
+
alias_method :=~, :===
|
72
|
+
|
73
|
+
# Returns a hash code based on the ETag state.
|
74
|
+
# @return [Fixnum] The ETag hash.
|
75
|
+
def hash
|
76
|
+
to_s.hash
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns a string representation of the ETag.
|
80
|
+
# @return [String] The ETag string.
|
81
|
+
def to_s
|
82
|
+
strong? ? %("#{@tag}") : %(W/"#{@tag}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -41,7 +41,13 @@ module Xenon
|
|
41
41
|
self
|
42
42
|
end
|
43
43
|
|
44
|
-
|
44
|
+
def remove!(header)
|
45
|
+
header = header.name if header.respond_to?(:name)
|
46
|
+
@hash.delete(header)
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
%i(set add remove).each do |name|
|
45
51
|
define_method name do |header|
|
46
52
|
dup.send("#{name}!", header)
|
47
53
|
end
|
@@ -7,7 +7,7 @@ module Xenon
|
|
7
7
|
# http://tools.ietf.org/html/rfc7231#section-5.3.2
|
8
8
|
class Accept < ListHeader 'Accept'
|
9
9
|
def initialize(*media_ranges)
|
10
|
-
super(media_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse
|
10
|
+
super(media_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse)
|
11
11
|
end
|
12
12
|
|
13
13
|
alias_method :media_ranges, :values
|
@@ -27,7 +27,7 @@ module Xenon
|
|
27
27
|
# http://tools.ietf.org/html/rfc7231#section-5.3.3
|
28
28
|
class AcceptCharset < ListHeader 'Accept-Charset'
|
29
29
|
def initialize(*charset_ranges)
|
30
|
-
super(charset_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse
|
30
|
+
super(charset_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse)
|
31
31
|
end
|
32
32
|
|
33
33
|
alias_method :charset_ranges, :values
|
@@ -27,7 +27,7 @@ module Xenon
|
|
27
27
|
# http://tools.ietf.org/html/rfc7231#section-5.3.4
|
28
28
|
class AcceptEncoding < ListHeader 'Accept-Encoding'
|
29
29
|
def initialize(*coding_ranges)
|
30
|
-
super(coding_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse
|
30
|
+
super(coding_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse)
|
31
31
|
end
|
32
32
|
|
33
33
|
alias_method :coding_ranges, :values
|
@@ -27,7 +27,7 @@ module Xenon
|
|
27
27
|
# http://tools.ietf.org/html/rfc7231#section-5.3.5
|
28
28
|
class AcceptLanguage < ListHeader 'Accept-Language'
|
29
29
|
def initialize(*language_ranges)
|
30
|
-
super(language_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse
|
30
|
+
super(language_ranges.sort_by.with_index { |mr, i| [mr, -i] }.reverse)
|
31
31
|
end
|
32
32
|
|
33
33
|
alias_method :language_ranges, :values
|
File without changes
|
File without changes
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'xenon/headers'
|
2
|
+
require 'xenon/media_type'
|
3
|
+
|
4
|
+
module Xenon
|
5
|
+
class Headers
|
6
|
+
# https://tools.ietf.org/html/rfc7230#section-3.3.2
|
7
|
+
class ContentLength < Header 'Content-Length'
|
8
|
+
attr_reader :content_length
|
9
|
+
|
10
|
+
def initialize(content_length)
|
11
|
+
@content_length = content_length
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.parse(s)
|
15
|
+
Integer(s)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
@content_length.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -56,6 +56,10 @@ module Xenon
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
def ==(other)
|
60
|
+
@type == other.type && @subtype == other.subtype && @params == other.params
|
61
|
+
end
|
62
|
+
|
59
63
|
# Creates a {MediaRange} using this media type with a quality factor.
|
60
64
|
#
|
61
65
|
# @param q [Numeric] A value between 1.0 (most desirable) and 0.0 (not acceptable).
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,13 +7,13 @@ module Xenon
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def unquote
|
10
|
-
|
11
|
-
|
10
|
+
qs = start_with?('"') && end_with?('"') ? self[1..-2] : self
|
11
|
+
qs.gsub(/\\(.)/, '\1')
|
12
12
|
end
|
13
13
|
|
14
14
|
def uncomment
|
15
|
-
|
16
|
-
|
15
|
+
qs = start_with?('(') && end_with?(')') ? self[1..-2] : self
|
16
|
+
qs.gsub(/\\(.)/, '\1')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
File without changes
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'xenon/etag'
|
2
|
+
require 'xenon/errors'
|
3
|
+
|
4
|
+
describe Xenon::ETag do
|
5
|
+
let(:strong1) { described_class.new('1') }
|
6
|
+
let(:weak1) { described_class.new('1', weak: true) }
|
7
|
+
let(:weak2) { described_class.new('2', weak: true) }
|
8
|
+
|
9
|
+
describe '::parse' do
|
10
|
+
it 'should parse a strong etag' do
|
11
|
+
etag = described_class.parse('"xyzzy"')
|
12
|
+
expect(etag.tag).to eq 'xyzzy'
|
13
|
+
expect(etag).to be_strong
|
14
|
+
end
|
15
|
+
it 'should parse a weak etag' do
|
16
|
+
etag = described_class.parse('W/"xyzzy"')
|
17
|
+
expect(etag.tag).to eq 'xyzzy'
|
18
|
+
expect(etag).to be_weak
|
19
|
+
end
|
20
|
+
it 'should raise a ParseError when the string is not a valid etag' do
|
21
|
+
expect { described_class.parse('xyzzy') }.to raise_error Xenon::ParseError
|
22
|
+
expect { described_class.parse('W/xyzzy') }.to raise_error Xenon::ParseError
|
23
|
+
expect { described_class.parse('w/"xyzzy"') }.to raise_error Xenon::ParseError
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#initialize' do
|
28
|
+
it 'should freeze the instance' do
|
29
|
+
expect(strong1).to be_frozen
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#freeze' do
|
34
|
+
it 'should freeze the tag' do
|
35
|
+
expect { strong1.tag << 'x' }.to raise_error RuntimeError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#strong_eq?' do
|
40
|
+
it 'should return false for the same weak tags' do
|
41
|
+
expect(weak1).to_not be_strong_eq weak1
|
42
|
+
end
|
43
|
+
it 'should return false for the different weak tags' do
|
44
|
+
expect(weak1).to_not be_strong_eq weak2
|
45
|
+
end
|
46
|
+
it 'should return false for tags that are same but one is weak and one is strong' do
|
47
|
+
expect(weak1).to_not be_strong_eq strong1
|
48
|
+
expect(strong1).to_not be_strong_eq weak1
|
49
|
+
end
|
50
|
+
it 'should return true for the same strong tags' do
|
51
|
+
expect(strong1).to be_strong_eq strong1
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#weak_eq?' do
|
56
|
+
it 'should return true for the same weak tags' do
|
57
|
+
expect(weak1).to be_weak_eq weak1
|
58
|
+
end
|
59
|
+
it 'should return false for the different weak tags' do
|
60
|
+
expect(weak1).to_not be_weak_eq weak2
|
61
|
+
end
|
62
|
+
it 'should return true for tags that are same but one is weak and one is strong' do
|
63
|
+
expect(weak1).to be_weak_eq strong1
|
64
|
+
expect(strong1).to be_weak_eq weak1
|
65
|
+
end
|
66
|
+
it 'should return true for the same strong tags' do
|
67
|
+
expect(strong1).to be_weak_eq strong1
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '#==' do
|
72
|
+
it 'should return true for the same weak tags' do
|
73
|
+
expect(weak1).to be == weak1
|
74
|
+
end
|
75
|
+
it 'should return false for the different weak tags' do
|
76
|
+
expect(weak1).to_not be == weak2
|
77
|
+
end
|
78
|
+
it 'should return false for tags that are same but one is weak and one is strong' do
|
79
|
+
expect(weak1).to_not be == strong1
|
80
|
+
expect(strong1).to_not be == weak1
|
81
|
+
end
|
82
|
+
it 'should return true for the same strong tags' do
|
83
|
+
expect(strong1).to be == strong1
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe '#===' do
|
88
|
+
it 'should return true for the same weak tags' do
|
89
|
+
expect(weak1).to be === weak1
|
90
|
+
end
|
91
|
+
it 'should return false for the different weak tags' do
|
92
|
+
expect(weak1).to_not be === weak2
|
93
|
+
end
|
94
|
+
it 'should return true for the same tags when the receiver is weak and the other is strong' do
|
95
|
+
expect(weak1).to be === strong1
|
96
|
+
end
|
97
|
+
it 'should return false for the same tags when the receiver is strong and the other is weak' do
|
98
|
+
expect(strong1).to_not be === weak1
|
99
|
+
end
|
100
|
+
it 'should return true for the same strong tags' do
|
101
|
+
expect(strong1).to be === strong1
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -21,7 +21,7 @@ describe Xenon::Headers::IfRange do
|
|
21
21
|
it 'can parse a strong etag' do
|
22
22
|
header = Xenon::Headers::IfRange.parse('"xyzzy"')
|
23
23
|
expect(header.etag).to_not be_nil
|
24
|
-
expect(header.etag.
|
24
|
+
expect(header.etag.tag).to eq 'xyzzy'
|
25
25
|
expect(header.etag).to be_strong
|
26
26
|
end
|
27
27
|
|
File without changes
|
File without changes
|
File without changes
|
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Xenon::HTTP_VERSION
|
9
9
|
spec.authors = ['Greg Beech']
|
10
10
|
spec.email = ['greg@gregbeech.com']
|
11
|
-
spec.summary = %q{
|
12
|
-
spec.description = %q{Provides a model for the HTTP protocol
|
11
|
+
spec.summary = %q{A model and parsers for the HTTP protocol.}
|
12
|
+
spec.description = %q{Provides a model for the HTTP protocol with high quality parsers.}
|
13
13
|
spec.homepage = 'https://github.com/gregbeech/xenon'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xenon-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Greg Beech
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -38,84 +38,57 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.7'
|
41
|
-
description: Provides a model for the HTTP protocol
|
41
|
+
description: Provides a model for the HTTP protocol with high quality parsers.
|
42
42
|
email:
|
43
43
|
- greg@gregbeech.com
|
44
44
|
executables: []
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
-
|
56
|
-
-
|
57
|
-
-
|
58
|
-
-
|
59
|
-
-
|
60
|
-
-
|
61
|
-
-
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
78
|
-
- xenon
|
79
|
-
- xenon
|
80
|
-
- xenon
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
- xenon
|
85
|
-
- xenon
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
-
|
91
|
-
- xenon-http
|
92
|
-
- xenon-http/spec/xenon/headers/cache_control_spec.rb
|
93
|
-
- xenon-http/spec/xenon/headers/if_match_spec.rb
|
94
|
-
- xenon-http/spec/xenon/headers/if_modified_since_spec.rb
|
95
|
-
- xenon-http/spec/xenon/headers/if_none_match_spec.rb
|
96
|
-
- xenon-http/spec/xenon/headers/if_range_spec.rb
|
97
|
-
- xenon-http/spec/xenon/headers/if_unmodified_since_spec.rb
|
98
|
-
- xenon-http/spec/xenon/headers/user_agent_spec.rb
|
99
|
-
- xenon-http/spec/xenon/headers/www_authenticate_spec.rb
|
100
|
-
- xenon-http/spec/xenon/media_type_spec.rb
|
101
|
-
- xenon-http/xenon-http.gemspec
|
102
|
-
- xenon-routing/lib/xenon/api.rb
|
103
|
-
- xenon-routing/lib/xenon/marshallers.rb
|
104
|
-
- xenon-routing/lib/xenon/request.rb
|
105
|
-
- xenon-routing/lib/xenon/response.rb
|
106
|
-
- xenon-routing/lib/xenon/routing.rb
|
107
|
-
- xenon-routing/lib/xenon/routing/context.rb
|
108
|
-
- xenon-routing/lib/xenon/routing/directives.rb
|
109
|
-
- xenon-routing/lib/xenon/routing/header_directives.rb
|
110
|
-
- xenon-routing/lib/xenon/routing/method_directives.rb
|
111
|
-
- xenon-routing/lib/xenon/routing/param_directives.rb
|
112
|
-
- xenon-routing/lib/xenon/routing/path_directives.rb
|
113
|
-
- xenon-routing/lib/xenon/routing/route_directives.rb
|
114
|
-
- xenon-routing/lib/xenon/routing/security_directives.rb
|
115
|
-
- xenon-routing/lib/xenon/routing_version.rb
|
116
|
-
- xenon-routing/spec/spec_helper.rb
|
117
|
-
- xenon-routing/xenon-routing.gemspec
|
118
|
-
- xenon.gemspec
|
48
|
+
- lib/xenon/auth.rb
|
49
|
+
- lib/xenon/errors.rb
|
50
|
+
- lib/xenon/etag.rb
|
51
|
+
- lib/xenon/headers.rb
|
52
|
+
- lib/xenon/headers/accept.rb
|
53
|
+
- lib/xenon/headers/accept_charset.rb
|
54
|
+
- lib/xenon/headers/accept_encoding.rb
|
55
|
+
- lib/xenon/headers/accept_language.rb
|
56
|
+
- lib/xenon/headers/authorization.rb
|
57
|
+
- lib/xenon/headers/cache_control.rb
|
58
|
+
- lib/xenon/headers/content_length.rb
|
59
|
+
- lib/xenon/headers/content_type.rb
|
60
|
+
- lib/xenon/headers/if_match.rb
|
61
|
+
- lib/xenon/headers/if_modified_since.rb
|
62
|
+
- lib/xenon/headers/if_none_match.rb
|
63
|
+
- lib/xenon/headers/if_range.rb
|
64
|
+
- lib/xenon/headers/if_unmodified_since.rb
|
65
|
+
- lib/xenon/headers/user_agent.rb
|
66
|
+
- lib/xenon/headers/www_authenticate.rb
|
67
|
+
- lib/xenon/http.rb
|
68
|
+
- lib/xenon/http_version.rb
|
69
|
+
- lib/xenon/media_type.rb
|
70
|
+
- lib/xenon/parsers/basic_rules.rb
|
71
|
+
- lib/xenon/parsers/etag.rb
|
72
|
+
- lib/xenon/parsers/header_rules.rb
|
73
|
+
- lib/xenon/parsers/media_type.rb
|
74
|
+
- lib/xenon/quoted_string.rb
|
75
|
+
- spec/spec_helper.rb
|
76
|
+
- spec/xenon/etag_spec.rb
|
77
|
+
- spec/xenon/headers/accept_charset_spec.rb
|
78
|
+
- spec/xenon/headers/accept_encoding_spec.rb
|
79
|
+
- spec/xenon/headers/accept_language_spec.rb
|
80
|
+
- spec/xenon/headers/accept_spec.rb
|
81
|
+
- spec/xenon/headers/authorization_spec.rb
|
82
|
+
- spec/xenon/headers/cache_control_spec.rb
|
83
|
+
- spec/xenon/headers/if_match_spec.rb
|
84
|
+
- spec/xenon/headers/if_modified_since_spec.rb
|
85
|
+
- spec/xenon/headers/if_none_match_spec.rb
|
86
|
+
- spec/xenon/headers/if_range_spec.rb
|
87
|
+
- spec/xenon/headers/if_unmodified_since_spec.rb
|
88
|
+
- spec/xenon/headers/user_agent_spec.rb
|
89
|
+
- spec/xenon/headers/www_authenticate_spec.rb
|
90
|
+
- spec/xenon/media_type_spec.rb
|
91
|
+
- xenon-http.gemspec
|
119
92
|
homepage: https://github.com/gregbeech/xenon
|
120
93
|
licenses:
|
121
94
|
- MIT
|
@@ -136,25 +109,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
109
|
version: '0'
|
137
110
|
requirements: []
|
138
111
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
112
|
+
rubygems_version: 2.5.1
|
140
113
|
signing_key:
|
141
114
|
specification_version: 4
|
142
|
-
summary:
|
143
|
-
test_files:
|
144
|
-
- xenon-http/spec/spec_helper.rb
|
145
|
-
- xenon-http/spec/xenon/etag_spec.rb
|
146
|
-
- xenon-http/spec/xenon/headers/accept_charset_spec.rb
|
147
|
-
- xenon-http/spec/xenon/headers/accept_encoding_spec.rb
|
148
|
-
- xenon-http/spec/xenon/headers/accept_language_spec.rb
|
149
|
-
- xenon-http/spec/xenon/headers/accept_spec.rb
|
150
|
-
- xenon-http/spec/xenon/headers/authorization_spec.rb
|
151
|
-
- xenon-http/spec/xenon/headers/cache_control_spec.rb
|
152
|
-
- xenon-http/spec/xenon/headers/if_match_spec.rb
|
153
|
-
- xenon-http/spec/xenon/headers/if_modified_since_spec.rb
|
154
|
-
- xenon-http/spec/xenon/headers/if_none_match_spec.rb
|
155
|
-
- xenon-http/spec/xenon/headers/if_range_spec.rb
|
156
|
-
- xenon-http/spec/xenon/headers/if_unmodified_since_spec.rb
|
157
|
-
- xenon-http/spec/xenon/headers/user_agent_spec.rb
|
158
|
-
- xenon-http/spec/xenon/headers/www_authenticate_spec.rb
|
159
|
-
- xenon-http/spec/xenon/media_type_spec.rb
|
115
|
+
summary: A model and parsers for the HTTP protocol.
|
116
|
+
test_files: []
|
160
117
|
has_rdoc:
|