four-pillars 0.1.13 → 0.1.14

Sign up to get free protection for your applications and to get access to all the features.
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