pincode_finder 0.1.3 → 0.1.4
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 +4 -4
- data/lib/pincode_finder/version.rb +1 -1
- data/lib/pincode_finder.rb +69 -28
- metadata +3 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 23b0acc58abe3487875681d61457003462b09264ea4b6044bf67f38e219c2fbd
|
|
4
|
+
data.tar.gz: 942ed9168f3635900da76105d98a41cf28e3c2a2be3c464ee72a52f7ef3754f5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 464841f577b1fe42a5668c0be326683b8c9c303152b349f893b3602ce92c935560e0b55f5e97fb77b395ac4ae5e3b03c3fd3597524b63740a1a4851c99897c87
|
|
7
|
+
data.tar.gz: ad92420da504249477cdb6e854ea8c206fcaa713f25cd4a9fdb489073a8c2d6a1249403a68b5fbc8edc06c8c067a9d2587e8b1a1f2943dd8eea9b3f1b502a356
|
data/lib/pincode_finder.rb
CHANGED
|
@@ -5,21 +5,11 @@ require "fileutils"
|
|
|
5
5
|
require "zlib"
|
|
6
6
|
require "base64"
|
|
7
7
|
|
|
8
|
-
require_relative "pincode_finder/config"
|
|
9
|
-
require_relative "pincode_finder/github_client"
|
|
10
|
-
require "net/http"
|
|
11
|
-
require "uri"
|
|
12
|
-
require "fileutils"
|
|
13
|
-
require "zlib"
|
|
14
|
-
require "base64"
|
|
15
|
-
|
|
16
8
|
require_relative "pincode_finder/config"
|
|
17
9
|
require_relative "pincode_finder/github_client"
|
|
18
10
|
|
|
19
11
|
module PincodeFinder
|
|
20
|
-
DATA_FILE
|
|
21
|
-
DETAILS_HASH = "{ district: <district>, state: <state>}".freeze
|
|
22
|
-
DATA_FILE = File.expand_path("../data/pincode_data_optimized.json.gz", __dir__)
|
|
12
|
+
DATA_FILE = File.expand_path("../data/pincode_data_optimized.json.gz", __dir__)
|
|
23
13
|
DETAILS_HASH = "{ district: <district>, state: <state>}".freeze
|
|
24
14
|
|
|
25
15
|
def self.find(pincode)
|
|
@@ -29,8 +19,12 @@ module PincodeFinder
|
|
|
29
19
|
record = data[pincode]
|
|
30
20
|
|
|
31
21
|
if record
|
|
32
|
-
|
|
33
|
-
|
|
22
|
+
{
|
|
23
|
+
pincode: pincode,
|
|
24
|
+
state: record["state"],
|
|
25
|
+
district: record["district"],
|
|
26
|
+
verified: record["verified"] || true
|
|
27
|
+
}
|
|
34
28
|
else
|
|
35
29
|
{
|
|
36
30
|
error: "Pincode not found",
|
|
@@ -43,14 +37,13 @@ module PincodeFinder
|
|
|
43
37
|
pincode = pincode.to_s
|
|
44
38
|
input_details = normalize_and_filter(input_details)
|
|
45
39
|
|
|
46
|
-
|
|
40
|
+
data = load_data
|
|
41
|
+
record = data[pincode]
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
status, message = input_details_validation(api_data, input_details)
|
|
50
|
-
return { status: "failure", message: message } unless status
|
|
51
|
-
end
|
|
43
|
+
return { status: "failure", error: "Pincode already present in the directory" } unless record.nil?
|
|
52
44
|
|
|
53
|
-
|
|
45
|
+
verified, error = validate_pincode(pincode, input_details)
|
|
46
|
+
return { status: "failure", error: error } unless error.nil?
|
|
54
47
|
|
|
55
48
|
data[pincode] = input_details.merge("verified" => verified)
|
|
56
49
|
|
|
@@ -60,17 +53,27 @@ module PincodeFinder
|
|
|
60
53
|
|
|
61
54
|
{
|
|
62
55
|
status: "success",
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
data: data[pincode],
|
|
57
|
+
error: nil
|
|
65
58
|
}
|
|
66
59
|
end
|
|
67
60
|
|
|
61
|
+
def self.validate_pincode(pincode, input_details)
|
|
62
|
+
verified, api_data = verify_pincode(pincode)
|
|
63
|
+
return [false, nil] unless verified
|
|
64
|
+
|
|
65
|
+
status, error = input_details_validation(api_data, input_details)
|
|
66
|
+
return [false, error] unless status
|
|
67
|
+
|
|
68
|
+
[verified, nil]
|
|
69
|
+
end
|
|
70
|
+
|
|
68
71
|
def self.verify_pincode(pincode)
|
|
69
72
|
begin
|
|
70
73
|
uri = URI("https://api.postalpincode.in/pincode/#{pincode}")
|
|
71
74
|
|
|
72
|
-
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true,
|
|
73
|
-
|
|
75
|
+
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true,
|
|
76
|
+
open_timeout: 3, read_timeout: 3) do |http|
|
|
74
77
|
http.get(uri.request_uri)
|
|
75
78
|
end
|
|
76
79
|
|
|
@@ -88,12 +91,52 @@ module PincodeFinder
|
|
|
88
91
|
details = po[0].slice("Division", "District", "State")
|
|
89
92
|
|
|
90
93
|
[true, details]
|
|
91
|
-
rescue StandardError
|
|
92
|
-
warn "⚠️ Pincode verification failed: #{e.class} - #{e.message}"
|
|
94
|
+
rescue StandardError
|
|
93
95
|
[false, nil]
|
|
94
96
|
end
|
|
95
97
|
end
|
|
96
98
|
|
|
99
|
+
def self.update_pincode(pincode, input_details)
|
|
100
|
+
pincode = pincode.to_s
|
|
101
|
+
input_details = normalize_and_filter(input_details)
|
|
102
|
+
data = load_data
|
|
103
|
+
|
|
104
|
+
record = data[pincode]
|
|
105
|
+
return { status: "failure", error: "pincode not found" } unless record
|
|
106
|
+
|
|
107
|
+
verified, error = validate_pincode(pincode, input_details)
|
|
108
|
+
return { status: "failure", error: error } unless error.nil?
|
|
109
|
+
|
|
110
|
+
data[pincode] = input_details.merge("verified" => verified)
|
|
111
|
+
save_data(data)
|
|
112
|
+
sync_to_github(data)
|
|
113
|
+
|
|
114
|
+
{
|
|
115
|
+
status: "success",
|
|
116
|
+
data: data[pincode],
|
|
117
|
+
error: nil
|
|
118
|
+
}
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def self.delete_pincode(pincode)
|
|
122
|
+
pincode = pincode.to_s
|
|
123
|
+
data = load_data
|
|
124
|
+
|
|
125
|
+
record = data[pincode]
|
|
126
|
+
return { status: "failure", error: "pincode not found" } unless record
|
|
127
|
+
|
|
128
|
+
data.delete(pincode)
|
|
129
|
+
|
|
130
|
+
save_data(data)
|
|
131
|
+
sync_to_github(data)
|
|
132
|
+
|
|
133
|
+
{
|
|
134
|
+
status: "success",
|
|
135
|
+
data: {},
|
|
136
|
+
error: nil
|
|
137
|
+
}
|
|
138
|
+
end
|
|
139
|
+
|
|
97
140
|
def self.input_details_validation(data, input_details)
|
|
98
141
|
input_state = input_details["state"].to_s.titleize
|
|
99
142
|
input_district = input_details["district"].to_s.titleize
|
|
@@ -140,9 +183,7 @@ module PincodeFinder
|
|
|
140
183
|
remote = client.get_file_with_sha
|
|
141
184
|
sha = remote[:sha]
|
|
142
185
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
client.update_file(merged, sha)
|
|
186
|
+
client.update_file(data, sha)
|
|
146
187
|
rescue StandardError
|
|
147
188
|
nil
|
|
148
189
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pincode_finder
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aadhi
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: base64
|
|
@@ -43,7 +42,6 @@ licenses:
|
|
|
43
42
|
- MIT
|
|
44
43
|
metadata:
|
|
45
44
|
homepage_uri: https://github.com/aadhi-flaerhomes/pincode_finder
|
|
46
|
-
post_install_message:
|
|
47
45
|
rdoc_options: []
|
|
48
46
|
require_paths:
|
|
49
47
|
- lib
|
|
@@ -58,8 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
58
56
|
- !ruby/object:Gem::Version
|
|
59
57
|
version: '0'
|
|
60
58
|
requirements: []
|
|
61
|
-
rubygems_version: 3.
|
|
62
|
-
signing_key:
|
|
59
|
+
rubygems_version: 3.7.2
|
|
63
60
|
specification_version: 4
|
|
64
61
|
summary: A gem to find Indian pincodes.
|
|
65
62
|
test_files: []
|