miketracy-wwmd 0.2.11

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 (70) hide show
  1. data/History.txt +3 -0
  2. data/README +62 -0
  3. data/README.txt +62 -0
  4. data/Rakefile +34 -0
  5. data/examples/config_example.yaml +24 -0
  6. data/examples/wwmd_example.rb +73 -0
  7. data/lib/wwmd.rb +78 -0
  8. data/lib/wwmd/encoding.rb +40 -0
  9. data/lib/wwmd/form.rb +110 -0
  10. data/lib/wwmd/form_array.rb +273 -0
  11. data/lib/wwmd/guid.rb +155 -0
  12. data/lib/wwmd/hpricot_html2text.rb +76 -0
  13. data/lib/wwmd/mixins.rb +318 -0
  14. data/lib/wwmd/mixins_extends.rb +188 -0
  15. data/lib/wwmd/mixins_external.rb +18 -0
  16. data/lib/wwmd/nokogiri_html2text.rb +41 -0
  17. data/lib/wwmd/page.rb +414 -0
  18. data/lib/wwmd/page/auth.rb +183 -0
  19. data/lib/wwmd/page/config.rb +44 -0
  20. data/lib/wwmd/page/constants.rb +60 -0
  21. data/lib/wwmd/page/headers.rb +107 -0
  22. data/lib/wwmd/page/inputs.rb +47 -0
  23. data/lib/wwmd/page/irb_helpers.rb +90 -0
  24. data/lib/wwmd/page/scrape.rb +202 -0
  25. data/lib/wwmd/page/spider.rb +127 -0
  26. data/lib/wwmd/page/urlparse.rb +79 -0
  27. data/lib/wwmd/page/utils.rb +30 -0
  28. data/lib/wwmd/viewstate.rb +118 -0
  29. data/lib/wwmd/viewstate/viewstate_class_helpers.rb +35 -0
  30. data/lib/wwmd/viewstate/viewstate_deserializer_methods.rb +213 -0
  31. data/lib/wwmd/viewstate/viewstate_from_xml.rb +126 -0
  32. data/lib/wwmd/viewstate/viewstate_types.rb +51 -0
  33. data/lib/wwmd/viewstate/viewstate_utils.rb +157 -0
  34. data/lib/wwmd/viewstate/viewstate_yaml.rb +25 -0
  35. data/lib/wwmd/viewstate/vs_array.rb +36 -0
  36. data/lib/wwmd/viewstate/vs_binary_serialized.rb +28 -0
  37. data/lib/wwmd/viewstate/vs_hashtable.rb +40 -0
  38. data/lib/wwmd/viewstate/vs_hybrid_dict.rb +40 -0
  39. data/lib/wwmd/viewstate/vs_indexed_string.rb +6 -0
  40. data/lib/wwmd/viewstate/vs_indexed_string_ref.rb +22 -0
  41. data/lib/wwmd/viewstate/vs_int_enum.rb +25 -0
  42. data/lib/wwmd/viewstate/vs_list.rb +32 -0
  43. data/lib/wwmd/viewstate/vs_pair.rb +27 -0
  44. data/lib/wwmd/viewstate/vs_read_types.rb +11 -0
  45. data/lib/wwmd/viewstate/vs_read_value.rb +33 -0
  46. data/lib/wwmd/viewstate/vs_sparse_array.rb +56 -0
  47. data/lib/wwmd/viewstate/vs_string.rb +29 -0
  48. data/lib/wwmd/viewstate/vs_string_array.rb +37 -0
  49. data/lib/wwmd/viewstate/vs_string_formatted.rb +30 -0
  50. data/lib/wwmd/viewstate/vs_triplet.rb +29 -0
  51. data/lib/wwmd/viewstate/vs_type.rb +21 -0
  52. data/lib/wwmd/viewstate/vs_unit.rb +28 -0
  53. data/lib/wwmd/viewstate/vs_value.rb +33 -0
  54. data/spec/README +3 -0
  55. data/spec/form_array.spec +49 -0
  56. data/spec/spider_csrf_test.spec +28 -0
  57. data/spec/urlparse_test.spec +89 -0
  58. data/tasks/ann.rake +80 -0
  59. data/tasks/bones.rake +20 -0
  60. data/tasks/gem.rake +201 -0
  61. data/tasks/git.rake +40 -0
  62. data/tasks/notes.rake +27 -0
  63. data/tasks/post_load.rake +34 -0
  64. data/tasks/rdoc.rake +51 -0
  65. data/tasks/rubyforge.rake +55 -0
  66. data/tasks/setup.rb +292 -0
  67. data/tasks/spec.rake +54 -0
  68. data/tasks/test.rake +40 -0
  69. data/tasks/zentest.rake +36 -0
  70. metadata +164 -0
@@ -0,0 +1,25 @@
1
+ class String
2
+ # right now I have no idea why "\x0d\x0a" is getting munged in yaml transforms
3
+ # something weird helped find by timur@. double up "\r" before "\n" works
4
+ # this might be mac specific and break on other platforms. I don't care.
5
+ # patch not for general use do not try this at home.
6
+ def to_yaml( opts = {} )
7
+ YAML::quick_emit( is_complex_yaml? ? object_id : nil, opts ) do |out|
8
+ if is_binary_data?
9
+ out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal )
10
+ elsif ( self =~ /\r\n/ )
11
+ # out.scalar( "tag:yaml.org,2002:binary", [self].pack("m"), :literal )
12
+ out.scalar( taguri, self.gsub(/\r\n/,"\r\r\n"), :quote2 )
13
+ elsif to_yaml_properties.empty?
14
+ out.scalar( taguri, self, self =~ /^:/ ? :quote2 : to_yaml_style )
15
+ else
16
+ out.map( taguri, to_yaml_style ) do |map|
17
+ map.add( 'str', "#{self}" )
18
+ to_yaml_properties.each do |m|
19
+ map.add( m, instance_variable_get( m ) )
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ module WWMD
2
+ class VSArray < VSClassHelpers
3
+ attr_accessor :value
4
+ attr_reader :typeref
5
+ attr_reader :typeval
6
+
7
+ def initialize(typeref,typeval)
8
+ @typeref = typeref
9
+ @typeval = typeval
10
+ @value = []
11
+ end
12
+
13
+ def add(obj)
14
+ @value << obj
15
+ end
16
+
17
+ def serialize
18
+ stack = super
19
+ stack << self.write_7bit_encoded_int(self.value.size)
20
+ self.value.each do |v|
21
+ stack << v.serialize
22
+ end
23
+ return stack
24
+ end
25
+
26
+ def to_xml
27
+ xml = super
28
+ xml.add_attribute("size", self.value.size.to_s)
29
+ self.value.each do |v|
30
+ xml.add_element(v.to_xml)
31
+ end
32
+ xml
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ module WWMD
2
+ class VSBinarySerialized < VSClassHelpers
3
+ attr_accessor :value
4
+
5
+ def initialize()
6
+ @value = ''
7
+ end
8
+
9
+ def set(str)
10
+ @value = str
11
+ end
12
+
13
+ def serialize
14
+ stack = super
15
+ stack << self.write_7bit_encoded_int(self.size)
16
+ stack << self.value
17
+ return stack
18
+ end
19
+
20
+ def to_xml
21
+ xml = super
22
+ xml.add_attribute("encoding","base64")
23
+ xml.add_text(self.value.b64e)
24
+ xml
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ module WWMD
2
+ class VSHashtable < VSClassHelpers
3
+ attr_accessor :value
4
+
5
+ def initialize()
6
+ @value = []
7
+ end
8
+
9
+ def add(obj1,obj2)
10
+ @value << [obj1,obj2]
11
+ end
12
+
13
+ def serialize
14
+ stack = super
15
+ stack << self.write_7bit_encoded_int(self.size)
16
+ self.value.each do |k,v|
17
+ stack << k.serialize
18
+ stack << v.serialize
19
+ end
20
+ return stack
21
+ end
22
+
23
+ def to_xml
24
+ xml = super
25
+ xml.add_attribute("size",self.value.size.to_s)
26
+ self.value.each do |k,v|
27
+ pair = REXML::Element.new("Pair")
28
+ key = REXML::Element.new("Key")
29
+ key.add_element(k.to_xml)
30
+ val = REXML::Element.new("Value")
31
+ val.add_element(v.to_xml)
32
+ pair.add_element(key)
33
+ pair.add_element(val)
34
+ xml.add_element(pair)
35
+ end
36
+ xml
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ module WWMD
2
+ class VSHybridDict < VSClassHelpers
3
+ attr_accessor :value
4
+
5
+ def initialize()
6
+ @value = []
7
+ end
8
+
9
+ def add(obj1,obj2)
10
+ @value << [obj1,obj2]
11
+ end
12
+
13
+ def serialize
14
+ stack = super
15
+ stack << self.write_7bit_encoded_int(self.size)
16
+ self.value.each do |k,v|
17
+ stack << k.serialize
18
+ stack << v.serialize
19
+ end
20
+ return stack
21
+ end
22
+
23
+ def to_xml
24
+ xml = super
25
+ xml.add_attribute("size",self.value.size.to_s)
26
+ self.value.each do |k,v|
27
+ pair = REXML::Element.new("Pair")
28
+ key = REXML::Element.new("Key")
29
+ key.add_element(k.to_xml)
30
+ val = REXML::Element.new("Value")
31
+ val.add_element(v.to_xml)
32
+ pair.add_element(key)
33
+ pair.add_element(val)
34
+ xml.add_element(pair)
35
+ end
36
+ xml
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ module WWMD
2
+ class VSIndexedString < VSString
3
+ def serialize; super; end
4
+ def to_xml; super; end
5
+ end
6
+ end
@@ -0,0 +1,22 @@
1
+ module WWMD
2
+ class VSIndexedStringRef < VSClassHelpers
3
+ attr_reader :value
4
+
5
+ def initialize(ref)
6
+ @value = ref
7
+ end
8
+
9
+ def serialize
10
+ stack = super
11
+ stack << self.write_int(@value)
12
+ return stack
13
+ end
14
+
15
+ def to_xml
16
+ xml = super
17
+ xml.add_text(self.value.to_s)
18
+ xml
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module WWMD
2
+ class VSIntEnum < VSClassHelpers
3
+ attr_accessor :value
4
+ attr_reader :typeref
5
+ attr_reader :typeval
6
+
7
+ def initialize(typeref,typeval,index)
8
+ @typeref = typeref
9
+ @typeval = typeval
10
+ @value = index
11
+ end
12
+
13
+ def serialize
14
+ stack = super
15
+ stack << self.write_7bit_encoded_int(self.value)
16
+ end
17
+
18
+ def to_xml
19
+ xml = super
20
+ xml.add_text(self.value.to_s)
21
+ xml
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module WWMD
2
+
3
+ class VSList < VSClassHelpers
4
+
5
+ def initialize()
6
+ @value = []
7
+ end
8
+
9
+ def add(obj)
10
+ @value << obj
11
+ end
12
+
13
+ def serialize
14
+ stack = super
15
+ stack << self.write_7bit_encoded_int(self.size)
16
+ self.value.each do |v|
17
+ stack << v.serialize
18
+ end
19
+ return stack
20
+ end
21
+
22
+ def to_xml
23
+ xml = super
24
+ xml.add_attribute("size",self.value.size.to_s)
25
+ self.value.each do |v|
26
+ xml.add_element(v.to_xml)
27
+ end
28
+ xml
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ module WWMD
2
+ class VSPair < VSClassHelpers
3
+ attr_accessor :value
4
+
5
+ def initialize(obj1,obj2)
6
+ @value = []
7
+ @value << obj1
8
+ @value << obj2
9
+ end
10
+
11
+ def serialize
12
+ stack = super
13
+ self.value.each do |v|
14
+ stack << v.serialize
15
+ end
16
+ return stack
17
+ end
18
+
19
+ def to_xml
20
+ xml = super
21
+ self.value.each do |v|
22
+ xml.add_element(v.to_xml)
23
+ end
24
+ xml
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ module WWMD
2
+ class VSInt16 < VSReadValue; end
3
+ class VSInt32 < VSReadValue; end
4
+ class VSByte < VSReadValue; end
5
+ class VSChar < VSReadValue; end
6
+ class VSDateTime < VSReadValue; end
7
+ class VSDouble < VSReadValue; end
8
+ class VSSingle < VSReadValue; end
9
+ class VSColor < VSReadValue; end
10
+ class VSKnownColor < VSReadValue; end
11
+ end
@@ -0,0 +1,33 @@
1
+ module WWMD
2
+ class VSReadValue < VSClassHelpers
3
+ attr_accessor :value
4
+
5
+ def initialize(val)
6
+ @value = val
7
+ end
8
+
9
+ def serialize
10
+ stack = super
11
+ case self.to_sym
12
+ when :int16; stack << self.write_short(self.value)
13
+ when :int32; stack << self.write_7bit_encoded_int(self.value)
14
+ when :byte; stack << self.write_byte(self.value)
15
+ when :char; stack << self.write_byte(self.value)
16
+ when :date_time; stack << self.write_double(self.value)
17
+ when :double; stack << self.write_double(self.value)
18
+ when :single; stack << self.write_single(self.value)
19
+ when :color; stack << self.write_int32(self.value)
20
+ when :known_color; stack << self.write_7bit_encoded_int(self.value)
21
+ else; raise "unimplemented #{self.to_sym}"
22
+ end
23
+ return stack
24
+ end
25
+
26
+ def to_xml
27
+ xml = super
28
+ xml.add_text(self.value.to_s)
29
+ xml
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,56 @@
1
+ module WWMD
2
+ class VSSparseArray < VSClassHelpers
3
+ attr_accessor :value
4
+ attr_reader :typeref
5
+ attr_reader :typeval
6
+ attr_reader :size
7
+ attr_reader :elems
8
+
9
+ def initialize(typeref,typeval,size,elems)
10
+ @typeref = typeref
11
+ @typeval = typeval
12
+ @size = size
13
+ @elems = elems
14
+ @value = []
15
+ end
16
+
17
+ def add(idx,obj)
18
+ @value[idx] = obj
19
+ end
20
+
21
+ def serialize
22
+ stack = super
23
+ stack << self.write_7bit_encoded_int(self.size)
24
+ stack << self.write_7bit_encoded_int(self.elems)
25
+ self.value.each_index do |i|
26
+ next if self.value[i].nil?
27
+ stack << self.write_7bit_encoded_int(i)
28
+ stack << self.value[i].serialize
29
+ end
30
+ return stack
31
+ end
32
+
33
+ def to_xml
34
+ xml = super
35
+ siz = REXML::Element.new("Size")
36
+ siz.add_text(self.size.to_s)
37
+ ele = REXML::Element.new("Elements")
38
+ ele.add_text(self.elems.to_s)
39
+ xml.add_element(siz)
40
+ xml.add_element(ele)
41
+ self.value.each_index do |i|
42
+ next if self.value[i].nil?
43
+ pair = REXML::Element.new("Pair")
44
+ idx = REXML::Element.new("Index")
45
+ idx.add_text(i.to_s)
46
+ val = REXML::Element.new("Value")
47
+ val.add_element(value[i].to_xml)
48
+ pair.add_element(idx)
49
+ pair.add_element(val)
50
+ xml.add_element(pair)
51
+ end
52
+ xml
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,29 @@
1
+ module WWMD
2
+ attr_accessor :value
3
+
4
+ class VSString < VSClassHelpers
5
+ def initialize(val)
6
+ @value = val
7
+ end
8
+
9
+ def serialize
10
+ stack = super
11
+ stack << self.write_7bit_encoded_int(self.size)
12
+ stack << self.value
13
+ return stack
14
+ end
15
+
16
+ def to_xml
17
+ xml = super
18
+ # emit quoted-printable if we need to
19
+ if self.value =~ /[^\x20-\x7e]/
20
+ xml.add_attribute("encoding","quoted-printable")
21
+ xml.add_text(self.value.to_qp)
22
+ else
23
+ xml.add_text(self.value)
24
+ end
25
+ xml
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ module WWMD
2
+ class VSStringArray < VSClassHelpers
3
+ attr_accessor :value
4
+
5
+ def initialize()
6
+ @value = []
7
+ end
8
+
9
+ def add(obj)
10
+ @value << obj
11
+ end
12
+
13
+ def serialize
14
+ stack = super
15
+ stack << self.write_7bit_encoded_int(self.size)
16
+ self.value.each do |v|
17
+ stack << self.write_7bit_encoded_int(v.size)
18
+ stack << v
19
+ end
20
+ return stack
21
+ end
22
+
23
+ def to_xml
24
+ xml = super
25
+ xml.add_attribute("size",self.value.size.to_s)
26
+ self.value.each do |v|
27
+ xml.add_element(VSString.new(v).to_xml)
28
+ end
29
+ xml
30
+ end
31
+
32
+ def from_xml
33
+ # serliazed with VSString (for convenience)
34
+ # make sure not to deserialize the opcode when you write this out
35
+ end
36
+ end
37
+ end