php_session 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/lib/php_session/decoder.rb +18 -14
- data/lib/php_session/version.rb +1 -1
- data/spec/php_session/decoder_spec.rb +17 -0
- metadata +15 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8550806b73142b48e0e82596af2e4f1b8e8ab363
|
4
|
+
data.tar.gz: 80ad0853de0fea1c9e22c460d65bb60bdae9c3fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92cfdb1e5126e6d8a7819e3d03467586bd3c0aa39b779586d900d6ae46d01dfb233353dcd909b0d4a6945c8cccecb804c0c70d1ba19b69462dcf63cc54c857b8
|
7
|
+
data.tar.gz: c0416ce6aee7827f08a5f041f24893ba16bed74f4b29e97f46cb5e41937d335c456be45bf88c5de36169998e7553ec3233b9d8fcecbbc21f815a719d95dc6de4
|
data/lib/php_session/decoder.rb
CHANGED
@@ -5,6 +5,10 @@ class PHPSession
|
|
5
5
|
attr_reader :encoding, :encoding_option
|
6
6
|
|
7
7
|
def self.decode(string, encoding = nil, encoding_option = {})
|
8
|
+
if string.nil?
|
9
|
+
string = ""
|
10
|
+
end
|
11
|
+
string.chomp!
|
8
12
|
self.new(string, encoding, encoding_option).decode
|
9
13
|
end
|
10
14
|
|
@@ -118,7 +122,7 @@ class PHPSession
|
|
118
122
|
module State
|
119
123
|
class VarName
|
120
124
|
def self.parse(decoder)
|
121
|
-
matches =
|
125
|
+
matches = /\A(.*?)\|(.*)\Z/m.match(decoder.buffer)
|
122
126
|
raise Errors::ParseError, "invalid format" if matches.nil?
|
123
127
|
varName = matches[1]
|
124
128
|
decoder.buffer = matches[2]
|
@@ -131,35 +135,35 @@ class PHPSession
|
|
131
135
|
class VarType
|
132
136
|
def self.parse(decoder)
|
133
137
|
case decoder.buffer
|
134
|
-
when
|
138
|
+
when /\As:(\d+):(.*)\Z/m # string
|
135
139
|
decoder.buffer = $2
|
136
140
|
decoder.stack.push($1.to_i)
|
137
141
|
decoder.state = String
|
138
|
-
when
|
142
|
+
when /\Ai:(-?\d+);(.*)\Z/m #int
|
139
143
|
decoder.buffer = $2
|
140
144
|
decoder.process_value($1.to_i)
|
141
|
-
when
|
145
|
+
when /\Ad:(-?\d+(?:\.\d+)?);(.*)\Z/m # double
|
142
146
|
decoder.buffer = $2
|
143
147
|
decoder.process_value($1.to_f)
|
144
|
-
when
|
148
|
+
when /\Aa:(\d+):(.*)\Z/m # array
|
145
149
|
decoder.buffer = $2
|
146
150
|
decoder.start_array($1.to_i)
|
147
151
|
decoder.state = ArrayStart
|
148
|
-
when
|
152
|
+
when /\A(N);(.*)\Z/m # null
|
149
153
|
decoder.buffer = $2
|
150
154
|
decoder.process_value(nil)
|
151
|
-
when
|
155
|
+
when /\Ab:([01]);(.*)\Z/m # boolean
|
152
156
|
decoder.buffer = $2
|
153
157
|
bool = case $1
|
154
158
|
when "0" then false
|
155
159
|
when "1" then true
|
156
160
|
end
|
157
161
|
decoder.process_value(bool)
|
158
|
-
when
|
162
|
+
when /\AO:(\d+):(.*)\Z/m # object
|
159
163
|
decoder.buffer = $2
|
160
164
|
decoder.stack.push($1.to_i);
|
161
165
|
decoder.state = ClassName
|
162
|
-
when
|
166
|
+
when /\A[Rr]:(\d+);(.*)\Z/m # reference count?
|
163
167
|
decoder.buffer = $2
|
164
168
|
decoder.process_value($1)
|
165
169
|
else
|
@@ -174,7 +178,7 @@ class PHPSession
|
|
174
178
|
length_include_quotes = length + 3
|
175
179
|
|
176
180
|
value_include_quotes = decoder.buffer.byteslice(0, length_include_quotes)
|
177
|
-
value = value_include_quotes.gsub(
|
181
|
+
value = value_include_quotes.gsub(/\A"/,'').gsub(/";\Z/, '')
|
178
182
|
|
179
183
|
value = value.encode(decoder.encoding, decoder.encoding_option) if decoder.encoding
|
180
184
|
decoder.buffer = decoder.buffer.byteslice(length_include_quotes .. -1)
|
@@ -185,7 +189,7 @@ class PHPSession
|
|
185
189
|
|
186
190
|
class ArrayStart
|
187
191
|
def self.parse(decoder)
|
188
|
-
raise Errors::ParseError, "invalid array format" unless decoder.buffer =~
|
192
|
+
raise Errors::ParseError, "invalid array format" unless decoder.buffer =~ /\A{/
|
189
193
|
decoder.buffer = decoder.buffer[1..-1]
|
190
194
|
if decoder.elements_count > 0
|
191
195
|
decoder.state = VarType
|
@@ -197,7 +201,7 @@ class PHPSession
|
|
197
201
|
|
198
202
|
class ArrayEnd
|
199
203
|
def self.parse(decoder)
|
200
|
-
raise Errors::ParseError, "invalid array format" unless decoder.buffer =~
|
204
|
+
raise Errors::ParseError, "invalid array format" unless decoder.buffer =~ /\A}/
|
201
205
|
decoder.buffer = decoder.buffer[1..-1]
|
202
206
|
next_state = decoder.in_array ? VarType : VarName;
|
203
207
|
decoder.state = next_state
|
@@ -210,11 +214,11 @@ class PHPSession
|
|
210
214
|
length_include_quotes = length + 3
|
211
215
|
|
212
216
|
value_include_quotes = decoder.buffer[0, length_include_quotes]
|
213
|
-
klass = value_include_quotes.gsub(
|
217
|
+
klass = value_include_quotes.gsub(/\A"/,'').gsub(/":\Z/,'')
|
214
218
|
|
215
219
|
decoder.buffer = decoder.buffer[length_include_quotes..-1]
|
216
220
|
|
217
|
-
raise Errors::ParseError, "invalid class format" unless decoder.buffer =~
|
221
|
+
raise Errors::ParseError, "invalid class format" unless decoder.buffer =~ /\A(\d+):(.*)/m
|
218
222
|
decoder.buffer = $2
|
219
223
|
decoder.start_array($1.to_i, klass)
|
220
224
|
decoder.state = ArrayStart
|
data/lib/php_session/version.rb
CHANGED
@@ -178,6 +178,23 @@ EOS
|
|
178
178
|
}
|
179
179
|
})
|
180
180
|
end
|
181
|
+
context 'when given nil' do
|
182
|
+
it "should return {}" do
|
183
|
+
expect(PHPSession::Decoder.decode(nil)).to eq({})
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
context 'when given string including \n' do
|
188
|
+
it 'shoud return valid session_data' do
|
189
|
+
session_text = %Q!key|a:2:{s:2:\"k1\";s:3:\"v\n1";s:2:"k2";s:2:"v2";}!
|
190
|
+
expect(PHPSession::Decoder.decode(session_text)).to eq({
|
191
|
+
"key" => {
|
192
|
+
"k1" => "v\n1",
|
193
|
+
"k2" => "v2"
|
194
|
+
}
|
195
|
+
})
|
196
|
+
end
|
197
|
+
end
|
181
198
|
end
|
182
199
|
end
|
183
200
|
end
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: php_session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shinpei Maruyama
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-04-23 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: '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: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
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: '0'
|
55
55
|
description: php session reader/writer
|
@@ -59,9 +59,9 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
63
|
-
- .rspec
|
64
|
-
- .travis.yml
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rspec"
|
64
|
+
- ".travis.yml"
|
65
65
|
- Gemfile
|
66
66
|
- LICENSE.txt
|
67
67
|
- README.md
|
@@ -86,17 +86,17 @@ require_paths:
|
|
86
86
|
- lib
|
87
87
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
|
-
- -
|
89
|
+
- - ">="
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
requirements: []
|
98
98
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.
|
99
|
+
rubygems_version: 2.2.2
|
100
100
|
signing_key:
|
101
101
|
specification_version: 4
|
102
102
|
summary: php_session is a php session file reader/writer. Multibyte string and exclusive
|
@@ -106,3 +106,4 @@ test_files:
|
|
106
106
|
- spec/php_session/encoder_spec.rb
|
107
107
|
- spec/php_session_spec.rb
|
108
108
|
- spec/spec_helper.rb
|
109
|
+
has_rdoc:
|