four-pillars 0.1.13 → 0.1.14

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/four-pillars.rb +58 -26
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41fdb5b30e28ee0b2b8be1d7bc0cc58dbe672f035a268d384e4398d6a6cbd760
4
- data.tar.gz: f02566969d22fce3073674a84ac6e3cace539b85de464bf8aa1d56b014b0f91f
3
+ metadata.gz: c3208005abb1c52cad09b0e9b335a22351553193308d8716b535eedde2ffd9aa
4
+ data.tar.gz: 570bf5d0a00163dc68202f42f76d07a7f746f2a54d52c6309e95ca01094dfc7c
5
5
  SHA512:
6
- metadata.gz: 8de4a9a086a69ffbb9f64ebf85b5cda0181b62e47740aebb7ae698a56e7f88af3fde518d95d4d70ef7cccc53347f822d67ce5821924015480e5745e63749b159
7
- data.tar.gz: 24f4212abf99ee7d10c34dae35f41f196097a5fb00f829118e372abb8318e2b15438a4a9f59f43c5ebb6ca3442413b449371ac84ffd8dbd6350fc9ed39efbb99
6
+ metadata.gz: c60b16002946f6e495eb72e2abe5230285e4b25b2ed6c5cc784cd26a28c02e70e97d4f66e6918b16b16273650add5c9047a0e2d1181e459e5b689cf142d3300f
7
+ data.tar.gz: 5c9f536213509c42325111551d35f3c9aa1e0891fde699ab358c0ee5f464e9e6a215659d62c98a0a6d967ee841d8f11e2ab59b128f7dc78437e6aa561bf8efa2
data/lib/four-pillars.rb CHANGED
@@ -257,7 +257,7 @@ class FourPillarsLogic
257
257
  zn = zokan_number
258
258
  z = []
259
259
  kanshi.each do |k|
260
- j = k[1] # 十二支
260
+ j = k&.slice(1) # 十二支
261
261
  if zokan_hash1.keys.include? j
262
262
  z += [zokan_hash1[j]]
263
263
  elsif zokan_hash2.keys.include? j
@@ -276,6 +276,8 @@ class FourPillarsLogic
276
276
  else
277
277
  z += [arr[4]]
278
278
  end
279
+ else # j == nil
280
+ z += [nil]
279
281
  end
280
282
  end
281
283
  return z
@@ -283,14 +285,18 @@ class FourPillarsLogic
283
285
 
284
286
  # 通変星(nil,月,年)
285
287
  def tsuhensei
288
+ o = @with_time ? 1 : 0
289
+ m = FourPillarsLogic::tsuhensei(kanshi[o][0],kanshi[o + 1][0])
290
+ y = FourPillarsLogic::tsuhensei(kanshi[o][0],kanshi[o + 2][0])
286
291
  if @with_time
287
- m = FourPillarsLogic::tsuhensei(kanshi[1][0],kanshi[2][0])
288
- y = FourPillarsLogic::tsuhensei(kanshi[1][0],kanshi[3][0])
289
- t = FourPillarsLogic::tsuhensei(kanshi[1][0],kanshi[0][0])
292
+ tk = kanshi[0]&.slice(0)
293
+ if tk.nil?
294
+ t = nil
295
+ else
296
+ t = FourPillarsLogic::tsuhensei(kanshi[o][0],tk)
297
+ end
290
298
  [t,nil,m,y]
291
299
  else
292
- m = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[1][0])
293
- y = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[2][0])
294
300
  [nil,m,y]
295
301
  end
296
302
  end
@@ -309,15 +315,19 @@ class FourPillarsLogic
309
315
  j_day = jikkan.index(zokan[1])
310
316
  j_month = jikkan.index(zokan[2])
311
317
  j_year = jikkan.index(zokan[3])
312
- t_time = j_time - j
313
- t_time += 10 if t_time < 0
318
+ if j_time.nil?
319
+ t_time = nil
320
+ else
321
+ t_time = j_time - j
322
+ t_time += 10 if t_time < 0
323
+ end
314
324
  t_day = j_day - j
315
325
  t_day += 10 if t_day < 0
316
326
  t_month = j_month - j
317
327
  t_month += 10 if t_month < 0
318
328
  t_year = j_year - j
319
329
  t_year += 10 if t_year < 0
320
- [TSUHENSEI[t_time],TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
330
+ [(t_time.nil? ? nil : TSUHENSEI[t_time]),TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
321
331
  else
322
332
  j = JIKKAN.index(kanshi[0][0])
323
333
  if j % 2 == 0 # 陽
@@ -346,7 +356,11 @@ class FourPillarsLogic
346
356
  m = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[1 + o][1])
347
357
  y = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[2 + o][1])
348
358
  return [d,m,y] unless @with_time
349
- t = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[0][1])
359
+ if @birth_dt[3].nil? # when hour is nil
360
+ t = nil
361
+ else
362
+ t = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[0][1])
363
+ end
350
364
  [t,d,m,y]
351
365
  end
352
366
 
@@ -363,6 +377,11 @@ class FourPillarsLogic
363
377
  [KUUBOU[k_day],KUUBOU[k_year]]
364
378
  end
365
379
 
380
+ # 日柱のインデックス 時柱を求める場合は1になる
381
+ def offset_for_day
382
+ @with_time ? 1 : 0
383
+ end
384
+
366
385
  # テーブル表示用に配列にして返す (デバッグ用)
367
386
  # 0:干支, 1:干支数字, 2:蔵干, 3:通変星, 4:蔵干通変星, 5:十二運星
368
387
  # 五行、天中殺、十二運星エネルギーは別途
@@ -380,8 +399,13 @@ class FourPillarsLogic
380
399
  def gogyo_jikkan
381
400
  arr = []
382
401
  kanshi.length.times do |i|
383
- j = JIKKAN.index(kanshi[i][0])
384
- arr += [(j % 2 == 0 ? "+" : "-") + GOGYO[j / 2]]
402
+ k = kanshi[i]&.slice(0)
403
+ if k.nil?
404
+ arr += [nil]
405
+ else
406
+ j = JIKKAN.index(k)
407
+ arr += [(j % 2 == 0 ? "+" : "-") + GOGYO[j / 2]]
408
+ end
385
409
  end
386
410
  return arr
387
411
  end
@@ -391,8 +415,13 @@ class FourPillarsLogic
391
415
  arr = []
392
416
  gogyo_j = ["水","土","木","木","土","火","火","土","金","金","土","水"]
393
417
  kanshi.length.times do |i|
394
- j = JYUNISHI.index(kanshi[i][1])
395
- arr += [(j % 2 == 0 ? "+" : "-") + gogyo_j[j]]
418
+ jj = kanshi[i]&.slice(1)
419
+ if jj.nil?
420
+ arr += [nil]
421
+ else
422
+ j = JYUNISHI.index(jj)
423
+ arr += [(j % 2 == 0 ? "+" : "-") + gogyo_j[j]]
424
+ end
396
425
  end
397
426
  return arr
398
427
  end
@@ -400,8 +429,8 @@ class FourPillarsLogic
400
429
  # 守護神
401
430
  def shugoshin
402
431
  # 日柱の十干と月柱の十二支
403
- x = JIKKAN.index(kanshi[0][0])
404
- y = JYUNISHI.index(kanshi[1][1])
432
+ x = JIKKAN.index(kanshi[0 + offset_for_day][0])
433
+ y = JYUNISHI.index(kanshi[1 + offset_for_day][1])
405
434
  SHUGOSHIN[y][x].split("")
406
435
  end
407
436
 
@@ -409,7 +438,9 @@ class FourPillarsLogic
409
438
  def shukumei
410
439
  s = []
411
440
  t = kuubou # 天中殺 0:上段, 1:下段
412
- k = kanshi.map {|v| v[1] } # 日,月,年柱の干支
441
+ ka = kanshi
442
+ ka.delete_at(0) if @with_time
443
+ k = ka.map {|v| v[1] } # 日,月,年柱の干支
413
444
  if t[0].include? k[2]
414
445
  s += ["生年中殺"]
415
446
  end
@@ -427,10 +458,10 @@ class FourPillarsLogic
427
458
  end
428
459
 
429
460
  def equivalent_kanshi(only_jikkan=false)
461
+ k = kanshi
462
+ k.delete_at(0) if @with_time
430
463
  if only_jikkan
431
- k = kanshi.map {|v| v[0] } # 日,月,年柱の十干
432
- else
433
- k = kanshi
464
+ k = k.map {|v| v[0] } # 日,月,年柱の十干
434
465
  end
435
466
  if k[0] == k[1] && k[1] == k[2]
436
467
  return [[0,1],[0,2],[1,2]]
@@ -462,8 +493,8 @@ class FourPillarsLogic
462
493
  v = []
463
494
  eq = equivalent_kanshi(true)
464
495
  eq.each do |e|
465
- k0 = kanshi[e[0]][1]
466
- k1 = kanshi[e[1]][1]
496
+ k0 = kanshi[e[0] + offset_for_day][1]
497
+ k1 = kanshi[e[1] + offset_for_day][1]
467
498
  v += [e] if on_distance?(k0,k1,6)
468
499
  end
469
500
  return v
@@ -475,13 +506,13 @@ class FourPillarsLogic
475
506
  v = []
476
507
  eq = equivalent_kanshi(true)
477
508
  eq.each do |e|
478
- k0 = kanshi[e[0]][1]
479
- k1 = kanshi[e[1]][1]
509
+ k0 = kanshi[e[0] + offset_for_day][1]
510
+ k1 = kanshi[e[1] + offset_for_day][1]
480
511
  v += [e] if on_distance?(k0,k1,4)
481
512
  end
482
513
  eq.each do |e|
483
- k0 = kanshi[e[0]][1]
484
- k1 = kanshi[e[1]][1]
514
+ k0 = kanshi[e[0] + offset_for_day][1]
515
+ k1 = kanshi[e[1] + offset_for_day][1]
485
516
  v += [e] if on_distance?(k0,k1,8)
486
517
  end
487
518
  return v
@@ -491,6 +522,7 @@ class FourPillarsLogic
491
522
  def taiun
492
523
  return [nil,nil] unless ['m','f'].include? @gender
493
524
  k = gogyo_jikkan[2][0]
525
+ # TODO: 時刻不明の場合は?
494
526
  t = @birth_dt[3] * 60 + @birth_dt[4] # 生まれた時間
495
527
  if (@gender == 'm' && k == "+") || (@gender == 'f' && k == '-')
496
528
  order = "順行"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: four-pillars
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yosei Ito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-20 00:00:00.000000000 Z
11
+ date: 2024-08-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A class which tells fortune by Four Pillar astrology(四柱推命).
14
14
  email: y-itou@lumber-mill.co.jp