chinese_permalink 1.1.3 → 1.2.0
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.
- data/README.textile +12 -0
- data/Rakefile +0 -1
- data/VERSION +1 -1
- data/chinese_permalink.gemspec +4 -8
- data/lib/chinese_permalink.rb +25 -13
- data/test/chines_permalink_test.rb +18 -11
- metadata +8 -16
data/README.textile
CHANGED
@@ -14,6 +14,18 @@ h2. Install
|
|
14
14
|
|
15
15
|
***************************************************************************
|
16
16
|
|
17
|
+
h2. Config
|
18
|
+
|
19
|
+
As google translator api begins to charge, I decide to use bing translator api, it's free. You have to add a config file to tell chinese_permalink what's your bing app id in <code>config/chinese_permalink.yml</code>
|
20
|
+
|
21
|
+
<pre><code>
|
22
|
+
bing:
|
23
|
+
app_id: xxx
|
24
|
+
language: zh-cht (chinese traditional, default is zh-chs, chinese simplified)
|
25
|
+
</code></pre>
|
26
|
+
|
27
|
+
***************************************************************************
|
28
|
+
|
17
29
|
h2. Example
|
18
30
|
|
19
31
|
*1. Define chinese_permalink to model*
|
data/Rakefile
CHANGED
@@ -30,7 +30,6 @@ Jeweler::Tasks.new do |gemspec|
|
|
30
30
|
gemspec.email = "flyerhzm@gmail.com"
|
31
31
|
gemspec.homepage = "http://github.com/flyerhzm/chinese_permalink"
|
32
32
|
gemspec.authors = ["Richard Huang"]
|
33
|
-
gemspec.add_dependency 'sishen-rtranslate'
|
34
33
|
gemspec.files.exclude '.gitignore'
|
35
34
|
gemspec.files.exclude 'log/*'
|
36
35
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/chinese_permalink.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chinese_permalink}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Richard Huang"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-09-03}
|
13
13
|
s.description = %q{This plugin adds a capability for AR model to create a seo permalink with your chinese text. It will translate your chinese text to english url based on google translate.}
|
14
14
|
s.email = %q{flyerhzm@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -32,23 +32,19 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.homepage = %q{http://github.com/flyerhzm/chinese_permalink}
|
33
33
|
s.rdoc_options = ["--charset=UTF-8"]
|
34
34
|
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = %q{1.
|
35
|
+
s.rubygems_version = %q{1.6.2}
|
36
36
|
s.summary = %q{This plugin adds a capability for AR model to create a seo permalink with your chinese text.}
|
37
37
|
s.test_files = [
|
38
38
|
"test/chines_permalink_test.rb"
|
39
39
|
]
|
40
40
|
|
41
41
|
if s.respond_to? :specification_version then
|
42
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
43
42
|
s.specification_version = 3
|
44
43
|
|
45
|
-
if Gem::Version.new(Gem::
|
46
|
-
s.add_runtime_dependency(%q<sishen-rtranslate>, [">= 0"])
|
44
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
45
|
else
|
48
|
-
s.add_dependency(%q<sishen-rtranslate>, [">= 0"])
|
49
46
|
end
|
50
47
|
else
|
51
|
-
s.add_dependency(%q<sishen-rtranslate>, [">= 0"])
|
52
48
|
end
|
53
49
|
end
|
54
50
|
|
data/lib/chinese_permalink.rb
CHANGED
@@ -1,20 +1,14 @@
|
|
1
|
-
|
2
|
-
# rtranslate is a gem that can translate text based on google translate
|
3
|
-
require 'rtranslate'
|
4
|
-
rescue Object
|
5
|
-
puts "no rtranslate, you might want to look into it."
|
6
|
-
end
|
1
|
+
require 'net/http'
|
7
2
|
|
8
3
|
module ChinesePermalink
|
9
|
-
|
10
4
|
def self.included(base)
|
11
5
|
base.class_eval do
|
12
6
|
class_inheritable_accessor :permalink_attrs, :permalink_field, :before_methods, :after_methods
|
13
7
|
end
|
14
8
|
base.extend ClassMethods
|
15
|
-
end
|
9
|
+
end
|
16
10
|
|
17
|
-
private
|
11
|
+
private
|
18
12
|
def create_permalink
|
19
13
|
if self.permalink.nil?
|
20
14
|
chinese_permalink = self.class.permalink_attrs.collect do |attr_name|
|
@@ -24,7 +18,7 @@ module ChinesePermalink
|
|
24
18
|
chinese_permalink = self.send(method, chinese_permalink)
|
25
19
|
end
|
26
20
|
|
27
|
-
english_permalink = Translate.t(chinese_permalink
|
21
|
+
english_permalink = Translate.t(chinese_permalink)
|
28
22
|
self.class.after_methods.each do |method|
|
29
23
|
english_permalink = self.send(method, english_permalink)
|
30
24
|
end
|
@@ -45,9 +39,9 @@ module ChinesePermalink
|
|
45
39
|
def remove_space(text)
|
46
40
|
text.gsub(/\s+/, '-')
|
47
41
|
end
|
48
|
-
|
42
|
+
|
49
43
|
def remove_punctuation(text)
|
50
|
-
text.gsub(/'|&|"|<|>
|
44
|
+
text.gsub(/'|&|"|<|>/, '').gsub(/\//, '-')
|
51
45
|
end
|
52
46
|
|
53
47
|
def remove_duplicate_dash(text)
|
@@ -58,7 +52,6 @@ module ChinesePermalink
|
|
58
52
|
end
|
59
53
|
|
60
54
|
module ClassMethods
|
61
|
-
|
62
55
|
def chinese_permalink(attr_names, options = {})
|
63
56
|
options = {:permalink_field => 'permalink'}.merge(options)
|
64
57
|
self.permalink_attrs = Array(attr_names)
|
@@ -69,4 +62,23 @@ module ChinesePermalink
|
|
69
62
|
after_save :create_permalink
|
70
63
|
end
|
71
64
|
end
|
65
|
+
|
66
|
+
class Translate
|
67
|
+
class <<self
|
68
|
+
def t(text)
|
69
|
+
response = Net::HTTP.get(URI.parse(URI.encode(translate_url + text)))
|
70
|
+
response =~ %r|<string.*?>(.*?)</string>|
|
71
|
+
$1
|
72
|
+
end
|
73
|
+
|
74
|
+
def translate_url
|
75
|
+
@translate_url ||= begin
|
76
|
+
config = YAML.load(File.open(File.join(Rails.root, "config/chinese_permalink.yml")))
|
77
|
+
app_id = config['bing']['app_id']
|
78
|
+
language = config['bing']['language']
|
79
|
+
"http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=#{app_id}&from=#{language}&to=en&text="
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
72
84
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'test/unit'
|
2
3
|
|
3
4
|
require 'rubygems'
|
@@ -6,14 +7,20 @@ require 'active_record'
|
|
6
7
|
require File.join(File.dirname(__FILE__), '../lib/chinese_permalink')
|
7
8
|
require File.join(File.dirname(__FILE__), '../init')
|
8
9
|
|
10
|
+
class Rails
|
11
|
+
def self.root
|
12
|
+
File.expand_path(__FILE__).split('/')[0..-3].join('/')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
9
16
|
ActiveRecord::Base.establish_connection(
|
10
|
-
:adapter => 'sqlite3',
|
17
|
+
:adapter => 'sqlite3',
|
11
18
|
:database => ':memory:'
|
12
19
|
)
|
13
20
|
|
14
21
|
def setup_db
|
15
22
|
ActiveRecord::Migration.verbose = false
|
16
|
-
|
23
|
+
|
17
24
|
ActiveRecord::Schema.define(:version => 1) do
|
18
25
|
create_table :posts do |t|
|
19
26
|
t.string :title
|
@@ -64,15 +71,15 @@ class ChinesePermalinkTest < Test::Unit::TestCase
|
|
64
71
|
|
65
72
|
def test_simple_chinese_title
|
66
73
|
post = Post.create(:title => '中国人')
|
67
|
-
assert_equal "chinese", post.permalink
|
74
|
+
assert_equal "the-chinese-people", post.permalink
|
68
75
|
|
69
76
|
post = Post.create(:title => '我是中国人')
|
70
|
-
assert_equal "i-am-
|
77
|
+
assert_equal "i-am-chinese", post.permalink
|
71
78
|
end
|
72
79
|
|
73
80
|
def test_chinese_title_with_dash
|
74
81
|
post = Post.create(:title => '我是中国人——上海')
|
75
|
-
assert_equal "i-am-
|
82
|
+
assert_equal "i-am-from-china-shanghai", post.permalink
|
76
83
|
|
77
84
|
post = Post.create(:title => '我是中国人──上海')
|
78
85
|
assert_equal "i-am-a-chinese-shanghai", post.permalink
|
@@ -85,20 +92,20 @@ class ChinesePermalinkTest < Test::Unit::TestCase
|
|
85
92
|
|
86
93
|
post = Post.create(:title => '“工作”')
|
87
94
|
assert_equal "work", post.permalink
|
88
|
-
|
95
|
+
|
89
96
|
post = Post.create(:title => '妈妈的礼物')
|
90
|
-
assert_equal "
|
97
|
+
assert_equal "mothers-gift", post.permalink
|
91
98
|
|
92
99
|
post = Post.create(:title => '宝洁')
|
93
|
-
assert_equal "procter
|
100
|
+
assert_equal "procter", post.permalink
|
94
101
|
|
95
102
|
post = Post.create(:title => '自我介绍')
|
96
|
-
assert_equal "
|
103
|
+
assert_equal "introducing-myself", post.permalink
|
97
104
|
end
|
98
105
|
|
99
106
|
def test_chinese_category_and_title
|
100
107
|
post = CategoryPost.create(:title => '我是中国人', :category => '介绍')
|
101
|
-
assert_equal "introduction-i-am-
|
108
|
+
assert_equal "introduction-i-am-from-china", post.permalink
|
102
109
|
end
|
103
110
|
|
104
111
|
def test_complicated_title_with_before_methods
|
@@ -108,6 +115,6 @@ class ChinesePermalinkTest < Test::Unit::TestCase
|
|
108
115
|
|
109
116
|
def test_complicated_title_with_after_methods
|
110
117
|
post = ComplicatedAfterPost.create(:title => '宝洁')
|
111
|
-
assert_equal "
|
118
|
+
assert_equal "procter", post.permalink
|
112
119
|
end
|
113
120
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chinese_permalink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 1.2.0
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Richard Huang
|
@@ -9,19 +10,10 @@ autorequire:
|
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
+
date: 2011-09-03 00:00:00 +08:00
|
13
14
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
name: sishen-rtranslate
|
17
|
-
type: :runtime
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: "0"
|
24
|
-
version:
|
15
|
+
dependencies: []
|
16
|
+
|
25
17
|
description: This plugin adds a capability for AR model to create a seo permalink with your chinese text. It will translate your chinese text to english url based on google translate.
|
26
18
|
email: flyerhzm@gmail.com
|
27
19
|
executables: []
|
@@ -53,21 +45,21 @@ rdoc_options:
|
|
53
45
|
require_paths:
|
54
46
|
- lib
|
55
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
56
49
|
requirements:
|
57
50
|
- - ">="
|
58
51
|
- !ruby/object:Gem::Version
|
59
52
|
version: "0"
|
60
|
-
version:
|
61
53
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
62
55
|
requirements:
|
63
56
|
- - ">="
|
64
57
|
- !ruby/object:Gem::Version
|
65
58
|
version: "0"
|
66
|
-
version:
|
67
59
|
requirements: []
|
68
60
|
|
69
61
|
rubyforge_project:
|
70
|
-
rubygems_version: 1.
|
62
|
+
rubygems_version: 1.6.2
|
71
63
|
signing_key:
|
72
64
|
specification_version: 3
|
73
65
|
summary: This plugin adds a capability for AR model to create a seo permalink with your chinese text.
|