GB2260 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e1f1e39c794df897086e9b57ee7bf6af4a33187a
4
- data.tar.gz: 03af9401b3966081100d909294ed954db97458ca
3
+ metadata.gz: febcce9dda36cd75c751136957fb3f7fee0d5ef6
4
+ data.tar.gz: fb00da230871eccb96690841e2c6a5050fd7c70b
5
5
  SHA512:
6
- metadata.gz: 88ab9591bd0e2bde1ec8a1a3e7fe5a65a5294be51489941bfd6ea6a63849ee8f29009603965ddea119636fd547ed92ab712b1956e90032812739455ff1da0376
7
- data.tar.gz: 045dce066250477d0dd069107cf8a5b657865510c045c8acd7825b34f2a8f04c92c233fe43cc05889ee7e929bfa4e60d9d9be492118c49a1352668bfdf5de569
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
- before_install: gem install bundler -v 1.10.5
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/wolflee/GB2260.rb/compare/v0.1.1...HEAD
25
+ [Unreleased]: https://github.com/cn/GB2260.rb/compare/v0.2.0...HEAD
data/GB2260.gemspec CHANGED
@@ -30,4 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "bundler", "~> 1.10"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec"
33
+ spec.add_development_dependency "coveralls"
33
34
  end
data/README.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # GB2260
2
2
 
3
+ [![GB/T 2260](http://img.shields.io/badge/GB%2FT-2260-blue.svg?style=flat)](https://github.com/cn/GB2260)
4
+ [![Gem Version](https://badge.fury.io/rb/GB2260.svg)](http://badge.fury.io/rb/GB2260)
5
+ [![Build Status](https://travis-ci.org/cn/GB2260.rb.svg?branch=master)](https://travis-ci.org/cn/GB2260.rb)
6
+ [![Code Climate](https://codeclimate.com/github/cn/GB2260.rb/badges/gpa.svg)](https://codeclimate.com/github/cn/GB2260.rb)
7
+ [![Coverage Status](https://coveralls.io/repos/wolflee/GB2260.rb/badge.svg?branch=master&service=github)](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
@@ -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
@@ -1,5 +1,5 @@
1
1
  class GB2260
2
- LATEST_YEAR = '2014'.freeze
2
+ LATEST_REVISION = '2014'.freeze
3
3
  PROVINCE_SUFFIX = '0000'.freeze
4
4
  PREFECTURE_SUFFIX = '00'.freeze
5
5
  end
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
- gem_dir = File.join(File.dirname(__FILE__), '../../')
6
- Dir.chdir(gem_dir) do
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, year=nil)
20
- year ||= LATEST_YEAR
21
- data[year.to_s][code.to_s]
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
@@ -1,27 +1,42 @@
1
1
  class GB2260
2
2
  class Division
3
- attr_reader :code, :name, :year
3
+ using DeprecationWarner
4
4
 
5
- def self.get(code, year=nil)
6
- new(code, Data.search(code, year))
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, year=nil)
16
+ def initialize(code, name, revision=nil)
10
17
  @code = code.to_s
11
18
  @name = name.to_s
12
- @year = year
19
+ @revision = (revision || LATEST_REVISION).to_s
13
20
  end
14
21
 
15
22
  def ==(other)
16
- code == other.code && year == other.year
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-#{@year||LATEST_YEAR} #{[province, prefecture, county].compact.map(&:name).join('/')}>"
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, @year)
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, @year) unless is_province?
47
+ Division.get(@code[0,4] + PREFECTURE_SUFFIX, @revision) unless is_province?
33
48
  end
34
49
 
35
50
  def is_prefecture?
@@ -1,3 +1,3 @@
1
1
  class GB2260
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
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
- def initialize(year=nil)
8
- @year = year || LATEST_YEAR
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, @year)
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
- Data.data[@year].keys
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
- Data.data[@year].keys
23
- .select { |c| c.start_with? province_code.to_s[0,2] }
24
- .select { |c| c.end_with? PREFECTURE_SUFFIX }
25
- .reject { |c| c.end_with? PROVINCE_SUFFIX }
26
- .map { |c| Division.get(c, @year) }
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
- Data.data[@year].keys
31
- .select { |c| c.start_with? prefecture_code.to_s[0,4] }
32
- .reject { |c| c.end_with? PREFECTURE_SUFFIX }
33
- .map { |c| Division.get(c, @year) }
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.1.1
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-09-12 00:00:00.000000000 Z
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