http_objects 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,7 +21,8 @@ module HttpObjects
21
21
 
22
22
  # Public: Register attribute class with *MethodCreator* block.
23
23
  def self.add_attribute(attr_class)
24
- register_attribute(attr_class.header_name, attr_class, &MethodCreator)
24
+ key = normalize_key(attr_class.header_name)
25
+ register_attribute(key, attr_class, &MethodCreator)
25
26
  end
26
27
 
27
28
  def self.new(hash = nil)
@@ -39,6 +40,7 @@ module HttpObjects
39
40
  # key - key or HTTP Header name.
40
41
  # value - object. If key is HTTP Header name, value should be a String.
41
42
  def []=(key, value)
43
+ key = self.class.normalize_key(key)
42
44
  if (header_class = self.class.attributes[key])
43
45
  value = header_class.parse(value)
44
46
  end
@@ -47,11 +49,25 @@ module HttpObjects
47
49
  alias :store :[]=
48
50
 
49
51
  def [](key)
52
+ key = self.class.normalize_key(key)
50
53
  value = self.fetch(key, nil)
51
54
  value = value.raw if value.respond_to?(:raw)
52
55
  value
53
56
  end
54
57
 
58
+ def to_s
59
+ self.keys.inject("") do |out, key|
60
+ out << ", " unless out.empty?
61
+ out << "#{key}: #{self[key]}"
62
+ end
63
+ end
64
+
65
+ protected
66
+
67
+ def self.normalize_key(key)
68
+ key.downcase if key.respond_to?(:downcase)
69
+ end
70
+
55
71
  end
56
72
 
57
73
  end
@@ -30,6 +30,14 @@ module HttpObjects::Parameters
30
30
  @raw, @value, @parameters = raw, value, parameters
31
31
  end
32
32
 
33
+ def charset?
34
+ !!self.charset!
35
+ end
36
+
37
+ def charset!
38
+ @parameters.fetch("charset", nil)
39
+ end
40
+
33
41
  end
34
42
 
35
43
  end
@@ -1,3 +1,3 @@
1
1
  module HttpObjects
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -81,4 +81,17 @@ describe HttpObjects::Hash do
81
81
  subject.myobject!.must_equal("value")
82
82
  end
83
83
 
84
+ it "keys, be case insensitive" do
85
+ subject["My-Key"] = "value"
86
+ subject["my-key"].must_equal("value")
87
+ end
88
+
89
+ it "#to_s" do
90
+ subject["My-Key"] = "value"
91
+ subject["MyObject"] = "myvalue"
92
+
93
+ hash_in_rb18_sucks = /(my-key: value, myobject: myvalue)|(myobject: myvalue, my-key: value)/
94
+ subject.to_s.must_match(hash_in_rb18_sucks)
95
+ end
96
+
84
97
  end
@@ -30,4 +30,25 @@ describe MediaType do
30
30
  end
31
31
  end
32
32
 
33
+ describe "#charset" do
34
+ describe "with value" do
35
+ subject { MediaType.parse("application/xhtml+xml; charset=ISO-8859-4") }
36
+ it "#charset?" do
37
+ subject.charset?.must_equal(true)
38
+ end
39
+ it "#charset!" do
40
+ subject.charset!.must_equal("ISO-8859-4")
41
+ end
42
+ end
43
+ describe "without value" do
44
+ subject { MediaType.parse("application/xhtml+xml") }
45
+ it "#charset?" do
46
+ subject.charset?.must_equal(false)
47
+ end
48
+ it "#charset!" do
49
+ subject.charset!.must_be_nil
50
+ end
51
+ end
52
+ end
53
+
33
54
  end
metadata CHANGED
@@ -1,76 +1,56 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: http_objects
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 2
10
- version: 0.0.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Roger Leite
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-12-19 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-12-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rake
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70157426897660 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: minitest
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70157426897660
25
+ - !ruby/object:Gem::Dependency
26
+ name: minitest
27
+ requirement: &70157426896300 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
29
+ requirements:
40
30
  - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 5
43
- segments:
44
- - 3
45
- version: "3"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
46
33
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: minitest-reporters
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70157426896300
36
+ - !ruby/object:Gem::Dependency
37
+ name: minitest-reporters
38
+ requirement: &70157426895080 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
40
+ requirements:
54
41
  - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- - 7
60
- - 0
42
+ - !ruby/object:Gem::Version
61
43
  version: 0.7.0
62
44
  type: :development
63
- version_requirements: *id003
45
+ prerelease: false
46
+ version_requirements: *70157426895080
64
47
  description: HTTP 1.1 by the spec, specially headers
65
- email:
48
+ email:
66
49
  - roger.barreto@gmail.com
67
50
  executables: []
68
-
69
51
  extensions: []
70
-
71
52
  extra_rdoc_files: []
72
-
73
- files:
53
+ files:
74
54
  - .gitignore
75
55
  - Gemfile
76
56
  - LICENSE
@@ -133,38 +113,29 @@ files:
133
113
  - test/test_helper.rb
134
114
  homepage: https://github.com/rogerleite/http_objects
135
115
  licenses: []
136
-
137
116
  post_install_message:
138
117
  rdoc_options: []
139
-
140
- require_paths:
118
+ require_paths:
141
119
  - lib
142
- required_ruby_version: !ruby/object:Gem::Requirement
120
+ required_ruby_version: !ruby/object:Gem::Requirement
143
121
  none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 3
148
- segments:
149
- - 0
150
- version: "0"
151
- required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
127
  none: false
153
- requirements:
154
- - - ">="
155
- - !ruby/object:Gem::Version
156
- hash: 3
157
- segments:
158
- - 0
159
- version: "0"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
160
132
  requirements: []
161
-
162
133
  rubyforge_project:
163
134
  rubygems_version: 1.8.15
164
135
  signing_key:
165
136
  specification_version: 3
166
137
  summary: HTTP 1.1 by the spec, specially headers
167
- test_files:
138
+ test_files:
168
139
  - test/http_objects/hash_test.rb
169
140
  - test/http_objects/headers/attributes_test.rb
170
141
  - test/http_objects/headers/directives/cache_test.rb