gem_velocity 0.0.10 → 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
- 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
|