Class: MoonPhases

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

Instance Method Summary collapse

Constructor Details

#initializeMoonPhases

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

#getDocumentLogLengthObject



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.expand_path(__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