the_string_to_slug 0.0.8 → 1.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/.gitignore +1 -0
- data/README.md +22 -0
- data/lib/the_string_to_slug.rb +27 -21
- data/lib/the_string_to_slug/version.rb +1 -1
- data/spec/dummy_app/config/application.rb +2 -0
- data/spec/dummy_app/spec/helpers/string.rb +88 -0
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a4835e1fce9b86bfd6d2972a1962e2e49cd3fb2
|
4
|
+
data.tar.gz: bb2cc21692b00c62be219635b3481c5e23a878d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b2c161d669135b2a8859f5a434f2605d440d34f14b55ad22825034d5642389efe1088ff486b85afee2867922c71f5f03714a4d201c1fb9cea3f2fcb7ce63607
|
7
|
+
data.tar.gz: 85f45fe0904df42af44f4e277763c9a3b3b666a472735e1c2c9ad82118c6cf18a524ecb344c60786dc3bcc3f6879f0c9f7709c962839c1ab0ac3217d4d0d5af4
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -34,4 +34,26 @@ For filenames:
|
|
34
34
|
```ruby
|
35
35
|
"/доки/dir/тест/документ.doc".slugged_filename #=> "dokument.doc"
|
36
36
|
String.slugged_filename("/доки/dir/тест/документ.doc") #=> "dokument.doc"
|
37
|
+
```
|
38
|
+
|
39
|
+
For full file path:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
"/доки/dir/тест/документ.doc".slugged_file #=> "/доки/dir/тест/dokument.doc"
|
43
|
+
String.slugged_filename("/доки/dir/тест/документ.doc") #=> "/доки/dir/тест/dokument.doc"
|
44
|
+
```
|
45
|
+
|
46
|
+
Params
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
"Документ.doc".to_slug_param(locale: :en)
|
50
|
+
# => "doc"
|
51
|
+
|
52
|
+
"Документ.doc".to_slug_param(locale: :en)
|
53
|
+
# => "dokument-doc"
|
54
|
+
```
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
"Документ.doc".to_slug_param(delimiter: '_')
|
58
|
+
# => "dokument_doc"
|
37
59
|
```
|
data/lib/the_string_to_slug.rb
CHANGED
@@ -4,48 +4,54 @@ require "the_string_to_slug/version"
|
|
4
4
|
module TheStringToSlug; end
|
5
5
|
|
6
6
|
class String
|
7
|
-
def to_slug_param
|
8
|
-
self.class.to_slug_param(self)
|
7
|
+
def to_slug_param opts = {}
|
8
|
+
self.class.to_slug_param(self, opts)
|
9
9
|
end
|
10
10
|
|
11
|
-
def slugged_filename
|
12
|
-
self.class.slugged_filename(self)
|
11
|
+
def slugged_filename opts = {}
|
12
|
+
self.class.slugged_filename(self, opts)
|
13
13
|
end
|
14
14
|
|
15
|
-
def slugged_file
|
16
|
-
self.class.slugged_file(self)
|
15
|
+
def slugged_file opts = {}
|
16
|
+
self.class.slugged_file(self, opts)
|
17
17
|
end
|
18
18
|
|
19
19
|
# -----------------------------------
|
20
20
|
# Self methods
|
21
21
|
# -----------------------------------
|
22
22
|
class << self
|
23
|
-
def to_slug_param str
|
24
|
-
|
23
|
+
def to_slug_param str, opts = {}
|
24
|
+
delimiter = opts.delete(:delimiter) || '-'
|
25
|
+
str = str.gsub(/\-{2,}/, '-').mb_chars
|
26
|
+
str = I18n::transliterate(str, opts)
|
27
|
+
.gsub('_', delimiter)
|
28
|
+
.gsub('-', delimiter)
|
29
|
+
.parameterize(delimiter)
|
30
|
+
.downcase.to_s
|
25
31
|
end
|
26
32
|
|
27
|
-
def file_ext file_name
|
28
|
-
File.extname(file_name)[1..-1].to_s.to_slug_param
|
33
|
+
def file_ext file_name, opts = {}
|
34
|
+
File.extname(file_name)[1..-1].to_s.to_slug_param opts
|
29
35
|
end
|
30
36
|
|
31
|
-
def file_name
|
32
|
-
|
33
|
-
ext
|
34
|
-
File.basename(
|
37
|
+
def file_name name, opts = {}
|
38
|
+
name = File.basename name
|
39
|
+
ext = File.extname name
|
40
|
+
File.basename(name, ext).to_s.to_slug_param opts
|
35
41
|
end
|
36
42
|
|
37
|
-
def slugged_filename
|
38
|
-
|
39
|
-
fname
|
40
|
-
ext
|
43
|
+
def slugged_filename name, opts = {}
|
44
|
+
name = File.basename name
|
45
|
+
fname = self.file_name name, opts
|
46
|
+
ext = self.file_ext name, opts
|
41
47
|
|
42
48
|
return fname if ext.blank?
|
43
49
|
[fname, ext].join('.')
|
44
50
|
end
|
45
51
|
|
46
|
-
def slugged_file file_full_path
|
47
|
-
|
48
|
-
file_full_path.split('/')[0...-1].push(
|
52
|
+
def slugged_file file_full_path, opts = {}
|
53
|
+
fname = slugged_filename file_full_path, opts
|
54
|
+
file_full_path.split('/')[0...-1].push(fname).join '/'
|
49
55
|
end
|
50
56
|
end
|
51
57
|
end
|
@@ -6,6 +6,8 @@ require 'rails/all'
|
|
6
6
|
# you've limited to :test, :development, or :production.
|
7
7
|
Bundler.require(:default, Rails.env)
|
8
8
|
|
9
|
+
I18n.enforce_available_locales = true
|
10
|
+
|
9
11
|
module DummyApp
|
10
12
|
class Application < Rails::Application
|
11
13
|
# Settings in config/environments/* take precedence over those specified here.
|
@@ -7,6 +7,11 @@ describe 'StringToSlug' do
|
|
7
7
|
"Привет Мир! Hello world!".to_slug_param.should eq "privet-mir-hello-world"
|
8
8
|
"Документ.doc".to_slug_param.should eq "dokument-doc"
|
9
9
|
end
|
10
|
+
|
11
|
+
it 'When wrong translation' do
|
12
|
+
"Привет Мир! Hello world!".to_slug_param(locale: :en).should eq "hello-world"
|
13
|
+
"Документ.doc".to_slug_param(locale: :en).should eq "doc"
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
context 'Filename test' do
|
@@ -19,6 +24,17 @@ describe 'StringToSlug' do
|
|
19
24
|
|
20
25
|
String.slugged_filename("/доки/dir/тест/доку мент").should eq "doku-ment"
|
21
26
|
end
|
27
|
+
|
28
|
+
it 'When wrong translation' do
|
29
|
+
"/doc/dir/test/document.doc".to_slug_param(locale: :ru).should eq "doc-dir-test-document-doc"
|
30
|
+
"/doc/dir/test/document.doc".slugged_filename(locale: :ru).should eq "document.doc"
|
31
|
+
|
32
|
+
"/доки/dir/тест/документ.doc".slugged_filename(locale: :en).should eq ".doc"
|
33
|
+
"/доки/dir/тест/документ".slugged_filename(locale: :en).should eq ""
|
34
|
+
"/доки/dir/тест/доку мент".slugged_filename(locale: :en).should eq ""
|
35
|
+
|
36
|
+
String.slugged_filename("/доки/dir/тест/доку мент", locale: :en).should eq ""
|
37
|
+
end
|
22
38
|
end
|
23
39
|
|
24
40
|
context 'Full path to file' do
|
@@ -30,5 +46,77 @@ describe 'StringToSlug' do
|
|
30
46
|
|
31
47
|
String.slugged_file("/доки/dir/тест/доку мент").should eq "/доки/dir/тест/doku-ment"
|
32
48
|
end
|
49
|
+
|
50
|
+
it 'When wrong translation' do
|
51
|
+
"/doc/dir/test/document.doc".slugged_file(locale: :en).should eq "/doc/dir/test/document.doc"
|
52
|
+
"/доки/dir/тест/документ.doc".slugged_file(locale: :en).should eq "/доки/dir/тест/.doc"
|
53
|
+
|
54
|
+
"/доки/dir/тест/документ".slugged_file(locale: :en).should eq "/доки/dir/тест/"
|
55
|
+
"/доки/dir/тест/доку мент".slugged_file(locale: :en).should eq "/доки/dir/тест/"
|
56
|
+
|
57
|
+
String.slugged_file("/доки/dir/тест/доку мент", locale: :en).should eq "/доки/dir/тест/"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'Delimiter' do
|
62
|
+
it 'should be true' do
|
63
|
+
"Привет Мир! Hello world!".to_slug_param(delimiter: '_').should eq "privet_mir_hello_world"
|
64
|
+
"Документ.doc".to_slug_param(delimiter: '_').should eq "dokument_doc"
|
65
|
+
|
66
|
+
"/доки/dir/тест/документ".slugged_file(delimiter: '_').should eq "/доки/dir/тест/dokument"
|
67
|
+
"/доки/dir/тест/доку мент".slugged_file(delimiter: '_').should eq "/доки/dir/тест/doku_ment"
|
68
|
+
"/доки/dir/тест/доку мент".slugged_filename(delimiter: '_').should eq "doku_ment"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
context "spec chars" do
|
73
|
+
it "should works" do
|
74
|
+
"[$&+,:;=?@Hello world!#|'<>.^*()%!-]".to_slug_param.should eq 'hello-world'
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should works" do
|
78
|
+
"教師 — the-teacher".to_slug_param.should eq 'the-teacher'
|
79
|
+
"Hello ^, I'm here!".to_slug_param.should eq 'hello-i-m-here'
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should works" do
|
83
|
+
"HELLO---WorlD".to_slug_param(delimiter: '_').should eq 'hello_world'
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should works" do
|
87
|
+
str = "__...HELLO-___--+++--WorlD----__&&***...__.---"
|
88
|
+
|
89
|
+
str.to_slug_param.should eq 'hello-world'
|
90
|
+
str.to_slug_param(delimiter: '_').should eq 'hello_world'
|
91
|
+
str.to_slug_param(delimiter: '+').should eq 'hello+world'
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should works" do
|
95
|
+
str = "Ilya zykin aka Killich, $$$ aka the-teacher"
|
96
|
+
str.to_slug_param(delimiter: '+').should eq "ilya+zykin+aka+killich+aka+the+teacher"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'Scopes' do
|
101
|
+
it "should work with Nested Controller Name" do
|
102
|
+
class PagesController < ApplicationController; end
|
103
|
+
ctrl = PagesController.new
|
104
|
+
ctrl.controller_path.to_slug_param.should eq 'pages'
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should work with Nested Controller Name" do
|
108
|
+
module Admin; end
|
109
|
+
class Admin::PagesController < ApplicationController; end
|
110
|
+
ctrl = Admin::PagesController.new
|
111
|
+
ctrl.controller_path.to_slug_param.should eq 'admin-pages'
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should work with Nested Controller Name" do
|
115
|
+
module Admin; end
|
116
|
+
class Admin::PagesController < ApplicationController; end
|
117
|
+
ctrl = Admin::PagesController.new
|
118
|
+
params = { delimiter: '_' }
|
119
|
+
ctrl.controller_path.to_slug_param(params).should eq 'admin_pages'
|
120
|
+
end
|
33
121
|
end
|
34
122
|
end
|
metadata
CHANGED
@@ -1,65 +1,65 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: the_string_to_slug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '1.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya N. Zykin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails-i18n
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.0.0.pre
|
20
20
|
type: :runtime
|
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: 4.0.0.pre
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
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: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
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
|
-
description:
|
55
|
+
description: " Convert text string to slug param "
|
56
56
|
email:
|
57
57
|
- zykin-ilya@ya.ru
|
58
58
|
executables: []
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
62
|
+
- ".gitignore"
|
63
63
|
- Gemfile
|
64
64
|
- LICENSE.txt
|
65
65
|
- README.md
|
@@ -133,17 +133,17 @@ require_paths:
|
|
133
133
|
- lib
|
134
134
|
required_ruby_version: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
|
-
- -
|
141
|
+
- - ">="
|
142
142
|
- !ruby/object:Gem::Version
|
143
143
|
version: '0'
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.1.11
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: Translite, downcase, parameterize
|