jpmobile 5.0.0 → 5.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -3
  3. data/.rubocop.yml +123 -0
  4. data/CONTRIBUTING.md +16 -14
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +198 -0
  7. data/README.md +409 -0
  8. data/Rakefile +9 -9
  9. data/circle.yml +14 -0
  10. data/jpmobile.gemspec +9 -10
  11. data/lib/jpmobile.rb +6 -5
  12. data/lib/jpmobile/datum_conv.rb +35 -35
  13. data/lib/jpmobile/docomo_guid.rb +7 -8
  14. data/lib/jpmobile/email.rb +12 -12
  15. data/lib/jpmobile/emoticon.rb +85 -76
  16. data/lib/jpmobile/emoticon/au.rb +1284 -1284
  17. data/lib/jpmobile/emoticon/conversion_table.rb +3905 -3906
  18. data/lib/jpmobile/emoticon/docomo.rb +252 -252
  19. data/lib/jpmobile/emoticon/google.rb +9 -9
  20. data/lib/jpmobile/emoticon/softbank.rb +471 -471
  21. data/lib/jpmobile/emoticon/unicode.rb +9 -9
  22. data/lib/jpmobile/emoticon/z_combine.rb +20 -23
  23. data/lib/jpmobile/encoding.rb +1 -1
  24. data/lib/jpmobile/fallback_view_selector.rb +2 -3
  25. data/lib/jpmobile/filter.rb +44 -47
  26. data/lib/jpmobile/helpers.rb +38 -38
  27. data/lib/jpmobile/hook_action_view.rb +7 -7
  28. data/lib/jpmobile/hook_test_request.rb +0 -1
  29. data/lib/jpmobile/lookup_context.rb +1 -2
  30. data/lib/jpmobile/mail.rb +156 -134
  31. data/lib/jpmobile/mailer.rb +4 -4
  32. data/lib/jpmobile/mobile/abstract_mobile.rb +62 -36
  33. data/lib/jpmobile/mobile/android.rb +0 -1
  34. data/lib/jpmobile/mobile/android_tablet.rb +0 -1
  35. data/lib/jpmobile/mobile/au.rb +40 -28
  36. data/lib/jpmobile/mobile/black_berry.rb +0 -1
  37. data/lib/jpmobile/mobile/ddipocket.rb +1 -2
  38. data/lib/jpmobile/mobile/docomo.rb +47 -36
  39. data/lib/jpmobile/mobile/emobile.rb +1 -2
  40. data/lib/jpmobile/mobile/google_emoticon.rb +1 -1
  41. data/lib/jpmobile/mobile/ipad.rb +0 -1
  42. data/lib/jpmobile/mobile/iphone.rb +0 -1
  43. data/lib/jpmobile/mobile/smart_phone.rb +0 -1
  44. data/lib/jpmobile/mobile/softbank.rb +24 -20
  45. data/lib/jpmobile/mobile/tablet.rb +0 -1
  46. data/lib/jpmobile/mobile/unicode_emoticon.rb +15 -15
  47. data/lib/jpmobile/mobile/vodafone.rb +0 -1
  48. data/lib/jpmobile/mobile/willcom.rb +7 -7
  49. data/lib/jpmobile/mobile/windows_phone.rb +0 -1
  50. data/lib/jpmobile/path_set.rb +1 -1
  51. data/lib/jpmobile/position.rb +30 -14
  52. data/lib/jpmobile/rack/filter.rb +4 -4
  53. data/lib/jpmobile/rack/mobile_carrier.rb +0 -1
  54. data/lib/jpmobile/rack/params_filter.rb +7 -6
  55. data/lib/jpmobile/rails.rb +3 -4
  56. data/lib/jpmobile/request_with_mobile.rb +9 -6
  57. data/lib/jpmobile/resolver.rb +23 -17
  58. data/lib/jpmobile/session/active_record_store.rb +7 -9
  59. data/lib/jpmobile/session/mem_cache_store.rb +7 -9
  60. data/lib/jpmobile/sinatra.rb +1 -1
  61. data/lib/jpmobile/trans_sid.rb +15 -20
  62. data/lib/jpmobile/util.rb +61 -77
  63. data/lib/jpmobile/version.rb +1 -1
  64. data/lib/tasks/jpmobile_tasks.rake +35 -28
  65. data/spec/rack/jpmobile/android_spec.rb +5 -5
  66. data/spec/rack/jpmobile/au_spec.rb +74 -59
  67. data/spec/rack/jpmobile/black_berry_spec.rb +5 -5
  68. data/spec/rack/jpmobile/docomo_spec.rb +77 -64
  69. data/spec/rack/jpmobile/emoticon_spec.rb +137 -121
  70. data/spec/rack/jpmobile/filter_spec.rb +149 -128
  71. data/spec/rack/jpmobile/iphone_spec.rb +9 -8
  72. data/spec/rack/jpmobile/mobile_by_ua_spec.rb +22 -21
  73. data/spec/rack/jpmobile/params_filter_spec.rb +104 -96
  74. data/spec/rack/jpmobile/softbank_spec.rb +49 -42
  75. data/spec/rack/jpmobile/willcom_spec.rb +22 -18
  76. data/spec/rack/jpmobile/windows_phone.rb +5 -5
  77. data/spec/rack_helper.rb +9 -8
  78. data/spec/spec_helper.rb +5 -6
  79. data/spec/unit/decorated_mail_spec.rb +8 -9
  80. data/spec/unit/email_spec.rb +44 -44
  81. data/spec/unit/emoticon_spec.rb +57 -58
  82. data/spec/unit/encoding_spec.rb +35 -36
  83. data/spec/unit/is_carrier_spec.rb +49 -49
  84. data/spec/unit/mail_spec.rb +153 -143
  85. data/spec/unit/mobile/iphone_spec.rb +6 -7
  86. data/spec/unit/receive_mail_spec.rb +172 -173
  87. data/spec/unit/spec_helper.rb +6 -6
  88. data/spec/unit/util_spec.rb +125 -46
  89. data/spec/unit/valid_ip_spec.rb +35 -35
  90. data/spec/unit/variants_spec.rb +18 -19
  91. data/test/rails/overrides/Gemfile +54 -0
  92. data/test/rails/overrides/Gemfile.jpmobile +1 -2
  93. data/test/rails/overrides/app/controllers/admin/top_controller.rb +1 -1
  94. data/test/rails/overrides/app/controllers/docomo_guid_base_controller.rb +1 -1
  95. data/test/rails/overrides/app/controllers/filter_controller_base.rb +14 -6
  96. data/test/rails/overrides/app/controllers/hankaku_input_filter_controller.rb +1 -1
  97. data/test/rails/overrides/app/controllers/mobile_spec_controller.rb +1 -1
  98. data/test/rails/overrides/app/controllers/template_path_controller.rb +1 -2
  99. data/test/rails/overrides/app/controllers/trans_sid_base_controller.rb +18 -10
  100. data/test/rails/overrides/app/controllers/trans_sid_metal_controller.rb +0 -1
  101. data/test/rails/overrides/app/mailers/decorated_mailer.rb +3 -4
  102. data/test/rails/overrides/app/mailers/mobile_mailer.rb +5 -6
  103. data/test/rails/overrides/app/mailers/normal_mailer.rb +2 -3
  104. data/test/rails/overrides/autotest/discover.rb +2 -2
  105. data/test/rails/overrides/config/initializers/jpmobile_generator.rb +2 -2
  106. data/test/rails/overrides/config/routes.rb +95 -2
  107. data/test/rails/overrides/db/migrate/001_add_sessions_table.rb +2 -2
  108. data/test/rails/overrides/db/migrate/20100824062306_create_users.rb +1 -1
  109. data/test/rails/overrides/spec/controllers/docomo_guid_spec.rb +24 -25
  110. data/test/rails/overrides/spec/controllers/helpers_spec.rb +88 -88
  111. data/test/rails/overrides/spec/controllers/mobile_spec_controller_spec.rb +9 -9
  112. data/test/rails/overrides/spec/controllers/template_path_spec.rb +19 -19
  113. data/test/rails/overrides/spec/features/admin/top_spec.rb +7 -7
  114. data/test/rails/overrides/spec/features/filter_spec.rb +101 -102
  115. data/test/rails/overrides/spec/helpers/helpers_spec.rb +4 -4
  116. data/test/rails/overrides/spec/mailers/decorated_mailer_spec.rb +12 -12
  117. data/test/rails/overrides/spec/mailers/mobile_mailer_spec.rb +209 -194
  118. data/test/rails/overrides/spec/mailers/normal_mailer_spec.rb +10 -10
  119. data/test/rails/overrides/spec/rails_helper.rb +1 -1
  120. data/test/rails/overrides/spec/requests/docomo_spec.rb +13 -13
  121. data/test/rails/overrides/spec/requests/emobile_spec.rb +19 -19
  122. data/test/rails/overrides/spec/requests/pc_spec.rb +6 -6
  123. data/test/rails/overrides/spec/requests/softbank_emulator_spec.rb +6 -6
  124. data/test/rails/overrides/spec/requests/template_path_spec.rb +60 -60
  125. data/test/rails/overrides/spec/requests/trans_sid_spec.rb +89 -89
  126. data/test/sinatra/test/filter_test.rb +10 -11
  127. data/tools/e4u_conv.rb +0 -1
  128. metadata +18 -14
  129. data/README +0 -0
  130. data/README.rdoc +0 -308
@@ -2,14 +2,14 @@ require 'rails_helper'
2
2
 
3
3
  def get_with_session(controller, action, user_agent)
4
4
  open_session do |sess|
5
- sess.get "/#{controller}/#{action}", params: {}, env: {"HTTP_USER_AGENT" => user_agent}
5
+ sess.get "/#{controller}/#{action}", params: {}, env: { 'HTTP_USER_AGENT' => user_agent }
6
6
  end
7
7
  end
8
8
 
9
9
  def describe_mobile_with_ua(user_agent, charset, &block)
10
10
  describe("trans_sid :mobile が指定されているコントローラに #{user_agent} からアクセスしたとき") do
11
11
  before(:each) do
12
- @controller = "trans_sid_mobile"
12
+ @controller = 'trans_sid_mobile'
13
13
  @user_agent = user_agent
14
14
  @charset = charset
15
15
  end
@@ -18,186 +18,186 @@ def describe_mobile_with_ua(user_agent, charset, &block)
18
18
  end
19
19
  end
20
20
 
21
- describe "trans_sid functional", type: :request do
21
+ describe 'trans_sid functional', type: :request do
22
22
  before(:each) do
23
- @user ||= User.create(name: "hoge")
23
+ @user ||= User.create(name: 'hoge')
24
24
  end
25
25
 
26
- shared_examples_for "trans_sid が起動しないとき" do
27
- it "で link_to の自動書き換えが行われない" do
28
- res = get_with_session(@controller, "link", @user_agent)
26
+ shared_examples_for 'trans_sid が起動しないとき' do
27
+ it 'で link_to の自動書き換えが行われない' do
28
+ res = get_with_session(@controller, 'link', @user_agent)
29
29
 
30
- expect(res.response.body).to match(/<a href=\"\/.+?\/link\">linkto<\/a>/)
30
+ expect(res.response.body).to match(%r{<a href=\"/.+?/link\">linkto</a>})
31
31
  end
32
- it "で form の自動書き換えが行われない" do
33
- res = get_with_session(@controller, "form", @user_agent)
32
+ it 'で form の自動書き換えが行われない' do
33
+ res = get_with_session(@controller, 'form', @user_agent)
34
34
 
35
- expect(res.response.body).to match(/<form.*action=\"\/.+?\/form\".*accept-charset="#{@charset}"/)
35
+ expect(res.response.body).to match(%r{<form.*action=\"/.+?/form\".*accept-charset="#{@charset}"})
36
36
  end
37
- it "で redirect の自動書き換えが行われない" do
38
- res = get_with_session(@controller, "redirect", @user_agent)
37
+ it 'で redirect の自動書き換えが行われない' do
38
+ res = get_with_session(@controller, 'redirect', @user_agent)
39
39
 
40
- expect(res.response.header['Location']).to match(/\/$/)
40
+ expect(res.response.header['Location']).to match(%r{/$})
41
41
  end
42
42
  end
43
43
 
44
- shared_examples_for "trans_sid が起動するとき" do
45
- it "で link_to の自動書き換えが行われる" do
46
- res = get_with_session(@controller, "link", @user_agent)
44
+ shared_examples_for 'trans_sid が起動するとき' do
45
+ it 'で link_to の自動書き換えが行われる' do
46
+ res = get_with_session(@controller, 'link', @user_agent)
47
47
 
48
- expect(res.response.body).to match(/<a href=\"\/.+?\/link\?_session_id=[a-zA-Z0-9]{32}\">linkto<\/a>/)
48
+ expect(res.response.body).to match(%r{<a href=\"/.+?/link\?_session_id=[a-zA-Z0-9]{32}\">linkto</a>})
49
49
  end
50
- it "で form内にhiddenが差し込まれる" do
51
- res = get_with_session(@controller, "form", @user_agent)
50
+ it 'で form内にhiddenが差し込まれる' do
51
+ res = get_with_session(@controller, 'form', @user_agent)
52
52
  expect(res.response.body).to match(/<input type=\"hidden\" name=\".+\" value=\"[a-zA-Z0-9]{32}\"/)
53
53
  end
54
- it "で form の自動書き換えが行われる" do
55
- res = get_with_session(@controller, "form", @user_agent)
54
+ it 'で form の自動書き換えが行われる' do
55
+ res = get_with_session(@controller, 'form', @user_agent)
56
56
 
57
- expect(res.response.body).to match(/<form.*action=\"\/.+?\/form\?_session_id=[a-zA-Z0-9]{32}\".*accept-charset="#{@charset}"/)
57
+ expect(res.response.body).to match(%r{<form.*action=\"/.+?/form\?_session_id=[a-zA-Z0-9]{32}\".*accept-charset="#{@charset}"})
58
58
  end
59
- it "で redirect の自動書き換えが行われる" do
60
- res = get_with_session(@controller, "redirect", @user_agent)
59
+ it 'で redirect の自動書き換えが行われる' do
60
+ res = get_with_session(@controller, 'redirect', @user_agent)
61
61
 
62
62
  expect(res.response.header['Location']).to match(/\?_session_id=[a-zA-Z0-9]{32}$/)
63
63
  end
64
64
 
65
65
  # resource paths
66
- it "で @user の link_to の自動書き換えが行われる" do
67
- res = get_with_session(@controller, "link_path", @user_agent)
66
+ it 'で @user の link_to の自動書き換えが行われる' do
67
+ res = get_with_session(@controller, 'link_path', @user_agent)
68
68
 
69
- expect(res.response.body).to match(/<a href=\"\/users\/1\?_session_id=[a-zA-Z0-9]{32}\">linkto<\/a>/)
69
+ expect(res.response.body).to match(%r{<a href=\"/users/1\?_session_id=[a-zA-Z0-9]{32}\">linkto</a>})
70
70
  end
71
- it "で @user の form の自動書き換えが行われる" do
72
- res = get_with_session(@controller, "form_path", @user_agent)
71
+ it 'で @user の form の自動書き換えが行われる' do
72
+ res = get_with_session(@controller, 'form_path', @user_agent)
73
73
 
74
- expect(res.response.body).to match(/<form.*action=\"\/users\/1\?_session_id=[a-zA-Z0-9]{32}\".*accept-charset="#{@charset}"/)
74
+ expect(res.response.body).to match(%r{<form.*action=\"/users/1\?_session_id=[a-zA-Z0-9]{32}\".*accept-charset="#{@charset}"})
75
75
  end
76
- it "で @path の redirect の自動書き換えが行われる" do
77
- res = get_with_session(@controller, "redirect_path", @user_agent)
76
+ it 'で @path の redirect の自動書き換えが行われる' do
77
+ res = get_with_session(@controller, 'redirect_path', @user_agent)
78
78
 
79
79
  expect(res.response.header['Location']).to match(/\?_session_id=[a-zA-Z0-9]{32}$/)
80
80
  end
81
81
 
82
82
  # resource path with prefix
83
- it "で [:admin, @user] の link_to の自動書き換えが行われる" do
84
- res = get_with_session(@controller, "link_path_admin", @user_agent)
83
+ it 'で [:admin, @user] の link_to の自動書き換えが行われる' do
84
+ res = get_with_session(@controller, 'link_path_admin', @user_agent)
85
85
 
86
- expect(res.response.body).to match(/<a href=\"\/admin\/users\/1\?_session_id=[a-zA-Z0-9]{32}\">linkto<\/a>/)
86
+ expect(res.response.body).to match(%r{<a href=\"/admin/users/1\?_session_id=[a-zA-Z0-9]{32}\">linkto</a>})
87
87
  end
88
- it "で [:admin, @user] の form の自動書き換えが行われる" do
89
- res = get_with_session(@controller, "form_path_admin", @user_agent)
88
+ it 'で [:admin, @user] の form の自動書き換えが行われる' do
89
+ res = get_with_session(@controller, 'form_path_admin', @user_agent)
90
90
 
91
- expect(res.response.body).to match(/<form.*action=\"\/admin\/users\/1\?_session_id=[a-zA-Z0-9]{32}\".* accept-charset="#{@charset}"/)
91
+ expect(res.response.body).to match(%r{<form.*action=\"/admin/users/1\?_session_id=[a-zA-Z0-9]{32}\".* accept-charset="#{@charset}"})
92
92
  end
93
- it "で [:admin, @path] の redirect の自動書き換えが行われる" do
94
- res = get_with_session(@controller, "redirect_path_admin", @user_agent)
93
+ it 'で [:admin, @path] の redirect の自動書き換えが行われる' do
94
+ res = get_with_session(@controller, 'redirect_path_admin', @user_agent)
95
95
 
96
96
  expect(res.response.header['Location']).to match(/\?_session_id=[a-zA-Z0-9]{32}$/)
97
97
  end
98
98
  end
99
99
 
100
- describe TransSidBaseController, "という trans_sid が有効になっていないコントローラ" do
100
+ describe TransSidBaseController, 'という trans_sid が有効になっていないコントローラ' do
101
101
  before(:each) do
102
- @controller = "trans_sid_base"
103
- @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
104
- @charset = "UTF-8"
102
+ @controller = 'trans_sid_base'
103
+ @user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)'
104
+ @charset = 'UTF-8'
105
105
  end
106
106
 
107
- it "の trans_sid_mode は nil" do
108
- get "/#{@controller}/link", params: {}, env: {"HTTP_USER_AGENT" => @user_agent}
107
+ it 'の trans_sid_mode は nil' do
108
+ get "/#{@controller}/link", params: {}, env: { 'HTTP_USER_AGENT' => @user_agent }
109
109
 
110
110
  expect(controller.trans_sid_mode).to be_nil
111
111
  end
112
- it_should_behave_like "trans_sid が起動しないとき"
112
+ it_should_behave_like 'trans_sid が起動しないとき'
113
113
  end
114
114
 
115
- describe TransSidNoneController, "という trans_sid :none が指定されているコントローラ" do
115
+ describe TransSidNoneController, 'という trans_sid :none が指定されているコントローラ' do
116
116
  before(:each) do
117
- @controller = "trans_sid_none"
118
- @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
119
- @charset = "UTF-8"
117
+ @controller = 'trans_sid_none'
118
+ @user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)'
119
+ @charset = 'UTF-8'
120
120
  end
121
121
 
122
- it "の trans_sid_mode は :none" do
123
- get "/#{@controller}/link", params: {}, env: {"HTTP_USER_AGENT" => @user_agent}
122
+ it 'の trans_sid_mode は :none' do
123
+ get "/#{@controller}/link", params: {}, env: { 'HTTP_USER_AGENT' => @user_agent }
124
124
 
125
125
  expect(controller.trans_sid_mode).to eq(:none)
126
126
  end
127
- it_should_behave_like "trans_sid が起動しないとき"
127
+ it_should_behave_like 'trans_sid が起動しないとき'
128
128
  end
129
129
 
130
- describe TransSidAlwaysController, "という trans_sid :always が指定されているコントローラ" do
130
+ describe TransSidAlwaysController, 'という trans_sid :always が指定されているコントローラ' do
131
131
  before(:each) do
132
- @controller = "trans_sid_always"
133
- @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
134
- @charset = "UTF-8"
132
+ @controller = 'trans_sid_always'
133
+ @user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)'
134
+ @charset = 'UTF-8'
135
135
  end
136
136
 
137
- it "の trans_sid_mode は :always" do
138
- get "/#{@controller}/link", params: {}, env: {"HTTP_USER_AGENT" => @user_agent}
137
+ it 'の trans_sid_mode は :always' do
138
+ get "/#{@controller}/link", params: {}, env: { 'HTTP_USER_AGENT' => @user_agent }
139
139
 
140
140
  expect(controller.trans_sid_mode).to eq(:always)
141
141
  end
142
- it_should_behave_like "trans_sid が起動するとき"
142
+ it_should_behave_like 'trans_sid が起動するとき'
143
143
  end
144
144
 
145
- describe TransSidMetalController, "という ActionController::Metal のコントローラ" do
145
+ describe TransSidMetalController, 'という ActionController::Metal のコントローラ' do
146
146
  before(:each) do
147
- @controller = "trans_sid_metal"
148
- @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
149
- @charset = "UTF-8"
147
+ @controller = 'trans_sid_metal'
148
+ @user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)'
149
+ @charset = 'UTF-8'
150
150
  end
151
151
 
152
- it "で redirect_to がエラーにならない" do
153
- res = get_with_session(@controller, "redirect", @user_agent)
152
+ it 'で redirect_to がエラーにならない' do
153
+ res = get_with_session(@controller, 'redirect', @user_agent)
154
154
 
155
155
  expect(res.response).to be_redirect
156
156
  end
157
157
  end
158
158
 
159
- describe TransSidMobileController, "という trans_sid :mobile が指定されているコントローラ" do
159
+ describe TransSidMobileController, 'という trans_sid :mobile が指定されているコントローラ' do
160
160
  before(:each) do
161
- @controller = "trans_sid_mobile"
162
- @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
163
- @charset = "UTF-8"
161
+ @controller = 'trans_sid_mobile'
162
+ @user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)'
163
+ @charset = 'UTF-8'
164
164
  end
165
165
 
166
- it "の trans_sid_mode は :mobile" do
167
- get "/#{@controller}/link", params: {}, env: {"HTTP_USER_AGENT" => @user_agent}
166
+ it 'の trans_sid_mode は :mobile' do
167
+ get "/#{@controller}/link", params: {}, env: { 'HTTP_USER_AGENT' => @user_agent }
168
168
 
169
169
  expect(controller.trans_sid_mode).to eq(:mobile)
170
170
  end
171
171
  end
172
172
 
173
- describe TransSidAlwaysAndSessionOffController, "という trans_sid :always が指定されていて session がロードされていないとき" do
173
+ describe TransSidAlwaysAndSessionOffController, 'という trans_sid :always が指定されていて session がロードされていないとき' do
174
174
  before(:each) do
175
- @controller = "trans_sid_always_and_session_off"
176
- @user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
177
- @charset = "UTF-8"
175
+ @controller = 'trans_sid_always_and_session_off'
176
+ @user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)'
177
+ @charset = 'UTF-8'
178
178
  end
179
179
 
180
- it "の trans_sid_mode は :always" do
181
- res = get_with_session(@controller, "link", @user_agent)
180
+ it 'の trans_sid_mode は :always' do
181
+ res = get_with_session(@controller, 'link', @user_agent)
182
182
 
183
183
  expect(res.controller.trans_sid_mode).to eq(:always)
184
184
  end
185
- it_should_behave_like "trans_sid が起動しないとき"
185
+ it_should_behave_like 'trans_sid が起動しないとき'
186
186
  end
187
187
 
188
- describe_mobile_with_ua "DoCoMo/2.0 SH902i(c100;TB;W24H12)", "Shift_JIS" do
189
- it_should_behave_like "trans_sid が起動するとき"
188
+ describe_mobile_with_ua 'DoCoMo/2.0 SH902i(c100;TB;W24H12)', 'Shift_JIS' do
189
+ it_should_behave_like 'trans_sid が起動するとき'
190
190
  end
191
191
 
192
- describe_mobile_with_ua "KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0", "Shift_JIS" do
193
- it_should_behave_like "trans_sid が起動しないとき"
192
+ describe_mobile_with_ua 'KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0', 'Shift_JIS' do
193
+ it_should_behave_like 'trans_sid が起動しないとき'
194
194
  end
195
195
 
196
- describe_mobile_with_ua "SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1", "UTF-8" do
197
- it_should_behave_like "trans_sid が起動しないとき"
196
+ describe_mobile_with_ua 'SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1', 'UTF-8' do
197
+ it_should_behave_like 'trans_sid が起動しないとき'
198
198
  end
199
199
 
200
- describe_mobile_with_ua "Vodafone/1.0/V903T/TJ001 Browser/VF-Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2 Ext-V-Profile/VSCL-2.0.0", "UTF-8" do
201
- it_should_behave_like "trans_sid が起動しないとき"
200
+ describe_mobile_with_ua 'Vodafone/1.0/V903T/TJ001 Browser/VF-Browser/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2 Ext-V-Profile/VSCL-2.0.0', 'UTF-8' do
201
+ it_should_behave_like 'trans_sid が起動しないとき'
202
202
  end
203
203
  end
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'guestbook'
3
2
  require 'rack/test'
4
3
  require 'test/unit'
@@ -16,25 +15,25 @@ class SinatraOnJpmobile < Test::Unit::TestCase
16
15
  end
17
16
 
18
17
  def test_not_convert_pc_get
19
- get '/', {:g => Jpmobile::Util.sjis("万葉")}, {}
20
- assert_equal last_response.body, "万葉"
18
+ get '/', { g: Jpmobile::Util.sjis('万葉') }, {}
19
+ assert_equal last_response.body, '万葉'
21
20
  end
22
21
 
23
22
  def test_not_convert_pc_post
24
- post '/', {:p => Jpmobile::Util.utf8("けーたい")}, {}
25
- assert_equal last_response.body, "けーたい"
23
+ post '/', { p: Jpmobile::Util.utf8('けーたい') }, {}
24
+ assert_equal last_response.body, 'けーたい'
26
25
  end
27
26
 
28
27
  def test_docomo_get_convert_to_utf8
29
- get '/', {:g => utf8_to_sjis("万葉")}, {"HTTP_USER_AGENT" => "DoCoMo/2.0 SH902i(c100;TB;W24H12)"}
30
- assert_equal last_app.assigns(:g), "万葉"
31
- assert_equal last_response.body, utf8_to_sjis("万葉")
28
+ get '/', { g: utf8_to_sjis('万葉') }, { 'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH902i(c100;TB;W24H12)' }
29
+ assert_equal last_app.assigns(:g), '万葉'
30
+ assert_equal last_response.body, utf8_to_sjis('万葉')
32
31
  end
33
32
 
34
33
  def test_docomo_post_convert_to_utf8
35
- post '/', {:p => utf8_to_sjis("けーたい")}, {"HTTP_USER_AGENT" => "DoCoMo/2.0 SH902i(c100;TB;W24H12)"}
36
- assert_equal last_app.assigns(:p), "けーたい"
37
- assert_equal last_response.body, utf8_to_sjis("けーたい")
34
+ post '/', { p: utf8_to_sjis('けーたい') }, { 'HTTP_USER_AGENT' => 'DoCoMo/2.0 SH902i(c100;TB;W24H12)' }
35
+ assert_equal last_app.assigns(:p), 'けーたい'
36
+ assert_equal last_response.body, utf8_to_sjis('けーたい')
38
37
  end
39
38
 
40
39
  # def test_view_selector_pc
@@ -1,4 +1,3 @@
1
- # -*- coding: utf-8 -*-
2
1
  require 'nokogiri'
3
2
  require 'scanf'
4
3
  require 'pp'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jpmobile
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0
4
+ version: 5.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shin-ichiro OGAWA
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-07-01 00:00:00.000000000 Z
12
+ date: 2019-03-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -29,30 +29,30 @@ dependencies:
29
29
  name: rspec
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 3.5.0.beta4
34
+ version: '0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 3.5.0.beta4
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec-rails
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: 3.5.0.beta4
48
+ version: '0'
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: 3.5.0.beta4
55
+ version: '0'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec-its
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -160,12 +160,14 @@ extra_rdoc_files: []
160
160
  files:
161
161
  - ".gitignore"
162
162
  - ".rspec"
163
+ - ".rubocop.yml"
163
164
  - CONTRIBUTING.md
164
165
  - Gemfile
166
+ - Gemfile.lock
165
167
  - MIT-LICENSE
166
- - README
167
- - README.rdoc
168
+ - README.md
168
169
  - Rakefile
170
+ - circle.yml
169
171
  - init.rb
170
172
  - jpmobile.gemspec
171
173
  - lib/jpmobile.rb
@@ -279,6 +281,7 @@ files:
279
281
  - spec/unit/variants_spec.rb
280
282
  - test/rails/.gitignore
281
283
  - test/rails/overrides/.rspec
284
+ - test/rails/overrides/Gemfile
282
285
  - test/rails/overrides/Gemfile.jpmobile
283
286
  - test/rails/overrides/app/controllers/admin/top_controller.rb
284
287
  - test/rails/overrides/app/controllers/application_controller.rb
@@ -433,10 +436,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
433
436
  version: '0'
434
437
  requirements: []
435
438
  rubyforge_project:
436
- rubygems_version: 2.6.4
439
+ rubygems_version: 2.6.14.1
437
440
  signing_key:
438
441
  specification_version: 4
439
- summary: A Rails plugin for mobile devices in Japan
442
+ summary: Rails plugin for mobile devices in Japan
440
443
  test_files:
441
444
  - spec/rack/jpmobile/android_spec.rb
442
445
  - spec/rack/jpmobile/au_spec.rb
@@ -494,6 +497,7 @@ test_files:
494
497
  - spec/unit/variants_spec.rb
495
498
  - test/rails/.gitignore
496
499
  - test/rails/overrides/.rspec
500
+ - test/rails/overrides/Gemfile
497
501
  - test/rails/overrides/Gemfile.jpmobile
498
502
  - test/rails/overrides/app/controllers/admin/top_controller.rb
499
503
  - test/rails/overrides/app/controllers/application_controller.rb
data/README DELETED
File without changes
@@ -1,308 +0,0 @@
1
- = jpmobile: A Rails plugin for Japanese mobile-phones
2
-
3
- == jpmobileとは
4
- 携帯電話特有の機能を Rails 4.0 や Rack middleware で利用するためのプラグイン。
5
- 以下の機能を備える。
6
-
7
- * 携帯電話のキャリア判別
8
- * 端末位置情報の取得
9
- * {GeoKit}[http://geokit.rubyforge.org] との連携
10
- * 端末製造番号、契約者番号等の取得
11
- * IPアドレスの検証(キャリアが公開しているIPアドレス帯域からのアクセスか判定)
12
- * IPアドレスの検証には {jpmobile-ipaddresses}[http://github.com/jpmobile/jpmobile-ipaddresses] が必要です。
13
- * ディスプレイ情報(画面サイズ、ブラウザ画面サイズ、カラー・白黒、色数)の取得
14
- * ディスプレイ情報の取得には {jpmobile-terminfo}[http://github.com/jpmobile/jpmobile-terminfo] が必要です。
15
- * 文字コード変換機能/絵文字のキャリア間相互変換
16
- * メールの送信
17
- * 絵文字と漢字コードの変換
18
- * メールの受信(experimental)
19
- * 絵文字と漢字コードの変換
20
-
21
- また Rails 4.0 に以下の機能を追加する
22
- * ビューへの自動振分け
23
- * 位置情報取得などのリンクヘルパーの追加
24
- * セッションIDをフォーム/リンクに付与(Trans SID)
25
-
26
- 他のバージョンの Rails については {Versions : Jpmobile vs Rails}[https://github.com/jpmobile/jpmobile/wiki/Version-:-Jpmobile-vs-Rails] を参照。
27
-
28
- == インストール
29
- === Rails pluginとしてインストールする場合
30
- % rails plugin install git://github.com/jpmobile/jpmobile.git
31
- ==== IPアドレス検証が必要な場合
32
- % rails plugin install git://github.com/jpmobile/jpmobile-ipaddresses.git
33
- ==== ディスプレイ情報を取得する必要がある場合
34
- % rails plugin install git://github.com/jpmobile/jpmobile-terminfo.git
35
-
36
- === gemでインストールする場合
37
- % gem install jpmobile
38
- ==== IPアドレス検証が必要な場合
39
- % gem install jpmobile-ipaddresses
40
- ==== ディスプレイ情報を取得する必要がある場合
41
- % gem install jpmobile-terminfo
42
-
43
- == 使用例
44
-
45
- === 携帯電話の識別
46
- 環境変数 env['rack.jpmobile'] にキャリアクラスのインスタンスが格納されています。また Rack::Request#mobile としても取得可能です。
47
-
48
- ==== キャリアの識別
49
-
50
- case request.mobile
51
- when Jpmobile::Mobile::Docomo
52
- # for DoCoMo
53
- when Jpmobile::Mobile::Au
54
- # for au
55
- when Jpmobile::Mobile::Softbank
56
- # for SoftBank
57
- when Jpmobile::Mobile::Willcom
58
- # for Willcom
59
- when Jpmobile::Mobile::Emobile
60
- # for EMOBILE
61
- else
62
- # for PC
63
- end
64
-
65
- あるいは
66
- if request.mobile.is_a?(Jpmobile::Mobile::Docomo)
67
- # for DoCoMo
68
- end
69
-
70
- ==== ビューの中で一部を切替える例
71
- <% if request.mobile? %>
72
- 携帯電話からのアクセスです。
73
- <% else %>
74
- 携帯電話からのアクセスではありません。
75
- <% end %>
76
-
77
- <% if request.smart_phone? %>
78
- スマートフォンからのアクセスです。
79
- <% else %>
80
- スマートフォンからのアクセスではありません。
81
- <% end %>
82
-
83
- <% if request.tablet? %>
84
- タブレットからのアクセスです。
85
- <% else %>
86
- タブレットからのアクセスではありません。
87
- <% end %>
88
-
89
-
90
- ==== 別に用意した携帯電話用コントローラへリダイレクトする例
91
- class PcController < ApplicationController
92
- before_action :redirect_if_mobile
93
-
94
- def index
95
- end
96
-
97
- private
98
- def redirect_if_mobile
99
- if request.mobile?
100
- pa = params.dup
101
- pa[:controller] = "/mobile"
102
- redirect_to pa
103
- elsif request.smart_phone?
104
- pa = params.dup
105
- pa[:controller] = "/smart_phone"
106
- redirect_to pa
107
- end
108
- end
109
- end
110
-
111
- class MobileController < ApplicationController
112
- end
113
-
114
- === 位置情報の取得
115
- Rack::Request#mobile.position に位置情報が格納されます。
116
-
117
- @latitude = request.mobile.position.lat
118
- @longuitude = request.mobile.position.lon
119
-
120
- ==== {GeoKit}[http://geokit.rubyforge.org] との連携
121
-
122
- vendor/plugins/geokit以下にGeoKitがインストールされていると、Jpmobile::PositionにGeoKit::Mappableがincludeされる。したがって、
123
-
124
- request.mobile.position.distance_to('札幌駅')
125
-
126
- とすることで、端末と「札幌駅」との距離を求めることができる。詳細は http://geokit.rubyforge.org/api/index.html 参照。
127
-
128
- === 端末情報の取得
129
-
130
- 端末側から通知されている場合、request.mobile.ident で
131
- 契約に固有の識別子もしくは端末の製造番号を取得できる。
132
- 両方存在する場合は契約に固有のIDが優先される。
133
-
134
- * 契約に固有のID (request.mobile.ident_subscriber)
135
- * au: EZ番号(サブスクライバ番号)
136
- * DoCoMo: FOMAカード製造番号
137
- * EMOBILE: EMnet対応端末から通知されるユニークなユーザID
138
- * 端末製造番号 (request.mobile.ident_device)
139
- * DoCoMo: 端末製造番号(FOMA, MOVA)
140
- * SoftBank: 製造番号
141
-
142
- === IPの検証
143
- キャリアが公開しているIPアドレス帯域からのアクセスか判定する。
144
- request.mobile.valid_ip?
145
- ただし {jpmobile-ipaddresses}[http://github.com/jpmobile/jpmobile-ipaddresses] がインストールされていないか、スマートフォンの場合は必ずfalseとなる。
146
-
147
- === 端末の画面サイズ
148
- request.mobile.display で Jpmobile::Display クラスのインスタンスが返る。
149
- 画面幅 <%= request.mobile.display.width %>
150
- 画面高さ <%= request.mobile.display.height %>
151
- ただし {jpmobile-terminfo}[http://github.com/jpmobile/jpmobile-terminfo] がインストールされていない場合はエラーとなるので注意が必要。
152
-
153
- === 文字コード変換機能/絵文字のキャリア間相互変換
154
-
155
- jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱うことができる。
156
-
157
- * Rails の場合は vendor/plugins に配置し、下記の設定を追加することで有効になる。
158
- # Rack middleware を追加するメソッド
159
- Rails.application.config.jpmobile.mobile_filter
160
- or
161
- Jpmobile.config.mobile_filter
162
-
163
- * 下記の設定を追加することで、<form> タグの accept-charset が変更される。
164
- # <form accept-charset="Shift_JIS" ...> などに変更する
165
- Rails.application.config.jpmobile.form_accept_charset_conversion = true
166
- or
167
- Jpmobile.config.form_accept_charset_conversion = true
168
-
169
- * Andriod/iPhone では Google 絵文字や Unicode 6.0 絵文字が使われています。下記の設定を追加すると、互換性をもたせるために3キャリアの絵文字に変換することができます。また表示の変換も可能です。
170
- Rails.application.config.jpmobile.smart_phone_emoticon_compatibility = true
171
- or
172
- Jpmobile.config.smart_phone_emoticon_compatibility = true
173
-
174
- 携帯電話上では特に問題とならない。PCブラウザでテストする際に問題となるためのオプション。
175
-
176
- * Sinatra の場合は下記のように指定する。
177
- $LOAD_PATH << './lib/jpmobile/lib'
178
- require 'jpmobile'
179
- require 'jpmobile/rack'
180
-
181
- use Jpmobile::Rack::MobileCarrier
182
- use Jpmobile::Rack::ParamsFilter
183
- use Jpmobile::Rack::Filter
184
-
185
- get '/' do
186
- erb :index
187
- end
188
-
189
- Rails のみ半角・全角の自動変換フィルターが用意されている。用いるには
190
- class MyController
191
- hankaku_filter
192
- end
193
-
194
- と指定する。またtextareaやhidden/text/passwordのinputタグで半角に変換したくない場合は :input => true を指定する。このときNokogiriが必要となるため、Gemfileに追記してインストールする必要がある。
195
- class MyController
196
- hankaku_filter :input => true
197
- end
198
-
199
- Jpmobile内では、各キャリアの絵文字はUnicode私的領域上にマッピングされ、管理される。
200
- このとき、DoCoMo、Auは公式サイト記載のマッピングが使用される。
201
- ただしSoftBankはAuとの重複を避けるため、公式のマッピングに0x1000加算しU+F001以降に割り当てる。
202
- テンプレート内ではUTF-8でエンコードするか、数値文字参照の&#xHHHH;形式で指定する。
203
-
204
- 絵文字は送出時に内蔵の変換表に基づいて変換され、携帯電話のエンコーディングにあわせて送出される。
205
- 携帯電話から受信した絵文字は上記マッピングに基づいてUTF-8でparamsに渡される。
206
-
207
- * DoCoMo、Auとの通信時にはShift_JIS、SoftBankとの通信時にはUTF-8が使用される。
208
- * :hankaku=>true指定時は、カタカナは半角カナに変換されて送出される。携帯電話から送られた半角カナは全角カナに変換される。
209
- * 絵文字はキャリアにあわせて変換されて送出される。
210
- * 携帯電話からの絵文字はUnicode私的領域にマップされ、UTF-8でparamsに格納される。
211
-
212
- === ビューの自動振り分け
213
- ビューの自動振り分けを行うには、以下の設定が必要です。
214
-
215
- class ApplicationController < ActionController::Base
216
- include Jpmobile::ViewSelector
217
- end
218
-
219
- DoCoMo携帯電話からアクセスすると、
220
- * index_mobile_docomo.html.erb
221
- * index_mobile.html.erb
222
- * index.html.erb
223
- の順でテンプレートを検索し、最初に見付かったテンプレートが利用される。
224
- Auの場合は、index_mobile_au.html.erb、Softbankの場合はindex_mobile_softbank.html.erbが最初に検索される。
225
-
226
- またiPhoneからアクセスすると、
227
- * index_smart_phone_iphone.html.erb
228
- * index_smart_phone.html.erb
229
- * index.html.erb
230
- の順でテンプレートを検索する。
231
- Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合はindex_smart_phone_windows_phone.html.erbが最初に検索される。
232
-
233
- 自動振り分けを無効化するには、アクションにおいて以下のように設定する
234
-
235
- def index
236
- disable_mobile_view!
237
- end
238
-
239
- === 位置情報の取得用リンクの生成
240
-
241
- 以下のようなコードで、端末に位置情報を要求するリンクを出力する。
242
- <%= get_position_link_to("位置情報を取得する", :action=>:gps) %>
243
-
244
- === セッションIDの付与(Trans SID)
245
- ==== Cookie非対応携帯だけに付与する
246
- class MyController
247
- trans_sid
248
- end
249
-
250
- ==== PCにも付与する
251
- class MyController
252
- trans_sid :always
253
- end
254
-
255
- trans_sid 機能を使う場合には、cookie session store を使用することができず、
256
- active_record_storeのgemパッケージが必要です。
257
- また Rails 4.0 では Cookie が使える場合にはそちらが優先されてしまうため、:always を指定した場合に問題になる場合があります。
258
- trans_sid を使用する際には、例えば config/initializers/session_store.rb で
259
- Rails.application.config.session_store :active_record_store
260
- Rails.application.config.session_options = {:cookie_only => false}
261
- として active_record_store を使用するように設定し、:cookie_only => false として Cookie を優先しないように設定します。
262
- このとき ApplicationController において protect_from_forgery の :secret を指定するか、
263
- あるいは protect_from_forgery を解除する必要があるでしょう。
264
-
265
- また、
266
- link_to "hoge", "/controller/action/id"
267
- のようにリンク先を直接指定するとセッションIDは付加されません。
268
- link_to "hoge", :controller => "controller", :action => "action", :id => "id"
269
- のように指定する必要があります。
270
-
271
- === メールの送受信
272
- メールにて絵文字や漢字コードの変換、ビューの自動振り分けを行なうには Jpmobile::Mailer::Base を使う。
273
-
274
- class MobileMailer < Jpmobile::Mailer::Base
275
- default :from => "info@jpmobile-rails.org"
276
-
277
- def registration(to)
278
- mail(:to => to)
279
- end
280
-
281
- def receive(email)
282
- email
283
- end
284
- end
285
-
286
- * デフォルトで ISO-2022-JP エンコードで送信
287
- * docomo/SoftBank には Shift_JIS で送信
288
- * au は ISO-2022-JP エンコードで送信
289
- * ビューやレイアウトの自動振り分け
290
- * docomo であれば app/views/mobile_mailer/registration_mobile_docomo.html.erb など
291
- * 受信に関しては、docomo/SoftBank でテストできていないため、実験版とします。
292
- * テストして問題あれば随時報告してください。
293
- * オプションに :decorated => true を追加すると、各キャリアのデコメに適したフォーマットで送信します。
294
- * ただし docomo/SoftBank でテスト出来ていないため、実験版とします。
295
-
296
- == jpmobileの開発方法
297
-
298
- jpmobileの開発に関しては {こちら}[https://github.com/jpmobile/jpmobile/blob/master/CONTRIBUTING.md] へ
299
-
300
- == リンク
301
-
302
- * http://jpmobile-rails.org
303
-
304
- == 作者
305
-
306
- Copyright 2006-2012 (c) Yoji Shidara, under MIT License.
307
-
308
- Shin-ichiro OGAWA <rust.stnard@gmail.com>, Yoji Shidara <dara@shidara.net>