sort_alphabetical 0.1.3 → 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4f328170a42d8ae534ff643e7b2864f2ceca1317
4
+ data.tar.gz: 59210f479fa4dc71f5d071e61d709d5629a84766
5
+ SHA512:
6
+ metadata.gz: c3140e1ce5d1e4c7e13e28e347ef752026597104cc46987dc4f80b31b90c8072891b15b6d65d150cface4326fa7885576d034a64b02fb162b60b1d20014761e9
7
+ data.tar.gz: 930e5e2c3778edc8c7ed7400db76360d6b0aab32bec852ec1e706ac1372bcc7990091080dd2bed7b222070f95e3f0d839e49485c6bb0f76c190b0047febf2823
@@ -1,17 +1,7 @@
1
1
  # TODO do something like with_utf8 do ...
2
2
 
3
- if RUBY_VERSION < "1.9"
4
- $KCODE = 'UTF8' # otherwise mb_chars produces normal strings
5
- end
6
-
7
- require 'active_support/version'
8
- if ActiveSupport::VERSION::MAJOR > 2
9
- # pick what we need
10
- require 'active_support/core_ext/string/multibyte'
11
- else
12
- # load everything, its a mess in there ...
13
- require 'active_support'
14
- end
3
+ require 'unicode_utils/compatibility_decomposition'
4
+ require 'unicode_utils/general_category'
15
5
  require 'sort_alphabetical/core_ext'
16
6
 
17
7
  module SortAlphabetical
@@ -24,18 +14,13 @@ module SortAlphabetical
24
14
  else
25
15
  item = item.to_s
26
16
  end
27
- [to_ascii(item),item]#when both á and a are present, sort them a, á
17
+ [normalize(item), item] # when both á and a are present, sort them a, á
28
18
  end
29
19
  end
30
20
 
31
- def to_ascii(string)
32
- split_codepoints(string).reject{|e| e.bytes.to_a.length > 1}.join
33
- end
34
-
35
- private
36
-
37
- # returns an array of unicode codepoints, in canonical order
38
- def split_codepoints(string)
39
- string.mb_chars.normalize(:d).split(//u)
21
+ def normalize(string)
22
+ UnicodeUtils.compatibility_decomposition(string).split('').select do |c|
23
+ UnicodeUtils.general_category(c) =~ /Letter|Separator|Punctuation|Number/
24
+ end.join
40
25
  end
41
- end
26
+ end
metadata CHANGED
@@ -1,91 +1,59 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: sort_alphabetical
3
- version: !ruby/object:Gem::Version
4
- hash: 29
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Michael Grosser
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-10-24 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2013-09-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: unicode_utils
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
22
20
  type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
32
- name: activesupport
33
- version_requirements: *id001
34
21
  prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
35
27
  description:
36
28
  email: michael@grosser.it
37
29
  executables: []
38
-
39
30
  extensions: []
40
-
41
31
  extra_rdoc_files: []
42
-
43
- files:
44
- - .travis.yml
45
- - Gemfile
46
- - Gemfile.lock
47
- - Rakefile
48
- - Readme.md
49
- - VERSION
50
- - init.rb
32
+ files:
51
33
  - lib/sort_alphabetical.rb
52
34
  - lib/sort_alphabetical/core_ext.rb
53
- - sort_alphabetical.gemspec
54
- - spec/sort_alphabetical_spec.rb
55
- - spec/spec_helper.rb
56
- has_rdoc: true
57
- homepage: http://github.com/grosser/sort_alphabetical
58
- licenses: []
59
-
35
+ homepage: https://github.com/grosser/sort_alphabetical
36
+ licenses:
37
+ - MIT
38
+ metadata: {}
60
39
  post_install_message:
61
40
  rdoc_options: []
62
-
63
- require_paths:
41
+ require_paths:
64
42
  - lib
65
- required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
74
- required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- version: "0"
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
83
53
  requirements: []
84
-
85
54
  rubyforge_project:
86
- rubygems_version: 1.6.2
55
+ rubygems_version: 2.0.6
87
56
  signing_key:
88
- specification_version: 3
57
+ specification_version: 4
89
58
  summary: Sort UTF8 Strings alphabetical via Enumerable extension
90
59
  test_files: []
91
-
@@ -1,4 +0,0 @@
1
- rvm:
2
- - ree
3
- - 1.9.2
4
- - 1.9.3
data/Gemfile DELETED
@@ -1,9 +0,0 @@
1
- source :rubygems
2
-
3
- gem 'activesupport', ENV['RAILS']
4
-
5
- group :dev do
6
- gem 'rake'
7
- gem 'rspec', '~>2'
8
- gem 'jeweler'
9
- end
@@ -1,30 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activesupport (3.1.0)
5
- multi_json (~> 1.0)
6
- diff-lcs (1.1.3)
7
- git (1.2.5)
8
- jeweler (1.6.4)
9
- bundler (~> 1.0)
10
- git (>= 1.2.5)
11
- rake
12
- multi_json (1.0.3)
13
- rake (0.9.2)
14
- rspec (2.6.0)
15
- rspec-core (~> 2.6.0)
16
- rspec-expectations (~> 2.6.0)
17
- rspec-mocks (~> 2.6.0)
18
- rspec-core (2.6.4)
19
- rspec-expectations (2.6.0)
20
- diff-lcs (~> 1.1.2)
21
- rspec-mocks (2.6.0)
22
-
23
- PLATFORMS
24
- ruby
25
-
26
- DEPENDENCIES
27
- activesupport
28
- jeweler
29
- rake
30
- rspec (~> 2)
data/Rakefile DELETED
@@ -1,19 +0,0 @@
1
- task :default do
2
- sh "RAILS='~>2' && (bundle || bundle install) && bundle exec rspec spec"
3
- sh "RAILS='~>3' && (bundle || bundle install) && bundle exec rspec spec"
4
- end
5
-
6
- begin
7
- require 'jeweler'
8
- Jeweler::Tasks.new do |gem|
9
- gem.name = 'sort_alphabetical'
10
- gem.summary = "Sort UTF8 Strings alphabetical via Enumerable extension"
11
- gem.email = "michael@grosser.it"
12
- gem.homepage = "http://github.com/grosser/#{gem.name}"
13
- gem.authors = ["Michael Grosser"]
14
- end
15
-
16
- Jeweler::GemcutterTasks.new
17
- rescue LoadError
18
- puts "Jeweler, or one of its dependencies, is not available. Install it with: gem install jeweler"
19
- end
data/Readme.md DELETED
@@ -1,32 +0,0 @@
1
- Adds `sort_alphabetical` and `sort_alphabetical_by` to Enumberable(Array/Hash...),
2
- which sorts UTF8 Strings alphabetical.
3
- This sorting is done by placing variants on the same level as base character (A comes before Ä but ÄA comes before AB).
4
-
5
- Setup
6
- =====
7
- - As Rails plugin: `rails plugin install git://github.com/grosser/sort_alphabetical.git `
8
- - As gem: ` sudo gem install sort_alphabetical `
9
-
10
- Usage
11
- =====
12
- ['b','á'].sort_alphabetical == ['á','b']
13
- [['b',1],['á',2]].sort_alphabetical_by(&:first) == [['á',2],['b',1]]
14
-
15
- SortAlphabetical.to_ascii('á') == 'a'
16
-
17
- TODO
18
- ====
19
- - fix specs for 1.9
20
- - Sort non-ascii-convertables like ß(ss), œ(oe) , fi(fi), see [Ligatures](http://en.wikipedia.org/wiki/Typographical_ligature)
21
- - Integrate natural sorting e.g. `['a11', 'a2'] => ['a2', 'a11']` like [NaturalSort](http://rubyforge.org/projects/naturalsort)
22
-
23
- Authors
24
- =======
25
- - original string_to_ascii: [Marc-Andre](http://marc-andre.ca/).
26
- - [Maxime Menant](https://github.com/maxime-menant)
27
-
28
- [Michael Grosser](http://grosser.it)<br/>
29
- michael@grosser.it<br/>
30
- Hereby placed under public domain, do what you want, just do not hold me accountable...<br/>
31
- [![Build Status](https://secure.travis-ci.org/grosser/sort_alphabetical.png)](http://travis-ci.org/grosser/sort_alphabetical)
32
-
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.3
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'sort_alphabetical'
@@ -1,45 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{sort_alphabetical}
8
- s.version = "0.1.3"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Michael Grosser"]
12
- s.date = %q{2011-10-24}
13
- s.email = %q{michael@grosser.it}
14
- s.files = [
15
- ".travis.yml",
16
- "Gemfile",
17
- "Gemfile.lock",
18
- "Rakefile",
19
- "Readme.md",
20
- "VERSION",
21
- "init.rb",
22
- "lib/sort_alphabetical.rb",
23
- "lib/sort_alphabetical/core_ext.rb",
24
- "sort_alphabetical.gemspec",
25
- "spec/sort_alphabetical_spec.rb",
26
- "spec/spec_helper.rb"
27
- ]
28
- s.homepage = %q{http://github.com/grosser/sort_alphabetical}
29
- s.require_paths = ["lib"]
30
- s.rubygems_version = %q{1.6.2}
31
- s.summary = %q{Sort UTF8 Strings alphabetical via Enumerable extension}
32
-
33
- if s.respond_to? :specification_version then
34
- s.specification_version = 3
35
-
36
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
37
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
38
- else
39
- s.add_dependency(%q<activesupport>, [">= 0"])
40
- end
41
- else
42
- s.add_dependency(%q<activesupport>, [">= 0"])
43
- end
44
- end
45
-
@@ -1,43 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require 'spec_helper'
3
-
4
- describe "SortAlphabetical"do
5
- it "sorts ascii correctly" do
6
- %w(b c a).sort_alphabetical.should == %w(a b c)
7
- end
8
-
9
- it "sorts UTF8 chars without accents" do
10
- %w(b a á ä o ó x ö í i c).sort_alphabetical.should == %w(a á ä b c i í o ó ö x)
11
- end
12
-
13
- it "sorts by merging base with accented" do
14
- %w(AA AB ÄA).sort_alphabetical.should == %w(AA ÄA AB)
15
- end
16
-
17
- it "sorts words" do
18
- %w(hellö hello hellá).sort_alphabetical.should == %w(hellá hello hellö)
19
- end
20
-
21
- it "obeys order for ligatures" do
22
- pending
23
- %w(asb aßc asd).sort_alphabetical.should == %w(asb aßc asd)
24
- end
25
-
26
- it "sorts ˇ" do
27
- ["ˇ"].sort_alphabetical.should == ["ˇ"]
28
- end
29
-
30
- describe :to_ascii do
31
- it "removes any accents" do
32
- SortAlphabetical.to_ascii('á').should == 'a'
33
- end
34
- end
35
-
36
- describe :sort_alphabetical_by do
37
- it "sorts using given block" do
38
- silence_warnings do
39
- %w(za yá xä xa).sort_alphabetical_by{|x|x.chars.to_a.reverse.join}.should == %w(xa xä yá za)
40
- end
41
- end
42
- end
43
- end
@@ -1,3 +0,0 @@
1
- $LOAD_PATH << 'lib'
2
- require 'sort_alphabetical'
3
- require 'active_support/core_ext/kernel/reporting' # silence_warnings