Class: MoonPhases
- Inherits:
-
Object
- Object
- MoonPhases
- Defined in:
- lib/moonphases.rb
Instance Method Summary collapse
- #findYearIn(nasaDoc, year) ⇒ Object
- #getDocumentLogItem(item) ⇒ Object
- #getDocumentLogLength ⇒ Object
- #getMoonFullness(date) ⇒ Object
- #getNASAData(year) ⇒ Object
- #getNASADoc(year) ⇒ Object
- #getNASAYearBlob(year) ⇒ Object
- #getNextDataPoint(date) ⇒ Object
- #getPreviousDataPoint(date) ⇒ Object
-
#initialize ⇒ MoonPhases
constructor
A new instance of MoonPhases.
- #lookupFilename(year) ⇒ Object
- #paddedString(value) ⇒ Object
- #separateNASADataLines(year) ⇒ Object
Constructor Details
#initialize ⇒ MoonPhases
Returns a new instance of MoonPhases.
6 7 8 9 |
# File 'lib/moonphases.rb', line 6 def initialize @documentLog = Array.new @documentCache = Hash.new end |
Instance Method Details
#findYearIn(nasaDoc, year) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/moonphases.rb', line 96 def findYearIn( nasaDoc, year ) nasaDoc.css( 'pre.indent' ).each do |pre| pre.children.each do |child| firstNumber = child.content[/-?\d+/] if !firstNumber.nil? if firstNumber.to_i == year return child end end end end nil end |
#getDocumentLogItem(item) ⇒ Object
11 12 13 |
# File 'lib/moonphases.rb', line 11 def getDocumentLogItem( item ) @documentLog[ item ] end |
#getDocumentLogLength ⇒ Object
37 38 39 |
# File 'lib/moonphases.rb', line 37 def getDocumentLogLength @documentLog.length end |
#getMoonFullness(date) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/moonphases.rb', line 23 def getMoonFullness( date ) pDataPoint = getPreviousDataPoint date if pDataPoint.getDate == date return pDataPoint.getFullness end nDataPoint = getNextDataPoint date daysBetweenDataPoints = nDataPoint.getDate.ajd - pDataPoint.getDate.ajd daysSincePreviousDataPoint = date.ajd - pDataPoint.getDate.ajd phaseChange = (nDataPoint.getFullness.getPercent - pDataPoint.getFullness.getPercent) * ( daysSincePreviousDataPoint / daysBetweenDataPoints ) Fullness.new pDataPoint.getFullness.getPercent + phaseChange, phaseChange > 0 ? "+" : "-" end |
#getNASAData(year) ⇒ Object
41 42 43 |
# File 'lib/moonphases.rb', line 41 def getNASAData( year ) MoonData.new separateNASADataLines( year ) end |
#getNASADoc(year) ⇒ Object
110 111 112 113 114 115 116 117 118 119 |
# File 'lib/moonphases.rb', line 110 def getNASADoc( year ) filename = lookupFilename( year ) document = @documentCache[ filename ] if document.nil? @documentLog << filename document = Nokogiri::HTML( File.open( filename )) @documentCache[ filename ] = document end document end |
#getNASAYearBlob(year) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/moonphases.rb', line 15 def getNASAYearBlob( year ) doc = getNASADoc year if !doc.nil? return findYearIn doc, year end nil end |
#getNextDataPoint(date) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/moonphases.rb', line 62 def getNextDataPoint( date ) yearToCheck = date.year while !(yearData = getNASAData yearToCheck ).nil? index = 0 while index < yearData.getNumDataPoints testDate = yearData.getDataPoint index if( testDate.getDate >= date ) return testDate end index = index+1 end yearToCheck = yearToCheck+1 end nil end |
#getPreviousDataPoint(date) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/moonphases.rb', line 45 def getPreviousDataPoint( date ) yearToCheck = date.year while !(yearData = getNASAData yearToCheck ).nil? index = yearData.getNumDataPoints-1 while index >= 0 testDate = yearData.getDataPoint index if testDate.getDate <= date return testDate end index = index-1 end yearToCheck = yearToCheck-1 end nil end |
#lookupFilename(year) ⇒ Object
121 122 123 |
# File 'lib/moonphases.rb', line 121 def lookupFilename( year ) File.join(File.dirname(File.(__FILE__)), 'moonphases/db/phases' + paddedString( (( year - 1 )/ 100 ) * 100 + 1 ) + ".html" ) end |
#paddedString(value) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/moonphases.rb', line 125 def paddedString( value ) if value > 0 if value < 10 "000" + value.to_s elsif value < 100 "00" + value.to_s elsif value < 1000 "0" + value.to_s else value.to_s end else if value < -999 value.to_s elsif value < -99 "-0" + (-value).to_s else "-00" + (-value).to_s end end end |
#separateNASADataLines(year) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/moonphases.rb', line 79 def separateNASADataLines( year ) dataLines = Array.new # Remove blank lines and stupid OSX return characters. data = (getNASAYearBlob year).content data.scan(/([^\r]*)/).each do |line| if line[0].length > 0 dataLines << line[0] end end #puts data.scan(/^(-?\d+)?(\s*)(([A-Za-z]{3}\s+\d+\s+\d+:\d+\s+[TAHPtpn]?\s*){1,4})(\d\dh\d\dm)?\s*$/).inspect #(getNASAYearBlob year).content.scan(/^(-?\d+)?( *)(([A-Za-z]{3} +\d+ +\d+:\d+ +[TAHPtpn]? *){1,4})(\d\dh\d\dm)? *$/).each do |lineMatches| # puts lineMatches[2] # dataLines << lineMatches[2] #end dataLines end |