zone_detect 0.1.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 +7 -0
- data/CHANGELOG.markdown +5 -0
- data/Gemfile +11 -0
- data/LICENSE +48 -0
- data/README.markdown +46 -0
- data/ext/zone_detect/contrib/ZoneDetect/LICENSE +24 -0
- data/ext/zone_detect/contrib/ZoneDetect/library/zonedetect.c +1260 -0
- data/ext/zone_detect/contrib/ZoneDetect/library/zonedetect.h +92 -0
- data/ext/zone_detect/extconf.rb +9 -0
- data/ext/zone_detect/zone_detect.c +49 -0
- data/ext/zone_detect/zone_detect.h +8 -0
- data/lib/zone_detect/version.rb +5 -0
- data/lib/zone_detect.rb +4 -0
- data/sig/zone_detect.rbs +7 -0
- data/zone_detect.gemspec +34 -0
- metadata +61 -0
@@ -0,0 +1,92 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2018, Bertold Van den Bergh (vandenbergh@bertold.org)
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* Redistribution and use in source and binary forms, with or without
|
6
|
+
* modification, are permitted provided that the following conditions are met:
|
7
|
+
* * Redistributions of source code must retain the above copyright
|
8
|
+
* notice, this list of conditions and the following disclaimer.
|
9
|
+
* * Redistributions in binary form must reproduce the above copyright
|
10
|
+
* notice, this list of conditions and the following disclaimer in the
|
11
|
+
* documentation and/or other materials provided with the distribution.
|
12
|
+
* * Neither the name of the author nor the
|
13
|
+
* names of its contributors may be used to endorse or promote products
|
14
|
+
* derived from this software without specific prior written permission.
|
15
|
+
*
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
17
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
19
|
+
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR DISTRIBUTOR BE LIABLE FOR ANY
|
20
|
+
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
21
|
+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
22
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
23
|
+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
24
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
25
|
+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
#include <stdint.h>
|
29
|
+
|
30
|
+
#ifndef INCL_ZONEDETECT_H_
|
31
|
+
#define INCL_ZONEDETECT_H_
|
32
|
+
|
33
|
+
#if !defined(ZD_EXPORT)
|
34
|
+
#if defined(_MSC_VER)
|
35
|
+
#define ZD_EXPORT __declspec(dllimport)
|
36
|
+
#else
|
37
|
+
#define ZD_EXPORT
|
38
|
+
#endif
|
39
|
+
#endif
|
40
|
+
|
41
|
+
typedef enum {
|
42
|
+
ZD_LOOKUP_IGNORE = -3,
|
43
|
+
ZD_LOOKUP_END = -2,
|
44
|
+
ZD_LOOKUP_PARSE_ERROR = -1,
|
45
|
+
ZD_LOOKUP_NOT_IN_ZONE = 0,
|
46
|
+
ZD_LOOKUP_IN_ZONE = 1,
|
47
|
+
ZD_LOOKUP_IN_EXCLUDED_ZONE = 2,
|
48
|
+
ZD_LOOKUP_ON_BORDER_VERTEX = 3,
|
49
|
+
ZD_LOOKUP_ON_BORDER_SEGMENT = 4
|
50
|
+
} ZDLookupResult;
|
51
|
+
|
52
|
+
typedef struct {
|
53
|
+
ZDLookupResult lookupResult;
|
54
|
+
|
55
|
+
uint32_t polygonId;
|
56
|
+
uint32_t metaId;
|
57
|
+
uint8_t numFields;
|
58
|
+
char **fieldNames;
|
59
|
+
char **data;
|
60
|
+
} ZoneDetectResult;
|
61
|
+
|
62
|
+
struct ZoneDetectOpaque;
|
63
|
+
typedef struct ZoneDetectOpaque ZoneDetect;
|
64
|
+
|
65
|
+
#ifdef __cplusplus
|
66
|
+
extern "C" {
|
67
|
+
#endif
|
68
|
+
|
69
|
+
ZD_EXPORT ZoneDetect *ZDOpenDatabase(const char *path);
|
70
|
+
ZD_EXPORT ZoneDetect *ZDOpenDatabaseFromMemory(void* buffer, size_t length);
|
71
|
+
ZD_EXPORT void ZDCloseDatabase(ZoneDetect *library);
|
72
|
+
|
73
|
+
ZD_EXPORT ZoneDetectResult *ZDLookup(const ZoneDetect *library, float lat, float lon, float *safezone);
|
74
|
+
ZD_EXPORT void ZDFreeResults(ZoneDetectResult *results);
|
75
|
+
|
76
|
+
ZD_EXPORT const char *ZDGetNotice(const ZoneDetect *library);
|
77
|
+
ZD_EXPORT uint8_t ZDGetTableType(const ZoneDetect *library);
|
78
|
+
ZD_EXPORT const char *ZDLookupResultToString(ZDLookupResult result);
|
79
|
+
|
80
|
+
ZD_EXPORT int ZDSetErrorHandler(void (*handler)(int, int));
|
81
|
+
ZD_EXPORT const char *ZDGetErrorString(int errZD);
|
82
|
+
|
83
|
+
ZD_EXPORT float* ZDPolygonToList(const ZoneDetect *library, uint32_t polygonId, size_t* length);
|
84
|
+
|
85
|
+
ZD_EXPORT char* ZDHelperSimpleLookupString(const ZoneDetect* library, float lat, float lon);
|
86
|
+
ZD_EXPORT void ZDHelperSimpleLookupStringFree(char* str);
|
87
|
+
|
88
|
+
#ifdef __cplusplus
|
89
|
+
}
|
90
|
+
#endif
|
91
|
+
|
92
|
+
#endif // INCL_ZONEDETECT_H_
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mkmf'
|
4
|
+
|
5
|
+
$VPATH << '$(srcdir)/contrib/ZoneDetect/library' # rubocop:disable Style/GlobalVars
|
6
|
+
$srcs = ['zone_detect.c', 'contrib/ZoneDetect/library/zonedetect.c'] # rubocop:disable Style/GlobalVars
|
7
|
+
|
8
|
+
append_cppflags '-I$(srcdir)/contrib/ZoneDetect/library'
|
9
|
+
create_makefile 'zone_detect/zone_detect'
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#include "zone_detect.h"
|
2
|
+
|
3
|
+
struct zd_data {
|
4
|
+
ZoneDetect *cd;
|
5
|
+
};
|
6
|
+
|
7
|
+
static VALUE initialize(VALUE self, VALUE path);
|
8
|
+
static VALUE find(VALUE self, VALUE lat, VALUE lng);
|
9
|
+
static VALUE zd_alloc(VALUE klass);
|
10
|
+
static void zd_free(void *data);
|
11
|
+
|
12
|
+
static const rb_data_type_t zd_type = {
|
13
|
+
"zonedetect",
|
14
|
+
{0, zd_free, 0,},
|
15
|
+
0, 0,
|
16
|
+
RUBY_TYPED_FREE_IMMEDIATELY
|
17
|
+
};
|
18
|
+
|
19
|
+
static void zd_free(void *data) {
|
20
|
+
ZDCloseDatabase(((struct zd_data *)data)->cd);
|
21
|
+
}
|
22
|
+
|
23
|
+
static VALUE zd_alloc(VALUE klass) {
|
24
|
+
struct zd_data *d;
|
25
|
+
return TypedData_Make_Struct(klass, struct zd_data, &zd_type, d);
|
26
|
+
}
|
27
|
+
|
28
|
+
void Init_zone_detect(void) {
|
29
|
+
VALUE ZoneDetect = rb_define_class("ZoneDetect", rb_cObject);
|
30
|
+
rb_define_alloc_func(ZoneDetect, zd_alloc);
|
31
|
+
rb_define_method(ZoneDetect, "initialize", initialize, 1);
|
32
|
+
rb_define_method(ZoneDetect, "find", find, 2);
|
33
|
+
}
|
34
|
+
|
35
|
+
static VALUE initialize(VALUE self, VALUE path) {
|
36
|
+
struct zd_data *d;
|
37
|
+
TypedData_Get_Struct(self, struct zd_data, &zd_type, d);
|
38
|
+
d->cd = ZDOpenDatabase(StringValuePtr(path));
|
39
|
+
return self;
|
40
|
+
}
|
41
|
+
|
42
|
+
static VALUE find(VALUE self, VALUE lat, VALUE lng) {
|
43
|
+
struct zd_data *d;
|
44
|
+
TypedData_Get_Struct(self, struct zd_data, &zd_type, d);
|
45
|
+
char *simple = ZDHelperSimpleLookupString(d->cd, NUM2DBL(lat), NUM2DBL(lng));
|
46
|
+
VALUE str = rb_str_new(simple, strlen(simple));
|
47
|
+
free(simple);
|
48
|
+
return str;
|
49
|
+
}
|
data/lib/zone_detect.rb
ADDED
data/sig/zone_detect.rbs
ADDED
data/zone_detect.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'lib/zone_detect/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'zone_detect'
|
7
|
+
spec.version = ZoneDetect::VERSION
|
8
|
+
spec.authors = ['Alexander Cederblad']
|
9
|
+
spec.email = ['alexcederblad@gmail.com']
|
10
|
+
|
11
|
+
spec.summary = 'Find time zone from given coordinates'
|
12
|
+
spec.homepage = 'https://github.com/fishbrain/zone_detect'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
spec.required_ruby_version = '>= 2.6.0'
|
15
|
+
|
16
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
17
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
18
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
19
|
+
|
20
|
+
spec.files = Dir[
|
21
|
+
'LICENSE',
|
22
|
+
'Gemfile',
|
23
|
+
'README.markdown',
|
24
|
+
'CHANGELOG.markdown',
|
25
|
+
'zone_detect.gemspec',
|
26
|
+
'ext/*/*.{rb,c,h}',
|
27
|
+
'ext/*/contrib/ZoneDetect/LICENSE',
|
28
|
+
'ext/*/contrib/ZoneDetect/library/*.{c,h}',
|
29
|
+
'lib/**/*.rb',
|
30
|
+
'sig/**/*',
|
31
|
+
]
|
32
|
+
spec.require_paths = ['lib']
|
33
|
+
spec.extensions = ['ext/zone_detect/extconf.rb']
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zone_detect
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Cederblad
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-01-19 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
- alexcederblad@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions:
|
18
|
+
- ext/zone_detect/extconf.rb
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- CHANGELOG.markdown
|
22
|
+
- Gemfile
|
23
|
+
- LICENSE
|
24
|
+
- README.markdown
|
25
|
+
- ext/zone_detect/contrib/ZoneDetect/LICENSE
|
26
|
+
- ext/zone_detect/contrib/ZoneDetect/library/zonedetect.c
|
27
|
+
- ext/zone_detect/contrib/ZoneDetect/library/zonedetect.h
|
28
|
+
- ext/zone_detect/extconf.rb
|
29
|
+
- ext/zone_detect/zone_detect.c
|
30
|
+
- ext/zone_detect/zone_detect.h
|
31
|
+
- lib/zone_detect.rb
|
32
|
+
- lib/zone_detect/version.rb
|
33
|
+
- sig/zone_detect.rbs
|
34
|
+
- zone_detect.gemspec
|
35
|
+
homepage: https://github.com/fishbrain/zone_detect
|
36
|
+
licenses:
|
37
|
+
- MIT
|
38
|
+
metadata:
|
39
|
+
homepage_uri: https://github.com/fishbrain/zone_detect
|
40
|
+
source_code_uri: https://github.com/fishbrain/zone_detect
|
41
|
+
rubygems_mfa_required: 'true'
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options: []
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 2.6.0
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubygems_version: 3.3.0.dev
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Find time zone from given coordinates
|
61
|
+
test_files: []
|