mmdb 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/ext/mmdb/mmdb.c +31 -19
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c277732d781d5af075093218d48ca835861c071
4
- data.tar.gz: 9bcdfc506dbaef0e3266f41fb3dcac470cbce7f6
3
+ metadata.gz: 04e83203d350b85813210cb63cd2f47cab9d7f53
4
+ data.tar.gz: dac172b67b0bfa2c3591a82819f3adf7f24dabec
5
5
  SHA512:
6
- metadata.gz: 6d29a077fb62a5a3fe7c88fb7de3c93c8f06bce27c0ae9ae717e5a270a8b0b6f3b8c6b02fdb2381f03eca94f485c3703b828eacad8e0f41e5b5864c83f6d2287
7
- data.tar.gz: 3efa13c0ae818c60b62234649fdf852226eaf8fa1ffeee3803ff7907d35079e91f2dae8703b35b0319da274200e616441797659a7b5162a9ec906a1f3b2ea3f5
6
+ metadata.gz: d3e877c123d0f8cab6d60fd405b7b0936f5aa1e0c71c83eefde0419d0b851c2d0b0df716a47d654839b8f87ba2ef84e92e695a3629ab10931a6f65a20067e4f5
7
+ data.tar.gz: 3e0b05ed42c42590b4aa36a1e07a38a96a62e33729cdbbf8007745483791668131619b9380e1c0f17feb20184105cc3254b8af00198dc4a8c3145049f55d5e49
@@ -108,14 +108,14 @@ static void
108
108
  maxminddb_set_result(VALUE hash, VALUE key, MMDB_entry_data_s *data) {
109
109
  if (data->has_data) {
110
110
  switch (data->type) {
111
- case MMDB_DATA_TYPE_UTF8_STRING:
112
- rb_hash_aset(hash, key, rb_utf8_str_new(data->utf8_string, data->data_size));
113
- break;
114
- case MMDB_DATA_TYPE_DOUBLE:
115
- rb_hash_aset(hash, key, rb_float_new(data->double_value));
116
- break;
117
- default:
118
- rb_hash_aset(hash, key, Qnil);
111
+ case MMDB_DATA_TYPE_UTF8_STRING:
112
+ rb_hash_aset(hash, key, rb_utf8_str_new(data->utf8_string, data->data_size));
113
+ break;
114
+ case MMDB_DATA_TYPE_DOUBLE:
115
+ rb_hash_aset(hash, key, rb_float_new(data->double_value));
116
+ break;
117
+ default:
118
+ rb_hash_aset(hash, key, Qnil);
119
119
  }
120
120
  } else {
121
121
  rb_hash_aset(hash, key, Qnil);
@@ -145,25 +145,37 @@ maxminddb_initialize(int argc, VALUE* argv, VALUE self) {
145
145
 
146
146
  /**
147
147
  *
148
- * mmdb.lookup("123.45.67.89") -> Hash
148
+ * mmdb.lookup("123.45.67.89") -> Hash (Default values is English)
149
+ * mmdb.lookup("123.45.67.89", "ja") -> Hash (Values is Japanese)
149
150
  *
150
- * TODO:
151
- * To receive `opts` argument that have language code and respond specified language data.
152
151
  */
153
152
  VALUE
154
- maxminddb_lookup(VALUE self, VALUE ip) {
153
+ maxminddb_lookup(int argc, VALUE* argv, VALUE self) {
155
154
  VALUE ret;
155
+
156
156
  int gai_error, mmdb_error;
157
+ const char *ip, *lang;
157
158
  struct MaxMindDB *ptr = MaxMindDB(self);
158
159
  MMDB_lookup_result_s lookuped;
159
160
  MMDB_entry_data_s data;
160
161
  MMDB_entry_s *entry;
161
162
 
162
- if (NIL_P(ip)) {
163
+ if (NIL_P(argv[0])) {
163
164
  return Qnil;
164
165
  }
166
+ ip = StringValuePtr(argv[0]);
167
+
168
+ switch (argc) {
169
+ case 1:
170
+ lang = en;
171
+ break;
172
+ case 2:
173
+ lang = StringValuePtr(argv[1]);
174
+ break;
175
+ }
176
+
165
177
 
166
- lookuped = MMDB_lookup_string(ptr->mmdb, StringValuePtr(ip), &gai_error, &mmdb_error);
178
+ lookuped = MMDB_lookup_string(ptr->mmdb, ip, &gai_error, &mmdb_error);
167
179
  if (gai_error) {
168
180
  rb_raise(rb_eTypeError, "%s", gai_strerror(gai_error));
169
181
  }
@@ -175,16 +187,16 @@ maxminddb_lookup(VALUE self, VALUE ip) {
175
187
  ret = rb_hash_new();
176
188
  entry = &lookuped.entry;
177
189
 
178
- MMDB_get_value(entry, &data, city, names, en, NULL);
190
+ MMDB_get_value(entry, &data, city, names, lang, NULL);
179
191
  maxminddb_set_result(ret, rb_sym_city, &data);
180
192
 
181
- MMDB_get_value(entry, &data, country, names, en, NULL);
193
+ MMDB_get_value(entry, &data, country, names, lang, NULL);
182
194
  maxminddb_set_result(ret, rb_sym_country, &data);
183
195
 
184
196
  MMDB_get_value(entry, &data, country, iso_code, NULL);
185
197
  maxminddb_set_result(ret, rb_sym_country_code, &data);
186
198
 
187
- MMDB_get_value(entry, &data, continent, names, en, NULL);
199
+ MMDB_get_value(entry, &data, continent, names, lang, NULL);
188
200
  maxminddb_set_result(ret, rb_sym_continent, &data);
189
201
 
190
202
  MMDB_get_value(entry, &data, location, latitude, NULL);
@@ -213,7 +225,7 @@ maxminddb_lookup(VALUE self, VALUE ip) {
213
225
 
214
226
  for (i = 0; i < data.data_size; i++) {
215
227
  sprintf(index, "%d", i);
216
- MMDB_get_value(entry, &data, subdivisions, index, names, en, NULL);
228
+ MMDB_get_value(entry, &data, subdivisions, index, names, lang, NULL);
217
229
  if (data.has_data) {
218
230
  if (data.type == MMDB_DATA_TYPE_UTF8_STRING) {
219
231
  rb_ary_push(ary, rb_utf8_str_new(data.utf8_string, data.data_size));
@@ -268,7 +280,7 @@ Init_mmdb() {
268
280
  rb_define_alloc_func(rb_cMaxMindDB, maxminddb_alloc);
269
281
 
270
282
  rb_define_method(rb_cMaxMindDB, "initialize", maxminddb_initialize, -1);
271
- rb_define_method(rb_cMaxMindDB, "lookup", maxminddb_lookup, 1);
283
+ rb_define_method(rb_cMaxMindDB, "lookup", maxminddb_lookup, -1);
272
284
  rb_define_method(rb_cMaxMindDB, "close", maxminddb_close, 0);
273
285
 
274
286
  maxminddb_init_rb_variables();
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mmdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yoppi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-10 00:00:00.000000000 Z
11
+ date: 2017-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler