galakei 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/galakei/filter/recode.rb +1 -1
- data/lib/galakei/request.rb +8 -0
- data/lib/galakei/session_id_parameter/in_url.rb +4 -1
- data/lib/galakei/spacer.rb +22 -1
- data/lib/galakei/use_rack_request_to_extract_sid.rb +18 -3
- data/lib/galakei/version.rb +1 -1
- data/spec/acceptance/docomo_css_spec.rb +21 -0
- data/spec/acceptance/session_spec.rb +8 -2
- data/spec/acceptance/support/handsets.rb +4 -0
- data/spec/app/fake.rb +1 -0
- data/spec/galakei/docomo_css/stylesheet_spec.rb +7 -0
- data/spec/galakei/request_spec.rb +10 -0
- data/spec/galakei/spacer_spec.rb +10 -15
- data/spec/spec_helper.rb +1 -0
- metadata +4 -24
data/lib/galakei/request.rb
CHANGED
@@ -23,6 +23,14 @@ module Galakei
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
def au_browser_6?
|
27
|
+
/KDDI.* UP\.Browser\/6\./ =~ user_agent && /UP\.Browser\/6\.2_7/ !~ user_agent
|
28
|
+
end
|
29
|
+
|
30
|
+
def different_cookie_in_ssl?
|
31
|
+
au? || softbank?
|
32
|
+
end
|
33
|
+
|
26
34
|
def galakei?
|
27
35
|
docomo? || au? || softbank?
|
28
36
|
end
|
@@ -19,9 +19,12 @@ module Galakei::SessionIdParameter::InUrl
|
|
19
19
|
return false unless options.is_a?(Hash) && request
|
20
20
|
return true if request.imode_browser_1_0?
|
21
21
|
|
22
|
+
# cookies on older AU handsets using SSL are unreliable
|
23
|
+
return true if request.au_browser_6? && request.ssl?
|
24
|
+
|
22
25
|
# au and softbank have two forms of cookies depending on if it is
|
23
26
|
# http or https, so carry over session id when switching protocols
|
24
27
|
return false unless options[:protocol]
|
25
|
-
|
28
|
+
request.different_cookie_in_ssl? && (request.protocol != options[:protocol])
|
26
29
|
end
|
27
30
|
end
|
data/lib/galakei/spacer.rb
CHANGED
@@ -21,7 +21,28 @@ module Galakei
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def hex
|
24
|
-
|
24
|
+
hex_color = case @color
|
25
|
+
when 'maroon'; '800000'
|
26
|
+
when 'red'; 'ff0000'
|
27
|
+
when 'orange'; 'ffA500'
|
28
|
+
when 'yellow'; 'ffff00'
|
29
|
+
when 'olive'; '808000'
|
30
|
+
when 'purple'; '800080'
|
31
|
+
when 'fuchsia'; 'ff00ff'
|
32
|
+
when 'white'; 'ffffff'
|
33
|
+
when 'lime'; '00ff00'
|
34
|
+
when 'green'; '008000'
|
35
|
+
when 'navy'; '000080'
|
36
|
+
when 'blue'; '0000ff'
|
37
|
+
when 'aqua'; '00ffff'
|
38
|
+
when 'teal'; '008080'
|
39
|
+
when 'black'; '000000'
|
40
|
+
when 'silver'; 'c0c0c0'
|
41
|
+
when 'gray'; '808080'
|
42
|
+
when 'black'; '000000'
|
43
|
+
else @color
|
44
|
+
end
|
45
|
+
HEX[0] + hex_color + HEX[1] + HEX[2]
|
25
46
|
end
|
26
47
|
|
27
48
|
def img_tag(options = {})
|
@@ -1,5 +1,11 @@
|
|
1
1
|
require "action_dispatch/middleware/session/abstract_store"
|
2
2
|
|
3
|
+
# Patch the abstract session store to accomplish the following things:
|
4
|
+
#
|
5
|
+
# - avoid issue https://rails.lighthouseapp.com/projects/8994/tickets/6108-activerecord-session-store-clobbers-params#ticket-6108-2 by using Rack::Request instead of ActionDispatch::Request
|
6
|
+
# - session ID in the params overwrites session ID in the cookie
|
7
|
+
# - make sure we always set the session ID in SSL in case the handset uses different cookies for HTTP/HTTPS
|
8
|
+
|
3
9
|
module ActionDispatch
|
4
10
|
module Session
|
5
11
|
class AbstractStore
|
@@ -7,9 +13,18 @@ module ActionDispatch
|
|
7
13
|
def extract_session_id(env)
|
8
14
|
stale_session_check! do
|
9
15
|
request = Rack::Request.new(env)
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
if ! @cookie_only && request.params[@key]
|
17
|
+
request.params[@key]
|
18
|
+
else
|
19
|
+
request.cookies[@key]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_cookie(request, options)
|
25
|
+
original_condition = request.cookie_jar[@key] != options[:value] || !options[:expires].nil?
|
26
|
+
if original_condition || (request.ssl? && request.different_cookie_in_ssl?)
|
27
|
+
request.cookie_jar[@key] = options
|
13
28
|
end
|
14
29
|
end
|
15
30
|
end
|
data/lib/galakei/version.rb
CHANGED
@@ -19,6 +19,15 @@ class DocomoCssController < ApplicationController
|
|
19
19
|
render :inline => html, :layout => true
|
20
20
|
end
|
21
21
|
|
22
|
+
def div
|
23
|
+
html = <<-EOD
|
24
|
+
<% content_for(:head, stylesheet_link_tag("http://www.galakei.com/external.css")) %>
|
25
|
+
<div>test</div>
|
26
|
+
EOD
|
27
|
+
render :inline => html, :layout => true
|
28
|
+
end
|
29
|
+
|
30
|
+
|
22
31
|
def japanese
|
23
32
|
html = <<-EOD
|
24
33
|
<% content_for(:head, stylesheet_link_tag("docomo_css/simple.css")) %>
|
@@ -56,4 +65,16 @@ feature 'inlining of css' do
|
|
56
65
|
visit '/docomo_css/japanese'
|
57
66
|
page.body.should include("ほげ")
|
58
67
|
end
|
68
|
+
|
69
|
+
%w[#000000 black].each do |s|
|
70
|
+
scenario "requesting page with #{s} border", :driver => :docomo do
|
71
|
+
FakeWeb.register_uri(:get, 'http://www.galakei.com/external.css', :body => "div { border-top: 1px solid #{s} }")
|
72
|
+
visit '/docomo_css/div'
|
73
|
+
div = find('img')
|
74
|
+
div["width"].should == "100%"
|
75
|
+
div["height"].should == "1"
|
76
|
+
visit div['src']
|
77
|
+
page.body.should include("GIF89a")
|
78
|
+
end
|
79
|
+
end
|
59
80
|
end
|
@@ -105,13 +105,19 @@ feature 'session' do
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
scenario 'link https to https for au', :driver => :
|
108
|
+
scenario 'link https to https for au browser 7.2', :driver => :au_7 do
|
109
109
|
visit "https://www.example.com/sessions/link"
|
110
110
|
click_on 'link'
|
111
111
|
page.should have_content("Session Param: false")
|
112
112
|
end
|
113
113
|
|
114
|
-
|
114
|
+
scenario 'link https to https for au browser 6', :driver => :au do
|
115
|
+
visit "https://www.example.com/sessions/link"
|
116
|
+
click_on 'link'
|
117
|
+
page.should have_content("Session Param: true")
|
118
|
+
end
|
119
|
+
|
120
|
+
%w[au au_7 softbank].each do |s|
|
115
121
|
scenario "link http to https for #{s}", :driver => s.to_sym do
|
116
122
|
visit "http://www.example.com/sessions/secure_link"
|
117
123
|
click_on 'secure_link'
|
@@ -21,6 +21,10 @@ Capybara.register_driver :au do |app|
|
|
21
21
|
Capybara::Driver::RackTestWithUserAgent.new(app, "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0")
|
22
22
|
end
|
23
23
|
|
24
|
+
Capybara.register_driver :au_7 do |app|
|
25
|
+
Capybara::Driver::RackTestWithUserAgent.new(app, "KDDI-SA3B UP.Browser/6.2_7.2.7.1.K.1.3.101 (GUI) MMP/2.0")
|
26
|
+
end
|
27
|
+
|
24
28
|
Capybara.register_driver :softbank do |app|
|
25
29
|
Capybara::Driver::RackTestWithUserAgent.new(app, "SoftBank/1.0/943SH/SHJ001/SN*************** Browser/NetFront/3.5 Profile/MIDP-2.0 Configuration/CLDC-1.1")
|
26
30
|
end
|
data/spec/app/fake.rb
CHANGED
@@ -21,6 +21,7 @@ app.initialize!
|
|
21
21
|
|
22
22
|
app.routes.draw do
|
23
23
|
match 'session_generation' => "sessions#session_generation"
|
24
|
+
match 'galakei/spacer/:color' => 'galakei/spacer#create', :defaults => { :format => :gif } # should be directly using config/routes
|
24
25
|
match ':controller(/:action(/:id))'
|
25
26
|
end
|
26
27
|
class ApplicationController < ActionController::Base; end
|
@@ -272,6 +272,13 @@ EOD
|
|
272
272
|
let(:css) { "h1 { border-bottom: 1px solid #000000; } "}
|
273
273
|
it_should_behave_like 'border bottom'
|
274
274
|
end
|
275
|
+
|
276
|
+
context 'border bottom with !important' do
|
277
|
+
let(:css) { "h1 { border-bottom: 1px solid #96ca41 !important; } "}
|
278
|
+
it 'applied border bottom' do
|
279
|
+
subject.next_sibling.to_s.should == %q[<img src="/galakei/spacer/96ca41" width="100%" height="1">]
|
280
|
+
end
|
281
|
+
end
|
275
282
|
end
|
276
283
|
|
277
284
|
context 'border css applied to p' do
|
@@ -34,6 +34,16 @@ describe Galakei::Request do
|
|
34
34
|
before { @request = Rack::Request.new(env_for("AU W51SH")) }
|
35
35
|
it_should_behave_like "non-docomo devices"
|
36
36
|
it_should_behave_like "non-softbank devices"
|
37
|
+
it_should_behave_like "au devices"
|
38
|
+
it("should be browser 6") { @request.should be_au_browser_6 }
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "from AU W54SH" do
|
42
|
+
before { @request = Rack::Request.new(env_for("AU W54SA")) }
|
43
|
+
it_should_behave_like "non-docomo devices"
|
44
|
+
it_should_behave_like "non-softbank devices"
|
45
|
+
it_should_behave_like "au devices"
|
46
|
+
it("should not be browser 6") { @request.should_not be_au_browser_6 }
|
37
47
|
end
|
38
48
|
|
39
49
|
describe "from Vodafone 802N" do
|
data/spec/galakei/spacer_spec.rb
CHANGED
@@ -1,21 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Galakei::Spacer do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
4
|
+
context "#000000" do
|
5
|
+
subject { described_class.new("#000000") }
|
6
|
+
it { subject.img_tag.should == %Q[<img src='/galakei/spacer/000000' width='100%' height='1'>] }
|
7
|
+
it { subject.create.should_not be_nil }
|
8
|
+
end
|
9
|
+
%w[000000 aqua black blue fuchsia gray green lime maroon navy olive orange purple red silver teal white yellow].each do |s|
|
10
|
+
context s do
|
11
|
+
subject { described_class.new(s) }
|
12
|
+
it { subject.img_tag.should == %Q[<img src='/galakei/spacer/#{s}' width='100%' height='1'>] }
|
13
|
+
it { subject.create.should_not be_nil }
|
9
14
|
end
|
10
15
|
end
|
11
|
-
|
12
|
-
describe 'output img_tag' do
|
13
|
-
subject { described_class.new('#000000').img_tag }
|
14
|
-
it { should == %q[<img src='/galakei/spacer/000000' width='100%' height='1'>] }
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'create image binary' do
|
18
|
-
subject { described_class.new('#000000').create }
|
19
|
-
it { should_not be_nil }
|
20
|
-
end
|
21
16
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,6 +9,7 @@ def env_for(device_name)
|
|
9
9
|
"Firefox" => "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.16) Gecko/20101130 Firefox/3.5.16",
|
10
10
|
"Docomo SH-06A" => "DoCoMo/2.0 SH06A3(c500;TB;W24H14)" ,
|
11
11
|
"AU W51SH" => "KDDI-SH32 UP.Browser/6.2.0.11.2.1 (GUI) MMP/2.0",
|
12
|
+
"AU W54SA" => "KDDI-SA3B UP.Browser/6.2_7.2.7.1.K.1.3.101 (GUI) MMP/2.0",
|
12
13
|
"Vodafone 802N" => "Vodafone/1.0/V802N/NJ001/SN*************** Browser/UP.Browser/7.0.2.1.307 Profile/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2 Ext-V-Profile/VSCL-2.0.0",
|
13
14
|
"Softbank 709SC" => "SoftBank/1.0/709SC/SCJ001/SN*************** Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1"
|
14
15
|
}[device_name]
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: galakei
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 6
|
8
|
-
- 2
|
9
|
-
version: 0.6.2
|
4
|
+
prerelease:
|
5
|
+
version: 0.6.3
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Paul McMahon
|
@@ -16,7 +12,7 @@ autorequire:
|
|
16
12
|
bindir: bin
|
17
13
|
cert_chain: []
|
18
14
|
|
19
|
-
date: 2011-04-
|
15
|
+
date: 2011-04-20 00:00:00 +09:00
|
20
16
|
default_executable:
|
21
17
|
dependencies:
|
22
18
|
- !ruby/object:Gem::Dependency
|
@@ -27,10 +23,6 @@ dependencies:
|
|
27
23
|
requirements:
|
28
24
|
- - ">="
|
29
25
|
- !ruby/object:Gem::Version
|
30
|
-
segments:
|
31
|
-
- 3
|
32
|
-
- 0
|
33
|
-
- 3
|
34
26
|
version: 3.0.3
|
35
27
|
type: :runtime
|
36
28
|
version_requirements: *id001
|
@@ -42,10 +34,6 @@ dependencies:
|
|
42
34
|
requirements:
|
43
35
|
- - ">="
|
44
36
|
- !ruby/object:Gem::Version
|
45
|
-
segments:
|
46
|
-
- 1
|
47
|
-
- 2
|
48
|
-
- 1
|
49
37
|
version: 1.2.1
|
50
38
|
type: :runtime
|
51
39
|
version_requirements: *id002
|
@@ -57,8 +45,6 @@ dependencies:
|
|
57
45
|
requirements:
|
58
46
|
- - ">="
|
59
47
|
- !ruby/object:Gem::Version
|
60
|
-
segments:
|
61
|
-
- 0
|
62
48
|
version: "0"
|
63
49
|
type: :runtime
|
64
50
|
version_requirements: *id003
|
@@ -70,8 +56,6 @@ dependencies:
|
|
70
56
|
requirements:
|
71
57
|
- - ">="
|
72
58
|
- !ruby/object:Gem::Version
|
73
|
-
segments:
|
74
|
-
- 0
|
75
59
|
version: "0"
|
76
60
|
type: :runtime
|
77
61
|
version_requirements: *id004
|
@@ -156,21 +140,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
156
140
|
requirements:
|
157
141
|
- - ">="
|
158
142
|
- !ruby/object:Gem::Version
|
159
|
-
segments:
|
160
|
-
- 0
|
161
143
|
version: "0"
|
162
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
145
|
none: false
|
164
146
|
requirements:
|
165
147
|
- - ">="
|
166
148
|
- !ruby/object:Gem::Version
|
167
|
-
segments:
|
168
|
-
- 0
|
169
149
|
version: "0"
|
170
150
|
requirements: []
|
171
151
|
|
172
152
|
rubyforge_project: galakei
|
173
|
-
rubygems_version: 1.
|
153
|
+
rubygems_version: 1.6.2
|
174
154
|
signing_key:
|
175
155
|
specification_version: 3
|
176
156
|
summary: Japanese feature phones support
|