xenon-http 0.0.4 → 0.0.5

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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/{xenon-http/lib → lib}/xenon/auth.rb +0 -0
  3. data/{xenon-http/lib → lib}/xenon/errors.rb +0 -0
  4. data/lib/xenon/etag.rb +85 -0
  5. data/{xenon-http/lib → lib}/xenon/headers.rb +7 -1
  6. data/{xenon-http/lib → lib}/xenon/headers/accept.rb +1 -1
  7. data/{xenon-http/lib → lib}/xenon/headers/accept_charset.rb +1 -1
  8. data/{xenon-http/lib → lib}/xenon/headers/accept_encoding.rb +1 -1
  9. data/{xenon-http/lib → lib}/xenon/headers/accept_language.rb +1 -1
  10. data/{xenon-http/lib → lib}/xenon/headers/authorization.rb +0 -0
  11. data/{xenon-http/lib → lib}/xenon/headers/cache_control.rb +0 -0
  12. data/lib/xenon/headers/content_length.rb +23 -0
  13. data/{xenon-http/lib → lib}/xenon/headers/content_type.rb +0 -0
  14. data/{xenon-http/lib → lib}/xenon/headers/if_match.rb +0 -0
  15. data/{xenon-http/lib → lib}/xenon/headers/if_modified_since.rb +0 -0
  16. data/{xenon-http/lib → lib}/xenon/headers/if_none_match.rb +0 -0
  17. data/{xenon-http/lib → lib}/xenon/headers/if_range.rb +0 -0
  18. data/{xenon-http/lib → lib}/xenon/headers/if_unmodified_since.rb +0 -0
  19. data/{xenon-http/lib → lib}/xenon/headers/user_agent.rb +0 -0
  20. data/{xenon-http/lib → lib}/xenon/headers/www_authenticate.rb +0 -0
  21. data/{xenon-http/lib → lib}/xenon/http.rb +0 -0
  22. data/{xenon-http/lib → lib}/xenon/http_version.rb +0 -0
  23. data/{xenon-http/lib → lib}/xenon/media_type.rb +4 -0
  24. data/{xenon-http/lib → lib}/xenon/parsers/basic_rules.rb +0 -0
  25. data/lib/xenon/parsers/etag.rb +9 -0
  26. data/{xenon-http/lib → lib}/xenon/parsers/header_rules.rb +0 -0
  27. data/{xenon-http/lib → lib}/xenon/parsers/media_type.rb +0 -0
  28. data/{xenon-http/lib → lib}/xenon/quoted_string.rb +4 -4
  29. data/{xenon-http/spec → spec}/spec_helper.rb +0 -0
  30. data/spec/xenon/etag_spec.rb +105 -0
  31. data/{xenon-http/spec → spec}/xenon/headers/accept_charset_spec.rb +0 -0
  32. data/{xenon-http/spec → spec}/xenon/headers/accept_encoding_spec.rb +0 -0
  33. data/{xenon-http/spec → spec}/xenon/headers/accept_language_spec.rb +0 -0
  34. data/{xenon-http/spec → spec}/xenon/headers/accept_spec.rb +0 -0
  35. data/{xenon-http/spec → spec}/xenon/headers/authorization_spec.rb +0 -0
  36. data/{xenon-http/spec → spec}/xenon/headers/cache_control_spec.rb +0 -0
  37. data/{xenon-http/spec → spec}/xenon/headers/if_match_spec.rb +0 -0
  38. data/{xenon-http/spec → spec}/xenon/headers/if_modified_since_spec.rb +0 -0
  39. data/{xenon-http/spec → spec}/xenon/headers/if_none_match_spec.rb +0 -0
  40. data/{xenon-http/spec → spec}/xenon/headers/if_range_spec.rb +1 -1
  41. data/{xenon-http/spec → spec}/xenon/headers/if_unmodified_since_spec.rb +0 -0
  42. data/{xenon-http/spec → spec}/xenon/headers/user_agent_spec.rb +0 -0
  43. data/{xenon-http/spec → spec}/xenon/headers/www_authenticate_spec.rb +0 -0
  44. data/{xenon-http/spec → spec}/xenon/media_type_spec.rb +1 -1
  45. data/{xenon-http/xenon-http.gemspec → xenon-http.gemspec} +2 -2
  46. metadata +50 -93
  47. data/.codeclimate.yml +0 -18
  48. data/.gitignore +0 -25
  49. data/.rspec +0 -3
  50. data/.travis.yml +0 -6
  51. data/Gemfile +0 -20
  52. data/Guardfile +0 -16
  53. data/LICENSE +0 -22
  54. data/README.md +0 -116
  55. data/Rakefile +0 -40
  56. data/VERSION +0 -1
  57. data/examples/hello_world/config.ru +0 -3
  58. data/examples/hello_world/hello_world.rb +0 -27
  59. data/xenon-http/lib/xenon/etag.rb +0 -48
  60. data/xenon-http/spec/xenon/etag_spec.rb +0 -19
  61. data/xenon-routing/lib/xenon/api.rb +0 -118
  62. data/xenon-routing/lib/xenon/marshallers.rb +0 -48
  63. data/xenon-routing/lib/xenon/request.rb +0 -40
  64. data/xenon-routing/lib/xenon/response.rb +0 -29
  65. data/xenon-routing/lib/xenon/routing.rb +0 -6
  66. data/xenon-routing/lib/xenon/routing/context.rb +0 -35
  67. data/xenon-routing/lib/xenon/routing/directives.rb +0 -14
  68. data/xenon-routing/lib/xenon/routing/header_directives.rb +0 -32
  69. data/xenon-routing/lib/xenon/routing/method_directives.rb +0 -26
  70. data/xenon-routing/lib/xenon/routing/param_directives.rb +0 -22
  71. data/xenon-routing/lib/xenon/routing/path_directives.rb +0 -37
  72. data/xenon-routing/lib/xenon/routing/route_directives.rb +0 -51
  73. data/xenon-routing/lib/xenon/routing/security_directives.rb +0 -34
  74. data/xenon-routing/lib/xenon/routing_version.rb +0 -3
  75. data/xenon-routing/spec/spec_helper.rb +0 -94
  76. data/xenon-routing/xenon-routing.gemspec +0 -25
  77. data/xenon.gemspec +0 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0b08a0d571aa3a84a8d8e265ac6367faa2a77a2
4
- data.tar.gz: a4cb57cf66389dcc581c1af178afaf093ce4e4e7
3
+ metadata.gz: 8f749f567c0d040df9e40e2956abe02d628652ab
4
+ data.tar.gz: cf94e0a40a8480f6a05d9af9847f7e30073cc6aa
5
5
  SHA512:
6
- metadata.gz: b6051d24573e349c0cb707086a1317bd85fe70cab9a1c6b56f96f4f7492bdd3f9dce61d199a9425a4f72ea108c3f0c1bbef6d36f139cf1d869ddc096f65f80db
7
- data.tar.gz: 3978873c62fa30babe95b6ff9a75eb56bcdeec03f0bd083bed81244622647ebfeaa27f470e5bce57caf1a9a4b8505b7179f60712345223568cd14ea4ec511cd8
6
+ metadata.gz: ebb97d34011c1ed89471d45d4cca9f6911758092458c8207b0810e5f0947ce13dce825a9e3b5c472fae01445093b19d97edab3e0a7984afb586025de4596cf13
7
+ data.tar.gz: 2ddd75cc5b4a291df18a9406a28ed3da9847bd1131708d474c1af8bb6247d6fa1eb2f799653e906bb42d22b1b7ffa7451251d79e6783c063b4b7b090b9df4520
File without changes
File without changes
@@ -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
- %i(set add).each do |name|
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
@@ -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
@@ -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).
@@ -0,0 +1,9 @@
1
+ require 'xenon/parsers/header_rules'
2
+
3
+ module Xenon
4
+ module Parsers
5
+ class ETag < Parslet::Parser
6
+ include ETagHeaderRules
7
+ end
8
+ end
9
+ end
@@ -7,13 +7,13 @@ module Xenon
7
7
  end
8
8
 
9
9
  def unquote
10
- qs = start_with?('"') && end_with?('"') ? self[1..-2] : self
11
- qs.gsub(/\\(.)/, '\1')
10
+ qs = start_with?('"') && end_with?('"') ? self[1..-2] : self
11
+ qs.gsub(/\\(.)/, '\1')
12
12
  end
13
13
 
14
14
  def uncomment
15
- qs = start_with?('(') && end_with?(')') ? self[1..-2] : self
16
- qs.gsub(/\\(.)/, '\1')
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
@@ -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.opaque_tag).to eq 'xyzzy'
24
+ expect(header.etag.tag).to eq 'xyzzy'
25
25
  expect(header.etag).to be_strong
26
26
  end
27
27
 
@@ -94,7 +94,7 @@ describe Xenon::MediaType do
94
94
  expect(mt.to_s).to eq('text/plain; format=flowed; paged')
95
95
  end
96
96
  end
97
-
97
+
98
98
  end
99
99
 
100
100
  describe Xenon::MediaRange do
@@ -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{An HTTP framework for building RESTful APIs.}
12
- spec.description = %q{Provides a model for the HTTP protocol and a tree-based routing syntax.}
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
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: 2015-10-17 00:00:00.000000000 Z
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 and a tree-based routing syntax.
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
- - ".codeclimate.yml"
49
- - ".gitignore"
50
- - ".rspec"
51
- - ".travis.yml"
52
- - Gemfile
53
- - Guardfile
54
- - LICENSE
55
- - README.md
56
- - Rakefile
57
- - VERSION
58
- - examples/hello_world/config.ru
59
- - examples/hello_world/hello_world.rb
60
- - xenon-http/lib/xenon/auth.rb
61
- - xenon-http/lib/xenon/errors.rb
62
- - xenon-http/lib/xenon/etag.rb
63
- - xenon-http/lib/xenon/headers.rb
64
- - xenon-http/lib/xenon/headers/accept.rb
65
- - xenon-http/lib/xenon/headers/accept_charset.rb
66
- - xenon-http/lib/xenon/headers/accept_encoding.rb
67
- - xenon-http/lib/xenon/headers/accept_language.rb
68
- - xenon-http/lib/xenon/headers/authorization.rb
69
- - xenon-http/lib/xenon/headers/cache_control.rb
70
- - xenon-http/lib/xenon/headers/content_type.rb
71
- - xenon-http/lib/xenon/headers/if_match.rb
72
- - xenon-http/lib/xenon/headers/if_modified_since.rb
73
- - xenon-http/lib/xenon/headers/if_none_match.rb
74
- - xenon-http/lib/xenon/headers/if_range.rb
75
- - xenon-http/lib/xenon/headers/if_unmodified_since.rb
76
- - xenon-http/lib/xenon/headers/user_agent.rb
77
- - xenon-http/lib/xenon/headers/www_authenticate.rb
78
- - xenon-http/lib/xenon/http.rb
79
- - xenon-http/lib/xenon/http_version.rb
80
- - xenon-http/lib/xenon/media_type.rb
81
- - xenon-http/lib/xenon/parsers/basic_rules.rb
82
- - xenon-http/lib/xenon/parsers/header_rules.rb
83
- - xenon-http/lib/xenon/parsers/media_type.rb
84
- - xenon-http/lib/xenon/quoted_string.rb
85
- - xenon-http/spec/spec_helper.rb
86
- - xenon-http/spec/xenon/etag_spec.rb
87
- - xenon-http/spec/xenon/headers/accept_charset_spec.rb
88
- - xenon-http/spec/xenon/headers/accept_encoding_spec.rb
89
- - xenon-http/spec/xenon/headers/accept_language_spec.rb
90
- - xenon-http/spec/xenon/headers/accept_spec.rb
91
- - xenon-http/spec/xenon/headers/authorization_spec.rb
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.4.8
112
+ rubygems_version: 2.5.1
140
113
  signing_key:
141
114
  specification_version: 4
142
- summary: An HTTP framework for building RESTful APIs.
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: