gem_velocity 0.0.4 → 0.0.5

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 CHANGED
@@ -16,3 +16,14 @@ I want to be able to have a line be one version, or a few versions in one, mix t
16
16
  line_datas needs to be abstracted away. actually the versions concepts should be eliminated??
17
17
  so I need to have something abstract a version but it could be a few of them...
18
18
  move all the logic of changing version -> line_data into something and have that able to handle 1 or n.
19
+
20
+ the only thing that it implmeents is .graph() which returns the line_data result/info whatever.
21
+ then there's something in the middle that takes that and calls out to gruff builder.
22
+
23
+
24
+ all derived classes need to pass back to base class, so we can pass on to builder:
25
+
26
+ line_data => title,version(s)
27
+ n times whatever.
28
+
29
+ Add a Version?
@@ -0,0 +1,3 @@
1
+ require "gem_velocity/velocitators/base_velocitator"
2
+ require "gem_velocity/velocitators/single_velocitator"
3
+ require "gem_velocity/velocitators/multiple_velocitator"
@@ -0,0 +1,113 @@
1
+ begin
2
+ require 'active_support/all'
3
+ rescue
4
+ 'you need activesupport. please install'
5
+ end
6
+
7
+ class BaseVelocitator
8
+
9
+ include ::Helpers
10
+
11
+ attr_accessor :gem_name, :versions
12
+
13
+ def graph(root_arg = nil, range = nil, min = nil, max = nil)
14
+ set_overwritable_attrs(root_arg,range,min,max)
15
+ gruff_builder.write
16
+ end
17
+
18
+ # modifiers on the end result image being rendered.
19
+ attr_reader :date_range, :max_value, :min_value, :root
20
+ def date_range=(args); @date_range = args && args.map{|t| time_format_str(t) } ;end
21
+ def max_value=(max); @max_value = max ;end
22
+ def min_value=(min); @min_value = min ;end
23
+ def root=(path); @root = path ;end
24
+
25
+ def effective_date_range
26
+ @date_range || [ default_start, default_end ]
27
+ end
28
+
29
+ private
30
+
31
+ def initialize(gem_name, versions)
32
+ @gem_name = gem_name || raise(ArgumentError, 'need a name')
33
+ @versions = versions || raise(ArgumentError, 'required versions')
34
+ validate_correct_gem
35
+ validate_correct_versions
36
+ end
37
+
38
+ def validate_correct_versions
39
+ versions.each do |v|
40
+ gem_data.versions.include?(v) || raise(NoSuchVersion,"version not found for #{versions}.")
41
+ end
42
+ end
43
+
44
+ def validate_correct_gem
45
+ # this will bomb out if bad version is passed.
46
+ gem_data.versions_metadata
47
+ end
48
+
49
+ # if it's nil, the defaults will be used
50
+ # basically these are the graph boundries
51
+ def set_overwritable_attrs(root_arg,range,min,max)
52
+ self.date_range = range
53
+ self.root = root_arg
54
+ self.max_value = max
55
+ self.min_value = min
56
+ end
57
+
58
+ def default_end
59
+ default_end = time_format_str(Time.now)
60
+ end
61
+
62
+ def default_min_value
63
+ 0
64
+ end
65
+
66
+ def default_line_datas
67
+ # refactor me?
68
+ versions.map do |v|
69
+ specific_days_in_range.map do |day_in_range|
70
+ day_in_range = time_format_str_small(day_in_range) #conform to rubygems api format
71
+ if gem_data.downloads_day(v).map {|day,total| day}.include?(day_in_range)
72
+ # get the total for that day
73
+ total = Hash[gem_data.downloads_day(v)][day_in_range]
74
+ else
75
+ 0
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ # a little sugar
82
+ def effective_start_time; effective_date_range.first ;end
83
+ def effective_end_time; effective_date_range.last ;end
84
+
85
+ # helper method to convert [start,end] into a
86
+ # start..end range of day instances
87
+ def specific_days_in_range
88
+ all_days = []
89
+ s = Date.parse(effective_start_time)
90
+ e = Date.parse(effective_end_time)
91
+ i = s
92
+ while (i <= e )
93
+ all_days << i
94
+ i += 1.day
95
+ end
96
+ all_days
97
+ end
98
+
99
+ def gem_data
100
+ # need this memoized so the gem_data memoization works for the same instance
101
+ @gem_data ||= GemData.new(@gem_name)
102
+ end
103
+
104
+ def gruff_builder
105
+ GruffBuilder.new(@root || Dir.pwd,nil,versions,gem_name,graph_options)
106
+ end
107
+
108
+ # it's just shorter syntax
109
+ def time_built(version)
110
+ gem_data.versions_built_at[version]
111
+ end
112
+
113
+ end
@@ -0,0 +1,39 @@
1
+ class MultipleVelocitator < BaseVelocitator
2
+
3
+ def initialize(gem_name, versions)
4
+ super(gem_name, versions)
5
+ end
6
+
7
+ def default_start
8
+ earliest_start = versions.map{|v| Date.parse(time_built(v)) }.min
9
+ default_start = time_format_str(earliest_start)
10
+ end
11
+
12
+ def default_max_value
13
+ totals = []
14
+ versions.each {|v|
15
+ totals << gem_data.downloads_day(v).map {|day,total| total}
16
+ }
17
+ totals.flatten.compact.max
18
+ end
19
+
20
+ def graph_options
21
+ opts = {
22
+ :title => title,
23
+ :labels => ({1 => time_format_str_small(effective_start_time), (line_datas.first.size-2) => time_format_str_small(effective_end_time) }),
24
+ :max_value => max_value || default_max_value,
25
+ :min_value => min_value || default_min_value,
26
+ :line_datas => line_datas
27
+ }
28
+ end
29
+
30
+ def line_datas
31
+ default_line_datas
32
+ end
33
+
34
+ def title
35
+ "MutlipleVelocitator:#{gem_name}"
36
+ end
37
+
38
+
39
+ end
@@ -0,0 +1,34 @@
1
+ class SingleVelocitator < BaseVelocitator
2
+
3
+ def initialize(gem_name, version)
4
+ @version = version
5
+ super(gem_name, [version])
6
+ end
7
+
8
+ def default_start
9
+ time_format_str(Date.parse(time_built(@version)))
10
+ end
11
+
12
+ def default_max_value
13
+ gem_data.downloads_day(@version).map {|day,total| total}.max
14
+ end
15
+
16
+ def graph_options
17
+ opts = {
18
+ :title => title,
19
+ :labels => ({1 => time_format_str_small(effective_start_time), (line_datas.first.size-2) => time_format_str_small(effective_end_time) }),
20
+ :max_value => max_value || default_max_value,
21
+ :min_value => min_value || default_min_value,
22
+ :line_datas => line_datas
23
+ }
24
+ end
25
+
26
+ def line_datas
27
+ default_line_datas
28
+ end
29
+
30
+ def title
31
+ "SingleVelocitator:#{gem_name}"
32
+ end
33
+
34
+ end
@@ -1,3 +1,3 @@
1
1
  module GemVelocity
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/gem_velocity.rb CHANGED
@@ -2,7 +2,7 @@ require "gem_velocity/version"
2
2
  require "gem_velocity/helpers"
3
3
  require "gem_velocity/gem_data"
4
4
  require "gem_velocity/gruff_builder"
5
- require "gem_velocity/velocitator"
5
+ require "gem_velocity/velocitators/all"
6
6
  require "gem_velocity/errors"
7
7
 
8
8
  require 'active_support/all'
@@ -30,7 +30,7 @@ describe GruffBuilder do
30
30
 
31
31
  it "can not write a file if there is no line data" do
32
32
  builder = GruffBuilder.new(@tmp_dir,nil,["0.0.17"],"foo-baz", {})
33
- lambda { builder.write }.should raise_error GruffBuilder::NoData
33
+ lambda { builder.write }.should raise_error NoData
34
34
  end
35
35
 
36
36
  it "can write out a file" do
@@ -1,124 +1,119 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Velocitator do
3
+ describe SingleVelocitator do
4
4
 
5
5
  it 'raises if you dont pass name and version(s)' do
6
- lambda { Velocitator.new(nil,nil) }.should raise_error ArgumentError
6
+ lambda { SingleVelocitator.new(nil,nil) }.should raise_error ArgumentError
7
7
  end
8
8
 
9
9
  it 'raises if the gem is not found' do
10
- lambda { Velocitator.new("NOSICHGEMPlZ123","0.1") }.should raise_error NoSuchGem
10
+ lambda { SingleVelocitator.new("NOSICHGEMPlZ123","0.1") }.should raise_error NoSuchGem
11
11
  end
12
12
 
13
13
  it 'raises if the version is not found' do
14
- # cause the .pre matters!!1
15
- lambda { Velocitator.new("haml-i18n-extractor","100.999.42.666.pre") }.should raise_error NoSuchVersion
16
- end
17
-
18
- describe "a specific version" do
19
-
20
- it "sets a specific date range according to the gem's info" do
21
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
22
- velocitator.effective_date_range.should eq ["2013-06-16T00:00:00Z", "2013-09-20T00:00:00Z"]
23
- end
24
-
25
- it "can override the default time ranges if its in the range" do
26
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
27
- velocitator.date_range = [1.day.ago, Time.now]
28
- velocitator.effective_date_range.should eq ["2013-09-19T00:00:00Z", "2013-09-20T00:00:00Z"]
29
- velocitator.line_datas.size.should eq (velocitator.versions.size)
30
- end
31
-
32
- it "can set a max and min" do
33
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
34
- lambda {
35
- velocitator.max_value = 500
36
- velocitator.min_value = 10
37
- }.should_not raise_error
38
- end
39
-
40
- it "can render a graph" do
41
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
42
- velocitator.date_range = [1.day.ago, Time.now]
43
- velocitator.root = SpecHelper.tmpdir
44
- builder = velocitator.gruff_builder
45
-
46
- # FIXME
47
- # also, pending on issue relating to
48
- # https://github.com/shaiguitar/rubygems.org/compare/api_not_returning_all_results_over_90_days?expand=1
49
- builder.line_datas.should == [[343, 344]]
50
- builder.title.should == "haml-i18n-extractor-0.0.17"
51
- builder.labels.should == ({1=>"2013-09-19", (builder.line_datas.first.size-2) =>"2013-09-20"})
52
- builder.max_value.should == 344
53
- builder.min_value.should == 0
54
-
55
- file = builder.write
56
- File.exist?(file).should be_true
57
- #`open #{file} -a preview.app`
58
- #Kernel.sleep(10)
59
- end
60
-
61
- it "has a shortcut graph method #1" do
62
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
63
- file = velocitator.graph(SpecHelper.tmpdir,[1.day.ago, Time.now])
64
- File.exist?(file).should be_true
65
- end
66
-
67
- it "has a shortcut graph method #2" do
68
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
69
- file = velocitator.graph
70
- File.exist?(file).should be_true
71
- end
72
-
73
- it "has a shortcut graph metho #3" do
74
- velocitator = Velocitator.new("haml-i18n-extractor", "0.0.17")
75
- file = velocitator.graph(nil,nil,0,1000)
76
- File.exist?(file).should be_true
77
- end
78
-
79
- end
80
-
81
- describe "Multiple versions" do
82
- before do
83
- @some_versions = ["0.0.17", "0.0.5","0.0.10"]
84
- end
85
-
86
- it "can initialize multiple versions" do
87
- velocitator = Velocitator.new("haml-i18n-extractor", @some_versions)
88
- velocitator.versions.should == @some_versions
89
- end
90
-
91
- it "sets the earliest start range from to all of the versions info" do
92
- # some_versions.map{|v| GemData.new("haml-i18n-extractor").versions_built_at[v]}
93
- # => ["2013-06-16T00:00:00Z", "2013-03-22T00:00:00Z", "2013-05-06T00:00:00Z"]
94
- velocitator = Velocitator.new("haml-i18n-extractor", @some_versions)
95
- velocitator.effective_date_range.should eq ["2013-03-22T00:00:00Z", "2013-09-20T00:00:00Z"]
96
- end
97
-
98
- it "sets the max value to the max of all of versions" do
99
- velocitator = Velocitator.new("haml-i18n-extractor", @some_versions)
100
- velocitator.default_max_value.should eq 344
101
- end
102
-
103
- it "sets the max value to the max of all of versions" do
104
- velocitator = Velocitator.new("haml-i18n-extractor", @some_versions)
105
- velocitator.default_max_value.should eq 344
106
- end
107
-
108
- it "should set the line data to an array of versions.size with equal length which should be the max value of any one of them" do
109
- velocitator = Velocitator.new("haml-i18n-extractor", @some_versions)
110
- velocitator.line_datas.size.should == @some_versions.size
111
- # all of them should be the same size, padded with 0's if there is no download info
112
- velocitator.line_datas.map{|d| d.size }.uniq.size.should == 1
113
- end
114
-
115
- it "has a shortcut graph method" do
116
- velocitator = Velocitator.new("haml-i18n-extractor", @some_versions)
117
- file = velocitator.graph
118
- File.exist?(file).should be_true
119
- end
14
+ lambda { SingleVelocitator.new("haml-i18n-extractor","100.999.42.666.pre") }.should raise_error NoSuchVersion
120
15
  end
121
16
 
17
+ it "sets a specific date range according to the gem's info" do
18
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
19
+ velocitator.effective_date_range.should eq ["2013-06-16T00:00:00Z", "2013-09-20T00:00:00Z"]
20
+ end
21
+
22
+ it "can override the default time ranges if its in the range" do
23
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
24
+ velocitator.date_range = [1.day.ago, Time.now]
25
+ velocitator.effective_date_range.should eq ["2013-09-19T00:00:00Z", "2013-09-20T00:00:00Z"]
26
+ end
27
+
28
+ it "can override a max and min" do
29
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
30
+ lambda {
31
+ velocitator.max_value = 500
32
+ velocitator.min_value = 10
33
+ }.should_not raise_error
34
+ end
35
+
36
+ it "has line datas" do
37
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
38
+ velocitator.line_datas.size.should eq (velocitator.versions.size)
39
+ end
122
40
 
41
+ it "can render a graph" do
42
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
43
+ velocitator.date_range = [1.day.ago, Time.now]
44
+ velocitator.root = SpecHelper.tmpdir
45
+ # FIX spec don't call out to gruff_builder, check the specific attrs in graph_options or such.
46
+ builder = velocitator.gruff_builder
47
+ # https://github.com/shaiguitar/rubygems.org/compare/api_not_returning_all_results_over_90_days?expand=1
48
+ builder.line_datas.should == [[343, 344]]
49
+ builder.title.should == "haml-i18n-extractor-0.0.17"
50
+ builder.labels.should == ({1=>"2013-09-19", (builder.line_datas.first.size-2) =>"2013-09-20"})
51
+ builder.max_value.should == 344
52
+ builder.min_value.should == 0
53
+
54
+ file = builder.write
55
+ File.exist?(file).should be_true
56
+ #`open #{file} -a preview.app`
57
+ #Kernel.sleep(10)
58
+ end
59
+
60
+ it "has a shortcut graph method #1" do
61
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
62
+ file = velocitator.graph(SpecHelper.tmpdir,[1.day.ago, Time.now])
63
+ File.exist?(file).should be_true
64
+ end
65
+
66
+ it "has a shortcut graph method #2" do
67
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
68
+ file = velocitator.graph
69
+ File.exist?(file).should be_true
70
+ end
71
+
72
+ it "has a shortcut graph metho #3" do
73
+ velocitator = SingleVelocitator.new("haml-i18n-extractor", "0.0.17")
74
+ file = velocitator.graph(nil,nil,0,1000)
75
+ File.exist?(file).should be_true
76
+ end
77
+ end
78
+
79
+ describe MultipleVelocitator do
80
+ before do
81
+ @some_versions = ["0.0.17", "0.0.5","0.0.10"]
82
+ end
83
+
84
+ it "can initialize multiple versions" do
85
+ velocitator = MultipleVelocitator.new("haml-i18n-extractor", @some_versions)
86
+ velocitator.versions.should == @some_versions
87
+ end
88
+
89
+ it "sets the earliest start range from to all of the versions info" do
90
+ # some_versions.map{|v| GemData.new("haml-i18n-extractor").versions_built_at[v]}
91
+ # => ["2013-06-16T00:00:00Z", "2013-03-22T00:00:00Z", "2013-05-06T00:00:00Z"]
92
+ velocitator = MultipleVelocitator.new("haml-i18n-extractor", @some_versions)
93
+ velocitator.effective_date_range.should eq ["2013-03-22T00:00:00Z", "2013-09-20T00:00:00Z"]
94
+ end
95
+
96
+ it "sets the max value to the max of all of versions" do
97
+ velocitator = MultipleVelocitator.new("haml-i18n-extractor", @some_versions)
98
+ velocitator.default_max_value.should eq 344
99
+ end
100
+
101
+ it "sets the max value to the max of all of versions" do
102
+ velocitator = MultipleVelocitator.new("haml-i18n-extractor", @some_versions)
103
+ velocitator.default_max_value.should eq 344
104
+ end
105
+
106
+ it "should set the line data to an array of versions.size with equal length which should be the max value of any one of them" do
107
+ velocitator = MultipleVelocitator.new("haml-i18n-extractor", @some_versions)
108
+ velocitator.line_datas.size.should == @some_versions.size
109
+ # all of them should be the same size, padded with 0's if there is no download info
110
+ velocitator.line_datas.map{|d| d.size }.uniq.size.should == 1
111
+ end
112
+
113
+ it "has a shortcut graph method" do
114
+ velocitator = MultipleVelocitator.new("haml-i18n-extractor", @some_versions)
115
+ file = velocitator.graph
116
+ File.exist?(file).should be_true
117
+ end
123
118
  end
124
119
 
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: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
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-11 00:00:00 Z
18
+ date: 2013-10-12 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: gruff
@@ -211,7 +211,10 @@ files:
211
211
  - lib/gem_velocity/gem_data.rb
212
212
  - lib/gem_velocity/gruff_builder.rb
213
213
  - lib/gem_velocity/helpers.rb
214
- - lib/gem_velocity/velocitator.rb
214
+ - lib/gem_velocity/velocitators/all.rb
215
+ - lib/gem_velocity/velocitators/base_velocitator.rb
216
+ - lib/gem_velocity/velocitators/multiple_velocitator.rb
217
+ - lib/gem_velocity/velocitators/single_velocitator.rb
215
218
  - lib/gem_velocity/version.rb
216
219
  - spec/gem_data_spec.rb
217
220
  - spec/gruff_builder_spec.rb
@@ -1,154 +0,0 @@
1
- begin
2
- require 'active_support/all'
3
- rescue
4
- 'you need activesupport. please install'
5
- end
6
-
7
- class Velocitator
8
-
9
- include ::Helpers
10
-
11
- attr_accessor :gem_name, :versions
12
-
13
- # modifiers on the end result image being rendered.
14
- attr_accessor :date_range, :max_value, :min_value, :root
15
-
16
- def initialize(gem_name, versions)
17
- @gem_name = gem_name || raise(ArgumentError, 'need a name')
18
- @versions = if versions.is_a?(String)
19
- [versions]
20
- else
21
- versions
22
- end || raise(ArgumentError, 'required versions')
23
- validate_correct_gem
24
- validate_correct_versions
25
- end
26
-
27
- def date_range=(args)
28
- return nil if args.nil?
29
- unless args.is_a?(Array) && args.size == 2
30
- raise(ArgumentError, "must pass a range with time objects like [start,end]")
31
- end
32
- @date_range = args.map{|t| time_format_str(t) }
33
- end
34
-
35
- def effective_date_range
36
- # we allow overwriting by passing a date range.
37
- if @date_range.is_a?(Array) && @date_range.compact.size==2
38
- @date_range
39
- else
40
- default_date_range
41
- end
42
- end
43
-
44
- def title
45
- "#{gem_name}-#{versions.join("-")}"
46
- end
47
-
48
- def line_datas
49
- versions.map do |v|
50
- specific_days_in_range.map do |day_in_range|
51
- day_in_range = time_format_str_small(day_in_range) #conform to rubygems api format
52
- if gem_data.downloads_day(v).map {|day,total| day}.include?(day_in_range)
53
- total = Hash[gem_data.downloads_day(v)][day_in_range]
54
- else
55
- 0
56
- end
57
- end
58
- end
59
- end
60
-
61
- # after you set all the attributes you want.
62
- # you can set (or there will be fallback defaults)
63
- # max, min
64
- # date_range (leave nil for default values in either start or end)
65
- def gruff_builder
66
- opts = {
67
- :title => title,
68
- # just the first and last dates. give a small offset so it fits into the pciture.
69
- # line_datas.first.size -2 should be the max of any one of the line-datas, all should be same size.
70
- :labels => ({1 => time_format_str_small(effective_start_time), (line_datas.first.size-2) => time_format_str_small(effective_end_time) }),
71
- :max_value => max_value || default_max_value,
72
- :min_value => min_value || default_min_value,
73
- :line_datas => line_datas
74
- }
75
- builder = GruffBuilder.new(@root || Dir.pwd,nil,versions,gem_name,opts)
76
- builder
77
- end
78
-
79
- def graph(root_arg = nil, range = nil, min = nil, max = nil)
80
- # if nil, defaults will be used
81
- self.date_range = range
82
- self.root = root_arg
83
- self.max_value = max
84
- self.min_value = min
85
- gruff_builder.write
86
- end
87
-
88
- def specific_days_in_range
89
- all_days = []
90
- s = Date.parse(effective_start_time)
91
- e = Date.parse(effective_end_time)
92
- i = s
93
- while (i <= e )
94
- all_days << i
95
- i += 1.day
96
- end
97
- all_days
98
- end
99
-
100
- def default_min_value
101
- 0
102
- end
103
-
104
- def default_max_value
105
- totals = []
106
- versions.each {|v|
107
- totals << gem_data.downloads_day(v).map {|day,total| total}
108
- }
109
- totals.flatten.compact.max
110
- end
111
-
112
- private
113
-
114
- def effective_start_time
115
- effective_date_range.first
116
- end
117
-
118
- def effective_end_time
119
- effective_date_range.last
120
- end
121
-
122
- def default_date_range
123
- range = default_start, default_end
124
- end
125
-
126
- def default_start
127
- earliest_start = versions.map{|v| Date.parse(time_built(v)) }.min
128
- default_start = time_format_str(earliest_start)
129
- end
130
-
131
- def default_end
132
- default_end = time_format_str(Time.now)
133
- end
134
-
135
- def time_built(version)
136
- gem_data.versions_built_at[version]
137
- end
138
-
139
- def gem_data
140
- @gem_data ||= GemData.new(@gem_name)
141
- end
142
-
143
- def validate_correct_versions
144
- versions.each do |v|
145
- gem_data.versions.include?(v) || raise(NoSuchVersion,"version not found for #{versions}.")
146
- end
147
- end
148
-
149
- def validate_correct_gem
150
- # this will bomb out if bad version is passed.
151
- gem_data.versions_metadata
152
- end
153
-
154
- end