rubysl-cgi 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a954e484bc04491a8e3a1b0c3cf1ae3215524f57
4
- data.tar.gz: a6e590cf123f141d7d01118e29ae3e9ea41d59f2
3
+ metadata.gz: b906301d55b0fbfeaea2a18246095462572c1012
4
+ data.tar.gz: d790a345a6cb9d8c7a3a3db4e8aec259ac02e586
5
5
  SHA512:
6
- metadata.gz: 550528ca4b546b3d0a8e2c0e035df813d75c01ccab75f6499cfc27603f7f53774fc610c12223f0454682de7edbe9515a91e464f0a78e6d454af92dacc10d28dd
7
- data.tar.gz: c05811504f35f8ac07efb920d6f5a4065ad7675772ce294f718ecd91bc8efee849c4e650ebc363cee2a68434766fda77c857f2b51b5109da8dfbf2cc9f45b3a3
6
+ metadata.gz: d2b6fcba1c037f2292f90d3f07d80089135546fec6fcea8d1217b1e5a65a708c0fb7fbd4925185a368cc7bd63916d2ed8eda53ab1cde0e74adf00f428c6d7ff3
7
+ data.tar.gz: 6a81f44358379024fdefbc39526339921e910164e38b598eb0595e047012af9376a37c516f0bd8bd1efda51a15bfdf9ea9cb4f7ef32ffb38b45ca3c346a871c8
@@ -1,7 +1,14 @@
1
1
  language: ruby
2
2
  env:
3
3
  - RUBYLIB=lib
4
- script: bundle exec mspec
4
+ - RUBYLIB=
5
+ script: mspec spec
5
6
  rvm:
6
- - 1.9.3
7
- - rbx-nightly-19mode
7
+ - 2.0.0
8
+ - rbx-2.1.1
9
+ matrix:
10
+ exclude:
11
+ - rvm: 2.0.0
12
+ env: RUBYLIB=lib
13
+ - rvm: rbx-2.1.1
14
+ env: RUBYLIB=
@@ -1,6 +1,5 @@
1
1
  require 'cgi/util'
2
2
  class CGI
3
- @@accept_charset="UTF-8" unless defined?(@@accept_charset)
4
3
  # Class representing an HTTP cookie.
5
4
  #
6
5
  # In addition to its specific fields and methods, a Cookie instance
@@ -9,9 +8,9 @@ class CGI
9
8
  # See RFC 2965.
10
9
  #
11
10
  # == Examples of use
12
- # cookie1 = CGI::Cookie::new("name", "value1", "value2", ...)
13
- # cookie1 = CGI::Cookie::new("name" => "name", "value" => "value")
14
- # cookie1 = CGI::Cookie::new('name' => 'name',
11
+ # cookie1 = CGI::Cookie.new("name", "value1", "value2", ...)
12
+ # cookie1 = CGI::Cookie.new("name" => "name", "value" => "value")
13
+ # cookie1 = CGI::Cookie.new('name' => 'name',
15
14
  # 'value' => ['value1', 'value2', ...],
16
15
  # 'path' => 'path', # optional
17
16
  # 'domain' => 'domain', # optional
@@ -35,6 +34,7 @@ class CGI
35
34
  # cookie1.expires = Time.now + 30
36
35
  # cookie1.secure = true
37
36
  class Cookie < Array
37
+ @@accept_charset="UTF-8" unless defined?(@@accept_charset)
38
38
 
39
39
  # Create a new CGI::Cookie object.
40
40
  #
@@ -125,7 +125,7 @@ class CGI
125
125
 
126
126
  # Convert the Cookie to its string representation.
127
127
  def to_s
128
- val = collect{|v| CGI::escape(v) }.join("&")
128
+ val = collect{|v| CGI.escape(v) }.join("&")
129
129
  buf = "#{@name}=#{val}"
130
130
  buf << "; domain=#{@domain}" if @domain
131
131
  buf << "; path=#{@path}" if @path
@@ -134,32 +134,37 @@ class CGI
134
134
  buf
135
135
  end
136
136
 
137
- end # class Cookie
137
+ # Parse a raw cookie string into a hash of cookie-name=>Cookie
138
+ # pairs.
139
+ #
140
+ # cookies = CGI::Cookie.parse("raw_cookie_string")
141
+ # # { "name1" => cookie1, "name2" => cookie2, ... }
142
+ #
143
+ def self.parse(raw_cookie)
144
+ cookies = Hash.new([])
145
+ return cookies unless raw_cookie
138
146
 
139
- # Parse a raw cookie string into a hash of cookie-name=>Cookie
140
- # pairs.
141
- #
142
- # cookies = CGI::Cookie::parse("raw_cookie_string")
143
- # # { "name1" => cookie1, "name2" => cookie2, ... }
144
- #
145
- def Cookie::parse(raw_cookie)
146
- cookies = Hash.new([])
147
- return cookies unless raw_cookie
148
-
149
- raw_cookie.split(/[;,]\s?/).each do |pairs|
150
- name, values = pairs.split('=',2)
151
- next unless name and values
152
- name = CGI::unescape(name)
153
- values ||= ""
154
- values = values.split('&').collect{|v| CGI::unescape(v,@@accept_charset) }
155
- if cookies.has_key?(name)
156
- values = cookies[name].value + values
147
+ raw_cookie.split(/[;,]\s?/).each do |pairs|
148
+ name, values = pairs.split('=',2)
149
+ next unless name and values
150
+ name = CGI.unescape(name)
151
+ values ||= ""
152
+ values = values.split('&').collect{|v| CGI.unescape(v,@@accept_charset) }
153
+ if cookies.has_key?(name)
154
+ values = cookies[name].value + values
155
+ end
156
+ cookies[name] = Cookie.new(name, *values)
157
157
  end
158
- cookies[name] = Cookie::new(name, *values)
158
+
159
+ cookies
160
+ end
161
+
162
+ # A summary of cookie string.
163
+ def inspect
164
+ "#<CGI::Cookie: #{self.to_s.inspect}>"
159
165
  end
160
166
 
161
- cookies
162
- end
167
+ end # class Cookie
163
168
  end
164
169
 
165
170
 
@@ -15,7 +15,7 @@ class CGI
15
15
  # Standard internet newline sequence
16
16
  EOL = CR + LF
17
17
 
18
- REVISION = '$Id$' #:nodoc:
18
+ REVISION = '$Id: core.rb 40787 2013-05-16 10:14:45Z xibbar $' #:nodoc:
19
19
 
20
20
  # Whether processing will be required in binary vs text
21
21
  NEEDS_BINMODE = File::BINARY != 0
@@ -238,7 +238,7 @@ class CGI
238
238
  arr.each {|c| buf << "Set-Cookie: #{c}#{EOL}" }
239
239
  when Hash
240
240
  hash = cookie
241
- hash.each {|name, c| buf << "Set-Cookie: #{c}#{EOL}" }
241
+ hash.each_value {|c| buf << "Set-Cookie: #{c}#{EOL}" }
242
242
  end
243
243
  end
244
244
  if @output_cookies
@@ -587,14 +587,14 @@ class CGI
587
587
  def create_body(is_large) #:nodoc:
588
588
  if is_large
589
589
  require 'tempfile'
590
- body = Tempfile.new('CGI', encoding: "ascii-8bit")
590
+ body = Tempfile.new('CGI', encoding: Encoding::ASCII_8BIT)
591
591
  else
592
592
  begin
593
593
  require 'stringio'
594
- body = StringIO.new("".force_encoding("ascii-8bit"))
594
+ body = StringIO.new("".force_encoding(Encoding::ASCII_8BIT))
595
595
  rescue LoadError
596
596
  require 'tempfile'
597
- body = Tempfile.new('CGI', encoding: "ascii-8bit")
597
+ body = Tempfile.new('CGI', encoding: Encoding::ASCII_8BIT)
598
598
  end
599
599
  end
600
600
  body.binmode if defined? body.binmode
@@ -701,9 +701,9 @@ class CGI
701
701
  if value
702
702
  return value
703
703
  elsif defined? StringIO
704
- StringIO.new("".force_encoding("ascii-8bit"))
704
+ StringIO.new("".force_encoding(Encoding::ASCII_8BIT))
705
705
  else
706
- Tempfile.new("CGI",encoding:"ascii-8bit")
706
+ Tempfile.new("CGI",encoding: Encoding::ASCII_8BIT)
707
707
  end
708
708
  else
709
709
  str = if value then value.dup else "" end
@@ -832,29 +832,23 @@ class CGI
832
832
  when "html3"
833
833
  require 'cgi/html'
834
834
  extend Html3
835
- element_init()
836
835
  extend HtmlExtension
837
836
  when "html4"
838
837
  require 'cgi/html'
839
838
  extend Html4
840
- element_init()
841
839
  extend HtmlExtension
842
840
  when "html4Tr"
843
841
  require 'cgi/html'
844
842
  extend Html4Tr
845
- element_init()
846
843
  extend HtmlExtension
847
844
  when "html4Fr"
848
845
  require 'cgi/html'
849
846
  extend Html4Tr
850
- element_init()
851
847
  extend Html4Fr
852
- element_init()
853
848
  extend HtmlExtension
854
849
  when "html5"
855
850
  require 'cgi/html'
856
851
  extend Html5
857
- element_init()
858
852
  extend HtmlExtension
859
853
  end
860
854
  end
@@ -8,55 +8,62 @@ class CGI
8
8
  # Generate code for an element with required start and end tags.
9
9
  #
10
10
  # - -
11
- def nn_element_def(element)
12
- nOE_element_def(element, <<-END)
13
- if block_given?
14
- yield.to_s
15
- else
16
- ""
17
- end +
18
- "</#{element.upcase}>"
19
- END
11
+ def nn_element(element, attributes = {})
12
+ s = nOE_element(element, attributes)
13
+ if block_given?
14
+ s << yield.to_s
15
+ end
16
+ s << "</#{element.upcase}>"
17
+ end
18
+
19
+ def nn_element_def(attributes = {}, &block)
20
+ nn_element(__callee__, attributes, &block)
20
21
  end
21
22
 
22
23
  # Generate code for an empty element.
23
24
  #
24
25
  # - O EMPTY
25
- def nOE_element_def(element, append = nil)
26
- s = <<-END
27
- attributes={attributes=>nil} if attributes.kind_of?(String)
28
- "<#{element.upcase}" + attributes.collect{|name, value|
29
- next unless value
30
- " " + CGI::escapeHTML(name.to_s) +
31
- if true == value
32
- ""
33
- else
34
- '="' + CGI::escapeHTML(value.to_s) + '"'
35
- end
36
- }.join + ">"
37
- END
38
- s.sub!(/\Z/, " +") << append if append
39
- s
26
+ def nOE_element(element, attributes = {})
27
+ attributes={attributes=>nil} if attributes.kind_of?(String)
28
+ s = "<#{element.upcase}"
29
+ attributes.each do|name, value|
30
+ next unless value
31
+ s << " "
32
+ s << CGI::escapeHTML(name.to_s)
33
+ if value != true
34
+ s << '="'
35
+ s << CGI::escapeHTML(value.to_s)
36
+ s << '"'
37
+ end
38
+ end
39
+ s << ">"
40
+ end
41
+
42
+ def nOE_element_def(attributes = {}, &block)
43
+ nOE_element(__callee__, attributes, &block)
40
44
  end
41
45
 
46
+
42
47
  # Generate code for an element for which the end (and possibly the
43
48
  # start) tag is optional.
44
49
  #
45
50
  # O O or - O
46
- def nO_element_def(element)
47
- nOE_element_def(element, <<-END)
48
- if block_given?
49
- yield.to_s + "</#{element.upcase}>"
50
- else
51
- ""
52
- end
53
- END
51
+ def nO_element(element, attributes = {})
52
+ s = nOE_element(element, attributes)
53
+ if block_given?
54
+ s << yield.to_s
55
+ s << "</#{element.upcase}>"
56
+ end
57
+ s
58
+ end
59
+
60
+ def nO_element_def(attributes = {}, &block)
61
+ nO_element(__callee__, attributes, &block)
54
62
  end
55
63
 
56
64
  end # TagMaker
57
65
 
58
66
 
59
- #
60
67
  # Mixin module providing HTML generation methods.
61
68
  #
62
69
  # For example,
@@ -92,11 +99,7 @@ class CGI
92
99
  else
93
100
  href
94
101
  end
95
- if block_given?
96
- super(attributes){ yield }
97
- else
98
- super(attributes)
99
- end
102
+ super(attributes)
100
103
  end
101
104
 
102
105
  # Generate a Document Base URI element as a String.
@@ -114,11 +117,7 @@ class CGI
114
117
  else
115
118
  href
116
119
  end
117
- if block_given?
118
- super(attributes){ yield }
119
- else
120
- super(attributes)
121
- end
120
+ super(attributes)
122
121
  end
123
122
 
124
123
  # Generate a BlockQuote element as a string.
@@ -137,11 +136,7 @@ class CGI
137
136
  else
138
137
  cite
139
138
  end
140
- if block_given?
141
- super(attributes){ yield }
142
- else
143
- super(attributes)
144
- end
139
+ super(attributes)
145
140
  end
146
141
 
147
142
 
@@ -161,11 +156,7 @@ class CGI
161
156
  else
162
157
  align
163
158
  end
164
- if block_given?
165
- super(attributes){ yield }
166
- else
167
- super(attributes)
168
- end
159
+ super(attributes)
169
160
  end
170
161
 
171
162
 
@@ -428,11 +419,7 @@ class CGI
428
419
  buf << doctype
429
420
  end
430
421
 
431
- if block_given?
432
- buf << super(attributes){ yield }
433
- else
434
- buf << super(attributes)
435
- end
422
+ buf << super(attributes)
436
423
 
437
424
  if pretty
438
425
  CGI::pretty(buf, pretty)
@@ -824,11 +811,7 @@ class CGI
824
811
  else
825
812
  name
826
813
  end
827
- if block_given?
828
- super(attributes){ yield }
829
- else
830
- super(attributes)
831
- end
814
+ super(attributes)
832
815
  end
833
816
 
834
817
  end # HtmlExtension
@@ -836,50 +819,38 @@ class CGI
836
819
 
837
820
  # Mixin module for HTML version 3 generation methods.
838
821
  module Html3 # :nodoc:
822
+ include TagMaker
839
823
 
840
824
  # The DOCTYPE declaration for this version of HTML
841
825
  def doctype
842
826
  %|<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">|
843
827
  end
844
828
 
845
- # Initialise the HTML generation methods for this version.
846
- def element_init
847
- extend TagMaker
848
- return if defined?(html)
849
- methods = ""
829
+ instance_method(:nn_element_def).tap do |m|
850
830
  # - -
851
831
  for element in %w[ A TT I B U STRIKE BIG SMALL SUB SUP EM STRONG
852
832
  DFN CODE SAMP KBD VAR CITE FONT ADDRESS DIV CENTER MAP
853
833
  APPLET PRE XMP LISTING DL OL UL DIR MENU SELECT TABLE TITLE
854
834
  STYLE SCRIPT H1 H2 H3 H4 H5 H6 TEXTAREA FORM BLOCKQUOTE
855
835
  CAPTION ]
856
- methods << <<-BEGIN + nn_element_def(element) + <<-END
857
- def #{element.downcase}(attributes = {})
858
- BEGIN
859
- end
860
- END
836
+ define_method(element.downcase, m)
861
837
  end
838
+ end
862
839
 
840
+ instance_method(:nOE_element_def).tap do |m|
863
841
  # - O EMPTY
864
842
  for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
865
843
  ISINDEX META ]
866
- methods << <<-BEGIN + nOE_element_def(element) + <<-END
867
- def #{element.downcase}(attributes = {})
868
- BEGIN
869
- end
870
- END
844
+ define_method(element.downcase, m)
871
845
  end
846
+ end
872
847
 
848
+ instance_method(:nO_element_def).tap do |m|
873
849
  # O O or - O
874
850
  for element in %w[ HTML HEAD BODY P PLAINTEXT DT DD LI OPTION TR
875
851
  TH TD ]
876
- methods << <<-BEGIN + nO_element_def(element) + <<-END
877
- def #{element.downcase}(attributes = {})
878
- BEGIN
879
- end
880
- END
852
+ define_method(element.downcase, m)
881
853
  end
882
- eval(methods)
883
854
  end
884
855
 
885
856
  end # Html3
@@ -887,6 +858,7 @@ class CGI
887
858
 
888
859
  # Mixin module for HTML version 4 generation methods.
889
860
  module Html4 # :nodoc:
861
+ include TagMaker
890
862
 
891
863
  # The DOCTYPE declaration for this version of HTML
892
864
  def doctype
@@ -894,42 +866,30 @@ class CGI
894
866
  end
895
867
 
896
868
  # Initialise the HTML generation methods for this version.
897
- def element_init
898
- extend TagMaker
899
- return if defined?(html)
900
- methods = ""
901
- # - -
869
+ # - -
870
+ instance_method(:nn_element_def).tap do |m|
902
871
  for element in %w[ TT I B BIG SMALL EM STRONG DFN CODE SAMP KBD
903
872
  VAR CITE ABBR ACRONYM SUB SUP SPAN BDO ADDRESS DIV MAP OBJECT
904
873
  H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT OPTGROUP
905
874
  FIELDSET LEGEND BUTTON TABLE TITLE STYLE SCRIPT NOSCRIPT
906
875
  TEXTAREA FORM A BLOCKQUOTE CAPTION ]
907
- methods << <<-BEGIN + nn_element_def(element) + <<-END
908
- def #{element.downcase}(attributes = {})
909
- BEGIN
910
- end
911
- END
876
+ define_method(element.downcase, m)
912
877
  end
878
+ end
913
879
 
914
- # - O EMPTY
880
+ # - O EMPTY
881
+ instance_method(:nOE_element_def).tap do |m|
915
882
  for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META ]
916
- methods << <<-BEGIN + nOE_element_def(element) + <<-END
917
- def #{element.downcase}(attributes = {})
918
- BEGIN
919
- end
920
- END
883
+ define_method(element.downcase, m)
921
884
  end
885
+ end
922
886
 
923
- # O O or - O
887
+ # O O or - O
888
+ instance_method(:nO_element_def).tap do |m|
924
889
  for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
925
890
  COLGROUP TR TH TD HEAD ]
926
- methods << <<-BEGIN + nO_element_def(element) + <<-END
927
- def #{element.downcase}(attributes = {})
928
- BEGIN
929
- end
930
- END
891
+ define_method(element.downcase, m)
931
892
  end
932
- eval(methods)
933
893
  end
934
894
 
935
895
  end # Html4
@@ -937,6 +897,7 @@ class CGI
937
897
 
938
898
  # Mixin module for HTML version 4 transitional generation methods.
939
899
  module Html4Tr # :nodoc:
900
+ include TagMaker
940
901
 
941
902
  # The DOCTYPE declaration for this version of HTML
942
903
  def doctype
@@ -944,44 +905,32 @@ class CGI
944
905
  end
945
906
 
946
907
  # Initialise the HTML generation methods for this version.
947
- def element_init
948
- extend TagMaker
949
- return if defined?(html)
950
- methods = ""
951
- # - -
908
+ # - -
909
+ instance_method(:nn_element_def).tap do |m|
952
910
  for element in %w[ TT I B U S STRIKE BIG SMALL EM STRONG DFN
953
911
  CODE SAMP KBD VAR CITE ABBR ACRONYM FONT SUB SUP SPAN BDO
954
912
  ADDRESS DIV CENTER MAP OBJECT APPLET H1 H2 H3 H4 H5 H6 PRE Q
955
913
  INS DEL DL OL UL DIR MENU LABEL SELECT OPTGROUP FIELDSET
956
914
  LEGEND BUTTON TABLE IFRAME NOFRAMES TITLE STYLE SCRIPT
957
915
  NOSCRIPT TEXTAREA FORM A BLOCKQUOTE CAPTION ]
958
- methods << <<-BEGIN + nn_element_def(element) + <<-END
959
- def #{element.downcase}(attributes = {})
960
- BEGIN
961
- end
962
- END
916
+ define_method(element.downcase, m)
963
917
  end
918
+ end
964
919
 
965
- # - O EMPTY
920
+ # - O EMPTY
921
+ instance_method(:nOE_element_def).tap do |m|
966
922
  for element in %w[ IMG BASE BASEFONT BR AREA LINK PARAM HR INPUT
967
923
  COL ISINDEX META ]
968
- methods << <<-BEGIN + nOE_element_def(element) + <<-END
969
- def #{element.downcase}(attributes = {})
970
- BEGIN
971
- end
972
- END
924
+ define_method(element.downcase, m)
973
925
  end
926
+ end
974
927
 
975
- # O O or - O
928
+ # O O or - O
929
+ instance_method(:nO_element_def).tap do |m|
976
930
  for element in %w[ HTML BODY P DT DD LI OPTION THEAD TFOOT TBODY
977
931
  COLGROUP TR TH TD HEAD ]
978
- methods << <<-BEGIN + nO_element_def(element) + <<-END
979
- def #{element.downcase}(attributes = {})
980
- BEGIN
981
- end
982
- END
932
+ define_method(element.downcase, m)
983
933
  end
984
- eval(methods)
985
934
  end
986
935
 
987
936
  end # Html4Tr
@@ -989,6 +938,7 @@ class CGI
989
938
 
990
939
  # Mixin module for generating HTML version 4 with framesets.
991
940
  module Html4Fr # :nodoc:
941
+ include TagMaker
992
942
 
993
943
  # The DOCTYPE declaration for this version of HTML
994
944
  def doctype
@@ -996,27 +946,18 @@ class CGI
996
946
  end
997
947
 
998
948
  # Initialise the HTML generation methods for this version.
999
- def element_init
1000
- return if defined?(frameset)
1001
- methods = ""
1002
- # - -
949
+ # - -
950
+ instance_method(:nn_element_def).tap do |m|
1003
951
  for element in %w[ FRAMESET ]
1004
- methods << <<-BEGIN + nn_element_def(element) + <<-END
1005
- def #{element.downcase}(attributes = {})
1006
- BEGIN
1007
- end
1008
- END
952
+ define_method(element.downcase, m)
1009
953
  end
954
+ end
1010
955
 
1011
- # - O EMPTY
956
+ # - O EMPTY
957
+ instance_method(:nOE_element_def).tap do |m|
1012
958
  for element in %w[ FRAME ]
1013
- methods << <<-BEGIN + nOE_element_def(element) + <<-END
1014
- def #{element.downcase}(attributes = {})
1015
- BEGIN
1016
- end
1017
- END
959
+ define_method(element.downcase, m)
1018
960
  end
1019
- eval(methods)
1020
961
  end
1021
962
 
1022
963
  end # Html4Fr
@@ -1024,6 +965,7 @@ class CGI
1024
965
 
1025
966
  # Mixin module for HTML version 5 generation methods.
1026
967
  module Html5 # :nodoc:
968
+ include TagMaker
1027
969
 
1028
970
  # The DOCTYPE declaration for this version of HTML
1029
971
  def doctype
@@ -1031,11 +973,8 @@ class CGI
1031
973
  end
1032
974
 
1033
975
  # Initialise the HTML generation methods for this version.
1034
- def element_init
1035
- extend TagMaker
1036
- return if defined?(html)
1037
- methods = ""
1038
- # - -
976
+ # - -
977
+ instance_method(:nn_element_def).tap do |m|
1039
978
  for element in %w[ SECTION NAV ARTICLE ASIDE HGROUP HEADER
1040
979
  FOOTER FIGURE FIGCAPTION S TIME U MARK RUBY BDI IFRAME
1041
980
  VIDEO AUDIO CANVAS DATALIST OUTPUT PROGRESS METER DETAILS
@@ -1044,34 +983,52 @@ class CGI
1044
983
  H1 H2 H3 H4 H5 H6 PRE Q INS DEL DL OL UL LABEL SELECT
1045
984
  FIELDSET LEGEND BUTTON TABLE TITLE STYLE SCRIPT NOSCRIPT
1046
985
  TEXTAREA FORM A BLOCKQUOTE CAPTION ]
1047
- methods += <<-BEGIN + nn_element_def(element) + <<-END
1048
- def #{element.downcase}(attributes = {})
1049
- BEGIN
1050
- end
1051
- END
986
+ define_method(element.downcase, m)
1052
987
  end
988
+ end
1053
989
 
1054
- # - O EMPTY
990
+ # - O EMPTY
991
+ instance_method(:nOE_element_def).tap do |m|
1055
992
  for element in %w[ IMG BASE BR AREA LINK PARAM HR INPUT COL META
1056
993
  COMMAND EMBED KEYGEN SOURCE TRACK WBR ]
1057
- methods += <<-BEGIN + nOE_element_def(element) + <<-END
1058
- def #{element.downcase}(attributes = {})
1059
- BEGIN
1060
- end
1061
- END
994
+ define_method(element.downcase, m)
1062
995
  end
996
+ end
1063
997
 
1064
- # O O or - O
998
+ # O O or - O
999
+ instance_method(:nO_element_def).tap do |m|
1065
1000
  for element in %w[ HTML HEAD BODY P DT DD LI OPTION THEAD TFOOT TBODY
1066
1001
  OPTGROUP COLGROUP RT RP TR TH TD ]
1067
- methods += <<-BEGIN + nO_element_def(element) + <<-END
1068
- def #{element.downcase}(attributes = {})
1069
- BEGIN
1070
- end
1071
- END
1002
+ define_method(element.downcase, m)
1072
1003
  end
1073
- eval(methods)
1074
1004
  end
1075
1005
 
1076
1006
  end # Html5
1007
+
1008
+ class HTML3
1009
+ include Html3
1010
+ include HtmlExtension
1011
+ end
1012
+
1013
+ class HTML4
1014
+ include Html4
1015
+ include HtmlExtension
1016
+ end
1017
+
1018
+ class HTML4Tr
1019
+ include Html4Tr
1020
+ include HtmlExtension
1021
+ end
1022
+
1023
+ class HTML4Fr
1024
+ include Html4Tr
1025
+ include Html4Fr
1026
+ include HtmlExtension
1027
+ end
1028
+
1029
+ class HTML5
1030
+ include Html5
1031
+ include HtmlExtension
1032
+ end
1033
+
1077
1034
  end
@@ -1,21 +1,22 @@
1
- class CGI
1
+ class CGI; module Util; end; extend Util; end
2
+ module CGI::Util
2
3
  @@accept_charset="UTF-8" unless defined?(@@accept_charset)
3
4
  # URL-encode a string.
4
5
  # url_encoded_string = CGI::escape("'Stop!' said Fred")
5
6
  # # => "%27Stop%21%27+said+Fred"
6
- def CGI::escape(string)
7
+ def escape(string)
7
8
  encoding = string.encoding
8
- string.dup.force_encoding('ASCII-8BIT').gsub(/([^ a-zA-Z0-9_.-]+)/) do
9
- '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase
9
+ string.b.gsub(/([^ a-zA-Z0-9_.-]+)/) do |m|
10
+ '%' + m.unpack('H2' * m.bytesize).join('%').upcase
10
11
  end.tr(' ', '+').force_encoding(encoding)
11
12
  end
12
13
 
13
14
  # URL-decode a string with encoding(optional).
14
15
  # string = CGI::unescape("%27Stop%21%27+said+Fred")
15
16
  # # => "'Stop!' said Fred"
16
- def CGI::unescape(string,encoding=@@accept_charset)
17
- str=string.tr('+', ' ').force_encoding(Encoding::ASCII_8BIT).gsub(/((?:%[0-9a-fA-F]{2})+)/) do
18
- [$1.delete('%')].pack('H*')
17
+ def unescape(string,encoding=@@accept_charset)
18
+ str=string.tr('+', ' ').b.gsub(/((?:%[0-9a-fA-F]{2})+)/) do |m|
19
+ [m.delete('%')].pack('H*')
19
20
  end.force_encoding(encoding)
20
21
  str.valid_encoding? ? str : str.force_encoding(string.encoding)
21
22
  end
@@ -32,18 +33,19 @@ class CGI
32
33
  # Escape special characters in HTML, namely &\"<>
33
34
  # CGI::escapeHTML('Usage: foo "bar" <baz>')
34
35
  # # => "Usage: foo &quot;bar&quot; &lt;baz&gt;"
35
- def CGI::escapeHTML(string)
36
+ def escapeHTML(string)
36
37
  string.gsub(/['&\"<>]/, TABLE_FOR_ESCAPE_HTML__)
37
38
  end
38
39
 
39
40
  # Unescape a string that has been HTML-escaped
40
41
  # CGI::unescapeHTML("Usage: foo &quot;bar&quot; &lt;baz&gt;")
41
42
  # # => "Usage: foo \"bar\" <baz>"
42
- def CGI::unescapeHTML(string)
43
+ def unescapeHTML(string)
44
+ return string unless string.include? '&'
43
45
  enc = string.encoding
44
- if [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE].include?(enc)
46
+ if enc != Encoding::UTF_8 && [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE].include?(enc)
45
47
  return string.gsub(Regexp.new('&(apos|amp|quot|gt|lt|#[0-9]+|#x[0-9A-Fa-f]+);'.encode(enc))) do
46
- case $1.encode("US-ASCII")
48
+ case $1.encode(Encoding::US_ASCII)
47
49
  when 'apos' then "'".encode(enc)
48
50
  when 'amp' then '&'.encode(enc)
49
51
  when 'quot' then '"'.encode(enc)
@@ -88,12 +90,12 @@ class CGI
88
90
  end
89
91
 
90
92
  # Synonym for CGI::escapeHTML(str)
91
- def CGI::escape_html(str)
93
+ def escape_html(str)
92
94
  escapeHTML(str)
93
95
  end
94
96
 
95
97
  # Synonym for CGI::unescapeHTML(str)
96
- def CGI::unescape_html(str)
98
+ def unescape_html(str)
97
99
  unescapeHTML(str)
98
100
  end
99
101
 
@@ -110,7 +112,7 @@ class CGI
110
112
  #
111
113
  # print CGI::escapeElement('<BR><A HREF="url"></A>', ["A", "IMG"])
112
114
  # # "<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt"
113
- def CGI::escapeElement(string, *elements)
115
+ def escapeElement(string, *elements)
114
116
  elements = elements[0] if elements[0].kind_of?(Array)
115
117
  unless elements.empty?
116
118
  string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/i) do
@@ -130,11 +132,11 @@ class CGI
130
132
  # print CGI::unescapeElement(
131
133
  # CGI::escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"])
132
134
  # # "&lt;BR&gt;<A HREF="url"></A>"
133
- def CGI::unescapeElement(string, *elements)
135
+ def unescapeElement(string, *elements)
134
136
  elements = elements[0] if elements[0].kind_of?(Array)
135
137
  unless elements.empty?
136
138
  string.gsub(/&lt;\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?&gt;/i) do
137
- CGI::unescapeHTML($&)
139
+ unescapeHTML($&)
138
140
  end
139
141
  else
140
142
  string
@@ -142,12 +144,12 @@ class CGI
142
144
  end
143
145
 
144
146
  # Synonym for CGI::escapeElement(str)
145
- def CGI::escape_element(str)
147
+ def escape_element(str)
146
148
  escapeElement(str)
147
149
  end
148
150
 
149
151
  # Synonym for CGI::unescapeElement(str)
150
- def CGI::unescape_element(str)
152
+ def unescape_element(str)
151
153
  unescapeElement(str)
152
154
  end
153
155
 
@@ -161,11 +163,11 @@ class CGI
161
163
  #
162
164
  # CGI::rfc1123_date(Time.now)
163
165
  # # Sat, 01 Jan 2000 00:00:00 GMT
164
- def CGI::rfc1123_date(time)
166
+ def rfc1123_date(time)
165
167
  t = time.clone.gmtime
166
168
  return format("%s, %.2d %s %.4d %.2d:%.2d:%.2d GMT",
167
- RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
168
- t.hour, t.min, t.sec)
169
+ RFC822_DAYS[t.wday], t.day, RFC822_MONTHS[t.month-1], t.year,
170
+ t.hour, t.min, t.sec)
169
171
  end
170
172
 
171
173
  # Prettify (indent) an HTML string.
@@ -185,7 +187,7 @@ class CGI
185
187
  # # </BODY>
186
188
  # # </HTML>
187
189
  #
188
- def CGI::pretty(string, shift = " ")
190
+ def pretty(string, shift = " ")
189
191
  lines = string.gsub(/(?!\A)<.*?>/m, "\n\\0").gsub(/<.*?>(?!\n)/m, "\\0\n")
190
192
  end_pos = 0
191
193
  while end_pos = lines.index(/^<\/(\w+)/, end_pos)
@@ -195,4 +197,6 @@ class CGI
195
197
  end
196
198
  lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=<\/?\w)/, '\1')
197
199
  end
200
+
201
+ alias h escapeHTML
198
202
  end
@@ -143,6 +143,11 @@ raise "Please, use ruby 1.9.0 or later." if RUBY_VERSION < "1.9.0"
143
143
  # take particular attributes where the attributes can be directly specified
144
144
  # as arguments, rather than via a hash.
145
145
  #
146
+ # === Utility HTML escape and other methods like a function.
147
+ #
148
+ # There are some utility tool defined in cgi/util.rb .
149
+ # And when include, you can use utility methods like a function.
150
+ #
146
151
  # == Examples of use
147
152
  #
148
153
  # === Get form values
@@ -159,7 +164,7 @@ raise "Please, use ruby 1.9.0 or later." if RUBY_VERSION < "1.9.0"
159
164
  # cgi.include?('field_name')
160
165
  #
161
166
  # CAUTION! cgi['field_name'] returned an Array with the old
162
- # cgi.rb(included in ruby 1.6)
167
+ # cgi.rb(included in Ruby 1.6)
163
168
  #
164
169
  # === Get form values as hash
165
170
  #
@@ -268,6 +273,20 @@ raise "Please, use ruby 1.9.0 or later." if RUBY_VERSION < "1.9.0"
268
273
  # CGI.new("html4Fr") # html4.01 Frameset
269
274
  # CGI.new("html5") # html5
270
275
  #
276
+ # === Some utility methods
277
+ #
278
+ # require 'cgi/util'
279
+ # CGI.escapeHTML('Usage: foo "bar" <baz>')
280
+ #
281
+ #
282
+ # === Some utility methods like a function
283
+ #
284
+ # require 'cgi/util'
285
+ # include CGI::Util
286
+ # escapeHTML('Usage: foo "bar" <baz>')
287
+ # h('Usage: foo "bar" <baz>') # alias
288
+ #
289
+ #
271
290
 
272
291
  class CGI
273
292
  end
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module CGI
3
- VERSION = "2.0.0"
3
+ VERSION = "2.0.1"
4
4
  end
5
5
  end
@@ -16,7 +16,10 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
+ spec.required_ruby_version = "~> 2.0"
20
+
19
21
  spec.add_development_dependency "bundler", "~> 1.3"
20
22
  spec.add_development_dependency "rake", "~> 10.0"
21
23
  spec.add_development_dependency "mspec", "~> 1.5"
24
+ spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
22
25
  end
metadata CHANGED
@@ -1,57 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-cgi
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Shirai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-04 00:00:00.000000000 Z
11
+ date: 2013-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubysl-prettyprint
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
55
69
  description: Ruby standard library cgi.
56
70
  email:
57
71
  - brixen@gmail.com
@@ -59,8 +73,8 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
- - .gitignore
63
- - .travis.yml
76
+ - ".gitignore"
77
+ - ".travis.yml"
64
78
  - Gemfile
65
79
  - LICENSE
66
80
  - LICENSE.txt
@@ -176,12 +190,12 @@ require_paths:
176
190
  - lib
177
191
  required_ruby_version: !ruby/object:Gem::Requirement
178
192
  requirements:
179
- - - '>='
193
+ - - "~>"
180
194
  - !ruby/object:Gem::Version
181
- version: '0'
195
+ version: '2.0'
182
196
  required_rubygems_version: !ruby/object:Gem::Requirement
183
197
  requirements:
184
- - - '>='
198
+ - - ">="
185
199
  - !ruby/object:Gem::Version
186
200
  version: '0'
187
201
  requirements: []
@@ -282,3 +296,4 @@ test_files:
282
296
  - spec/unescapeElement_spec.rb
283
297
  - spec/unescapeHTML_spec.rb
284
298
  - spec/unescape_spec.rb
299
+ has_rdoc: