gem_velocity 0.0.10 → 0.0.11
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.
- data/TODO +1 -12
- data/benchmark/bench.rb +64 -0
- data/bin/gem_velocity +30 -0
- data/gem_velocity.gemspec +2 -0
- data/lib/gem_velocity/gem_data.rb +43 -9
- data/lib/gem_velocity/helpers.rb +22 -0
- data/lib/gem_velocity/velocitators/aggregated_velocitator.rb +3 -4
- data/lib/gem_velocity/velocitators/base_velocitator.rb +10 -8
- data/lib/gem_velocity/velocitators/factory.rb +2 -2
- data/lib/gem_velocity/velocitators/multiplexer.rb +3 -1
- data/lib/gem_velocity/velocitators/single_velocitator.rb +4 -2
- data/lib/gem_velocity/version.rb +1 -1
- data/lib/gem_velocity.rb +5 -0
- data/spec/gem_data_spec.rb +2 -1
- data/spec/single_velocitator_spec.rb +2 -2
- metadata +56 -24
data/TODO
CHANGED
@@ -1,16 +1,5 @@
|
|
1
|
-
Add a Version?
|
2
|
-
|
3
|
-
currently, the versions in the base class are single versions, but they are essentially used for representing a specific line
|
4
|
-
|
5
|
-
in default_line_datas.
|
6
|
-
(and then used for titles, abd bs).
|
7
|
-
|
8
|
-
if rubygems 606 isn't solved, why not just put a total on there and let the inconsistnecies just be with some notice?
|
9
|
-
|
10
1
|
rename time_format_str_small alias
|
11
2
|
|
12
|
-
swap out gruff_builder to some other composing object of a builder, that can mash up the various velocitators?
|
13
|
-
|
14
3
|
consolidate velocitator fixtrues or at least repeatable generators in specs.
|
15
4
|
|
16
5
|
cassandra says to have an option to have the multiplexer start them from the same data (to see curve/adoption rate). I see it.
|
@@ -25,4 +14,4 @@ speed the fuck out of it:
|
|
25
14
|
Wrote graph to /Users/shair/projects/gem_velocities2/gem_velocity_web/public/images/AggregatedVelocitator-rails-3.2.x.png
|
26
15
|
2013-10-27 17:46:53 -0700
|
27
16
|
|
28
|
-
|
17
|
+
use the perftool stuff.
|
data/benchmark/bench.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
BENCH_DIR = File.expand_path(File.dirname(__FILE__))
|
4
|
+
project = File.expand_path(File.join(BENCH_DIR, ".."))
|
5
|
+
Dir.chdir project
|
6
|
+
$:.unshift(project)
|
7
|
+
$:.unshift("lib")
|
8
|
+
|
9
|
+
require File.join(project,"lib", "gem_velocity")
|
10
|
+
|
11
|
+
require 'benchmark'
|
12
|
+
require 'perftools'
|
13
|
+
|
14
|
+
class PerfToolHelper
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def clean_slate
|
18
|
+
FileUtils.rm_rf(tmp_dir)
|
19
|
+
FileUtils.mkdir_p(tmp_dir)
|
20
|
+
end
|
21
|
+
|
22
|
+
def tmp_dir
|
23
|
+
"#{BENCH_DIR}/tmp"
|
24
|
+
end
|
25
|
+
|
26
|
+
attr_reader :paths
|
27
|
+
def gather_data(path, &block)
|
28
|
+
@paths ||= []
|
29
|
+
@paths << path
|
30
|
+
PerfTools::CpuProfiler.start(path)
|
31
|
+
block.call
|
32
|
+
PerfTools::CpuProfiler.stop
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
puts 'cleaning previous perftool'
|
38
|
+
PerfToolHelper.clean_slate
|
39
|
+
|
40
|
+
Benchmark.bm do |b|
|
41
|
+
PerfToolHelper.gather_data("#{PerfToolHelper.tmp_dir}/2.3.x") do
|
42
|
+
b.report("aggregated") { BaseVelocitator.create(:gem_name => "rails", :version => "2.3.x").graph }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
Benchmark.bm do |b|
|
47
|
+
PerfToolHelper.gather_data("#{PerfToolHelper.tmp_dir}/0.0.x") do
|
48
|
+
b.report("single") { BaseVelocitator.create(:gem_name => "haml-i18n-extractor", :version => "0.0.5").graph }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
puts 'multi'
|
53
|
+
puts Benchmark.measure {
|
54
|
+
one = BaseVelocitator.create(:gem_name => "haml-i18n-extractor", :version => "0.0.16" )
|
55
|
+
two = BaseVelocitator.create(:gem_name => "haml-i18n-extractor", :version => "0.0.17" )
|
56
|
+
PerfToolHelper.gather_data("#{PerfToolHelper.tmp_dir}/0.0.16-0.0.17") do
|
57
|
+
Multiplexer.new([one,two]).graph
|
58
|
+
end
|
59
|
+
}
|
60
|
+
|
61
|
+
puts "Creating images for perftools..."
|
62
|
+
PerfToolHelper.paths.each do |perftool_data_path|
|
63
|
+
system("pprof.rb --gif #{perftool_data_path} > #{perftool_data_path}.gif")
|
64
|
+
end
|
data/bin/gem_velocity
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "gem_velocity"
|
4
|
+
|
5
|
+
option_parser = Trollop::Parser.new do
|
6
|
+
version "Current version: #{GemVelocity::VERSION}"
|
7
|
+
opt :gem_name, "gem name", :short => 'g', :type => String
|
8
|
+
opt :version_str, "version_str", :short => 'n', :type => String
|
9
|
+
# TODO start,end,max,min.
|
10
|
+
# TODO handle commas and change to multiplexer ?
|
11
|
+
banner <<-EOB
|
12
|
+
|
13
|
+
Run like:
|
14
|
+
|
15
|
+
gem_velocity -g <gem_name> -n <version_number>
|
16
|
+
# example
|
17
|
+
# gem_velocity -g haml-i18n-extractor -n 0.0.5
|
18
|
+
EOB
|
19
|
+
end
|
20
|
+
|
21
|
+
opts = Trollop::with_standard_exception_handling option_parser do
|
22
|
+
raise Trollop::HelpNeeded if ARGV.empty?
|
23
|
+
option_parser.parse ARGV
|
24
|
+
end
|
25
|
+
|
26
|
+
opts[:version] = opts.delete(:version_str)
|
27
|
+
|
28
|
+
velocitator = BaseVelocitator.create(opts)
|
29
|
+
file = velocitator.graph
|
30
|
+
|
data/gem_velocity.gemspec
CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "gruff"
|
22
22
|
spec.add_dependency "activesupport"
|
23
23
|
spec.add_dependency "gems"
|
24
|
+
spec.add_dependency "trollop", "1.16.2"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
26
27
|
spec.add_development_dependency "rake"
|
@@ -31,5 +32,6 @@ Gem::Specification.new do |spec|
|
|
31
32
|
spec.add_development_dependency "timecop"
|
32
33
|
spec.add_development_dependency "sourcify"
|
33
34
|
spec.add_development_dependency "ParseTree"
|
35
|
+
spec.add_development_dependency "perftools.rb"
|
34
36
|
|
35
37
|
end
|
@@ -2,12 +2,47 @@ require 'gems'
|
|
2
2
|
|
3
3
|
class GemData
|
4
4
|
|
5
|
+
require 'thread'
|
6
|
+
|
7
|
+
include Helpers
|
5
8
|
attr_reader :gem_name
|
6
9
|
|
7
10
|
def initialize(gem_name)
|
8
11
|
@gem_name = gem_name
|
9
12
|
end
|
10
13
|
|
14
|
+
def parallel_fetch_for(versions)
|
15
|
+
@mutex1 = Mutex.new
|
16
|
+
@cached_downloads_metatada ||= {}
|
17
|
+
smallest_version = versions.map{|v| ComparableVersion.new(v)}.sort.first.str
|
18
|
+
start_t = time_built(smallest_version)
|
19
|
+
end_t = Time.now
|
20
|
+
puts "fetching #{versions.size} download data requests"
|
21
|
+
threads = []
|
22
|
+
|
23
|
+
# TODO limit threads.
|
24
|
+
versions.map do |v|
|
25
|
+
threads << Thread.new {
|
26
|
+
fetch_downloads_metadata(v,start_t,end_t,@cached_downloads_metatada)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
threads.map(&:join)
|
30
|
+
end
|
31
|
+
|
32
|
+
def fetch_downloads_metadata(version, start_time, end_time, cache_hash)
|
33
|
+
key = key_for(version, start_time, end_time)
|
34
|
+
data_received = Gems.downloads(gem_name, version, start_time, end_time)
|
35
|
+
@mutex1.synchronize do
|
36
|
+
# shared hash
|
37
|
+
cache_hash[key] ||= data_received
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def prefetched_downloads_metadata(version, start_time, end_time)
|
42
|
+
key = key_for(version, start_time, end_time)
|
43
|
+
@cached_downloads_metatada[key]
|
44
|
+
end
|
45
|
+
|
11
46
|
def versions
|
12
47
|
versions_metadata.map{|v| v["number"]}
|
13
48
|
end
|
@@ -18,8 +53,11 @@ class GemData
|
|
18
53
|
h
|
19
54
|
end
|
20
55
|
|
56
|
+
def time_built(v)
|
57
|
+
versions_built_at[v]
|
58
|
+
end
|
59
|
+
|
21
60
|
def versions_metadata
|
22
|
-
# cache api call.
|
23
61
|
@versions_metadata ||= Gems.versions(gem_name)
|
24
62
|
# it should be a hash
|
25
63
|
if @versions_metadata.is_a?(String)
|
@@ -30,6 +68,10 @@ class GemData
|
|
30
68
|
@versions_metadata
|
31
69
|
end
|
32
70
|
|
71
|
+
def key_for(v,s,e)
|
72
|
+
"#{v}-#{time_format_str_small(s)}-#{time_format_str_small(e)}"
|
73
|
+
end
|
74
|
+
|
33
75
|
def total_for_version(version)
|
34
76
|
@total_for_version ||= {}
|
35
77
|
key = "#{version}"
|
@@ -37,13 +79,5 @@ class GemData
|
|
37
79
|
@total_for_version[key] ||= Gems.total_downloads(gem_name, version)
|
38
80
|
end
|
39
81
|
|
40
|
-
def downloads_metadata(version, start_time, end_time)
|
41
|
-
# cache api call.
|
42
|
-
@downloads_metadata ||= {}
|
43
|
-
key = "#{version}-#{start_time}-#{end_time}"
|
44
|
-
return @downloads_metadata[key] if @downloads_metadata[key]
|
45
|
-
@downloads_metadata[key] ||= Gems.downloads(gem_name, version, start_time, end_time).to_a
|
46
|
-
end
|
47
|
-
|
48
82
|
|
49
83
|
end
|
data/lib/gem_velocity/helpers.rb
CHANGED
@@ -37,3 +37,25 @@ module Helpers
|
|
37
37
|
end
|
38
38
|
|
39
39
|
end
|
40
|
+
|
41
|
+
# http://stackoverflow.com/questions/2051229/how-to-compare-versions-in-ruby
|
42
|
+
class ComparableVersion < Array
|
43
|
+
def initialize s
|
44
|
+
@str = s
|
45
|
+
super(s.split('.').map { |e| e.to_i })
|
46
|
+
end
|
47
|
+
def str
|
48
|
+
@str
|
49
|
+
end
|
50
|
+
def < x
|
51
|
+
(self <=> x) < 0
|
52
|
+
end
|
53
|
+
def > x
|
54
|
+
(self <=> x) > 0
|
55
|
+
end
|
56
|
+
def == x
|
57
|
+
(self <=> x) == 0
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
@@ -13,14 +13,13 @@ class AggregatedVelocitator < BaseVelocitator
|
|
13
13
|
@gem_name = gem_name
|
14
14
|
@version = top_level_ver #with a wildcard/x
|
15
15
|
@versions = @aggregated_versions = gem_data.versions.select{|v| v.match(/^#{Regexp.escape(remove_trailing_x(top_level_ver))}/) }
|
16
|
-
super(gem_name, @aggregated_versions)
|
17
|
-
|
18
16
|
raise NoSuchVersion, "no versions found for #{@version}!" if @aggregated_versions.empty?
|
17
|
+
after_init
|
19
18
|
end
|
20
19
|
|
21
20
|
def default_start
|
22
|
-
|
23
|
-
|
21
|
+
smallest_version = @aggregated_versions.map{|v| ComparableVersion.new(v)}.sort.first.str
|
22
|
+
built_at(smallest_version)
|
24
23
|
end
|
25
24
|
|
26
25
|
def default_max_value
|
@@ -81,11 +81,12 @@ class BaseVelocitator
|
|
81
81
|
|
82
82
|
private
|
83
83
|
|
84
|
-
def
|
85
|
-
|
86
|
-
|
84
|
+
def after_init
|
85
|
+
raise ArgumentError, "Need to pass a gem name!" if (gem_name.nil? || gem_name.empty?)
|
86
|
+
raise ArgumentError, "Need to pass versions!" if versions.compact.empty?
|
87
87
|
validate_correct_gem
|
88
88
|
validate_correct_versions
|
89
|
+
gem_data.parallel_fetch_for(versions)
|
89
90
|
end
|
90
91
|
|
91
92
|
def validate_correct_versions
|
@@ -137,19 +138,20 @@ class BaseVelocitator
|
|
137
138
|
end
|
138
139
|
|
139
140
|
# returns # "2013-10-10" => 45
|
140
|
-
def
|
141
|
-
|
141
|
+
def downloads_per_day(version)
|
142
|
+
@downloads_per_day ||= Hash.new
|
143
|
+
return @downloads_per_day[version] if @downloads_per_day[version]
|
142
144
|
ret = Hash.new(0)
|
143
|
-
gem_data.
|
145
|
+
from_api = gem_data.prefetched_downloads_metadata(version, default_start, default_end)
|
146
|
+
from_api.each_cons(2) do |p,n|
|
144
147
|
#day,total pairs
|
145
148
|
curr_total = n.last
|
146
149
|
day = n.first
|
147
150
|
previous_day = p.first
|
148
151
|
ret[day] = curr_total + ret[previous_day]
|
149
152
|
end
|
150
|
-
ret
|
153
|
+
@downloads_per_day[version] = ret
|
151
154
|
end
|
152
|
-
alias :downloads_per_day :accumulated_downloads_per_day
|
153
155
|
|
154
156
|
def gem_data
|
155
157
|
# need this memoized so the gem_data memoization works for the same instance
|
@@ -22,9 +22,9 @@ class Factory
|
|
22
22
|
|
23
23
|
def velocitator
|
24
24
|
if @type == :aggregated
|
25
|
-
AggregatedVelocitator.new(@gem_name, @version)
|
25
|
+
@velocitator ||= AggregatedVelocitator.new(@gem_name, @version)
|
26
26
|
elsif @type == :single
|
27
|
-
SingleVelocitator.new(@gem_name, @version)
|
27
|
+
@velocitator ||= SingleVelocitator.new(@gem_name, @version)
|
28
28
|
else
|
29
29
|
raise 'no velocitor found to generate!'
|
30
30
|
end
|
@@ -6,7 +6,9 @@ class Multiplexer < BaseVelocitator
|
|
6
6
|
def initialize(velocitators)
|
7
7
|
@velocitators = velocitators
|
8
8
|
# TODO what if there are multiple gem_names being multiplexed?
|
9
|
-
|
9
|
+
@gem_name = velocitators.first.gem_name
|
10
|
+
@versions = velocitators.map(&:versions).flatten
|
11
|
+
after_init
|
10
12
|
end
|
11
13
|
|
12
14
|
def version
|
@@ -5,8 +5,10 @@ class SingleVelocitator < BaseVelocitator
|
|
5
5
|
attr_reader :version
|
6
6
|
|
7
7
|
def initialize(gem_name, version)
|
8
|
+
@gem_name = gem_name
|
8
9
|
@version = version
|
9
|
-
|
10
|
+
@versions = [version]
|
11
|
+
after_init
|
10
12
|
end
|
11
13
|
|
12
14
|
def default_start
|
@@ -18,7 +20,7 @@ class SingleVelocitator < BaseVelocitator
|
|
18
20
|
end
|
19
21
|
|
20
22
|
def default_max_value
|
21
|
-
|
23
|
+
downloads_per_day(@version).map {|day,total| total}.max
|
22
24
|
end
|
23
25
|
|
24
26
|
def line_data(start_t = nil, end_t = nil)
|
data/lib/gem_velocity/version.rb
CHANGED
data/lib/gem_velocity.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "trollop"
|
1
2
|
require "gem_velocity/version"
|
2
3
|
require "gem_velocity/helpers"
|
3
4
|
require "gem_velocity/gem_data"
|
@@ -17,3 +18,7 @@ require 'date'
|
|
17
18
|
|
18
19
|
module GemVelocity
|
19
20
|
end
|
21
|
+
|
22
|
+
# this should be used for short-lived scripts.
|
23
|
+
# can be configurable if need be.
|
24
|
+
GC.disable
|
data/spec/gem_data_spec.rb
CHANGED
@@ -11,7 +11,8 @@ describe GemData do
|
|
11
11
|
|
12
12
|
it "can show download information" do
|
13
13
|
gem_data = GemData.new("haml-i18n-extractor")
|
14
|
-
|
14
|
+
gem_data.parallel_fetch_for(["0.0.17"])
|
15
|
+
result = gem_data.prefetched_downloads_metadata("0.0.17", gem_data.versions_built_at["0.0.17"],Time.now).to_a
|
15
16
|
result.should == [["2013-06-16", 38], ["2013-06-17", 16], ["2013-06-18", 3], ["2013-06-19", 1], ["2013-06-20", 4], ["2013-06-21", 1], ["2013-06-22", 5], ["2013-06-23", 2], ["2013-06-24", 3], ["2013-06-25", 9], ["2013-06-26", 161], ["2013-06-27", 3], ["2013-06-28", 2], ["2013-06-29", 0], ["2013-06-30", 0], ["2013-07-01", 0], ["2013-07-02", 7], ["2013-07-03", 3], ["2013-07-04", 2], ["2013-07-05", 0], ["2013-07-06", 3], ["2013-07-07", 0], ["2013-07-08", 2], ["2013-07-09", 1], ["2013-07-10", 2], ["2013-07-11", 3], ["2013-07-12", 2], ["2013-07-13", 1], ["2013-07-14", 0], ["2013-07-15", 2], ["2013-07-16", 2], ["2013-07-17", 6], ["2013-07-18", 0], ["2013-07-19", 3], ["2013-07-20", 1], ["2013-07-21", 0], ["2013-07-22", 2], ["2013-07-23", 1], ["2013-07-24", 6], ["2013-07-25", 0], ["2013-07-26", 0], ["2013-07-27", 0], ["2013-07-28", 0], ["2013-07-29", 1], ["2013-07-30", 2], ["2013-07-31", 2], ["2013-08-01", 0], ["2013-08-02", 0], ["2013-08-03", 0], ["2013-08-04", 0], ["2013-08-05", 2], ["2013-08-06", 0], ["2013-08-07", 0], ["2013-08-08", 3], ["2013-08-09", 0], ["2013-08-10", 0], ["2013-08-11", 0], ["2013-08-12", 1], ["2013-08-13", 2], ["2013-08-14", 1], ["2013-08-15", 2], ["2013-08-16", 0], ["2013-08-17", 1], ["2013-08-18", 0], ["2013-08-19", 0], ["2013-08-20", 0], ["2013-08-21", 1], ["2013-08-22", 2], ["2013-08-23", 4], ["2013-08-24", 0], ["2013-08-25", 1], ["2013-08-26", 0], ["2013-08-27", 2], ["2013-08-28", 0], ["2013-08-29", 2], ["2013-08-30", 0], ["2013-08-31", 0], ["2013-09-01", 2], ["2013-09-02", 2], ["2013-09-03", 1], ["2013-09-04", 0], ["2013-09-05", 2], ["2013-09-06", 2], ["2013-09-07", 0], ["2013-09-08", 0], ["2013-09-09", 1], ["2013-09-10", 0], ["2013-09-11", 0], ["2013-09-12", 5], ["2013-09-13", 0], ["2013-09-14", 0], ["2013-09-15", 0], ["2013-09-16", 1], ["2013-09-17", 0], ["2013-09-18", 0], ["2013-09-19", 1], ["2013-09-20", 1]]
|
16
17
|
end
|
17
18
|
|
@@ -15,7 +15,7 @@ describe "a Velocitator rendering graphs" do
|
|
15
15
|
# should this be the specific date range values?? aggregated since when? not aggregated?
|
16
16
|
velocitator.graph_options[:line_datas].should == [[303, 303, 303, 304, 304]]
|
17
17
|
|
18
|
-
velocitator.graph_options[:title].should == "haml-i18n-extractor-0.0.17\n(downloads:
|
18
|
+
velocitator.graph_options[:title].should == "haml-i18n-extractor-0.0.17\n(downloads: 386)"
|
19
19
|
velocitator.graph_options[:labels].should == ({1=>"2013-09-13", (velocitator.line_data.size-2) =>"2013-09-17"})
|
20
20
|
velocitator.graph_options[:max_value].should == 306 # the max in the range (time.now)
|
21
21
|
velocitator.graph_options[:min_value].should == 0
|
@@ -60,7 +60,7 @@ describe SingleVelocitator do
|
|
60
60
|
|
61
61
|
it "holds the totals of the gem" do
|
62
62
|
velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
|
63
|
-
velocitator.totals_map_by_version["0.0.17"][:version_downloads].should eq
|
63
|
+
velocitator.totals_map_by_version["0.0.17"][:version_downloads].should eq 386
|
64
64
|
#binding.pry
|
65
65
|
end
|
66
66
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gem_velocity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 11
|
10
|
+
version: 0.0.11
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Shai Rosenfeld
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-10-
|
18
|
+
date: 2013-10-30 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: gruff
|
@@ -60,9 +60,25 @@ dependencies:
|
|
60
60
|
type: :runtime
|
61
61
|
version_requirements: *id003
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: trollop
|
64
64
|
prerelease: false
|
65
65
|
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - "="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 83
|
71
|
+
segments:
|
72
|
+
- 1
|
73
|
+
- 16
|
74
|
+
- 2
|
75
|
+
version: 1.16.2
|
76
|
+
type: :runtime
|
77
|
+
version_requirements: *id004
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: bundler
|
80
|
+
prerelease: false
|
81
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
66
82
|
none: false
|
67
83
|
requirements:
|
68
84
|
- - ~>
|
@@ -73,11 +89,11 @@ dependencies:
|
|
73
89
|
- 3
|
74
90
|
version: "1.3"
|
75
91
|
type: :development
|
76
|
-
version_requirements: *
|
92
|
+
version_requirements: *id005
|
77
93
|
- !ruby/object:Gem::Dependency
|
78
94
|
name: rake
|
79
95
|
prerelease: false
|
80
|
-
requirement: &
|
96
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
81
97
|
none: false
|
82
98
|
requirements:
|
83
99
|
- - ">="
|
@@ -87,11 +103,11 @@ dependencies:
|
|
87
103
|
- 0
|
88
104
|
version: "0"
|
89
105
|
type: :development
|
90
|
-
version_requirements: *
|
106
|
+
version_requirements: *id006
|
91
107
|
- !ruby/object:Gem::Dependency
|
92
108
|
name: rspec
|
93
109
|
prerelease: false
|
94
|
-
requirement: &
|
110
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
95
111
|
none: false
|
96
112
|
requirements:
|
97
113
|
- - ">="
|
@@ -101,11 +117,11 @@ dependencies:
|
|
101
117
|
- 0
|
102
118
|
version: "0"
|
103
119
|
type: :development
|
104
|
-
version_requirements: *
|
120
|
+
version_requirements: *id007
|
105
121
|
- !ruby/object:Gem::Dependency
|
106
122
|
name: pry
|
107
123
|
prerelease: false
|
108
|
-
requirement: &
|
124
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
109
125
|
none: false
|
110
126
|
requirements:
|
111
127
|
- - ">="
|
@@ -115,11 +131,11 @@ dependencies:
|
|
115
131
|
- 0
|
116
132
|
version: "0"
|
117
133
|
type: :development
|
118
|
-
version_requirements: *
|
134
|
+
version_requirements: *id008
|
119
135
|
- !ruby/object:Gem::Dependency
|
120
136
|
name: vcr
|
121
137
|
prerelease: false
|
122
|
-
requirement: &
|
138
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
123
139
|
none: false
|
124
140
|
requirements:
|
125
141
|
- - ">="
|
@@ -129,11 +145,11 @@ dependencies:
|
|
129
145
|
- 0
|
130
146
|
version: "0"
|
131
147
|
type: :development
|
132
|
-
version_requirements: *
|
148
|
+
version_requirements: *id009
|
133
149
|
- !ruby/object:Gem::Dependency
|
134
150
|
name: webmock
|
135
151
|
prerelease: false
|
136
|
-
requirement: &
|
152
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
137
153
|
none: false
|
138
154
|
requirements:
|
139
155
|
- - "="
|
@@ -144,11 +160,11 @@ dependencies:
|
|
144
160
|
- 13
|
145
161
|
version: "1.13"
|
146
162
|
type: :development
|
147
|
-
version_requirements: *
|
163
|
+
version_requirements: *id010
|
148
164
|
- !ruby/object:Gem::Dependency
|
149
165
|
name: timecop
|
150
166
|
prerelease: false
|
151
|
-
requirement: &
|
167
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
152
168
|
none: false
|
153
169
|
requirements:
|
154
170
|
- - ">="
|
@@ -158,11 +174,11 @@ dependencies:
|
|
158
174
|
- 0
|
159
175
|
version: "0"
|
160
176
|
type: :development
|
161
|
-
version_requirements: *
|
177
|
+
version_requirements: *id011
|
162
178
|
- !ruby/object:Gem::Dependency
|
163
179
|
name: sourcify
|
164
180
|
prerelease: false
|
165
|
-
requirement: &
|
181
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
166
182
|
none: false
|
167
183
|
requirements:
|
168
184
|
- - ">="
|
@@ -172,11 +188,11 @@ dependencies:
|
|
172
188
|
- 0
|
173
189
|
version: "0"
|
174
190
|
type: :development
|
175
|
-
version_requirements: *
|
191
|
+
version_requirements: *id012
|
176
192
|
- !ruby/object:Gem::Dependency
|
177
193
|
name: ParseTree
|
178
194
|
prerelease: false
|
179
|
-
requirement: &
|
195
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
180
196
|
none: false
|
181
197
|
requirements:
|
182
198
|
- - ">="
|
@@ -186,12 +202,26 @@ dependencies:
|
|
186
202
|
- 0
|
187
203
|
version: "0"
|
188
204
|
type: :development
|
189
|
-
version_requirements: *
|
205
|
+
version_requirements: *id013
|
206
|
+
- !ruby/object:Gem::Dependency
|
207
|
+
name: perftools.rb
|
208
|
+
prerelease: false
|
209
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
210
|
+
none: false
|
211
|
+
requirements:
|
212
|
+
- - ">="
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
hash: 3
|
215
|
+
segments:
|
216
|
+
- 0
|
217
|
+
version: "0"
|
218
|
+
type: :development
|
219
|
+
version_requirements: *id014
|
190
220
|
description: generate gem velocity images
|
191
221
|
email:
|
192
222
|
- srosenfeld@engineyard.com
|
193
|
-
executables:
|
194
|
-
|
223
|
+
executables:
|
224
|
+
- gem_velocity
|
195
225
|
extensions: []
|
196
226
|
|
197
227
|
extra_rdoc_files: []
|
@@ -203,6 +233,8 @@ files:
|
|
203
233
|
- README.md
|
204
234
|
- Rakefile
|
205
235
|
- TODO
|
236
|
+
- benchmark/bench.rb
|
237
|
+
- bin/gem_velocity
|
206
238
|
- examples/README.md
|
207
239
|
- examples/generate_images.rb
|
208
240
|
- examples/public/images/AggregatedVelocitator-haml-i18n-extractor-0.4.x.png
|