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.
- data/History.txt +3 -0
- data/README +62 -0
- data/README.txt +62 -0
- data/Rakefile +34 -0
- data/examples/config_example.yaml +24 -0
- data/examples/wwmd_example.rb +73 -0
- data/lib/wwmd.rb +78 -0
- data/lib/wwmd/encoding.rb +40 -0
- data/lib/wwmd/form.rb +110 -0
- data/lib/wwmd/form_array.rb +273 -0
- data/lib/wwmd/guid.rb +155 -0
- data/lib/wwmd/hpricot_html2text.rb +76 -0
- data/lib/wwmd/mixins.rb +318 -0
- data/lib/wwmd/mixins_extends.rb +188 -0
- data/lib/wwmd/mixins_external.rb +18 -0
- data/lib/wwmd/nokogiri_html2text.rb +41 -0
- data/lib/wwmd/page.rb +414 -0
- data/lib/wwmd/page/auth.rb +183 -0
- data/lib/wwmd/page/config.rb +44 -0
- data/lib/wwmd/page/constants.rb +60 -0
- data/lib/wwmd/page/headers.rb +107 -0
- data/lib/wwmd/page/inputs.rb +47 -0
- data/lib/wwmd/page/irb_helpers.rb +90 -0
- data/lib/wwmd/page/scrape.rb +202 -0
- data/lib/wwmd/page/spider.rb +127 -0
- data/lib/wwmd/page/urlparse.rb +79 -0
- data/lib/wwmd/page/utils.rb +30 -0
- data/lib/wwmd/viewstate.rb +118 -0
- data/lib/wwmd/viewstate/viewstate_class_helpers.rb +35 -0
- data/lib/wwmd/viewstate/viewstate_deserializer_methods.rb +213 -0
- data/lib/wwmd/viewstate/viewstate_from_xml.rb +126 -0
- data/lib/wwmd/viewstate/viewstate_types.rb +51 -0
- data/lib/wwmd/viewstate/viewstate_utils.rb +157 -0
- data/lib/wwmd/viewstate/viewstate_yaml.rb +25 -0
- data/lib/wwmd/viewstate/vs_array.rb +36 -0
- data/lib/wwmd/viewstate/vs_binary_serialized.rb +28 -0
- data/lib/wwmd/viewstate/vs_hashtable.rb +40 -0
- data/lib/wwmd/viewstate/vs_hybrid_dict.rb +40 -0
- data/lib/wwmd/viewstate/vs_indexed_string.rb +6 -0
- data/lib/wwmd/viewstate/vs_indexed_string_ref.rb +22 -0
- data/lib/wwmd/viewstate/vs_int_enum.rb +25 -0
- data/lib/wwmd/viewstate/vs_list.rb +32 -0
- data/lib/wwmd/viewstate/vs_pair.rb +27 -0
- data/lib/wwmd/viewstate/vs_read_types.rb +11 -0
- data/lib/wwmd/viewstate/vs_read_value.rb +33 -0
- data/lib/wwmd/viewstate/vs_sparse_array.rb +56 -0
- data/lib/wwmd/viewstate/vs_string.rb +29 -0
- data/lib/wwmd/viewstate/vs_string_array.rb +37 -0
- data/lib/wwmd/viewstate/vs_string_formatted.rb +30 -0
- data/lib/wwmd/viewstate/vs_triplet.rb +29 -0
- data/lib/wwmd/viewstate/vs_type.rb +21 -0
- data/lib/wwmd/viewstate/vs_unit.rb +28 -0
- data/lib/wwmd/viewstate/vs_value.rb +33 -0
- data/spec/README +3 -0
- data/spec/form_array.spec +49 -0
- data/spec/spider_csrf_test.spec +28 -0
- data/spec/urlparse_test.spec +89 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- 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,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
|