divoxx-ruby-php-serialization 0.2.1 → 0.2.2
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/README.rdoc
CHANGED
@@ -2,8 +2,39 @@
|
|
2
2
|
|
3
3
|
Ruby implementation of PHP's serialization. This is special useful for reading PHP session files.
|
4
4
|
|
5
|
-
==
|
5
|
+
== Unserialization examples
|
6
6
|
|
7
|
+
Primitive values
|
8
|
+
|
9
|
+
RubyPhpSerialization.php_unserialize('i:10;') # => 10
|
10
|
+
RubyPhpSerialization.php_unserialize('s:4:"Name";') # => "Name"
|
11
|
+
RubyPhpSerialization.php_unserialize('b:1;') # => true
|
12
|
+
RubyPhpSerialization.php_unserialize('N;') # => nil
|
13
|
+
|
14
|
+
Array
|
15
|
+
|
16
|
+
RubyPhpSerialization.php_unserialize('a:2:{i:0;b:1;i:1;s:3:"foo";};') # => [true, "foo"]
|
17
|
+
|
18
|
+
Hash
|
19
|
+
|
20
|
+
RubyPhpSerialization.php_unserialize('a:2:{s:4:"name";s:7:"Rodrigo";s:3:"age";i:23;};') # => {"name" => "Rodrigo", "age" => 23}
|
21
|
+
|
22
|
+
Object
|
23
|
+
|
24
|
+
class Person
|
25
|
+
attr_accessor :name, :age
|
26
|
+
end
|
27
|
+
|
28
|
+
person = RubyPhpSerialization.php_unserialize('O:6:"Person":2:{s:4:"name";s:7:"Rodrigo";s:3:"age";i:23;};')
|
29
|
+
person.name # => "Rodrigo"
|
30
|
+
person.age # => 23
|
31
|
+
|
32
|
+
Object without class will map to a Struct
|
33
|
+
|
34
|
+
person = RubyPhpSerialization.php_unserialize('O:6:"Person":2:{s:4:"name";s:7:"Rodrigo";s:3:"age";i:23;};')
|
35
|
+
person.class # => Struct::Person
|
36
|
+
person.name # => "Rodrigo"
|
37
|
+
person.age # => 23
|
7
38
|
|
8
39
|
== Copyright
|
9
40
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
@@ -11,7 +11,7 @@ require 'ruby_php_serialization/tokenizer'
|
|
11
11
|
module RubyPhpSerialization
|
12
12
|
class Parser < Racc::Parser
|
13
13
|
|
14
|
-
module_eval(<<'...end parser.y/module_eval...', 'parser.y',
|
14
|
+
module_eval(<<'...end parser.y/module_eval...', 'parser.y', 69)
|
15
15
|
|
16
16
|
def parse(string)
|
17
17
|
@tokenizer = Tokenizer.new(string)
|
@@ -273,45 +273,49 @@ module_eval(<<'.,.,', 'parser.y', 27)
|
|
273
273
|
|
274
274
|
module_eval(<<'.,.,', 'parser.y', 32)
|
275
275
|
def _reduce_14(val, _values, result)
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
276
|
+
if Object.const_defined?(val[4])
|
277
|
+
result = Object.const_get(val[4]).new
|
278
|
+
|
279
|
+
val[9].each do |(attr_name, value)|
|
280
|
+
result.instance_variable_set("@#{attr_name}", value)
|
281
|
+
end
|
282
|
+
else
|
283
|
+
result = Struct.new(val[4], *val[9].map { |(k,v)| k.to_sym }).new(*val[9].map { |(k,v)| v })
|
280
284
|
end
|
281
285
|
|
282
286
|
result
|
283
287
|
end
|
284
288
|
.,.,
|
285
289
|
|
286
|
-
module_eval(<<'.,.,', 'parser.y',
|
290
|
+
module_eval(<<'.,.,', 'parser.y', 44)
|
287
291
|
def _reduce_15(val, _values, result)
|
288
292
|
result = val[0] << val[1]
|
289
293
|
result
|
290
294
|
end
|
291
295
|
.,.,
|
292
296
|
|
293
|
-
module_eval(<<'.,.,', 'parser.y',
|
297
|
+
module_eval(<<'.,.,', 'parser.y', 45)
|
294
298
|
def _reduce_16(val, _values, result)
|
295
299
|
result = []
|
296
300
|
result
|
297
301
|
end
|
298
302
|
.,.,
|
299
303
|
|
300
|
-
module_eval(<<'.,.,', 'parser.y',
|
304
|
+
module_eval(<<'.,.,', 'parser.y', 48)
|
301
305
|
def _reduce_17(val, _values, result)
|
302
306
|
@numeric_array = false unless val[0].is_a?(Integer); result = [val[0], val[2]]
|
303
307
|
result
|
304
308
|
end
|
305
309
|
.,.,
|
306
310
|
|
307
|
-
module_eval(<<'.,.,', 'parser.y',
|
311
|
+
module_eval(<<'.,.,', 'parser.y', 51)
|
308
312
|
def _reduce_18(val, _values, result)
|
309
313
|
@numeric_array = true
|
310
314
|
result
|
311
315
|
end
|
312
316
|
.,.,
|
313
317
|
|
314
|
-
module_eval(<<'.,.,', 'parser.y',
|
318
|
+
module_eval(<<'.,.,', 'parser.y', 53)
|
315
319
|
def _reduce_19(val, _values, result)
|
316
320
|
if @numeric_array
|
317
321
|
result = []
|
@@ -30,10 +30,14 @@ rule
|
|
30
30
|
|
31
31
|
object : 'O' ':' NUMBER ':' STRING ':' NUMBER ':' '{' attribute_list '}'
|
32
32
|
{
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
if Object.const_defined?(val[4])
|
34
|
+
result = Object.const_get(val[4]).new
|
35
|
+
|
36
|
+
val[9].each do |(attr_name, value)|
|
37
|
+
result.instance_variable_set("@#{attr_name}", value)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
result = Struct.new(val[4], *val[9].map { |(k,v)| k.to_sym }).new(*val[9].map { |(k,v)| v })
|
37
41
|
end
|
38
42
|
}
|
39
43
|
;
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-php-serialization}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rodrigo Kochenburger"]
|
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/ruby_php_serialization/parser.rb",
|
31
31
|
"lib/ruby_php_serialization/parser.y",
|
32
32
|
"lib/ruby_php_serialization/tokenizer.rb",
|
33
|
-
"lib/ruby_php_serialization/unserializer.rb",
|
34
33
|
"ruby-php-serialization.gemspec",
|
35
34
|
"spec/ruby_php_serialization_spec.rb",
|
36
35
|
"spec/spec_helper.rb"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: divoxx-ruby-php-serialization
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Kochenburger
|
@@ -65,7 +65,6 @@ files:
|
|
65
65
|
- lib/ruby_php_serialization/parser.rb
|
66
66
|
- lib/ruby_php_serialization/parser.y
|
67
67
|
- lib/ruby_php_serialization/tokenizer.rb
|
68
|
-
- lib/ruby_php_serialization/unserializer.rb
|
69
68
|
- ruby-php-serialization.gemspec
|
70
69
|
- spec/ruby_php_serialization_spec.rb
|
71
70
|
- spec/spec_helper.rb
|