sweph4ruby 0.0.1

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.
@@ -0,0 +1,161 @@
1
+ require 'sweph4ruby.so'
2
+
3
+ # Encapsulates the functionality provided by sweph4ruby extension in a ruby class
4
+ class Rsweph
5
+
6
+ # Body number constants
7
+ SE_ECL_NUT = -1
8
+ SE_SUN = 0
9
+ SE_MOON = 1
10
+ SE_MERCURY = 2
11
+ SE_VENUS = 3
12
+ SE_MARS = 4
13
+ SE_JUPITER = 5
14
+ SE_SATURN = 6
15
+ SE_URANUS = 7
16
+ SE_NEPTUNE = 8
17
+ SE_PLUTO = 9
18
+ SE_MEAN_NODE = 10
19
+ SE_TRUE_NODE = 11
20
+ SE_MEAN_APOG = 12
21
+ SE_OSCU_APOG = 13
22
+ SE_EARTH = 14
23
+ SE_CHIRON = 15
24
+ SE_PHOLUS = 16
25
+ SE_CERES = 17
26
+ SE_PALLAS = 18
27
+ SE_JUNO = 19
28
+ SE_VESTA = 20
29
+ SE_NPLANETS = 21
30
+
31
+ attr_reader :eph_path
32
+
33
+ # Sets a default path for the ephemeris directory $LOAD_PATH[1]
34
+ def initialize
35
+ @eph_path = $LOAD_PATH[1]
36
+ @s = Sweph.new()
37
+ @s.swe_set_ephe_path(@eph_path)
38
+ end
39
+
40
+ # Sets the path for the ephemeris directory.
41
+ #
42
+ # For more information on the underlying Swiss Ephemeris library function:
43
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044341
44
+ def swe_set_ephe_path(path)
45
+ self.initialize() if @s == nil
46
+ @eph_path = path
47
+ @s.swe_set_ephe_path(@eph_path)
48
+ end
49
+
50
+ # Returns the julian day as a float, for a given date and time.
51
+ #
52
+ # For more information on the underlying Swiss Ephemeris library function:
53
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044332
54
+ def swe_julday(year, month, day, hour, minute)
55
+ self.initialize() if @s == nil
56
+
57
+ @s.swe_julday(year, month, day, hour + minute / 60)
58
+ end
59
+
60
+ # Calculates the position of a body (Planet, moon node, asteroid) given a julian day and a body number.
61
+ #
62
+ # Returns an array of 6 floats containing:
63
+ # * [0] = longitude
64
+ # * [1] = latitude
65
+ # * [2] = distance
66
+ # * [3] = speed in longitude
67
+ # * [4] = speed in latitude
68
+ # * [5] = speed in dist
69
+ #
70
+ # For more information on the underlying Swiss Ephemeris library function:
71
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044303
72
+ def swe_calc(julian_day, body_number)
73
+ self.initialize() if @s == nil
74
+
75
+ raise "Invalid body number #{body_number}" if body_number >= SE_NPLANETS || body_number < SE_ECL_NUT
76
+
77
+ @s.swe_calc(julian_day, body_number)
78
+ end
79
+
80
+ # Calculates the position of houses given a julian day, location (longitude, latitude) and the house system "PKORCAEVXHTBG".
81
+ #
82
+ # * house system allowed values and meanings are:
83
+ # * �P� Placidus
84
+ # * �K� Koch
85
+ # * �O� Porphyrius
86
+ # * �R� Regiomontanus
87
+ # * �C� Campanus
88
+ # * �A� or �E� Equal (cusp 1 is Ascendant)
89
+ # * �V� Vehlow equal (Asc. in middle of house 1)
90
+ # * �X� axial rotation system
91
+ # * �H� azimuthal or horizontal system
92
+ # * �T� Polich/Page (�topocentric� system)
93
+ # * �B� Alcabitus
94
+ # * �G� Gauquelin sectors
95
+ # * �M� Morinus
96
+ #
97
+ # Returns an array of 21 floats containing:
98
+ # * [0] = 0
99
+ # * [1] = House 1
100
+ # * [2] = House 2
101
+ # * [3] = House 3
102
+ # * [4] = House 4
103
+ # * [5] = House 5
104
+ # * [6] = House 6
105
+ # * [7] = House 7
106
+ # * [8] = House 8
107
+ # * [9] = House 9
108
+ # * [10] = House 10
109
+ # * [11] = House 11
110
+ # * [12] = House 12
111
+ # * [13] = Ascendant
112
+ # * [14] = MC
113
+ # * [15] = ARMC
114
+ # * [16] = Vertex
115
+ # * [17] = equatorial ascendant
116
+ # * [18] = co-ascendant
117
+ # * [19] = co-ascendant
118
+ # * [20] = polar ascendant
119
+ #
120
+ # For more information on the underlying Swiss Ephemeris library function:
121
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044344
122
+ def swe_houses(julian_day, latitude, longitude, house_system)
123
+ self.initialize() if @s == nil
124
+
125
+ @s.swe_houses(julian_day, latitude, longitude, house_system)
126
+ end
127
+
128
+ # Gets the name of a planet in English, given its body number.
129
+ #
130
+ # For more information on the underlying Swiss Ephemeris library function:
131
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044309
132
+ def swe_get_planet_name(body_number)
133
+ self.initialize() if @s == nil
134
+
135
+ raise "Invalid body number #{body_number}" if body_number >= SE_NPLANETS || body_number < SE_ECL_NUT
136
+
137
+ @s.swe_get_planet_name(body_number)
138
+ end
139
+
140
+ # Calculate the house position of a body (Planet, moon node, asteroid).
141
+ #
142
+ # For more information on the underlying Swiss Ephemeris library function:
143
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044349
144
+ def swe_house_pos(armc, geolat, eps, house_system, lon, lat)
145
+ self.initialize() if @s == nil
146
+
147
+ @s.swe_house_pos(armc, geolat, eps, house_system, lon, lat)
148
+ end
149
+
150
+ # For percision fanatics.
151
+ #
152
+ # For more information on the underlying Swiss Ephemeris library function:
153
+ # http://www.astro.com/swisseph/swephprg.htm?lang=f#_Toc100044334
154
+ def swe_deltat(julian_day)
155
+ self.initialize() if @s == nil
156
+
157
+ @s.swe_deltat(julian_day)
158
+ end
159
+ end
160
+
161
+ #puts File::PATH_SEPARATOR
@@ -0,0 +1,129 @@
1
+ require 'rubygems'
2
+ require 'sweph4ruby'
3
+ require 'test/unit'
4
+
5
+ class Rsweph_test < Test::Unit::TestCase
6
+
7
+
8
+ def test_initialize()
9
+ s = Rsweph.new()
10
+ assert_equal($LOAD_PATH[1] , s.eph_path)
11
+ end
12
+
13
+ def test_swe_set_ephe_path()
14
+ s = Rsweph.new()
15
+ s.swe_set_ephe_path($LOAD_PATH[1])
16
+ assert_equal($LOAD_PATH[1] , s.eph_path)
17
+ end
18
+
19
+ def test_swe_julday()
20
+ s = Rsweph.new()
21
+ assert_equal(2453577.0, s.swe_julday(2005, 7, 25, 12, 0))
22
+ end
23
+
24
+ def test_swe_calc()
25
+
26
+ test_planet_values = []
27
+ test_planet_values[0] = 122
28
+ test_planet_values[1] = 359
29
+ test_planet_values[2] = 140
30
+ test_planet_values[3] = 152
31
+ test_planet_values[4] = 28
32
+ test_planet_values[5] = 192
33
+ test_planet_values[6] = 121
34
+ test_planet_values[7] = 340
35
+ test_planet_values[8] = 316
36
+ test_planet_values[9] = 262
37
+
38
+ s = Rsweph.new()
39
+ jul_day = s.swe_julday(2005, 7, 25, 12, 0)
40
+
41
+ for i in 0..9
42
+ assert_equal(test_planet_values[i], s.swe_calc(jul_day, i)[0].to_i())
43
+ end
44
+
45
+ end
46
+
47
+ def test_swe_houses()
48
+
49
+ test_houses_values = []
50
+ test_houses_values[0] = 0
51
+ test_houses_values[1] = 210
52
+ test_houses_values[2] = 238
53
+ test_houses_values[3] = 272
54
+ test_houses_values[4] = 309
55
+ test_houses_values[5] = 342
56
+ test_houses_values[6] = 9
57
+ test_houses_values[7] = 30
58
+ test_houses_values[8] = 58
59
+ test_houses_values[9] = 92
60
+ test_houses_values[10] = 129
61
+ test_houses_values[11] = 162
62
+
63
+ s = Rsweph.new()
64
+ jul_day = s.swe_julday(2005, 7, 25, 12, 0)
65
+ houses = s.swe_houses(jul_day, 47.23, 8.33, "P")
66
+
67
+ for i in 0..11
68
+ assert_equal(test_houses_values[i], houses[i].to_i())
69
+ end
70
+ end
71
+
72
+ def test_swe_get_planet_name()
73
+ test_planet_values = []
74
+ test_planet_values[0] = "Sun"
75
+ test_planet_values[1] = "Moon"
76
+ test_planet_values[2] = "Mercury"
77
+ test_planet_values[3] = "Venus"
78
+ test_planet_values[4] = "Mars"
79
+ test_planet_values[5] = "Jupiter"
80
+ test_planet_values[6] = "Saturn"
81
+ test_planet_values[7] = "Uranus"
82
+ test_planet_values[8] = "Neptune"
83
+ test_planet_values[9] = "Pluto"
84
+
85
+ s = Rsweph.new()
86
+
87
+ for i in 0..9
88
+ assert_equal(test_planet_values[i], s.swe_get_planet_name(i))
89
+ end
90
+ end
91
+
92
+ def test_swe_house_pos()
93
+
94
+ test_planet_house_values = []
95
+ test_planet_house_values[0] = 9
96
+ test_planet_house_values[1] =5
97
+ test_planet_house_values[2] = 10
98
+ test_planet_house_values[3] = 10
99
+ test_planet_house_values[4] = 6
100
+ test_planet_house_values[5] = 12
101
+ test_planet_house_values[6] = 9
102
+ test_planet_house_values[7] = 4
103
+ test_planet_house_values[8] = 4
104
+ test_planet_house_values[9] = 2
105
+
106
+ s = Rsweph.new()
107
+
108
+ jul_day = s.swe_julday(2005, 7, 25, 12, 0)
109
+
110
+ houses = []
111
+ houses = s.swe_houses(jul_day, 47.23, 8.33, "P")
112
+ armc = houses[15]
113
+
114
+ eps = s.swe_calc(jul_day, -1)[0]
115
+
116
+ for i in 0..9
117
+ body_data = []
118
+
119
+ body_data = s.swe_calc(jul_day, i)
120
+ house = s.swe_house_pos(armc, 47.23, eps, 'P', body_data[0], body_data[1])
121
+ assert_equal(test_planet_house_values[i], house.to_i())
122
+ end
123
+
124
+ end
125
+
126
+ end
127
+
128
+
129
+
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.10
3
+ specification_version: 1
4
+ name: sweph4ruby
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2005-08-09
8
+ summary: An astrology library
9
+ require_paths:
10
+ - lib
11
+ email: pedro.santos@bizarrologia.com
12
+ homepage: http://rubyforge.org/projects/sweph4ruby/
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: sweph4ruby
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Pedro Moreira Santos
29
+ files:
30
+ - MIT-LICENSE
31
+ - README
32
+ - SEAS_18.SE1
33
+ - ext/extconf.rb
34
+ - ext/libswe.a
35
+ - ext/swelib32.lib
36
+ - ext/sweodef.h
37
+ - ext/sweph4ruby.c
38
+ - ext/swephexp.h
39
+ - lib/sweph4ruby.rb
40
+ - test/test.rb
41
+ test_files:
42
+ - test/test.rb
43
+ rdoc_options: []
44
+ extra_rdoc_files:
45
+ - README
46
+ executables: []
47
+ extensions:
48
+ - ext/extconf.rb
49
+ requirements: []
50
+ dependencies: []