php-serial 0.9.0 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
- # Php::Serial
1
+ # Php-Serial
2
2
 
3
- TODO: Write a gem description
3
+ PHP serialization library. Reads and writes PHP's serialization format.
4
+ Also has support for reading and writing PHP sessions.
4
5
 
5
6
  ## Installation
6
7
 
@@ -18,7 +19,23 @@ Or install it yourself as:
18
19
 
19
20
  ## Usage
20
21
 
21
- TODO: Write usage instructions here
22
+ This library provides 4 public methods:
23
+ Php.serialize
24
+
25
+ Php.serilialize ['string', 100]
26
+ => "a:2:{i:0;s:6:\"string\";i:1;i:100;}"
27
+ Php.unserialize
28
+
29
+ Php.unserialize "a:2:{i:0;s:6:\"string\";i:1;i:100;}"
30
+ => ["string", 100]
31
+ Php.serialize_session
32
+
33
+ Php.unserialize_session "var_a|s:6:\"string\";var_b|d:3.14"
34
+ => {"var_a"=>"string", "var_b"=>3.14}
35
+ Php.unserialize_session
36
+
37
+ Php.unserialize_session {"var_a"=>"string", "var_b"=>3.14}
38
+ => "var_a|s:6:\"string\";var_b|d:3.14"
22
39
 
23
40
  ## Contributing
24
41
 
@@ -1,6 +1,63 @@
1
1
  require "php-serial/version"
2
2
 
3
3
  module Php
4
+ # Serializes a ruby object into PHP serialized format
5
+ #
6
+ # Params:
7
+ # Mixed var
8
+ # Returns: string
9
+ def self.serialize(var)
10
+ val = ''
11
+ case var.class.to_s
12
+ when 'NilClass'
13
+ val = 'N;'
14
+ when 'Fixnum'
15
+ val = 'i:' + var.to_s + ';'
16
+ when 'Float'
17
+ val = 'd:' + var.to_s + ';'
18
+ when 'TrueClass'
19
+ val = 'b:1' + ';'
20
+ when 'FalseClass'
21
+ val = 'b:0' + ';'
22
+ when 'String', 'Symbol'
23
+ val = 's:' + var.length.to_s + ':' + '"' + var.to_s + '";'
24
+ when 'Array'
25
+ val = 'a:' + var.length.to_s + ':' + '{'
26
+ var.length.times do |index|
27
+ val += serialize(index) + serialize(var[index])
28
+ end
29
+ val += '}'
30
+ when 'Hash'
31
+ val = 'a:' + var.length.to_s + ':' + '{'
32
+ var.each do |item_key, item_value|
33
+ val += serialize(item_key) + serialize(item_value)
34
+ end
35
+ val += '}'
36
+ else
37
+ klass = var.class.to_s
38
+ val = "O:#{klass.length.to_s}:\"#{klass}\":#{var.instance_variables.length}:{"
39
+ var.instance_variables.each do |ivar|
40
+ ivar = ivar.to_s
41
+ ivar.slice!(0)
42
+ val += serialize(ivar) + serialize(var.send(ivar))
43
+ end
44
+ val += '}'
45
+ end
46
+ val
47
+ end
48
+
49
+ # Serializes a hash into PHP session
50
+ #
51
+ # Params:
52
+ # Hash hash
53
+ # Returns: string
54
+ def self.serialize_session(hash)
55
+ serialized_session = ''
56
+ hash.each do |key,value|
57
+ serialized_session += key.to_s + "|" + serialize(value)
58
+ end
59
+ serialized_session
60
+ end
4
61
 
5
62
  # Unserializes a PHP session
6
63
  #
@@ -13,7 +70,7 @@ module Php
13
70
 
14
71
  while !data.empty? do
15
72
  key = extract_until!(data, "|")
16
- hash[key] = unserialize(data)
73
+ hash[key] = unserialize!(data)
17
74
  end
18
75
  hash
19
76
  end
@@ -24,6 +81,17 @@ module Php
24
81
  # String data
25
82
  # Returns: mixed
26
83
  def self.unserialize(data='')
84
+ unserialize!(data.strip)
85
+ end
86
+
87
+ private
88
+
89
+ # Unserializes recursively. Consumes the input string.
90
+ #
91
+ # Params:
92
+ # String data
93
+ # Returns: mixed
94
+ def self.unserialize!(data='')
27
95
  var_type = data.slice!(0)
28
96
  data.slice!(0)
29
97
  case var_type
@@ -45,8 +113,8 @@ module Php
45
113
  length = extract_until!(data, ":").to_i
46
114
  extract_until!(data, '{')
47
115
  length.times do
48
- key = unserialize(data)
49
- value[key] = unserialize(data)
116
+ key = unserialize!(data)
117
+ value[key] = unserialize!(data)
50
118
  end
51
119
  extract_until!(data, "}")
52
120
  # if keys are sequential numbers, return array
@@ -60,72 +128,13 @@ module Php
60
128
  length = extract_until!(data, ":").to_i
61
129
  extract_until!(data, '{')
62
130
  length.times do
63
- key = unserialize(data)
64
- value[key] = unserialize(data)
131
+ key = unserialize!(data)
132
+ value[key] = unserialize!(data)
65
133
  end
66
134
  end
67
135
  value
68
136
  end
69
137
 
70
- # Serializes a hash into PHP session
71
- #
72
- # Params:
73
- # Hash hash
74
- # Returns: string
75
- def self.serialize_session(hash)
76
- serialized_session = ''
77
- hash.each do |key,value|
78
- serialized_session += key.to_s + "|" + serialize(value)
79
- end
80
- serialized_session
81
- end
82
-
83
-
84
- # Serializes a ruby object into PHP serialized format
85
- #
86
- # Params:
87
- # Mixed var
88
- # Returns: string
89
- def self.serialize(var)
90
- val = ''
91
- case var.class.to_s
92
- when 'NilClass'
93
- val = 'N;'
94
- when 'Fixnum'
95
- val = 'i:' + var.to_s + ';'
96
- when 'Float'
97
- val = 'd:' + var.to_s + ';'
98
- when 'TrueClass'
99
- val = 'b:1' + ';'
100
- when 'FalseClass'
101
- val = 'b:0' + ';'
102
- when 'String', 'Symbol'
103
- val = 's:' + var.length.to_s + ':' + '"' + var.to_s + '";'
104
- when 'Array'
105
- val = 'a:' + var.length.to_s + ':' + '{'
106
- var.length.times do |index|
107
- val += serialize(index) + serialize(var[index])
108
- end
109
- val += '}'
110
- when 'Hash'
111
- val = 'a:' + var.length.to_s + ':' + '{'
112
- var.each do |item_key, item_value|
113
- val += serialize(item_key) + serialize(item_value)
114
- end
115
- val += '}'
116
- else
117
- klass = var.class.to_s
118
- val = "O:#{klass.length.to_s}:\"#{klass}\":#{var.instance_variables.length}:{"
119
- var.instance_variables.each do |ivar|
120
- ivar = ivar.to_s
121
- ivar.slice!(0)
122
- val += serialize(ivar) + serialize(var.send(ivar))
123
- end
124
- val += '}'
125
- end
126
- val
127
- end
128
-
129
138
  # Return all characters up to the first occurrence of char
130
139
  # Truncates those characters from input string
131
140
  #
@@ -1,5 +1,5 @@
1
1
  module Php
2
2
  module Serial
3
- VERSION = "0.9.0"
3
+ VERSION = "0.9.5"
4
4
  end
5
5
  end
@@ -126,6 +126,12 @@ describe 'Unserialize' do
126
126
  expected = {"class" => "Person", "first_name" => "John", "last_name" => "Doe"}
127
127
  Php.unserialize(input).must_equal expected
128
128
  end
129
+
130
+ it 'should not alter the input' do
131
+ input = "serialized data"
132
+ Php.unserialize(input)
133
+ input.must_equal "serialized data"
134
+ end
129
135
  end
130
136
 
131
137
 
@@ -167,4 +173,10 @@ describe 'Unserialize Session' do
167
173
  }
168
174
  Php.unserialize_session(input).must_equal expected
169
175
  end
176
+
177
+ it 'should not alter the input' do
178
+ input = "serialized data"
179
+ Php.unserialize_session(input)
180
+ input.must_equal "serialized data"
181
+ end
170
182
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: php-serial
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-14 00:00:00.000000000 Z
12
+ date: 2012-05-17 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: PHP serialization/unserialization with session support
15
15
  email: