Class: Velocitator

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/gem_velocity/velocitator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#time_format_str, #time_format_str_small

Constructor Details

#initialize(gem_name, versions) ⇒ Velocitator

Returns a new instance of Velocitator.



16
17
18
19
20
21
22
23
# File 'lib/gem_velocity/velocitator.rb', line 16

def initialize(gem_name, versions)
  @gem_name = gem_name || raise(ArgumentError, 'need a name')
  @versions = if versions.is_a?(String) 
                [versions]
              else
                versions
              end || raise(ArgumentError, 'required versions')
end

Instance Attribute Details

#date_rangeObject

modifiers on the end result image being rendered.



14
15
16
# File 'lib/gem_velocity/velocitator.rb', line 14

def date_range
  @date_range
end

#gem_nameObject

Returns the value of attribute gem_name.



11
12
13
# File 'lib/gem_velocity/velocitator.rb', line 11

def gem_name
  @gem_name
end

#max_valueObject

modifiers on the end result image being rendered.



14
15
16
# File 'lib/gem_velocity/velocitator.rb', line 14

def max_value
  @max_value
end

#min_valueObject

modifiers on the end result image being rendered.



14
15
16
# File 'lib/gem_velocity/velocitator.rb', line 14

def min_value
  @min_value
end

#rootObject

modifiers on the end result image being rendered.



14
15
16
# File 'lib/gem_velocity/velocitator.rb', line 14

def root
  @root
end

#versionsObject

Returns the value of attribute versions.



11
12
13
# File 'lib/gem_velocity/velocitator.rb', line 11

def versions
  @versions
end

Instance Method Details

#default_max_valueObject



99
100
101
102
103
104
105
# File 'lib/gem_velocity/velocitator.rb', line 99

def default_max_value
  totals = []
  versions.each {|v|
    totals << gem_data.downloads_day(v).map {|day,total| total}
  }
  totals.flatten.compact.max
end

#default_min_valueObject



95
96
97
# File 'lib/gem_velocity/velocitator.rb', line 95

def default_min_value
  0
end

#effective_date_rangeObject



46
47
48
49
50
51
52
53
# File 'lib/gem_velocity/velocitator.rb', line 46

def effective_date_range
  # we allow overwriting by passing a date range.
  if @date_range.is_a?(Array) && @date_range.compact.size==2
    @date_range
  else
    default_date_range
  end
end

#graph(root_arg = nil, range = nil, min = nil, max = nil) ⇒ Object



74
75
76
77
78
79
80
81
# File 'lib/gem_velocity/velocitator.rb', line 74

def graph(root_arg = nil, range = nil, min = nil, max = nil)
  # if nil, defaults will be used
  self.date_range = range
  self.root = root_arg
  self.max_value = max
  self.min_value = min
  gruff_builder.write
end

#gruff_builderObject

call, after you set all the attributes you want. you can set (or there will be fallback defaults)

max, min date_range (leave nil for default values in either start or end)



60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/gem_velocity/velocitator.rb', line 60

def gruff_builder
  opts = {
    :title => "#{gem_name}-#{versions.join("-")}",
    # just the first and last dates. give a small offset so it fits into the pciture.
    # line_datas.first.size -2 should be the max of any one of the line-datas, all should be same size.
    :labels => ({1 => time_format_str_small(effective_start_time), (line_datas.first.size-2) => time_format_str_small(effective_end_time) }),
    :max_value => max_value || default_max_value,
    :min_value => min_value || default_min_value,
    :line_datas => line_datas
  }
  builder = GruffBuilder.new(@root || Dir.pwd,nil,versions,gem_name,opts)
  builder
end

#line_datasObject



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

def line_datas
  versions.map do |v|
    specific_days_in_range.map do |day_in_range|
      day_in_range = time_format_str_small(day_in_range) #conform to rubygems api format
      if gem_data.downloads_day(v).map {|day,total| day}.include?(day_in_range)
        total = Hash[gem_data.downloads_day(v)][day_in_range]
      else
        0
      end
    end
  end
end

#specific_days_in_rangeObject



83
84
85
86
87
88
89
90
91
92
93
# File 'lib/gem_velocity/velocitator.rb', line 83

def specific_days_in_range
  all_days = []
  s = Date.parse(effective_start_time)
  e = Date.parse(effective_end_time)
  i = s
  while (i <= e )
    all_days << i
    i += 1.day
  end
  all_days
end