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 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