Class: Horoscope::Horo

Inherits:
Object
  • Object
show all
Defined in:
lib/horoscope.rb

Constant Summary collapse

PLANETS =
["As", "Su", "Mo", "Ma", "Me", "Ju", "Ve", "Sa", "Ra", "Ke"]
IMG_SIZE =
440
SPLIT =
IMG_SIZE/4
XBIAS =
10
YBIAS =
15
PADDING =
15
CENTER_PADDING =
40
ERRORS =
{
  :Date => "Error: Invalid Date. Enter a valid date between years 1600 AD and 2300 AD",
  :Zone => "Error: Please pass a valid time zone ranging from -12.0 to +12.0",
  :Lat  => "Error: Invalid Latitude. Enter between -90.0 to +90.0",
  :Lon  => "Error: Invalid Longitude. Enter between -180.0 to +180.0"
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data = {}) ⇒ Horo

Returns a new instance of Horo.

[View source]

33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/horoscope.rb', line 33

def initialize(data={})
  @data = data

  @errors = []

  @computed = false
  @datetime = data[:datetime]
  @zone = data[:zone]
  @lat = data[:lat]
  @lon = data[:lon]
  @positions = Hash[PLANETS.map {|x| [x, nil]}]
  @positions_rev = [[], [], [], [], [], [], [], [], [], [], [], []]
end

Instance Attribute Details

#datetimeObject

Returns the value of attribute datetime.


31
32
33
# File 'lib/horoscope.rb', line 31

def datetime
  @datetime
end

#errorsObject

Returns the value of attribute errors.


31
32
33
# File 'lib/horoscope.rb', line 31

def errors
  @errors
end

#latObject

Returns the value of attribute lat.


31
32
33
# File 'lib/horoscope.rb', line 31

def lat
  @lat
end

#lonObject

Returns the value of attribute lon.


31
32
33
# File 'lib/horoscope.rb', line 31

def lon
  @lon
end

#positionsObject

Returns the value of attribute positions.


31
32
33
# File 'lib/horoscope.rb', line 31

def positions
  @positions
end

#positions_revObject

Returns the value of attribute positions_rev.


31
32
33
# File 'lib/horoscope.rb', line 31

def positions_rev
  @positions_rev
end

#zoneObject

Returns the value of attribute zone.


31
32
33
# File 'lib/horoscope.rb', line 31

def zone
  @zone
end

Instance Method Details

#computeObject

[View source]

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/horoscope.rb', line 47

def compute
  return @errors if validate_values.size > 0 

  tpos = [10980, 16233, 15880, 16451, 15210, 13722, 13862, 7676, 4306, 15106]
  tsp, pos, spd = [Array.new(10, 0), Array.new(10, 0), Array.new(10, 0)]
  jd = Planet.get_jul_day(@datetime.month, @datetime.day, @datetime.year)
  time = @datetime.hour + (@datetime.min / 60.0)
  time -= @zone
  jd += time / 24.0
  t = (jd - 0.5 - Planet::J2000) / 36525.0
  Planet.get_planets(t, pos, spd)
  pos[0] = Planet.ascendant(t, time, @lon, @lat)
  ayn = Planet.get_ayan(t)
  (0..9).each do |i|
    tpos[i] = ((pos[i] + ayn) % 360.0 * 60.0).to_i
    if tpos[i] < 0
      tpos = tpos
      n = i
      tpos[n] += 21600
    end
    tsp[i] = (spd[i] * 3600.0).to_i
  end
  count = 0
  (0..11).each do |i|
    (0..9).each do |j|
      if (tpos[j] / 1800 == i)
        @positions[PLANETS[j]] = i 
        @positions_rev[i] << PLANETS[j]
      end
    end
  end
  @computed = true
  return @positions
end

#create_chart(options = {}) ⇒ Object

[View source]

82
83
84
85
86
87
88
89
90
# File 'lib/horoscope.rb', line 82

def create_chart(options= {})
  compute unless @computed
  case options[:format]
  when :html
    draw_chart_as_html
  else
    draw_chart_as_png
  end
end