faker-indian 0.1.0 → 0.2.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.
@@ -1,40 +1,293 @@
1
+ ---
1
2
  locations:
2
3
  Mumbai:
3
4
  state: Maharashtra
4
- pincode: "400001"
5
+ pincode: '400001'
5
6
  Pune:
6
7
  state: Maharashtra
7
- pincode: "411001"
8
+ pincode: '411001'
8
9
  Delhi:
9
10
  state: Delhi
10
- pincode: "110001"
11
+ pincode: '110001'
11
12
  Bengaluru:
12
13
  state: Karnataka
13
- pincode: "560001"
14
- Chennai:
15
- state: Tamil Nadu
16
- pincode: "600001"
14
+ pincode: '560001'
17
15
  Hyderabad:
18
16
  state: Telangana
19
- pincode: "500001"
20
- Ahmedabad:
21
- state: Gujarat
22
- pincode: "380001"
17
+ pincode: '500001'
18
+ Chennai:
19
+ state: Tamil Nadu
20
+ pincode: '600001'
23
21
  Kolkata:
24
22
  state: West Bengal
25
- pincode: "700001"
23
+ pincode: '700001'
24
+ Ahmedabad:
25
+ state: Gujarat
26
+ pincode: '380001'
26
27
  Jaipur:
27
28
  state: Rajasthan
28
- pincode: "302001"
29
+ pincode: '302001'
29
30
  Lucknow:
30
31
  state: Uttar Pradesh
31
- pincode: "226001"
32
-
32
+ pincode: '226001'
33
+ Surat:
34
+ state: Gujarat
35
+ pincode: '395003'
36
+ Kanpur:
37
+ state: Uttar Pradesh
38
+ pincode: '208001'
39
+ Nagpur:
40
+ state: Maharashtra
41
+ pincode: '440001'
42
+ Indore:
43
+ state: Madhya Pradesh
44
+ pincode: '452001'
45
+ Bhopal:
46
+ state: Madhya Pradesh
47
+ pincode: '462001'
48
+ Patna:
49
+ state: Bihar
50
+ pincode: '800001'
51
+ Chandigarh:
52
+ state: Chandigarh
53
+ pincode: '160001'
54
+ Coimbatore:
55
+ state: Tamil Nadu
56
+ pincode: '641001'
57
+ Kochi:
58
+ state: Kerala
59
+ pincode: '682001'
60
+ Visakhapatnam:
61
+ state: Andhra Pradesh
62
+ pincode: '530001'
63
+ Thiruvananthapuram:
64
+ state: Kerala
65
+ pincode: '695001'
66
+ Vadodara:
67
+ state: Gujarat
68
+ pincode: '390001'
69
+ Ludhiana:
70
+ state: Punjab
71
+ pincode: '141001'
72
+ Agra:
73
+ state: Uttar Pradesh
74
+ pincode: '282001'
75
+ Nashik:
76
+ state: Maharashtra
77
+ pincode: '422001'
78
+ Faridabad:
79
+ state: Haryana
80
+ pincode: '121001'
81
+ Meerut:
82
+ state: Uttar Pradesh
83
+ pincode: '250001'
84
+ Raipur:
85
+ state: Chhattisgarh
86
+ pincode: '492001'
87
+ Ranchi:
88
+ state: Jharkhand
89
+ pincode: '834001'
90
+ Guwahati:
91
+ state: Assam
92
+ pincode: '781001'
93
+ Amritsar:
94
+ state: Punjab
95
+ pincode: '143001'
96
+ Aurangabad:
97
+ state: Maharashtra
98
+ pincode: '431001'
99
+ Bareilly:
100
+ state: Uttar Pradesh
101
+ pincode: '243001'
102
+ Belgaum:
103
+ state: Karnataka
104
+ pincode: '590001'
105
+ Bhavnagar:
106
+ state: Gujarat
107
+ pincode: '364001'
108
+ Bhubaneswar:
109
+ state: Odisha
110
+ pincode: '751001'
111
+ Bikaner:
112
+ state: Rajasthan
113
+ pincode: '334001'
114
+ Bilaspur:
115
+ state: Chhattisgarh
116
+ pincode: '495001'
117
+ Cuttack:
118
+ state: Odisha
119
+ pincode: '753001'
120
+ Dehradun:
121
+ state: Uttarakhand
122
+ pincode: '248001'
123
+ Dhanbad:
124
+ state: Jharkhand
125
+ pincode: '826001'
126
+ Durgapur:
127
+ state: West Bengal
128
+ pincode: '713201'
129
+ Erode:
130
+ state: Tamil Nadu
131
+ pincode: '638001'
132
+ Gandhinagar:
133
+ state: Gujarat
134
+ pincode: '382001'
135
+ Gaya:
136
+ state: Bihar
137
+ pincode: '823001'
138
+ Gorakhpur:
139
+ state: Uttar Pradesh
140
+ pincode: '273001'
141
+ Guntur:
142
+ state: Andhra Pradesh
143
+ pincode: '522001'
144
+ Hubli:
145
+ state: Karnataka
146
+ pincode: '580020'
147
+ Jabalpur:
148
+ state: Madhya Pradesh
149
+ pincode: '482001'
150
+ Jalandhar:
151
+ state: Punjab
152
+ pincode: '144001'
153
+ Jammu:
154
+ state: Jammu and Kashmir
155
+ pincode: '180001'
156
+ Jamnagar:
157
+ state: Gujarat
158
+ pincode: '361001'
159
+ Jamshedpur:
160
+ state: Jharkhand
161
+ pincode: '831001'
162
+ Jhansi:
163
+ state: Uttar Pradesh
164
+ pincode: '284001'
165
+ Jodhpur:
166
+ state: Rajasthan
167
+ pincode: '342001'
168
+ Kakinada:
169
+ state: Andhra Pradesh
170
+ pincode: '533001'
171
+ Kolhapur:
172
+ state: Maharashtra
173
+ pincode: '416003'
174
+ Kota:
175
+ state: Rajasthan
176
+ pincode: '324001'
177
+ Madurai:
178
+ state: Tamil Nadu
179
+ pincode: '625001'
180
+ Mangalore:
181
+ state: Karnataka
182
+ pincode: '575001'
183
+ Mysuru:
184
+ state: Karnataka
185
+ pincode: '570001'
186
+ Noida:
187
+ state: Uttar Pradesh
188
+ pincode: '201301'
189
+ Panaji:
190
+ state: Goa
191
+ pincode: '403001'
192
+ Prayagraj:
193
+ state: Uttar Pradesh
194
+ pincode: '211001'
195
+ Rajkot:
196
+ state: Gujarat
197
+ pincode: '360001'
198
+ Salem:
199
+ state: Tamil Nadu
200
+ pincode: '636001'
201
+ Shimla:
202
+ state: Himachal Pradesh
203
+ pincode: '171001'
204
+ Srinagar:
205
+ state: Jammu and Kashmir
206
+ pincode: '190001'
207
+ Tiruchirappalli:
208
+ state: Tamil Nadu
209
+ pincode: '620001'
210
+ Udaipur:
211
+ state: Rajasthan
212
+ pincode: '313001'
33
213
  streets:
34
- - MG Road
35
- - FC Road
36
- - Park Street
37
- - Brigade Road
38
- - Linking Road
39
- - Anna Salai
40
- - Ring Road
214
+ - MG Road
215
+ - FC Road
216
+ - Park Street
217
+ - Brigade Road
218
+ - Linking Road
219
+ - Anna Salai
220
+ - Ring Road
221
+ - Outer Ring Road
222
+ - JM Road
223
+ - Karve Road
224
+ - Laxmi Road
225
+ - Church Street
226
+ - Hill Road
227
+ - Elgin Road
228
+ - Gariahat Road
229
+ - Residency Road
230
+ - Ashram Road
231
+ - Law Garden Road
232
+ - VIP Road
233
+ - Rajpur Road
234
+ - Civil Lines Road
235
+ - Airport Road
236
+ - Station Road
237
+ - Mall Road
238
+ - College Road
239
+ - Camac Street
240
+ - Marine Drive
241
+ - Banjara Hills Road No. 12
242
+ - Hauz Khas Village Road
243
+ - Cathedral Road
244
+ state_codes:
245
+ Maharashtra: MH
246
+ Karnataka: KA
247
+ Delhi: DL
248
+ Tamil Nadu: TN
249
+ Gujarat: GJ
250
+ Uttar Pradesh: UP
251
+ West Bengal: WB
252
+ Rajasthan: RJ
253
+ Andhra Pradesh: AP
254
+ Telangana: TS
255
+ Kerala: KL
256
+ Madhya Pradesh: MP
257
+ Haryana: HR
258
+ Punjab: PB
259
+ Bihar: BR
260
+ Odisha: OR
261
+ Chhattisgarh: CG
262
+ Jharkhand: JH
263
+ Assam: AS
264
+ Uttarakhand: UK
265
+ Himachal Pradesh: HP
266
+ Jammu and Kashmir: JK
267
+ Goa: GA
268
+ Chandigarh: CH
269
+ districts:
270
+ - Andheri
271
+ - Koramangala
272
+ - Bandra
273
+ - Powai
274
+ - Salt Lake
275
+ - Connaught Place
276
+ - Hinjewadi
277
+ - Gachibowli
278
+ - T Nagar
279
+ - Adyar
280
+ - Satellite Road
281
+ - Vastrapur
282
+ - Hazratganj
283
+ - Civil Lines
284
+ - MG Road Extension
285
+ landmarks:
286
+ - Near Metro Station
287
+ - Opposite City Mall
288
+ - Behind Railway Station
289
+ - Next to Bus Stand
290
+ - Near Airport
291
+ - Close to IT Park
292
+ - Opposite Hospital
293
+ - Near City Market
@@ -0,0 +1,28 @@
1
+ prefixes:
2
+ - Shree
3
+ - Bharat
4
+ - Hindustan
5
+ - New India
6
+ - National
7
+
8
+ cores:
9
+ - Tech Solutions
10
+ - Industries
11
+ - Traders
12
+ - Exports
13
+ - Logistics
14
+ - Pharmaceuticals
15
+ - Infotech
16
+ - Enterprises
17
+
18
+ suffixes:
19
+ - Pvt Ltd
20
+ - LLP
21
+ - Limited
22
+ - Technologies
23
+ - Services
24
+
25
+ types:
26
+ - Private Limited
27
+ - LLP
28
+ - Public Limited
@@ -89,3 +89,21 @@ street_food:
89
89
  - Jalebi
90
90
  - Kulfi
91
91
  - Poha
92
+
93
+ meals:
94
+ - breakfast
95
+ - lunch
96
+ - dinner
97
+
98
+ beverages:
99
+ - Masala Chai
100
+ - Filter Coffee
101
+ - Lassi
102
+ - Nimbu Pani
103
+ - Mango Lassi
104
+ - Thandai
105
+
106
+ spice_levels:
107
+ - mild
108
+ - medium
109
+ - spicy
@@ -39,3 +39,16 @@ prefixes:
39
39
  - Ms.
40
40
  - Dr.
41
41
  - Prof.
42
+
43
+ middle_names:
44
+ - Kumar
45
+ - Devi
46
+ - Lal
47
+ - Bai
48
+ - Chand
49
+ - Prasad
50
+
51
+ suffixes:
52
+ - Ji
53
+ - Bai
54
+ - Sahib
@@ -0,0 +1,17 @@
1
+ operators:
2
+ - Jio
3
+ - Airtel
4
+ - Vi
5
+ - BSNL
6
+
7
+ std_codes:
8
+ - "22"
9
+ - "11"
10
+ - "80"
11
+ - "44"
12
+ - "40"
13
+ - "33"
14
+ - "79"
15
+ - "20"
16
+ - "141"
17
+ - "522"
@@ -0,0 +1,23 @@
1
+ stations:
2
+ - Mumbai CST
3
+ - New Delhi
4
+ - Howrah Junction
5
+ - Bengaluru City
6
+ - Chennai Central
7
+ - Secunderabad Junction
8
+ - Ahmedabad Junction
9
+ - Pune Junction
10
+ - Jaipur Junction
11
+ - Lucknow NR
12
+
13
+ trains:
14
+ - Rajdhani Express
15
+ - Shatabdi Express
16
+ - Duronto Express
17
+ - Garib Rath Express
18
+ - Vande Bharat Express
19
+ - Deccan Queen
20
+ - Tamil Nadu Express
21
+ - Karnataka Express
22
+ - Punjab Mail
23
+ - Konkan Kanya Express
@@ -5,13 +5,17 @@ require "faker"
5
5
  module Faker
6
6
  module Indian
7
7
  class Food
8
- _data = Data.load(:food)
8
+ data = Data.load(:food)
9
+
10
+ DISHES = data.fetch(:dishes).freeze
11
+ RESTAURANTS = data.fetch(:restaurants).freeze
12
+ CUISINES = data.fetch(:cuisines).freeze
13
+ STREET_FOOD = data.fetch(:street_food).freeze
14
+ SWEETS = data.fetch(:sweets).freeze
15
+ MEALS = data.fetch(:meals).freeze
16
+ BEVERAGES = data.fetch(:beverages).freeze
17
+ SPICE_LEVELS = data.fetch(:spice_levels).freeze
9
18
 
10
- DISHES = _data.fetch(:dishes).freeze
11
- RESTAURANTS = _data.fetch(:restaurants).freeze
12
- CUISINES = _data.fetch(:cuisines).freeze
13
- STREET_FOOD = _data.fetch(:street_food).freeze
14
- SWEETS = _data.fetch(:sweets).freeze
15
19
  class << self
16
20
  def dish
17
21
  DISHES.sample(random: random)
@@ -33,6 +37,22 @@ module Faker
33
37
  SWEETS.sample(random: random)
34
38
  end
35
39
 
40
+ def meal
41
+ MEALS.sample(random: random)
42
+ end
43
+
44
+ def beverage
45
+ BEVERAGES.sample(random: random)
46
+ end
47
+
48
+ def combo
49
+ "#{dish} with #{beverage}"
50
+ end
51
+
52
+ def spice_level
53
+ SPICE_LEVELS.sample(random: random)
54
+ end
55
+
36
56
  private
37
57
 
38
58
  def random
@@ -4,12 +4,14 @@ require "faker"
4
4
 
5
5
  module Faker
6
6
  module Indian
7
+ # Provides fake identity data specific to the Indian context
8
+ # such as Aadhar numbers, PAN card formats, GSTIN, voterID, passport number.
7
9
  class Identity
8
- _data = Data.load(:identity)
10
+ data = Data.load(:identity)
9
11
 
10
12
  LETTERS = ("A".."Z").to_a.freeze
11
- PAN_ENTITY_TYPES = _data.fetch(:pan_entity_types).freeze
12
- GSTIN_STATE_CODES = _data.fetch(:gstin_state_codes).freeze
13
+ PAN_ENTITY_TYPES = data.fetch(:pan_entity_types).freeze
14
+ GSTIN_STATE_CODES = data.fetch(:gstin_state_codes).freeze
13
15
  CHECKSUM_CHARS = (("0".."9").to_a + LETTERS).freeze
14
16
 
15
17
  class << self
@@ -30,12 +32,17 @@ module Faker
30
32
  .join(" ")
31
33
  end
32
34
 
33
- def gstin
35
+ def aadhaar_masked
36
+ "XXXX XXXX #{format('%04d', random.rand(0..9999))}"
37
+ end
38
+
39
+ def gstin(pan: nil)
34
40
  state = GSTIN_STATE_CODES.sample(random: random)
35
41
  entity_number = random.rand(1..9)
36
42
  checksum = CHECKSUM_CHARS.sample(random: random)
43
+ pan_value = pan || self.pan
37
44
 
38
- "#{state}#{pan}#{entity_number}Z#{checksum}"
45
+ "#{state}#{pan_value}#{entity_number}Z#{checksum}"
39
46
  end
40
47
 
41
48
  def voter_id
@@ -46,6 +53,15 @@ module Faker
46
53
  "#{sample_letter}#{random.rand(1_000_000..9_999_999)}"
47
54
  end
48
55
 
56
+ def driving_license(state: nil)
57
+ code = resolve_state_code(state)
58
+ year = random.rand(2010..2024)
59
+ series = format("%02d", random.rand(1..99))
60
+ number = random.rand(1_000_000..9_999_999)
61
+
62
+ "#{code}-#{series}-#{year}-#{number}"
63
+ end
64
+
49
65
  private
50
66
 
51
67
  def random
@@ -55,6 +71,24 @@ module Faker
55
71
  def sample_letter
56
72
  LETTERS.sample(random: random)
57
73
  end
74
+
75
+ def resolve_state_code(state)
76
+ return sample_state_code if state.nil?
77
+
78
+ normalized = state.to_s
79
+ return normalized.upcase if normalized.length == 2
80
+
81
+ match = Address::STATE_CODES.find do |name, code|
82
+ name.casecmp?(normalized) || code.casecmp?(normalized)
83
+ end
84
+ return match.last if match
85
+
86
+ raise Error, "unknown state: #{state}"
87
+ end
88
+
89
+ def sample_state_code
90
+ Address::STATE_CODES.values.sample(random: random)
91
+ end
58
92
  end
59
93
  end
60
94
  end
@@ -5,9 +5,9 @@ require "faker"
5
5
  module Faker
6
6
  module Indian
7
7
  class Languages
8
- _data = Data.load(:languages)
8
+ data = Data.load(:languages)
9
9
 
10
- LANGUAGES = _data.freeze
10
+ LANGUAGES = data.freeze
11
11
 
12
12
  class << self
13
13
  def name(language: nil)
@@ -5,11 +5,13 @@ require "faker"
5
5
  module Faker
6
6
  module Indian
7
7
  class Name
8
- _data = Data.load(:name)
8
+ data = Data.load(:name)
9
9
 
10
- FIRST_NAMES = _data.fetch(:first_names).freeze
11
- LAST_NAMES = _data.fetch(:last_names).freeze
12
- PREFIXES = _data.fetch(:prefixes).freeze
10
+ FIRST_NAMES = data.fetch(:first_names).freeze
11
+ LAST_NAMES = data.fetch(:last_names).freeze
12
+ PREFIXES = data.fetch(:prefixes).freeze
13
+ MIDDLE_NAMES = data.fetch(:middle_names).freeze
14
+ SUFFIXES = data.fetch(:suffixes).freeze
13
15
 
14
16
  class << self
15
17
  def first_name
@@ -20,7 +22,13 @@ module Faker
20
22
  LAST_NAMES.sample(random: random)
21
23
  end
22
24
 
23
- def full_name
25
+ def middle_name
26
+ MIDDLE_NAMES.sample(random: random)
27
+ end
28
+
29
+ def full_name(language: nil)
30
+ return Languages.full_name(language: language) if language
31
+
24
32
  "#{first_name} #{last_name}"
25
33
  end
26
34
 
@@ -28,6 +36,10 @@ module Faker
28
36
  PREFIXES.sample(random: random)
29
37
  end
30
38
 
39
+ def suffix
40
+ SUFFIXES.sample(random: random)
41
+ end
42
+
31
43
  private
32
44
 
33
45
  def random
@@ -5,15 +5,16 @@ require "faker"
5
5
  module Faker
6
6
  module Indian
7
7
  class Payment
8
- _data = Data.load(:payment)
8
+ data = Data.load(:payment)
9
9
 
10
- HANDLES = _data.fetch(:handles).freeze
11
- BANK_CODES = _data.fetch(:banks).freeze
12
- NAMES = _data.fetch(:names).freeze
10
+ HANDLES = data.fetch(:handles).freeze
11
+ BANK_CODES = data.fetch(:banks).freeze
12
+ NAMES = data.fetch(:names).freeze
13
13
 
14
14
  class << self
15
- def upi_id
16
- "#{sample_name}#{random.rand(10..99)}@#{sample_handle}"
15
+ def upi_id(name: nil)
16
+ handle_name = sanitize_name(name || sample_name)
17
+ "#{handle_name}#{random.rand(10..99)}@#{sample_handle}"
17
18
  end
18
19
  alias upi upi_id
19
20
 
@@ -31,6 +32,19 @@ module Faker
31
32
  random.rand(100_000_000_000..999_999_999_999).to_s
32
33
  end
33
34
 
35
+ def demat_account
36
+ random.rand(100_000_000_000_000..999_999_999_999_999).to_s
37
+ end
38
+
39
+ def bank_details
40
+ code = sample_bank_code
41
+ {
42
+ bank_name: BANK_CODES[code],
43
+ ifsc: "#{code}0#{random.rand(100_000..999_999)}",
44
+ account_number: random.rand(100_000_000_000..999_999_999_999).to_s
45
+ }
46
+ end
47
+
34
48
  private
35
49
 
36
50
  def random
@@ -48,6 +62,10 @@ module Faker
48
62
  def sample_bank_code
49
63
  BANK_CODES.keys.sample(random: random)
50
64
  end
65
+
66
+ def sanitize_name(name)
67
+ name.to_s.downcase.gsub(/\s+/, "")
68
+ end
51
69
  end
52
70
  end
53
71
  end
@@ -5,11 +5,32 @@ require "faker"
5
5
  module Faker
6
6
  module Indian
7
7
  class Phone
8
+ data = Data.load(:phone)
9
+
10
+ OPERATORS = data.fetch(:operators).freeze
11
+ STD_CODES = data.fetch(:std_codes).freeze
12
+
8
13
  class << self
9
- def mobile_number
14
+ def mobile_number(formatted: true)
10
15
  first_digit = random.rand(6..9)
11
16
  remaining = random.rand(0..999_999_999)
12
- "+91 #{first_digit}#{format("%09d", remaining)}"
17
+ digits = "#{first_digit}#{format('%09d', remaining)}"
18
+
19
+ formatted ? "+91 #{digits}" : digits
20
+ end
21
+
22
+ def landline
23
+ std = STD_CODES.sample(random: random)
24
+ number = random.rand(1_000_000..9_999_999)
25
+ "0#{std}-#{number}"
26
+ end
27
+
28
+ def operator
29
+ OPERATORS.sample(random: random)
30
+ end
31
+
32
+ def whatsapp_number(formatted: true)
33
+ mobile_number(formatted: formatted)
13
34
  end
14
35
 
15
36
  private