zipcode-fr 1.0.0 → 1.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zipcode-fr.rb +47 -29
  3. metadata +12 -12
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b951d8164fd96461f3b1c4549c231867c77d4bc
4
- data.tar.gz: 27f411e06e2fefa64d9e84098c0d84cc0e23bd2e
3
+ metadata.gz: 25ae394ec05abe31e0c569e482c0921974d5eec9
4
+ data.tar.gz: 242efa64b48bb3fce200e47ece0251b40b1c9d70
5
5
  SHA512:
6
- metadata.gz: fe56c6094a32e80322b04d4b0aaf6dc1dc91679ed14c49f9c6393d79290185f83dfa4cffdafa088d73843716b3dcf15a282f939e1fbff0c45486105798567532
7
- data.tar.gz: 6a6705c55e4846bfadc5ba5f3e269e1e1917fbbcd23bfe771cc393a80f01e9696d42066dfb5f9955364c3c7433d127c117d4c0dd007d8cee74c98eff1481ff5d
6
+ metadata.gz: b866e37bc86951e3d35f8fe475d7d8bf5a0b639a14d1c58ca94739fff53e5c9aabc6813c39f5322173e7fa9e530cb68507ad3cb318609e977b059fa15ed5b171
7
+ data.tar.gz: 1c753016728b3f915660e1cea0ae94bb0943d8efbd170adcb27c9b48273a09792889a0a1999604be7ad135a49bc169226ed8938e2729d5beb70fb120f7da5abf
data/lib/zipcode-fr.rb CHANGED
@@ -20,45 +20,52 @@ module ZipCode
20
20
  @loaded
21
21
  end
22
22
 
23
- private def data_source
23
+ def data_source
24
24
  path = 'vendor/data/code_postaux_v201410.csv'
25
25
  File.expand_path(File.join(File.dirname(__FILE__), '..', path))
26
26
  end
27
+ private :data_source
27
28
 
28
- private def reader_options
29
+ def reader_options
29
30
  {
30
31
  col_sep: ';',
31
32
  encoding: 'ISO-8859-1',
32
33
  }
33
34
  end
35
+ private :reader_options
34
36
 
35
- private def open
37
+ def open
36
38
  CSV.open(data_source, 'rb', reader_options) do |csv|
37
39
  csv.take(1) # skip header manually to preserve tell()
38
40
  yield csv
39
41
  end
40
42
  end
43
+ private :open
41
44
 
42
- private def reader
43
- Enumerator.new do |y|
44
- open do |io|
45
- pos = io.tell
46
- io.each { |row| y << [pos, clean(row)]; pos = io.tell }
47
- end
45
+ def reader
46
+ return enum_for(:reader) unless block_given?
47
+
48
+ open do |io|
49
+ pos = io.tell
50
+ io.each { |row| yield(pos, clean(row)); pos = io.tell }
48
51
  end
49
52
  end
53
+ private :reader
50
54
 
51
- private def clean(row)
55
+ def clean(row)
52
56
  row_to_h(row_clean(row))
53
57
  end
58
+ private :clean
54
59
 
55
- private def row_clean(row)
60
+ def row_clean(row)
56
61
  row.map { |e| e.strip.encode('UTF-8') }
57
62
  end
63
+ private :row_clean
58
64
 
59
- private def row_to_h(row)
65
+ def row_to_h(row)
60
66
  [:insee, :name, :zip, :alt_name].zip(row).to_h
61
67
  end
68
+ private :row_to_h
62
69
 
63
70
  def index!(name, data, modes = nil, key: nil)
64
71
  key ||= name
@@ -78,7 +85,7 @@ module ZipCode
78
85
  # TODO: create an appender registry
79
86
  # rubocop:disable Metrics/AbcSize
80
87
  # rubocop:disable Metrics/MethodLength
81
- private def appender(idx, key, mode)
88
+ def appender(idx, key, mode)
82
89
  case mode
83
90
  when :prefix
84
91
  -> (pos, record) { append_prefixes(idx, pos, record[key]) }
@@ -92,52 +99,62 @@ module ZipCode
92
99
  -> (pos, record) { append_match(idx, pos, record[key]) }
93
100
  end
94
101
  end
102
+ private :appender
95
103
 
96
- private def append_match(idx, pos, val)
104
+ def append_match(idx, pos, val)
97
105
  idx[val.hash] << pos
98
106
  end
107
+ private :append_match
99
108
 
100
- private def append_words(idx, pos, val)
109
+ def append_words(idx, pos, val)
101
110
  each_word(val) { |w| idx[w.hash] << pos }
102
111
  end
112
+ private :append_words
103
113
 
104
- private def append_word_prefixes(idx, pos, val)
114
+ def append_word_prefixes(idx, pos, val)
105
115
  each_word(val) do |word|
106
116
  each_prefix(word) { |prefix| idx[prefix.hash] << pos }
107
117
  end
108
118
  end
119
+ private :append_word_prefixes
109
120
 
110
- private def append_prefixes(idx, pos, val, min_size: 1)
121
+ def append_prefixes(idx, pos, val, min_size: 1)
111
122
  each_prefix(val, min_size: min_size) { |prefix| idx[prefix.hash] << pos }
112
123
  end
124
+ private :append_prefixes
113
125
 
114
- private def each_word(val, &block)
126
+ def each_word(val, &block)
115
127
  val.split.each(&block)
116
128
  end
129
+ private :each_word
117
130
 
118
- private def each_prefix(val, min_size: 1)
131
+ def each_prefix(val, min_size: 1)
119
132
  min_size.upto(val.length) { |i| yield val[0...i] }
120
133
  end
134
+ private :each_prefix
121
135
 
122
- private def each_suffix(val, min_size: 1)
136
+ def each_suffix(val, min_size: 1)
123
137
  min_size.upto(val.length) { |i| yield val[-i..-1] }
124
138
  end
139
+ private :each_suffix
125
140
 
126
- private def append_infixes(idx, pos, val, min_size: 1)
141
+ def append_infixes(idx, pos, val, min_size: 1)
127
142
  each_prefix(val, min_size: min_size) do |prefix|
128
143
  each_suffix(prefix, min_size: min_size) do |infix|
129
144
  idx[infix.hash] << pos
130
145
  end
131
146
  end
132
147
  end
148
+ private :append_infixes
133
149
 
134
- private def index(name)
150
+ def index(name)
135
151
  if @indexes.key?(name)
136
152
  @indexes[name]
137
153
  else
138
154
  fail "no index named #{name.inspect}"
139
155
  end
140
156
  end
157
+ private :index
141
158
 
142
159
  def memsize_of_index(name)
143
160
  require 'objspace'
@@ -145,16 +162,17 @@ module ZipCode
145
162
  @indexes[name].reduce(0) { |a, (_, v)| a + ObjectSpace.memsize_of(v) }
146
163
  end
147
164
 
148
- private def read_at(*positions, count: 1)
149
- Enumerator.new do |y|
150
- open do |io|
151
- positions.each do |pos|
152
- io.seek(pos)
153
- io.take(count).each { |row| y << clean(row) }
154
- end
165
+ def read_at(*positions, count: 1)
166
+ return enum_for(:read_at, *positions, count: count) unless block_given?
167
+
168
+ open do |io|
169
+ positions.each do |pos|
170
+ io.seek(pos)
171
+ io.take(count).each { |row| yield clean(row) }
155
172
  end
156
173
  end
157
174
  end
175
+ private :read_at
158
176
 
159
177
  def search(name, str, case_insensitive: true)
160
178
  str = str.upcase if case_insensitive
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zipcode-fr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loic Nageleisen
@@ -12,62 +12,62 @@ date: 2015-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
15
- requirement: !ruby/object:Gem::Requirement
15
+ version_requirements: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
22
+ requirement: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop
29
- requirement: !ruby/object:Gem::Requirement
29
+ version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
36
+ requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
- requirement: !ruby/object:Gem::Requirement
43
+ version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
50
+ requirement: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
- requirement: !ruby/object:Gem::Requirement
57
+ version_requirements: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: |2
70
- Query city information by zip code and city name, indexed by word prefixes.
69
+ description: " Query city information by zip code and city name, indexed by word
70
+ prefixes.\n"
71
71
  email: loic.nageleisen@gmail.com
72
72
  executables: []
73
73
  extensions: []
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  version: '0'
96
96
  requirements: []
97
97
  rubyforge_project:
98
- rubygems_version: 2.4.5
98
+ rubygems_version: 2.4.8
99
99
  signing_key:
100
100
  specification_version: 4
101
101
  summary: French zip codes and cities