Class: RubyChartEngine::Calculations::Houses
- Inherits:
-
Object
- Object
- RubyChartEngine::Calculations::Houses
- Defined in:
- lib/ruby_chart_engine/calculations/houses.rb
Instance Attribute Summary collapse
-
#house_system ⇒ Object
readonly
Returns the value of attribute house_system.
-
#julian_day ⇒ Object
readonly
Returns the value of attribute julian_day.
-
#latitude ⇒ Object
readonly
Returns the value of attribute latitude.
-
#longitude ⇒ Object
readonly
Returns the value of attribute longitude.
Instance Method Summary collapse
-
#calculate ⇒ Object
Calculate house cusps and angles.
-
#house_for_longitude(longitude, cusps) ⇒ Object
Determine which house a longitude is in.
-
#initialize(julian_day:, latitude:, longitude:, house_system: :placidus) ⇒ Houses
constructor
A new instance of Houses.
Constructor Details
#initialize(julian_day:, latitude:, longitude:, house_system: :placidus) ⇒ Houses
Returns a new instance of Houses.
6 7 8 9 10 11 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 6 def initialize(julian_day:, latitude:, longitude:, house_system: :placidus) @julian_day = julian_day @latitude = latitude @longitude = longitude @house_system = house_system end |
Instance Attribute Details
#house_system ⇒ Object (readonly)
Returns the value of attribute house_system.
4 5 6 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 4 def house_system @house_system end |
#julian_day ⇒ Object (readonly)
Returns the value of attribute julian_day.
4 5 6 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 4 def julian_day @julian_day end |
#latitude ⇒ Object (readonly)
Returns the value of attribute latitude.
4 5 6 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 4 def latitude @latitude end |
#longitude ⇒ Object (readonly)
Returns the value of attribute longitude.
4 5 6 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 4 def longitude @longitude end |
Instance Method Details
#calculate ⇒ Object
Calculate house cusps and angles
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 14 def calculate system_code = HOUSE_SYSTEMS[house_system] || 'P' # Call swe_houses - returns a flat array of 23 elements # [0-12]: house cusps (0 is unused, 1-12 are the 12 houses) # [13+]: ASCMC values (ascendant, MC, ARMC, vertex, etc.) result = Swe4r.swe_houses(julian_day, latitude, longitude, system_code) unless result.is_a?(Array) raise Error, "Unexpected swe_houses return type: #{result.class} - #{result.inspect}" end { cusps: extract_cusps(result), angles: extract_angles(result) } rescue StandardError => e raise Error, "Failed to calculate houses: #{e.message}\nResult type: #{result.class rescue 'unknown'}\nResult: #{result.inspect rescue 'uninspectable'}" end |
#house_for_longitude(longitude, cusps) ⇒ Object
Determine which house a longitude is in
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ruby_chart_engine/calculations/houses.rb', line 35 def house_for_longitude(longitude, cusps) # Normalize longitude longitude = normalize_degrees(longitude) # Return default if cusps is empty or invalid return 1 if cusps.nil? || cusps.empty? || cusps.length < 12 # Find the house 12.times do |i| cusp_start = cusps[i] cusp_end = cusps[(i + 1) % 12] # Skip if cusps are nil next if cusp_start.nil? || cusp_end.nil? # Handle wrapping around 0 degrees if cusp_start > cusp_end return i + 1 if longitude >= cusp_start || longitude < cusp_end else return i + 1 if longitude >= cusp_start && longitude < cusp_end end end 1 # Default to first house end |