galakei 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,11 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- galakei (0.8.1)
4
+ galakei (0.9.0)
5
5
  actionpack (>= 3.0.3)
6
6
  css_parser
7
7
  nokogiri
8
8
  rack (>= 1.2.1)
9
+ sanitize
9
10
 
10
11
  GEM
11
12
  remote: http://rubygems.org/
@@ -105,6 +106,8 @@ GEM
105
106
  railties (~> 3.0)
106
107
  rspec (~> 2.5.0)
107
108
  rubyzip (0.9.4)
109
+ sanitize (2.0.3)
110
+ nokogiri (< 1.6, >= 1.4.4)
108
111
  selenium-webdriver (0.1.3)
109
112
  childprocess (~> 0.1.5)
110
113
  ffi (~> 0.6.3)
data/galakei.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.add_dependency 'rack', '>= 1.2.1'
20
20
  s.add_dependency 'css_parser'
21
21
  s.add_dependency 'nokogiri'
22
+ s.add_dependency 'sanitize'
22
23
 
23
24
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
25
  end
data/lib/galakei/email.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'sanitize'
1
2
  module Galakei::Email
2
3
 
3
4
  GALAKEI_EMAIL_ADDRESS_PATTERNS = [
@@ -9,7 +10,31 @@ module Galakei::Email
9
10
  /^.+@emnet\.ne\.jp$/,
10
11
  /^.+@docomo\.ne\.jp$/ ]
11
12
 
13
+ SANITIZE_OPTIONS = {
14
+ :elements => %w{br a div hr},
15
+ :attributes => {'a' => ['href'] },
16
+ :protocols => {'a' => {'href' => ['http', 'https', 'mailto']}},
17
+ :whitespace_elements => []
18
+ }
19
+
20
+ TAGS_TO_PROCESS = %w{h1 h2 h3 h4 h5 h6 p}.join(',')
21
+
12
22
  def self.galakei_email_address?(email)
13
23
  GALAKEI_EMAIL_ADDRESS_PATTERNS.any?{|p| p =~ email }
14
24
  end
25
+
26
+ def self.to_galakei_email(html_email)
27
+ doc = Nokogiri::HTML(html_email)
28
+ doc.css(TAGS_TO_PROCESS).each do |node|
29
+ node.name = "div"
30
+ node.after("<br />")
31
+ end
32
+
33
+ res = "<html><head>"
34
+ res << "<meta http-equiv=\"Content-type\" content=\"text/html;charset=#{doc.meta_encoding}\" />"
35
+ res << "</head><body>"
36
+ res << Sanitize.clean(doc.to_s, SANITIZE_OPTIONS)
37
+ res << "</body></html>"
38
+ end
39
+
15
40
  end
@@ -1,3 +1,3 @@
1
1
  module Galakei
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Galakei::Email do
5
+
6
+ it "should not have h tags" do
7
+ html_email = '<h1>Email big heading</h1><h2>Second heading</h2><h6>Sixth heading</h6>'
8
+ Galakei::Email.to_galakei_email(html_email).should =~ /^((?!h[0-9]).)*$/
9
+ end
10
+
11
+ it "should not have images" do
12
+ html_email='<a href="http://dragonmobile.nuancemobiledeveloper.com/"><img src="http://www.mobilemonday.jp/wp-content/uploads/2011/01/NMDP.jpg" alt=""></a>this was an image'
13
+ Galakei::Email.to_galakei_email(html_email).should =~ /^((?!img).)*$/
14
+ end
15
+
16
+ it "should not have unsupported protocols" do
17
+ html_email='<a href="ftp://some.ftpsite.com/">Downloadz youz warez herez</a>'
18
+ Galakei::Email.to_galakei_email(html_email).should =~ /^((?!ftp).)*$/m
19
+ end
20
+
21
+ it "should not have head elements" do
22
+ html_email='<html><head><meta http-equiv="blah" content=""><title>Document X</title><head><body></body></html>'
23
+ Galakei::Email.to_galakei_email(html_email).should =~ /^((?!head).)*$/
24
+ end
25
+
26
+ it "should have a html, head, meta and body" do
27
+ html_email='<html><head><meta http-equiv="Content-type" content="text/html;charset=UTF-8"" ><title>Document X</title><head><body>I am a body!</body></html>'
28
+ Galakei::Email.to_galakei_email(html_email).should =~ /html.*head.*meta.*body/m
29
+ end
30
+
31
+ it "should have div,href,br,hr elements" do
32
+ html_email='<div><a href="http://dragonmobile.nuancemobiledeveloper.com/"><img src="http://www.mobilemonday.jp/wp-content/uploads/2011/01/NMDP.jpg" alt=""></a></div><hr> <br><div class="register_button"><a href="http://gigs.checkin.local:3000/events/2/tickets/new?auth_token=demo">Register</a></div>'
33
+ Galakei::Email.to_galakei_email(html_email).should =~ /div(.*)href(.*)hr(.*)br/m
34
+ end
35
+
36
+ end
metadata CHANGED
@@ -1,69 +1,107 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: galakei
3
- version: !ruby/object:Gem::Version
4
- version: 0.8.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 59
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 0
10
+ version: 0.9.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Paul McMahon
9
14
  - Michael Reinsch
10
15
  - Yuki Akamatsu
11
16
  autorequire:
12
17
  bindir: bin
13
18
  cert_chain: []
14
- date: 2011-08-18 00:00:00.000000000Z
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
19
+
20
+ date: 2011-08-29 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
17
23
  name: actionpack
18
- requirement: &2157357860 !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
19
26
  none: false
20
- requirements:
21
- - - ! '>='
22
- - !ruby/object:Gem::Version
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 1
31
+ segments:
32
+ - 3
33
+ - 0
34
+ - 3
23
35
  version: 3.0.3
24
36
  type: :runtime
25
- prerelease: false
26
- version_requirements: *2157357860
27
- - !ruby/object:Gem::Dependency
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
28
39
  name: rack
29
- requirement: &2157357160 !ruby/object:Gem::Requirement
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
30
42
  none: false
31
- requirements:
32
- - - ! '>='
33
- - !ruby/object:Gem::Version
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 29
47
+ segments:
48
+ - 1
49
+ - 2
50
+ - 1
34
51
  version: 1.2.1
35
52
  type: :runtime
36
- prerelease: false
37
- version_requirements: *2157357160
38
- - !ruby/object:Gem::Dependency
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
39
55
  name: css_parser
40
- requirement: &2157356640 !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
41
58
  none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
46
66
  type: :runtime
47
- prerelease: false
48
- version_requirements: *2157356640
49
- - !ruby/object:Gem::Dependency
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
50
69
  name: nokogiri
51
- requirement: &2157351660 !ruby/object:Gem::Requirement
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
52
72
  none: false
53
- requirements:
54
- - - ! '>='
55
- - !ruby/object:Gem::Version
56
- version: '0'
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
57
80
  type: :runtime
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: sanitize
58
84
  prerelease: false
59
- version_requirements: *2157351660
60
- description: Japanese feature phones (a.k.a., keitai, galakei) have a number of restrictions
61
- over normal web browsers. This library adds support for them
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ type: :runtime
95
+ version_requirements: *id005
96
+ description: Japanese feature phones (a.k.a., keitai, galakei) have a number of restrictions over normal web browsers. This library adds support for them
62
97
  email: info@mobalean.com
63
98
  executables: []
99
+
64
100
  extensions: []
101
+
65
102
  extra_rdoc_files: []
66
- files:
103
+
104
+ files:
67
105
  - .gitignore
68
106
  - Gemfile
69
107
  - Gemfile.lock
@@ -119,6 +157,7 @@ files:
119
157
  - spec/app/public/stylesheets/docomo_css/simple.css
120
158
  - spec/controllers/galakei/spacer_controller_spec.rb
121
159
  - spec/galakei/docomo_css/stylesheet_spec.rb
160
+ - spec/galakei/email_spec.rb
122
161
  - spec/galakei/emoji_table_spec.rb
123
162
  - spec/galakei/filter/content_type_spec.rb
124
163
  - spec/galakei/request_spec.rb
@@ -126,26 +165,36 @@ files:
126
165
  - spec/spec_helper.rb
127
166
  homepage: http://www.mobalean.com
128
167
  licenses: []
168
+
129
169
  post_install_message:
130
170
  rdoc_options: []
131
- require_paths:
171
+
172
+ require_paths:
132
173
  - lib
133
- required_ruby_version: !ruby/object:Gem::Requirement
174
+ required_ruby_version: !ruby/object:Gem::Requirement
134
175
  none: false
135
- requirements:
136
- - - ! '>='
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- required_rubygems_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ hash: 3
180
+ segments:
181
+ - 0
182
+ version: "0"
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
184
  none: false
141
- requirements:
142
- - - ! '>='
143
- - !ruby/object:Gem::Version
144
- version: '0'
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ hash: 3
189
+ segments:
190
+ - 0
191
+ version: "0"
145
192
  requirements: []
193
+
146
194
  rubyforge_project: galakei
147
195
  rubygems_version: 1.8.6
148
196
  signing_key:
149
197
  specification_version: 3
150
198
  summary: Japanese feature phones support
151
199
  test_files: []
200
+