GB2260 0.1.1 → 0.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.
- checksums.yaml +4 -4
- data/.travis.yml +6 -1
- data/CHANGELOG.md +6 -1
- data/GB2260.gemspec +1 -0
- data/README.md +6 -0
- data/lib/GB2260/array.rb +11 -0
- data/lib/GB2260/constants.rb +1 -1
- data/lib/GB2260/data.rb +31 -14
- data/lib/GB2260/deprecation.rb +10 -0
- data/lib/GB2260/division.rb +24 -9
- data/lib/GB2260/version.rb +1 -1
- data/lib/GB2260.rb +25 -15
- metadata +18 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: febcce9dda36cd75c751136957fb3f7fee0d5ef6
|
|
4
|
+
data.tar.gz: fb00da230871eccb96690841e2c6a5050fd7c70b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ff25d3eefd41715e4c071b7d14f138f6e133b42bbfa51681902d543357af23dbbc2463edc7a865d6c53df83891a2314785341fef4ea3ad4eca56c6c8edcdc145
|
|
7
|
+
data.tar.gz: 0a1b3337e5af8c1c85f17c0cd8539ed0181c986dcd09af7e494453fea5e5b4c48774bf32ab34a4120e0a0e303df403e75d778a75a1704ec166927b2046c92625
|
data/.travis.yml
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
3
|
- 2.2.0
|
|
4
|
-
|
|
4
|
+
git:
|
|
5
|
+
submodules: false
|
|
6
|
+
before_install:
|
|
7
|
+
- sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules
|
|
8
|
+
- git submodule update --init --recursive
|
|
9
|
+
- gem install bundler -v 1.10.5
|
data/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,11 @@ GB2260.rb is in a pre-1.0 state. This means that its APIs and behavior are subje
|
|
|
8
8
|
|
|
9
9
|
* Your contribution here!
|
|
10
10
|
|
|
11
|
+
## 0.2.0 (2015-11-11)
|
|
12
|
+
|
|
13
|
+
* Implement spec 0.2
|
|
14
|
+
* Deprecate `#year` of `Division`
|
|
15
|
+
|
|
11
16
|
## 0.1.1 (2015-09-12)
|
|
12
17
|
|
|
13
18
|
* Fix description on rubygems
|
|
@@ -17,4 +22,4 @@ GB2260.rb is in a pre-1.0 state. This means that its APIs and behavior are subje
|
|
|
17
22
|
* Initial release
|
|
18
23
|
|
|
19
24
|
[Semver]: http://semver.org
|
|
20
|
-
[Unreleased]: https://github.com/
|
|
25
|
+
[Unreleased]: https://github.com/cn/GB2260.rb/compare/v0.2.0...HEAD
|
data/GB2260.gemspec
CHANGED
data/README.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# GB2260
|
|
2
2
|
|
|
3
|
+
[](https://github.com/cn/GB2260)
|
|
4
|
+
[](http://badge.fury.io/rb/GB2260)
|
|
5
|
+
[](https://travis-ci.org/cn/GB2260.rb)
|
|
6
|
+
[](https://codeclimate.com/github/cn/GB2260.rb)
|
|
7
|
+
[](https://coveralls.io/github/wolflee/GB2260.rb?branch=master)
|
|
8
|
+
|
|
3
9
|
The Ruby implementation for looking up the Chinese administrative divisions.
|
|
4
10
|
|
|
5
11
|
## Installation
|
data/lib/GB2260/array.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module ArrayExtensions
|
|
2
|
+
refine Array do
|
|
3
|
+
[:select, :reject].each do |action|
|
|
4
|
+
[:start, :end].each do |position|
|
|
5
|
+
define_method "#{action}_#{position}_with".to_sym do |predicate|
|
|
6
|
+
self.send(action) { |c| c.send("#{position}_with?".to_sym, predicate) }
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
data/lib/GB2260/constants.rb
CHANGED
data/lib/GB2260/data.rb
CHANGED
|
@@ -1,24 +1,41 @@
|
|
|
1
1
|
class GB2260
|
|
2
2
|
class Data
|
|
3
|
+
GEM_DIR = File.join(File.dirname(__FILE__), '../../').freeze
|
|
4
|
+
|
|
3
5
|
class << self
|
|
4
6
|
def data
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@data ||= Hash[Dir.glob("data/*.txt").map do |fn|
|
|
8
|
-
[
|
|
9
|
-
fn.gsub(/data\/GB2260-/, '').gsub(/\.txt$/, ''),
|
|
10
|
-
Hash[
|
|
11
|
-
File.readlines(File.expand_path(File.join(gem_dir, fn))).map do |l|
|
|
12
|
-
l.strip.split("\t")
|
|
13
|
-
end]
|
|
14
|
-
]
|
|
15
|
-
end]
|
|
7
|
+
Dir.chdir(GEM_DIR) do
|
|
8
|
+
@data ||= fetch_data(GEM_DIR)
|
|
16
9
|
end
|
|
17
10
|
end
|
|
18
11
|
|
|
19
|
-
def search(code,
|
|
20
|
-
|
|
21
|
-
data[
|
|
12
|
+
def search(code, revision=nil)
|
|
13
|
+
revision ||= LATEST_REVISION
|
|
14
|
+
data[revision.to_s][code.to_s]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def fetch_data(dir)
|
|
20
|
+
Hash[array_data(dir)]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def array_data(dir)
|
|
24
|
+
Dir["data/*.txt"].map do |fn|
|
|
25
|
+
[strip_revision(fn), Hash[per_revision_data(real_path(dir, fn))]]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def per_revision_data(filepath)
|
|
30
|
+
File.readlines(filepath).map {|l| l.chomp.split("\t") }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def real_path(dir, filename)
|
|
34
|
+
File.expand_path(File.join(dir, filename))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def strip_revision(filename)
|
|
38
|
+
filename.sub(/data\/GB2260-/, '').sub(/\.txt$/, '')
|
|
22
39
|
end
|
|
23
40
|
end
|
|
24
41
|
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module DeprecationWarner
|
|
2
|
+
refine Module do
|
|
3
|
+
def deprecate(old_method, new_method)
|
|
4
|
+
define_method(old_method) do |*args, &block|
|
|
5
|
+
warn "[DEPRECATION] `#{old_method}` is deprecated. Please use `#{new_method}` instead."
|
|
6
|
+
send(new_method, *args, &block)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
data/lib/GB2260/division.rb
CHANGED
|
@@ -1,27 +1,42 @@
|
|
|
1
1
|
class GB2260
|
|
2
2
|
class Division
|
|
3
|
-
|
|
3
|
+
using DeprecationWarner
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
attr_reader :code, :name, :revision
|
|
6
|
+
deprecate :year, :revision
|
|
7
|
+
|
|
8
|
+
def self.get(code, revision=nil)
|
|
9
|
+
new(code, Data.search(code, revision), revision)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.batch(codes, revision=nil)
|
|
13
|
+
codes.map { |code| get(code, revision) }
|
|
7
14
|
end
|
|
8
15
|
|
|
9
|
-
def initialize(code, name,
|
|
16
|
+
def initialize(code, name, revision=nil)
|
|
10
17
|
@code = code.to_s
|
|
11
18
|
@name = name.to_s
|
|
12
|
-
@
|
|
19
|
+
@revision = (revision || LATEST_REVISION).to_s
|
|
13
20
|
end
|
|
14
21
|
|
|
15
22
|
def ==(other)
|
|
16
|
-
|
|
23
|
+
eql? other
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def eql?(other)
|
|
27
|
+
code == other.code && revision == other.revision
|
|
17
28
|
end
|
|
18
29
|
|
|
19
30
|
def to_s
|
|
20
|
-
"<GB2260-#{@
|
|
31
|
+
"<GB2260-#{@revision} #{@code} #{[province, prefecture, county].compact.map(&:name).join('/')}>"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def hash
|
|
35
|
+
[@code, @revision].hash
|
|
21
36
|
end
|
|
22
37
|
|
|
23
38
|
def province
|
|
24
|
-
Division.get(@code[0,2] + PROVINCE_SUFFIX, @
|
|
39
|
+
Division.get(@code[0,2] + PROVINCE_SUFFIX, @revision)
|
|
25
40
|
end
|
|
26
41
|
|
|
27
42
|
def is_province?
|
|
@@ -29,7 +44,7 @@ class GB2260
|
|
|
29
44
|
end
|
|
30
45
|
|
|
31
46
|
def prefecture
|
|
32
|
-
Division.get(@code[0,4] + PREFECTURE_SUFFIX, @
|
|
47
|
+
Division.get(@code[0,4] + PREFECTURE_SUFFIX, @revision) unless is_province?
|
|
33
48
|
end
|
|
34
49
|
|
|
35
50
|
def is_prefecture?
|
data/lib/GB2260/version.rb
CHANGED
data/lib/GB2260.rb
CHANGED
|
@@ -1,35 +1,45 @@
|
|
|
1
1
|
require "GB2260/version"
|
|
2
2
|
require "GB2260/constants"
|
|
3
|
+
require "GB2260/deprecation"
|
|
3
4
|
require "GB2260/data"
|
|
4
5
|
require "GB2260/division"
|
|
6
|
+
require "GB2260/array"
|
|
5
7
|
|
|
6
8
|
class GB2260
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
using ArrayExtensions
|
|
10
|
+
|
|
11
|
+
def self.revisions
|
|
12
|
+
Data.data.keys.reverse
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def initialize(revision=nil)
|
|
16
|
+
@revision = (revision || LATEST_REVISION).to_s
|
|
9
17
|
end
|
|
10
18
|
|
|
11
19
|
def get(code)
|
|
12
|
-
Division.get(code, @
|
|
20
|
+
Division.get(code, @revision)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def all_code
|
|
24
|
+
Data.data[@revision].keys
|
|
13
25
|
end
|
|
14
26
|
|
|
15
27
|
def provinces
|
|
16
|
-
|
|
17
|
-
.select { |c| c.end_with? PROVINCE_SUFFIX }
|
|
18
|
-
.map { |c| Division.get(c, @year) }
|
|
28
|
+
Division.batch all_code.select_end_with(PROVINCE_SUFFIX), @revision
|
|
19
29
|
end
|
|
20
30
|
|
|
21
31
|
def prefectures(province_code)
|
|
22
|
-
|
|
23
|
-
.
|
|
24
|
-
.
|
|
25
|
-
.
|
|
26
|
-
|
|
32
|
+
Division.batch(all_code
|
|
33
|
+
.select_start_with(province_code.to_s[0,2])
|
|
34
|
+
.select_end_with(PREFECTURE_SUFFIX)
|
|
35
|
+
.reject_end_with(PROVINCE_SUFFIX),
|
|
36
|
+
@revision)
|
|
27
37
|
end
|
|
28
38
|
|
|
29
39
|
def counties(prefecture_code)
|
|
30
|
-
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
|
|
40
|
+
Division.batch(all_code
|
|
41
|
+
.select_start_with(prefecture_code.to_s[0,4])
|
|
42
|
+
.reject_end_with(PREFECTURE_SUFFIX),
|
|
43
|
+
@revision)
|
|
34
44
|
end
|
|
35
45
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: GB2260
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- WolfLee
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-11-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -52,6 +52,20 @@ dependencies:
|
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: coveralls
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
55
69
|
description:
|
|
56
70
|
email:
|
|
57
71
|
- liyuan0228@gmail.com
|
|
@@ -90,8 +104,10 @@ files:
|
|
|
90
104
|
- data/GB2260-2013.txt
|
|
91
105
|
- data/GB2260-2014.txt
|
|
92
106
|
- lib/GB2260.rb
|
|
107
|
+
- lib/GB2260/array.rb
|
|
93
108
|
- lib/GB2260/constants.rb
|
|
94
109
|
- lib/GB2260/data.rb
|
|
110
|
+
- lib/GB2260/deprecation.rb
|
|
95
111
|
- lib/GB2260/division.rb
|
|
96
112
|
- lib/GB2260/version.rb
|
|
97
113
|
homepage: https://github.com/wolflee/GB2260.rb
|