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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15ab8dc08fdfc82acae07240265686fd24547b4a7240f18ce0d4a6ba339ffaf4
4
- data.tar.gz: 46c66b6cfae2e16b122be0e1f847de6c950d9396383a85c28ccd9ad85d9f1896
3
+ metadata.gz: 23b0acc58abe3487875681d61457003462b09264ea4b6044bf67f38e219c2fbd
4
+ data.tar.gz: 942ed9168f3635900da76105d98a41cf28e3c2a2be3c464ee72a52f7ef3754f5
5
5
  SHA512:
6
- metadata.gz: 4eca5b86819d366ab4724e34eb7ed7caa98c12ef3b7f3a8b456d621fd2e51dd3557407408ef09b3ec10033d40bc9292051c5fe4fdf379108404cdfe376cd551a
7
- data.tar.gz: 711f1b4c664fd00d28a9c74a8b8b3f1aa7e0ff2e552898d6dfcd0284091ec31e45db10137dcd389651bd17fefb0b9625f133bdc9c429f99ba65af3f6101ee1bc
6
+ metadata.gz: 464841f577b1fe42a5668c0be326683b8c9c303152b349f893b3602ce92c935560e0b55f5e97fb77b395ac4ae5e3b03c3fd3597524b63740a1a4851c99897c87
7
+ data.tar.gz: ad92420da504249477cdb6e854ea8c206fcaa713f25cd4a9fdb489073a8c2d6a1249403a68b5fbc8edc06c8c067a9d2587e8b1a1f2943dd8eea9b3f1b502a356
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PincodeFinder
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
@@ -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 = File.expand_path("../data/pincode_data_optimized.json.gz", __dir__)
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
- record["pincode"] = pincode
33
- record
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
- verified, api_data = verify_pincode(pincode)
40
+ data = load_data
41
+ record = data[pincode]
47
42
 
48
- if verified
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
- data = load_data
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
- pincode: pincode,
64
- details: input_details
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
- open_timeout: 3, read_timeout: 3) do |http|
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 => e
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
- merged = remote[:json].merge(data)
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.3
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: 2025-11-19 00:00:00.000000000 Z
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.4.10
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: []