four-pillars 0.1.13 → 0.1.15

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 +70 -26
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41fdb5b30e28ee0b2b8be1d7bc0cc58dbe672f035a268d384e4398d6a6cbd760
4
- data.tar.gz: f02566969d22fce3073674a84ac6e3cace539b85de464bf8aa1d56b014b0f91f
3
+ metadata.gz: a123e8b07f965a3e7a7659e3897db368a3a2ab0904845c8a21d4cd25c5cb7845
4
+ data.tar.gz: 5ceb94b92ad003a66af88df64a6e153b6651c60d7c2bbf8f8ddf929e2fe5e3cf
5
5
  SHA512:
6
- metadata.gz: 8de4a9a086a69ffbb9f64ebf85b5cda0181b62e47740aebb7ae698a56e7f88af3fde518d95d4d70ef7cccc53347f822d67ce5821924015480e5745e63749b159
7
- data.tar.gz: 24f4212abf99ee7d10c34dae35f41f196097a5fb00f829118e372abb8318e2b15438a4a9f59f43c5ebb6ca3442413b449371ac84ffd8dbd6350fc9ed39efbb99
6
+ metadata.gz: c3ea6db851952af8757c94f849aa6ceda15325b47a2adccf2c37d8cef6d132dc0157976356f1fe37d3157cae6f6fb5b004400c68e2a97105507fd0c9c18a0ed4
7
+ data.tar.gz: 4d1ec6ed3b786bd249304108b62c7907c8053e1c32f42f28300bf426bc6cdf4df0c6eb7d9bd33159399d5dd73adfae0cfe9a89678b73797127e9ed01f4357c12
data/lib/four-pillars.rb CHANGED
@@ -51,8 +51,20 @@ class FourPillarsLogic
51
51
  end
52
52
  return j
53
53
  end
54
+
55
+ # 隠 通変星
56
+ def self.tushensei_in
57
+ t = [nil] * 10
58
+ [0,2,4,6,8].each do |i|
59
+ t[i] = TSUHENSEI[i+1]
60
+ t[i+1] = TSUHENSEI[i]
61
+ end
62
+ return t
63
+ end
54
64
  JIKKAN_IN = jikkan_in
55
65
  JYUNISHI_IN = JYUNISHI.reverse
66
+ TSUHENSEI_IN = tushensei_in
67
+ JYUNIUNSEI_IN = JYUNIUNSEI.reverse
56
68
 
57
69
  # 十二運星エネルギー
58
70
  def self.jyuniunsei_energy
@@ -257,7 +269,7 @@ class FourPillarsLogic
257
269
  zn = zokan_number
258
270
  z = []
259
271
  kanshi.each do |k|
260
- j = k[1] # 十二支
272
+ j = k&.slice(1) # 十二支
261
273
  if zokan_hash1.keys.include? j
262
274
  z += [zokan_hash1[j]]
263
275
  elsif zokan_hash2.keys.include? j
@@ -276,6 +288,8 @@ class FourPillarsLogic
276
288
  else
277
289
  z += [arr[4]]
278
290
  end
291
+ else # j == nil
292
+ z += [nil]
279
293
  end
280
294
  end
281
295
  return z
@@ -283,14 +297,18 @@ class FourPillarsLogic
283
297
 
284
298
  # 通変星(nil,月,年)
285
299
  def tsuhensei
300
+ o = @with_time ? 1 : 0
301
+ m = FourPillarsLogic::tsuhensei(kanshi[o][0],kanshi[o + 1][0])
302
+ y = FourPillarsLogic::tsuhensei(kanshi[o][0],kanshi[o + 2][0])
286
303
  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])
304
+ tk = kanshi[0]&.slice(0)
305
+ if tk.nil?
306
+ t = nil
307
+ else
308
+ t = FourPillarsLogic::tsuhensei(kanshi[o][0],tk)
309
+ end
290
310
  [t,nil,m,y]
291
311
  else
292
- m = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[1][0])
293
- y = FourPillarsLogic::tsuhensei(kanshi[0][0],kanshi[2][0])
294
312
  [nil,m,y]
295
313
  end
296
314
  end
@@ -309,15 +327,19 @@ class FourPillarsLogic
309
327
  j_day = jikkan.index(zokan[1])
310
328
  j_month = jikkan.index(zokan[2])
311
329
  j_year = jikkan.index(zokan[3])
312
- t_time = j_time - j
313
- t_time += 10 if t_time < 0
330
+ if j_time.nil?
331
+ t_time = nil
332
+ else
333
+ t_time = j_time - j
334
+ t_time += 10 if t_time < 0
335
+ end
314
336
  t_day = j_day - j
315
337
  t_day += 10 if t_day < 0
316
338
  t_month = j_month - j
317
339
  t_month += 10 if t_month < 0
318
340
  t_year = j_year - j
319
341
  t_year += 10 if t_year < 0
320
- [TSUHENSEI[t_time],TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
342
+ [(t_time.nil? ? nil : TSUHENSEI[t_time]),TSUHENSEI[t_day],TSUHENSEI[t_month],TSUHENSEI[t_year]]
321
343
  else
322
344
  j = JIKKAN.index(kanshi[0][0])
323
345
  if j % 2 == 0 # 陽
@@ -346,7 +368,11 @@ class FourPillarsLogic
346
368
  m = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[1 + o][1])
347
369
  y = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[2 + o][1])
348
370
  return [d,m,y] unless @with_time
349
- t = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[0][1])
371
+ if @birth_dt[3].nil? # when hour is nil
372
+ t = nil
373
+ else
374
+ t = FourPillarsLogic::jyuniunsei(kanshi[o][0],kanshi[0][1])
375
+ end
350
376
  [t,d,m,y]
351
377
  end
352
378
 
@@ -363,6 +389,11 @@ class FourPillarsLogic
363
389
  [KUUBOU[k_day],KUUBOU[k_year]]
364
390
  end
365
391
 
392
+ # 日柱のインデックス 時柱を求める場合は1になる
393
+ def offset_for_day
394
+ @with_time ? 1 : 0
395
+ end
396
+
366
397
  # テーブル表示用に配列にして返す (デバッグ用)
367
398
  # 0:干支, 1:干支数字, 2:蔵干, 3:通変星, 4:蔵干通変星, 5:十二運星
368
399
  # 五行、天中殺、十二運星エネルギーは別途
@@ -380,8 +411,13 @@ class FourPillarsLogic
380
411
  def gogyo_jikkan
381
412
  arr = []
382
413
  kanshi.length.times do |i|
383
- j = JIKKAN.index(kanshi[i][0])
384
- arr += [(j % 2 == 0 ? "+" : "-") + GOGYO[j / 2]]
414
+ k = kanshi[i]&.slice(0)
415
+ if k.nil?
416
+ arr += [nil]
417
+ else
418
+ j = JIKKAN.index(k)
419
+ arr += [(j % 2 == 0 ? "+" : "-") + GOGYO[j / 2]]
420
+ end
385
421
  end
386
422
  return arr
387
423
  end
@@ -391,8 +427,13 @@ class FourPillarsLogic
391
427
  arr = []
392
428
  gogyo_j = ["水","土","木","木","土","火","火","土","金","金","土","水"]
393
429
  kanshi.length.times do |i|
394
- j = JYUNISHI.index(kanshi[i][1])
395
- arr += [(j % 2 == 0 ? "+" : "-") + gogyo_j[j]]
430
+ jj = kanshi[i]&.slice(1)
431
+ if jj.nil?
432
+ arr += [nil]
433
+ else
434
+ j = JYUNISHI.index(jj)
435
+ arr += [(j % 2 == 0 ? "+" : "-") + gogyo_j[j]]
436
+ end
396
437
  end
397
438
  return arr
398
439
  end
@@ -400,8 +441,8 @@ class FourPillarsLogic
400
441
  # 守護神
401
442
  def shugoshin
402
443
  # 日柱の十干と月柱の十二支
403
- x = JIKKAN.index(kanshi[0][0])
404
- y = JYUNISHI.index(kanshi[1][1])
444
+ x = JIKKAN.index(kanshi[0 + offset_for_day][0])
445
+ y = JYUNISHI.index(kanshi[1 + offset_for_day][1])
405
446
  SHUGOSHIN[y][x].split("")
406
447
  end
407
448
 
@@ -409,7 +450,9 @@ class FourPillarsLogic
409
450
  def shukumei
410
451
  s = []
411
452
  t = kuubou # 天中殺 0:上段, 1:下段
412
- k = kanshi.map {|v| v[1] } # 日,月,年柱の干支
453
+ ka = kanshi
454
+ ka.delete_at(0) if @with_time
455
+ k = ka.map {|v| v[1] } # 日,月,年柱の干支
413
456
  if t[0].include? k[2]
414
457
  s += ["生年中殺"]
415
458
  end
@@ -427,10 +470,10 @@ class FourPillarsLogic
427
470
  end
428
471
 
429
472
  def equivalent_kanshi(only_jikkan=false)
473
+ k = kanshi
474
+ k.delete_at(0) if @with_time
430
475
  if only_jikkan
431
- k = kanshi.map {|v| v[0] } # 日,月,年柱の十干
432
- else
433
- k = kanshi
476
+ k = k.map {|v| v[0] } # 日,月,年柱の十干
434
477
  end
435
478
  if k[0] == k[1] && k[1] == k[2]
436
479
  return [[0,1],[0,2],[1,2]]
@@ -462,8 +505,8 @@ class FourPillarsLogic
462
505
  v = []
463
506
  eq = equivalent_kanshi(true)
464
507
  eq.each do |e|
465
- k0 = kanshi[e[0]][1]
466
- k1 = kanshi[e[1]][1]
508
+ k0 = kanshi[e[0] + offset_for_day][1]
509
+ k1 = kanshi[e[1] + offset_for_day][1]
467
510
  v += [e] if on_distance?(k0,k1,6)
468
511
  end
469
512
  return v
@@ -475,13 +518,13 @@ class FourPillarsLogic
475
518
  v = []
476
519
  eq = equivalent_kanshi(true)
477
520
  eq.each do |e|
478
- k0 = kanshi[e[0]][1]
479
- k1 = kanshi[e[1]][1]
521
+ k0 = kanshi[e[0] + offset_for_day][1]
522
+ k1 = kanshi[e[1] + offset_for_day][1]
480
523
  v += [e] if on_distance?(k0,k1,4)
481
524
  end
482
525
  eq.each do |e|
483
- k0 = kanshi[e[0]][1]
484
- k1 = kanshi[e[1]][1]
526
+ k0 = kanshi[e[0] + offset_for_day][1]
527
+ k1 = kanshi[e[1] + offset_for_day][1]
485
528
  v += [e] if on_distance?(k0,k1,8)
486
529
  end
487
530
  return v
@@ -491,6 +534,7 @@ class FourPillarsLogic
491
534
  def taiun
492
535
  return [nil,nil] unless ['m','f'].include? @gender
493
536
  k = gogyo_jikkan[2][0]
537
+ # TODO: 時刻不明の場合は?
494
538
  t = @birth_dt[3] * 60 + @birth_dt[4] # 生まれた時間
495
539
  if (@gender == 'm' && k == "+") || (@gender == 'f' && k == '-')
496
540
  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.15
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-09-12 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
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
39
  requirements: []
40
- rubygems_version: 3.5.16
40
+ rubygems_version: 3.5.17
41
41
  signing_key:
42
42
  specification_version: 4
43
43
  summary: Four Pillar astrology