houjin-bangou 0.0.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee36ec7484e838942889a688b5eee95e1b48c98b
4
- data.tar.gz: e1e35549bd21ac840d3186b798f4feed886330ee
3
+ metadata.gz: c06f71c9299c43aee6ddae7d7090d79ceb901b10
4
+ data.tar.gz: 7815175acbf4c116d1deba51b57e55a0427752f8
5
5
  SHA512:
6
- metadata.gz: ae632bdf71d31b2ae8f62fc195f9dc3ea18324cc90c22cf90e6719770265f2047a6457cc007ab3a8c2e9fd4a65d706600754bb5f681429cb996e7dd9510fc1e7
7
- data.tar.gz: 716570897fb5f487a74c2f1a39bae4045f6da17719acc7d2908122d3c554eadd2548a5c9a8ae0790cd092bf86657d64b5ee4e1c89a1394424c691d50ee738bb1
6
+ metadata.gz: 327ed7f65b0a034976a705ac1955717a254acbff4906b2ac3fc10de6ea5a66265c32b7fa60af2fa42696a7cab866773b2d88b82d792080ac091b1691301a4301
7
+ data.tar.gz: b3b0ee0ab72d696c5ba4c15cba8315688cb05426d45a53c9ca4f77b2b230645379de86353cdf433f0226877427755afc9f07c50864fb47f31b8aa65963229328
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ group :development do
6
6
  gem 'rake', '~> 10.0'
7
7
  gem 'rspec', '~> 3.0'
8
8
  gem 'webmock', '~> 2.0'
9
+ gem 'vcr', '~> 3.0'
9
10
  gem 'pry'
10
11
  gem 'pry-byebug'
11
12
  gem 'guard'
data/Guardfile ADDED
@@ -0,0 +1,14 @@
1
+ guard :rspec, cmd: 'bundle exec rspec --format Fuubar' do
2
+ require 'guard/rspec/dsl'
3
+ dsl = Guard::RSpec::Dsl.new(self)
4
+
5
+ # RSpec files
6
+ rspec = dsl.rspec
7
+ watch(rspec.spec_helper) { rspec.spec_dir }
8
+ watch(rspec.spec_support) { rspec.spec_dir }
9
+ watch(rspec.spec_files)
10
+
11
+ # Ruby files
12
+ ruby = dsl.ruby
13
+ dsl.watch_spec_files_for(ruby.lib_files)
14
+ end
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![GitHub](https://img.shields.io/badge/github-kissy2go/houjin--bangou-blue.svg)](https://github.com/kissy2go/houjin-bangou)
4
4
 
5
+ [![Gem Version](https://badge.fury.io/rb/houjin-bangou.svg)](https://badge.fury.io/rb/houjin-bangou)
5
6
  [![wercker status](https://app.wercker.com/status/60de5f243a0940720d44ff8958410aa8/s/master "wercker status")](https://app.wercker.com/project/byKey/60de5f243a0940720d44ff8958410aa8)
6
7
  [![License](https://img.shields.io/badge/license-MIT-yellowgreen.svg)](#license)
7
8
 
@@ -26,7 +27,26 @@ Or install it yourself as:
26
27
 
27
28
  ## Usage
28
29
 
29
- TODO: Write usage instructions here
30
+ HoujinBangou.application_id = YOUR_APPLICATION_ID
31
+
32
+ # Search by number
33
+ number = ... # String or Array
34
+ result = HoujinBangou::Num.search(number)
35
+ result.each do |record|
36
+ record #=> HoujinBangou::ResultSet::Record
37
+ record.corporate_number
38
+ record.name
39
+ end
40
+
41
+ # Search by date span
42
+ from = ... # Date, Time or String
43
+ to = ... # Date, Time or String
44
+ result = HoujinBangou::Diff.search(from, to)
45
+ result.each do |record|
46
+ record #=> HoujinBangou::ResultSet::Record
47
+ record.corporate_number
48
+ record.name
49
+ end
30
50
 
31
51
  ## Development
32
52
 
data/bin/console CHANGED
@@ -3,5 +3,7 @@
3
3
  require 'bundler/setup'
4
4
  require 'houjin-bangou'
5
5
 
6
+ HoujinBangou.application_id = ENV['HOUJIN_BANGOU_APPLICATION_ID']
7
+
6
8
  require 'pry'
7
9
  Pry.start
data/lib/houjin-bangou.rb CHANGED
@@ -1,5 +1,42 @@
1
+ require 'csv'
2
+
1
3
  require 'houjin-bangou/version'
2
4
 
5
+ require 'houjin-bangou/immutable_struct'
6
+ require 'houjin-bangou/api_endpoint'
7
+ require 'houjin-bangou/result_set'
8
+ require 'houjin-bangou/util'
9
+
10
+ # @see http://www.houjin-bangou.nta.go.jp/webapi
11
+ # @see http://www.houjin-bangou.nta.go.jp/documents/k-web-api-kinou.pdf
3
12
  module HoujinBangou
4
- # Your code goes here...
13
+ @base_url = "https://api.houjin-bangou.nta.go.jp/#{API_VERSION}"
14
+ @open_timeout = 60
15
+ @read_timeout = 60
16
+
17
+ class << self
18
+ attr_accessor :base_url, :application_id, :open_timeout, :read_timeout
19
+ end
20
+
21
+ def self.request(url, query, src_encoding: Encoding::Shift_JIS)
22
+ query = { id: application_id }.merge(query)
23
+ url.query = URI.encode_www_form(query)
24
+
25
+ http = Net::HTTP.new(url.host, url.port)
26
+ http.use_ssl = true if url.scheme == 'https'
27
+ http.open_timeout = open_timeout
28
+ http.read_timeout = read_timeout
29
+
30
+ response = http.start do |http|
31
+ request = Net::HTTP::Get.new(url.request_uri)
32
+ http.request(request)
33
+ end
34
+
35
+ case response
36
+ when Net::HTTPSuccess
37
+ HoujinBangou::ResultSet.new(response.body, src_encoding)
38
+ else
39
+ response.value
40
+ end
41
+ end
5
42
  end
@@ -0,0 +1,47 @@
1
+ module HoujinBangou
2
+ def self.APIEndpoint(path)
3
+ Module.new do |m|
4
+ define_method :endpoint_url do
5
+ URI.parse(HoujinBangou.base_url + path)
6
+ end
7
+ end
8
+ end
9
+
10
+ module Num
11
+ extend HoujinBangou::APIEndpoint('/num')
12
+
13
+ RESPONSE_TYPE = '01' # CSV 形式 / Shift-JIS (JIS 第一及び第二水準)
14
+
15
+ def self.search(number, history: nil)
16
+ query = {}
17
+ query[:number] = Array[*number].join(',')
18
+ query[:history] = history unless history.nil?
19
+ query[:type] = RESPONSE_TYPE
20
+
21
+ HoujinBangou.request(endpoint_url, query)
22
+ end
23
+ end
24
+
25
+ module Diff
26
+ extend HoujinBangou::APIEndpoint('/diff')
27
+
28
+ KIND_COUNTRY = '01' # 国の機関
29
+ KIND_LOCAL_GOVEMENTS = '02' # 地方公共団体
30
+ KIND_HOUJIN = '03' # 設立登記法人
31
+ KIND_ETC = '04' # 外国会社等・その他
32
+
33
+ RESPONSE_TYPE = '01' # CSV 形式 / Shift-JIS (JIS 第一及び第二水準)
34
+
35
+ def self.search(from, to, address: nil, kind: nil, divide: nil)
36
+ query = {}
37
+ query[:from] = HoujinBangou::Util::Date.encode(from)
38
+ query[:to] = HoujinBangou::Util::Date.encode(to)
39
+ query[:address] = address unless address.nil?
40
+ query[:kind] = Array[*kind].join(',') unless kind.nil?
41
+ query[:divide] = divide unless divide.nil?
42
+ query[:type] = RESPONSE_TYPE
43
+
44
+ HoujinBangou.request(endpoint_url, query)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,14 @@
1
+ module HoujinBangou
2
+ class ImmutableStruct < Struct
3
+ private :[]=
4
+
5
+ def initialize(*)
6
+ super
7
+ members.each { |member| instance_eval { undef :"#{member}=" } }
8
+ end
9
+
10
+ def inspect
11
+ super.sub('struct', self.class.name)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,77 @@
1
+ module HoujinBangou
2
+ class ResultSet
3
+ include Enumerable
4
+
5
+ attr_reader :header
6
+
7
+ def initialize(response, src_encoding)
8
+ dst_encoding = Encoding.default_internal || Encoding::UTF_8
9
+ @csv_operator = CSV.new(response.encode(dst_encoding, src_encoding))
10
+ @header = Header.new(*@csv_operator.readline)
11
+ end
12
+
13
+ def each(&block)
14
+ return self.to_enum unless block_given?
15
+ return @csv.each(&block) unless @csv.nil?
16
+
17
+ @csv = []
18
+ @csv_operator.each do |row|
19
+ @csv << record = Record.new(*row)
20
+ yield record
21
+ end
22
+ @csv
23
+ end
24
+
25
+ class Header < ImmutableStruct.new(
26
+ :last_update_date, # 最終更新年月日
27
+ :count, # 総件数
28
+ :divide_number, # 分割番号
29
+ :divide_size # 分割数
30
+ )
31
+
32
+ def initialize(*)
33
+ super
34
+ self[:last_update_date] = HoujinBangou::Util::Date.decode(last_update_date)
35
+ self[:count] = HoujinBangou::Util::Number.decode(count)
36
+ self[:divide_number] = HoujinBangou::Util::Number.decode(divide_number)
37
+ self[:divide_size] = HoujinBangou::Util::Number.decode(divide_size)
38
+ end
39
+ end
40
+
41
+ class Record < ImmutableStruct.new(
42
+ :sequence_number, # 一連番号
43
+ :corporate_number, # 法人番号
44
+ :process, # 処理区分
45
+ :correct, # 訂正区分
46
+ :update_date, # 更新年月日
47
+ :change_date, # 変更年月日
48
+ :name, # 商号又は名称
49
+ :name_image_id, # 商号又は名称イメージ ID
50
+ :kind, # 法人種別
51
+ :prefecture_name, # 国内所在地 (都道府県)
52
+ :city_name, # 国内所在地 (市区町村)
53
+ :street_number, # 国内所在地 (丁目番地等)
54
+ :address_image_id, # 国内所在地イメージ ID
55
+ :prefecture_code, # 都道府県コード
56
+ :city_code, # 市区町村コード
57
+ :post_code, # 郵便番号
58
+ :address_outside, # 国外所在地
59
+ :address_outside_image_id, # 国外所在地イメージ ID
60
+ :close_date, # 登記記録の閉鎖等年月日
61
+ :close_cause, # 登記記録の閉鎖等の事由
62
+ :successor_corporate_number, # 承継先法人番号
63
+ :change_cause, # 変更事由の詳細
64
+ :assignment_date # 法人番号指定年月日
65
+ )
66
+
67
+ def initialize(*)
68
+ super
69
+ self[:sequence_number] = HoujinBangou::Util::Number.decode(sequence_number)
70
+ self[:update_date] = HoujinBangou::Util::Date.decode(update_date)
71
+ self[:change_date] = HoujinBangou::Util::Date.decode(change_date)
72
+ self[:close_date] = HoujinBangou::Util::Date.decode(close_date)
73
+ self[:assignment_date] = HoujinBangou::Util::Date.decode(assignment_date)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,21 @@
1
+ module HoujinBangou
2
+ module Util
3
+ module Date
4
+ DATE_FORMAT = '%Y-%m-%d'
5
+
6
+ def self.encode(date)
7
+ date.strftime(DATE_FORMAT) rescue date
8
+ end
9
+
10
+ def self.decode(string)
11
+ ::Date.strptime(string, DATE_FORMAT) rescue string
12
+ end
13
+ end
14
+
15
+ module Number
16
+ def self.decode(string)
17
+ Integer(string) rescue string
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,4 @@
1
1
  module HoujinBangou
2
- VERSION = '0.0.0'
2
+ VERSION = '1.0.0'
3
+ API_VERSION = '1'
3
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: houjin-bangou
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kissy2go
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-07 00:00:00.000000000 Z
11
+ date: 2017-01-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: See http://www.houjin-bangou.nta.go.jp/webapi for details.
14
14
  email:
@@ -20,12 +20,17 @@ files:
20
20
  - ".gitignore"
21
21
  - ".rspec"
22
22
  - Gemfile
23
+ - Guardfile
23
24
  - LICENSE.txt
24
25
  - README.md
25
26
  - Rakefile
26
27
  - bin/console
27
28
  - houjin-bangou.gemspec
28
29
  - lib/houjin-bangou.rb
30
+ - lib/houjin-bangou/api_endpoint.rb
31
+ - lib/houjin-bangou/immutable_struct.rb
32
+ - lib/houjin-bangou/result_set.rb
33
+ - lib/houjin-bangou/util.rb
29
34
  - lib/houjin-bangou/version.rb
30
35
  - wercker.yml
31
36
  homepage: https://github.com/kissy2go/houjin-bangou