http_objects 0.0.2 → 0.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.
@@ -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