Class: RubyChartEngine::Calculations::Dignities

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_chart_engine/calculations/dignities.rb

Constant Summary collapse

RULERSHIPS =

Essential dignities table

{
  aries: { ruler: :mars, detriment: :venus, exaltation: :sun, fall: :saturn },
  taurus: { ruler: :venus, detriment: :mars, exaltation: :moon, fall: nil },
  gemini: { ruler: :mercury, detriment: :jupiter, exaltation: nil, fall: nil },
  cancer: { ruler: :moon, detriment: :saturn, exaltation: :jupiter, fall: :mars },
  leo: { ruler: :sun, detriment: :saturn, exaltation: nil, fall: nil },
  virgo: { ruler: :mercury, detriment: :jupiter, exaltation: :mercury, fall: :venus },
  libra: { ruler: :venus, detriment: :mars, exaltation: :saturn, fall: :sun },
  scorpio: { ruler: :mars, detriment: :venus, exaltation: nil, fall: :moon },
  sagittarius: { ruler: :jupiter, detriment: :mercury, exaltation: nil, fall: nil },
  capricorn: { ruler: :saturn, detriment: :moon, exaltation: :mars, fall: :jupiter },
  aquarius: { ruler: :saturn, detriment: :sun, exaltation: nil, fall: nil },
  pisces: { ruler: :jupiter, detriment: :mercury, exaltation: :venus, fall: :mercury }
}.freeze
MODERN_RULERSHIPS =

Modern rulerships (for outer planets)

{
  scorpio: :pluto,
  aquarius: :uranus,
  pisces: :neptune
}.freeze

Class Method Summary collapse

Class Method Details

.calculate(planet_name, sign_index) ⇒ Object

Calculate dignities for a planet in a sign



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ruby_chart_engine/calculations/dignities.rb', line 28

def self.calculate(planet_name, sign_index)
  sign_name = SIGNS[sign_index][:name].downcase.to_sym
  dignities_for_sign = RULERSHIPS[sign_name]

  return default_dignities unless dignities_for_sign

  {
    domicile: dignities_for_sign[:ruler] == planet_name,
    detriment: dignities_for_sign[:detriment] == planet_name,
    exaltation: dignities_for_sign[:exaltation] == planet_name,
    fall: dignities_for_sign[:fall] == planet_name,
    peregrine: !has_any_dignity?(planet_name, dignities_for_sign)
  }
end

.default_dignitiesObject



60
61
62
63
64
65
66
67
68
# File 'lib/ruby_chart_engine/calculations/dignities.rb', line 60

def self.default_dignities
  {
    domicile: false,
    detriment: false,
    exaltation: false,
    fall: false,
    peregrine: true
  }
end

.has_any_dignity?(planet_name, dignities_for_sign) ⇒ Boolean



55
56
57
58
# File 'lib/ruby_chart_engine/calculations/dignities.rb', line 55

def self.has_any_dignity?(planet_name, dignities_for_sign)
  dignities_for_sign[:ruler] == planet_name ||
    dignities_for_sign[:exaltation] == planet_name
end

.score(dignities) ⇒ Object

Calculate dignity score



44
45
46
47
48
49
50
51
# File 'lib/ruby_chart_engine/calculations/dignities.rb', line 44

def self.score(dignities)
  score = 0
  score += 5 if dignities[:domicile]
  score += 4 if dignities[:exaltation]
  score -= 5 if dignities[:detriment]
  score -= 4 if dignities[:fall]
  score
end