metric_fu 2.1.3.5 → 2.1.3.6
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/Gemfile +6 -2
- data/HISTORY.md +9 -0
- data/README.md +5 -0
- data/Rakefile +1 -6
- data/TODO.md +42 -0
- data/bin/metric_fu +1 -3
- data/lib/configuration.rb +1 -1
- data/lib/data_structures/line_numbers.rb +1 -1
- data/lib/load_files.rb +5 -6
- data/lib/metrics/base_template.rb +1 -1
- data/lib/{data_structures → metrics/hotspots/analysis}/code_issue.rb +3 -2
- data/lib/{data_structures → metrics/hotspots/analysis}/grouping.rb +1 -1
- data/lib/{data_structures → metrics/hotspots/analysis}/ranking.rb +0 -0
- data/lib/{data_structures → metrics/hotspots/analysis}/record.rb +0 -0
- data/lib/{scoring_strategies.rb → metrics/hotspots/analysis/scoring_strategies.rb} +0 -0
- data/lib/{data_structures → metrics/hotspots/analysis}/table.rb +1 -1
- data/lib/metrics/{hotspot_analyzer.rb → hotspots/hotspot_analyzer.rb} +7 -2
- data/lib/metrics/hotspots/hotspots.rb +1 -0
- data/lib/metrics/rails_best_practices/rails_best_practices.rb +2 -2
- data/lib/metrics/roodi/roodi.rb +1 -1
- data/lib/run.rb +54 -0
- data/lib/tasks/metric_fu.rake +1 -30
- data/lib/version.rb +1 -1
- data/metric_fu.gemspec +6 -10
- data/spec/base/base_template_spec.rb +1 -1
- data/spec/generators/rails_best_practices_spec.rb +1 -1
- metadata +124 -219
- data/TODO +0 -9
- data/lib/md5_tracker.rb +0 -52
- data/spec/base/md5_tracker_spec.rb +0 -57
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== MetricFu 2.1.3.6 / 2013-01-02
|
2
|
+
|
3
|
+
* Fixed bug that wasn't show stats or rails_best_practices graphs
|
4
|
+
* Updated churn and rails_best_practices gems
|
5
|
+
* Move the metrics code in the rake task into its own file
|
6
|
+
* Remove executable metric_fu dependency on rake
|
7
|
+
* TODO: some unclear dependency issues may make metrics in 1.9 crash, esp Flog, Flay, Stats
|
8
|
+
|
9
|
+
|
1
10
|
=== MetricFu 2.1.3.5 / 2013-01-01
|
2
11
|
|
3
12
|
* Issue #35, Namespace MetricFu::Table. -Benjamin Fleischer
|
data/README.md
CHANGED
@@ -26,6 +26,11 @@ __Code Quality__
|
|
26
26
|
|
27
27
|
This project runs [https://codeclimate.com/](https://codeclimate.com/)
|
28
28
|
|
29
|
+
__Gem Dependencies__
|
30
|
+
|
31
|
+
[](https://gemnasium.com/metricfu/metric_fu)
|
32
|
+
|
33
|
+
This project runs [https://gemnasium.com/metricfu](https://gemnasium.com/metricfu)
|
29
34
|
|
30
35
|
===============================================================================
|
31
36
|
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
|
+
require 'bundler/setup'
|
2
3
|
require 'bundler/gem_tasks'
|
3
4
|
# $LOAD_PATH << '.'
|
4
5
|
begin
|
@@ -15,10 +16,4 @@ end
|
|
15
16
|
|
16
17
|
require File.expand_path File.join(File.dirname(__FILE__),'lib/metric_fu')
|
17
18
|
|
18
|
-
MetricFu::Configuration.run do |config|
|
19
|
-
config.roodi = config.roodi.merge(:roodi_config => 'config/roodi_config.yml')
|
20
|
-
config.churn = { :start_date => "1 year ago", :minimum_churn_count => 10}
|
21
|
-
config.hotspots = { :start_date => "1 year ago", :minimum_churn_count => 10}
|
22
|
-
end
|
23
|
-
|
24
19
|
task :default => :spec
|
data/TODO.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# TODO list
|
2
|
+
|
3
|
+
|
4
|
+
## Features
|
5
|
+
|
6
|
+
* Look into removing rcov and churn, and adding
|
7
|
+
* https://github.com/metricfu/code_statistics
|
8
|
+
* brakeman https://github.com/metricfu/brakeman
|
9
|
+
* cane https://github.com/square/cane
|
10
|
+
* laser https://github.com/metricfu/laser
|
11
|
+
* Add configurable logger to all output streams
|
12
|
+
* Color code flog results with scale from: http://jakescruggs.blogspot.com/2008/08/whats-good-flog-score.html
|
13
|
+
* Make running metric_fu on metric_fu less embarrassing
|
14
|
+
* Load all gems at config time so you fail fast if one is missing
|
15
|
+
|
16
|
+
## Testing
|
17
|
+
|
18
|
+
* Determine how to test metric_fu against codebases that are not metric_fu, to ensure it works on most applications
|
19
|
+
* Re-organize test files structure to align with changed structure of library files
|
20
|
+
* Remove / Modify Devver code from the generators/hotspots_spec and base/hotspot_analzyer_spec
|
21
|
+
|
22
|
+
## Bugs / Fixes
|
23
|
+
|
24
|
+
* Fix occasional gem install metric_fu failures such as with ripper in Ruby 1.9
|
25
|
+
* Fork roodi and correct the yaml
|
26
|
+
* See https://github.com/metricfu/metric_fu/issues/2 about updating gems
|
27
|
+
|
28
|
+
## Ruby 1.9 compatibility
|
29
|
+
|
30
|
+
* Consider `RUBYOPT='-rpsych'` e.g. from https://github.com/jscruggs/metric_fu/pull/77
|
31
|
+
* Look into using the sexp_processor for ruby parsing in brakeman https://github.com/presidentbeef/brakeman/blob/cdc85962d589fb37e37ed53333bb0b7bd913e028/lib/ruby_parser/bm_sexp_processor.rb
|
32
|
+
|
33
|
+
## Misc
|
34
|
+
|
35
|
+
* Determine if CodeIssue is used, else remove it
|
36
|
+
* Update the homepage http://metric-fu.rubyforge.org/
|
37
|
+
* Other intersting libraries to consider:
|
38
|
+
* https://github.com/vinibaggio/discover-unused-partials
|
39
|
+
* https://github.com/metricfu/heckle
|
40
|
+
* https://github.com/metricfu/gauntlet
|
41
|
+
* https://github.com/metricfu/repodepot-ruby
|
42
|
+
* https://github.com/eladmeidar/rails_indexes
|
data/bin/metric_fu
CHANGED
data/lib/configuration.rb
CHANGED
@@ -138,7 +138,7 @@ module MetricFu
|
|
138
138
|
@reek = { :dirs_to_reek => @code_dirs,
|
139
139
|
:config_file_pattern => nil}
|
140
140
|
@roodi = { :dirs_to_roodi => @code_dirs,
|
141
|
-
:roodi_config => nil}
|
141
|
+
:roodi_config => nil }
|
142
142
|
@saikuro = { :output_directory => "#{@scratch_directory}/saikuro",
|
143
143
|
:input_directory => @code_dirs,
|
144
144
|
:cyclo => "",
|
@@ -22,7 +22,7 @@ module MetricFu
|
|
22
22
|
end
|
23
23
|
rescue Exception => e
|
24
24
|
#catch errors for files ruby_parser fails on
|
25
|
-
puts "RUBY PARSE FAILURE: #{e.class}\t#{e.message}\
|
25
|
+
puts "RUBY PARSE FAILURE: #{e.class}\t#{e.message}\tSEXP:#{file_sexp.inspect}\n\tCONTENT:#{contents.inspect}\n\t#{e.backtrace}"
|
26
26
|
@locations
|
27
27
|
end
|
28
28
|
|
data/lib/load_files.rb
CHANGED
@@ -3,18 +3,17 @@ MetricFu.reporting_require { 'report' }
|
|
3
3
|
MetricFu.metrics_require { 'generator' }
|
4
4
|
MetricFu.metrics_require { 'graph' }
|
5
5
|
MetricFu.reporting_require { 'graphs/grapher' }
|
6
|
-
MetricFu.
|
6
|
+
MetricFu.metrics_require { 'hotspots/analysis/scoring_strategies' }
|
7
7
|
|
8
|
+
# Now load everything else that's in the directory
|
9
|
+
Dir.glob(File.join(MetricFu.lib_dir, '*.rb')).each do |file|
|
10
|
+
require file
|
11
|
+
end
|
8
12
|
# prevent the task from being run multiple times.
|
9
13
|
unless Rake::Task.task_defined? "metrics:all"
|
10
14
|
# Load the rakefile so users of the gem get the default metric_fu task
|
11
15
|
MetricFu.tasks_load 'metric_fu.rake'
|
12
16
|
end
|
13
|
-
|
14
|
-
# Now load everything else that's in the directory
|
15
|
-
Dir.glob(File.join(MetricFu.lib_dir, '*.rb')).each do |file|
|
16
|
-
require file
|
17
|
-
end
|
18
17
|
Dir.glob(File.join(MetricFu.data_structures_dir, '**/*.rb')).each do |file|
|
19
18
|
require file
|
20
19
|
end
|
@@ -50,7 +50,7 @@ module MetricFu
|
|
50
50
|
# @return String
|
51
51
|
# A file path
|
52
52
|
def template(section)
|
53
|
-
if MetricFu
|
53
|
+
if MetricFu.metrics.include?(section) # expects a symbol
|
54
54
|
File.join(template_dir(section.to_s), "#{section}.html.erb")
|
55
55
|
else
|
56
56
|
File.join(template_directory, section.to_s + ".html.erb")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'delegate'
|
2
2
|
|
3
|
-
[ 'hotspot_analyzer',
|
3
|
+
[ 'hotspots/hotspot_analyzer',
|
4
4
|
'flog/flog_hotspot',
|
5
5
|
'saikuro/saikuro_hotspot',
|
6
6
|
'churn/churn_hotspot',
|
@@ -8,9 +8,10 @@ require 'delegate'
|
|
8
8
|
'flay/flay_hotspot'].each do |path|
|
9
9
|
MetricFu.metrics_require { path }
|
10
10
|
end
|
11
|
-
%w(careful_array
|
11
|
+
%w(careful_array).each do |path|
|
12
12
|
MetricFu.data_structures_require { path }
|
13
13
|
end
|
14
|
+
MetricFu.metrics_require { "hotspots/analysis/record" }
|
14
15
|
|
15
16
|
module MetricFu
|
16
17
|
class CodeIssue < DelegateClass(MetricFu::Record) #DelegateClass(Ruport::Data::Record)
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,5 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require File.expand_path('analysis_error', MetricFu.errors_dir)
|
2
|
+
MetricFu.data_structures_require { 'location' }
|
3
|
+
%w(table record grouping ranking).each do |path|
|
4
|
+
MetricFu.metrics_require { "hotspots/analysis/#{path}" }
|
5
|
+
end
|
6
|
+
%w(reek roodi flog churn saikuro flay stats rcov).each do |path|
|
7
|
+
MetricFu.metrics_require { "#{path}/#{path}_hotspot" }
|
3
8
|
end
|
4
9
|
|
5
10
|
module MetricFu
|
data/lib/metrics/roodi/roodi.rb
CHANGED
@@ -5,7 +5,7 @@ module MetricFu
|
|
5
5
|
files_to_analyze = MetricFu.roodi[:dirs_to_roodi].map{|dir| Dir[File.join(dir, "**/*.rb")] }
|
6
6
|
files = remove_excluded_files(files_to_analyze.flatten)
|
7
7
|
config = MetricFu.roodi[:roodi_config] ? "-config=#{MetricFu.roodi[:roodi_config]}" : ""
|
8
|
-
@output = `roodi #{config} #{files.join(" ")}`
|
8
|
+
@output = `metric_fu-roodi #{config} #{files.join(" ")}`
|
9
9
|
end
|
10
10
|
|
11
11
|
def analyze
|
data/lib/run.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
MetricFu::Configuration.run do |config|
|
2
|
+
config.roodi = config.roodi.merge(:roodi_config => "#{MetricFu.root_dir}/config/roodi_config.yml")
|
3
|
+
config.churn = { :start_date => "1 year ago", :minimum_churn_count => 10}
|
4
|
+
config.hotspots = { :start_date => "1 year ago", :minimum_churn_count => 10}
|
5
|
+
end
|
6
|
+
module MetricFu
|
7
|
+
class Run
|
8
|
+
def initialize
|
9
|
+
STDOUT.sync = true
|
10
|
+
MetricFu::Configuration.run {}
|
11
|
+
end
|
12
|
+
def run
|
13
|
+
add_metrics
|
14
|
+
save_reports
|
15
|
+
save_graphs
|
16
|
+
display_results
|
17
|
+
end
|
18
|
+
def add_metrics
|
19
|
+
MetricFu.metrics.each {|metric|
|
20
|
+
mf_debug "** STARTING METRIC #{metric}"
|
21
|
+
MetricFu.report.add(metric)
|
22
|
+
mf_debug "** ENDING METRIC #{metric}"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
def save_reports
|
26
|
+
mf_debug "** SAVING REPORT YAML OUTPUT TO #{MetricFu.base_directory}"
|
27
|
+
MetricFu.report.save_output(MetricFu.report.to_yaml,
|
28
|
+
MetricFu.base_directory,
|
29
|
+
"report.yml")
|
30
|
+
mf_debug "** SAVING REPORT DATA OUTPUT TO #{MetricFu.data_directory}"
|
31
|
+
MetricFu.report.save_output(MetricFu.report.to_yaml,
|
32
|
+
MetricFu.data_directory,
|
33
|
+
"#{Time.now.strftime("%Y%m%d")}.yml")
|
34
|
+
mf_debug "** SAVING TEMPLATIZED REPORT"
|
35
|
+
MetricFu.report.save_templatized_report
|
36
|
+
end
|
37
|
+
def save_graphs
|
38
|
+
mf_debug "** PREPARING TO GRAPH"
|
39
|
+
MetricFu.graphs.each {|graph|
|
40
|
+
mf_debug "** Graphing #{graph} with #{MetricFu.graph_engine}"
|
41
|
+
MetricFu.graph.add(graph, MetricFu.graph_engine)
|
42
|
+
}
|
43
|
+
mf_debug "** GENERATING GRAPH"
|
44
|
+
MetricFu.graph.generate
|
45
|
+
end
|
46
|
+
def display_results
|
47
|
+
if MetricFu.report.open_in_browser?
|
48
|
+
mf_debug "** OPENING IN BROWSER FROM #{MetricFu.output_directory}"
|
49
|
+
MetricFu.report.show_in_browser(MetricFu.output_directory)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
data/lib/tasks/metric_fu.rake
CHANGED
@@ -2,35 +2,6 @@ require 'rake'
|
|
2
2
|
namespace :metrics do
|
3
3
|
desc "Generate all metrics reports"
|
4
4
|
task :all do
|
5
|
-
|
6
|
-
MetricFu::Configuration.run {}
|
7
|
-
MetricFu.metrics.each {|metric|
|
8
|
-
mf_debug "** STARTING METRIC #{metric}"
|
9
|
-
MetricFu.report.add(metric)
|
10
|
-
mf_debug "** ENDING METRIC #{metric}"
|
11
|
-
}
|
12
|
-
mf_debug "** SAVING REPORT YAML OUTPUT TO #{MetricFu.base_directory}"
|
13
|
-
MetricFu.report.save_output(MetricFu.report.to_yaml,
|
14
|
-
MetricFu.base_directory,
|
15
|
-
"report.yml")
|
16
|
-
mf_debug "** SAVING REPORT DATA OUTPUT TO #{MetricFu.data_directory}"
|
17
|
-
MetricFu.report.save_output(MetricFu.report.to_yaml,
|
18
|
-
MetricFu.data_directory,
|
19
|
-
"#{Time.now.strftime("%Y%m%d")}.yml")
|
20
|
-
mf_debug "** SAVING TEMPLATIZED REPORT"
|
21
|
-
MetricFu.report.save_templatized_report
|
22
|
-
|
23
|
-
mf_debug "** PREPARING TO GRAPH"
|
24
|
-
MetricFu.graphs.each {|graph|
|
25
|
-
mf_debug "** Graphing #{graph} with #{MetricFu.graph_engine}"
|
26
|
-
MetricFu.graph.add(graph, MetricFu.graph_engine)
|
27
|
-
}
|
28
|
-
mf_debug "** GENERATING GRAPH"
|
29
|
-
MetricFu.graph.generate
|
30
|
-
|
31
|
-
if MetricFu.report.open_in_browser?
|
32
|
-
mf_debug "** OPENING IN BROWSER FROM #{MetricFu.output_directory}"
|
33
|
-
MetricFu.report.show_in_browser(MetricFu.output_directory)
|
34
|
-
end
|
5
|
+
MetricFu::Run.new.run
|
35
6
|
end
|
36
7
|
end
|
data/lib/version.rb
CHANGED
data/metric_fu.gemspec
CHANGED
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.homepage = "http://github.com/metricfu/metric_fu"
|
11
11
|
s.description = "Code metrics from Flog, Flay, Simplecov-RCov, Saikuro, Churn, Reek, Roodi, Rails' stats task and Rails Best Practices"
|
12
12
|
s.authors = ["Jake Scruggs", "Sean Soper", "Andre Arko", "Petrik de Heus", "Grant McInnes", "Nick Quaranto", "Édouard Brière", "Carl Youngblood", "Richard Huang", "Dan Mayer", "Benjamin Fleischer"]
|
13
|
+
s.rubyforge_project = 'metric_fu'
|
13
14
|
s.required_ruby_version = ">= 1.8.7"
|
14
15
|
s.required_rubygems_version = ">= 1.3.6"
|
15
16
|
s.files = `git ls-files`.split($\)
|
@@ -22,12 +23,11 @@ Gem::Specification.new do |s|
|
|
22
23
|
"flay" => ["= 1.2.1"],
|
23
24
|
"flog" => ["= 2.3.0"],
|
24
25
|
"reek" => ["= 1.2.12"],
|
25
|
-
"roodi"
|
26
|
-
"rails_best_practices" => ["~> 0.
|
27
|
-
"churn" => ["= 0.0.
|
28
|
-
"sexp_processor" => ["~> 3.0.3"], # required because of churn.
|
29
|
-
"
|
30
|
-
"main" => ["= 4.7.1"], # required by churn
|
26
|
+
"metric_fu-roodi" => [">= 2.2.0"],
|
27
|
+
"rails_best_practices" => ["~> 0.10.1"],
|
28
|
+
"churn" => ["= 0.0.25"],
|
29
|
+
"sexp_processor" => ["~> 3.0.3"], # required because of churn, flog, reek 1.2.12, ripper_ruby_parser 0.0.8
|
30
|
+
# "ruby_parser" => ["~> 2.3"], # required because of churn, flog, reek 1.2.12, ripper_ruby_parser 0.0.8
|
31
31
|
"activesupport" => [">= 2.0.0"], # ok
|
32
32
|
# "syntax" => ["= 1.0.0"],
|
33
33
|
"coderay" => [],
|
@@ -57,9 +57,5 @@ Gem::Specification.new do |s|
|
|
57
57
|
end
|
58
58
|
|
59
59
|
|
60
|
-
s.add_development_dependency("rake", '<=0.9.2')
|
61
|
-
s.add_development_dependency("rspec", ["= 1.3.0"])
|
62
|
-
s.add_development_dependency("test-construct", [">= 1.2.0"])
|
63
|
-
s.add_development_dependency("googlecharts")
|
64
60
|
end
|
65
61
|
|
@@ -56,7 +56,7 @@ describe MetricFu::Template do
|
|
56
56
|
describe "#template" do
|
57
57
|
it 'should generate the filename of the template file' do
|
58
58
|
section = mock('section')
|
59
|
-
section.should_receive(:to_s).and_return('section')
|
59
|
+
section.should_receive(:to_s).any_number_of_times.and_return('section')
|
60
60
|
@template.should_receive(:template_directory).and_return('dir')
|
61
61
|
result = @template.send(:template, section)
|
62
62
|
result.should == "dir/section.html.erb"
|
@@ -5,7 +5,7 @@ describe RailsBestPractices do
|
|
5
5
|
it "should gather the raw data" do
|
6
6
|
MetricFu::Configuration.run {}
|
7
7
|
practices = MetricFu::RailsBestPractices.new
|
8
|
-
practices.should_receive(:`).with("rails_best_practices --without-color .")
|
8
|
+
practices.should_receive(:`).with("rails_best_practices _#{MetricFu::RailsBestPractices::VERSION}_ --without-color .")
|
9
9
|
practices.emit
|
10
10
|
end
|
11
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metric_fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 103
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 1
|
9
9
|
- 3
|
10
|
-
-
|
11
|
-
version: 2.1.3.
|
10
|
+
- 6
|
11
|
+
version: 2.1.3.6
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Jake Scruggs
|
@@ -29,117 +29,114 @@ cert_chain: []
|
|
29
29
|
date: 2013-01-02 00:00:00 Z
|
30
30
|
dependencies:
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
|
-
name: bluff
|
33
|
-
prerelease: false
|
34
32
|
requirement: &id001 !ruby/object:Gem::Requirement
|
35
33
|
none: false
|
36
34
|
requirements:
|
37
|
-
- - "
|
35
|
+
- - "="
|
38
36
|
- !ruby/object:Gem::Version
|
39
|
-
hash:
|
37
|
+
hash: 45
|
40
38
|
segments:
|
41
39
|
- 0
|
42
|
-
|
43
|
-
|
40
|
+
- 0
|
41
|
+
- 25
|
42
|
+
version: 0.0.25
|
43
|
+
prerelease: false
|
44
|
+
name: churn
|
44
45
|
version_requirements: *id001
|
46
|
+
type: :runtime
|
45
47
|
- !ruby/object:Gem::Dependency
|
46
|
-
name: map
|
47
|
-
prerelease: false
|
48
48
|
requirement: &id002 !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
hash:
|
53
|
+
hash: 3
|
54
54
|
segments:
|
55
|
-
- 6
|
56
|
-
- 2
|
57
55
|
- 0
|
58
|
-
version:
|
59
|
-
|
56
|
+
version: "0"
|
57
|
+
prerelease: false
|
58
|
+
name: bluff
|
60
59
|
version_requirements: *id002
|
60
|
+
type: :runtime
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name: activesupport
|
63
|
-
prerelease: false
|
64
62
|
requirement: &id003 !ruby/object:Gem::Requirement
|
65
63
|
none: false
|
66
64
|
requirements:
|
67
|
-
- - "
|
65
|
+
- - "="
|
68
66
|
- !ruby/object:Gem::Version
|
69
|
-
hash:
|
67
|
+
hash: 5
|
70
68
|
segments:
|
71
69
|
- 2
|
72
|
-
-
|
73
|
-
-
|
74
|
-
version: 2.
|
75
|
-
|
70
|
+
- 2
|
71
|
+
- 1
|
72
|
+
version: 2.2.1
|
73
|
+
prerelease: false
|
74
|
+
name: fattr
|
76
75
|
version_requirements: *id003
|
76
|
+
type: :runtime
|
77
77
|
- !ruby/object:Gem::Dependency
|
78
|
-
name: main
|
79
|
-
prerelease: false
|
80
78
|
requirement: &id004 !ruby/object:Gem::Requirement
|
81
79
|
none: false
|
82
80
|
requirements:
|
83
81
|
- - "="
|
84
82
|
- !ruby/object:Gem::Version
|
85
|
-
hash:
|
83
|
+
hash: 39
|
86
84
|
segments:
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
version:
|
91
|
-
|
85
|
+
- 6
|
86
|
+
- 2
|
87
|
+
- 0
|
88
|
+
version: 6.2.0
|
89
|
+
prerelease: false
|
90
|
+
name: map
|
92
91
|
version_requirements: *id004
|
92
|
+
type: :runtime
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
|
-
name: churn
|
95
|
-
prerelease: false
|
96
94
|
requirement: &id005 !ruby/object:Gem::Requirement
|
97
95
|
none: false
|
98
96
|
requirements:
|
99
|
-
- - "
|
97
|
+
- - ">="
|
100
98
|
- !ruby/object:Gem::Version
|
101
|
-
hash:
|
99
|
+
hash: 3
|
102
100
|
segments:
|
103
101
|
- 0
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
type: :runtime
|
102
|
+
version: "0"
|
103
|
+
prerelease: false
|
104
|
+
name: googlecharts
|
108
105
|
version_requirements: *id005
|
106
|
+
type: :runtime
|
109
107
|
- !ruby/object:Gem::Dependency
|
110
|
-
name: rails_best_practices
|
111
|
-
prerelease: false
|
112
108
|
requirement: &id006 !ruby/object:Gem::Requirement
|
113
109
|
none: false
|
114
110
|
requirements:
|
115
|
-
- -
|
111
|
+
- - "="
|
116
112
|
- !ruby/object:Gem::Version
|
117
|
-
hash:
|
113
|
+
hash: 43
|
118
114
|
segments:
|
119
|
-
-
|
120
|
-
-
|
121
|
-
|
122
|
-
|
115
|
+
- 4
|
116
|
+
- 7
|
117
|
+
- 4
|
118
|
+
version: 4.7.4
|
119
|
+
prerelease: false
|
120
|
+
name: arrayfields
|
123
121
|
version_requirements: *id006
|
122
|
+
type: :runtime
|
124
123
|
- !ruby/object:Gem::Dependency
|
125
|
-
name: roodi
|
126
|
-
prerelease: false
|
127
124
|
requirement: &id007 !ruby/object:Gem::Requirement
|
128
125
|
none: false
|
129
126
|
requirements:
|
130
127
|
- - "="
|
131
128
|
- !ruby/object:Gem::Version
|
132
|
-
hash:
|
129
|
+
hash: 7
|
133
130
|
segments:
|
134
|
-
- 2
|
135
131
|
- 1
|
136
|
-
-
|
137
|
-
|
138
|
-
|
132
|
+
- 2
|
133
|
+
- 12
|
134
|
+
version: 1.2.12
|
135
|
+
prerelease: false
|
136
|
+
name: reek
|
139
137
|
version_requirements: *id007
|
138
|
+
type: :runtime
|
140
139
|
- !ruby/object:Gem::Dependency
|
141
|
-
name: googlecharts
|
142
|
-
prerelease: false
|
143
140
|
requirement: &id008 !ruby/object:Gem::Requirement
|
144
141
|
none: false
|
145
142
|
requirements:
|
@@ -149,138 +146,108 @@ dependencies:
|
|
149
146
|
segments:
|
150
147
|
- 0
|
151
148
|
version: "0"
|
152
|
-
|
149
|
+
prerelease: false
|
150
|
+
name: coderay
|
153
151
|
version_requirements: *id008
|
152
|
+
type: :runtime
|
154
153
|
- !ruby/object:Gem::Dependency
|
155
|
-
name: chronic
|
156
|
-
prerelease: false
|
157
154
|
requirement: &id009 !ruby/object:Gem::Requirement
|
158
155
|
none: false
|
159
156
|
requirements:
|
160
|
-
- - "
|
157
|
+
- - ">="
|
161
158
|
- !ruby/object:Gem::Version
|
162
|
-
hash:
|
159
|
+
hash: 15
|
163
160
|
segments:
|
164
|
-
- 0
|
165
161
|
- 2
|
166
|
-
-
|
167
|
-
|
168
|
-
|
162
|
+
- 0
|
163
|
+
- 0
|
164
|
+
version: 2.0.0
|
165
|
+
prerelease: false
|
166
|
+
name: activesupport
|
169
167
|
version_requirements: *id009
|
168
|
+
type: :runtime
|
170
169
|
- !ruby/object:Gem::Dependency
|
171
|
-
name: flay
|
172
|
-
prerelease: false
|
173
170
|
requirement: &id010 !ruby/object:Gem::Requirement
|
174
171
|
none: false
|
175
172
|
requirements:
|
176
|
-
- -
|
173
|
+
- - ~>
|
177
174
|
- !ruby/object:Gem::Version
|
178
|
-
hash:
|
175
|
+
hash: 1
|
179
176
|
segments:
|
180
|
-
-
|
181
|
-
-
|
182
|
-
-
|
183
|
-
version:
|
184
|
-
|
177
|
+
- 3
|
178
|
+
- 0
|
179
|
+
- 3
|
180
|
+
version: 3.0.3
|
181
|
+
prerelease: false
|
182
|
+
name: sexp_processor
|
185
183
|
version_requirements: *id010
|
184
|
+
type: :runtime
|
186
185
|
- !ruby/object:Gem::Dependency
|
187
|
-
name: fattr
|
188
|
-
prerelease: false
|
189
186
|
requirement: &id011 !ruby/object:Gem::Requirement
|
190
187
|
none: false
|
191
188
|
requirements:
|
192
|
-
- -
|
189
|
+
- - ~>
|
193
190
|
- !ruby/object:Gem::Version
|
194
|
-
hash:
|
191
|
+
hash: 53
|
195
192
|
segments:
|
196
|
-
-
|
197
|
-
-
|
193
|
+
- 0
|
194
|
+
- 10
|
198
195
|
- 1
|
199
|
-
version:
|
200
|
-
|
196
|
+
version: 0.10.1
|
197
|
+
prerelease: false
|
198
|
+
name: rails_best_practices
|
201
199
|
version_requirements: *id011
|
200
|
+
type: :runtime
|
202
201
|
- !ruby/object:Gem::Dependency
|
203
|
-
name: flog
|
204
|
-
prerelease: false
|
205
202
|
requirement: &id012 !ruby/object:Gem::Requirement
|
206
203
|
none: false
|
207
204
|
requirements:
|
208
|
-
- - "
|
205
|
+
- - ">="
|
209
206
|
- !ruby/object:Gem::Version
|
210
|
-
hash:
|
207
|
+
hash: 7
|
211
208
|
segments:
|
212
209
|
- 2
|
213
|
-
-
|
210
|
+
- 2
|
214
211
|
- 0
|
215
|
-
version: 2.
|
216
|
-
|
212
|
+
version: 2.2.0
|
213
|
+
prerelease: false
|
214
|
+
name: metric_fu-roodi
|
217
215
|
version_requirements: *id012
|
216
|
+
type: :runtime
|
218
217
|
- !ruby/object:Gem::Dependency
|
219
|
-
name: arrayfields
|
220
|
-
prerelease: false
|
221
218
|
requirement: &id013 !ruby/object:Gem::Requirement
|
222
219
|
none: false
|
223
220
|
requirements:
|
224
221
|
- - "="
|
225
|
-
- !ruby/object:Gem::Version
|
226
|
-
hash: 43
|
227
|
-
segments:
|
228
|
-
- 4
|
229
|
-
- 7
|
230
|
-
- 4
|
231
|
-
version: 4.7.4
|
232
|
-
type: :runtime
|
233
|
-
version_requirements: *id013
|
234
|
-
- !ruby/object:Gem::Dependency
|
235
|
-
name: coderay
|
236
|
-
prerelease: false
|
237
|
-
requirement: &id014 !ruby/object:Gem::Requirement
|
238
|
-
none: false
|
239
|
-
requirements:
|
240
|
-
- - ">="
|
241
222
|
- !ruby/object:Gem::Version
|
242
223
|
hash: 3
|
243
224
|
segments:
|
244
|
-
-
|
245
|
-
version: "0"
|
246
|
-
type: :runtime
|
247
|
-
version_requirements: *id014
|
248
|
-
- !ruby/object:Gem::Dependency
|
249
|
-
name: sexp_processor
|
250
|
-
prerelease: false
|
251
|
-
requirement: &id015 !ruby/object:Gem::Requirement
|
252
|
-
none: false
|
253
|
-
requirements:
|
254
|
-
- - ~>
|
255
|
-
- !ruby/object:Gem::Version
|
256
|
-
hash: 1
|
257
|
-
segments:
|
225
|
+
- 2
|
258
226
|
- 3
|
259
227
|
- 0
|
260
|
-
|
261
|
-
|
228
|
+
version: 2.3.0
|
229
|
+
prerelease: false
|
230
|
+
name: flog
|
231
|
+
version_requirements: *id013
|
262
232
|
type: :runtime
|
263
|
-
version_requirements: *id015
|
264
233
|
- !ruby/object:Gem::Dependency
|
265
|
-
|
266
|
-
prerelease: false
|
267
|
-
requirement: &id016 !ruby/object:Gem::Requirement
|
234
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
268
235
|
none: false
|
269
236
|
requirements:
|
270
237
|
- - "="
|
271
238
|
- !ruby/object:Gem::Version
|
272
|
-
hash:
|
239
|
+
hash: 29
|
273
240
|
segments:
|
274
241
|
- 1
|
275
242
|
- 2
|
276
|
-
-
|
277
|
-
version: 1.2.
|
243
|
+
- 1
|
244
|
+
version: 1.2.1
|
245
|
+
prerelease: false
|
246
|
+
name: flay
|
247
|
+
version_requirements: *id014
|
278
248
|
type: :runtime
|
279
|
-
version_requirements: *id016
|
280
249
|
- !ruby/object:Gem::Dependency
|
281
|
-
|
282
|
-
prerelease: false
|
283
|
-
requirement: &id017 !ruby/object:Gem::Requirement
|
250
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
284
251
|
none: false
|
285
252
|
requirements:
|
286
253
|
- - "="
|
@@ -291,12 +258,12 @@ dependencies:
|
|
291
258
|
- 0
|
292
259
|
- 5
|
293
260
|
version: 1.0.5
|
261
|
+
prerelease: false
|
262
|
+
name: ripper
|
263
|
+
version_requirements: *id015
|
294
264
|
type: :runtime
|
295
|
-
version_requirements: *id017
|
296
265
|
- !ruby/object:Gem::Dependency
|
297
|
-
|
298
|
-
prerelease: false
|
299
|
-
requirement: &id018 !ruby/object:Gem::Requirement
|
266
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
300
267
|
none: false
|
301
268
|
requirements:
|
302
269
|
- - ~>
|
@@ -306,12 +273,12 @@ dependencies:
|
|
306
273
|
- 0
|
307
274
|
- 8
|
308
275
|
version: "0.8"
|
276
|
+
prerelease: false
|
277
|
+
name: rcov
|
278
|
+
version_requirements: *id016
|
309
279
|
type: :runtime
|
310
|
-
version_requirements: *id018
|
311
280
|
- !ruby/object:Gem::Dependency
|
312
|
-
|
313
|
-
prerelease: false
|
314
|
-
requirement: &id019 !ruby/object:Gem::Requirement
|
281
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
315
282
|
none: false
|
316
283
|
requirements:
|
317
284
|
- - "="
|
@@ -322,70 +289,10 @@ dependencies:
|
|
322
289
|
- 1
|
323
290
|
- 0
|
324
291
|
version: 1.1.0
|
325
|
-
type: :runtime
|
326
|
-
version_requirements: *id019
|
327
|
-
- !ruby/object:Gem::Dependency
|
328
|
-
name: rake
|
329
|
-
prerelease: false
|
330
|
-
requirement: &id020 !ruby/object:Gem::Requirement
|
331
|
-
none: false
|
332
|
-
requirements:
|
333
|
-
- - <=
|
334
|
-
- !ruby/object:Gem::Version
|
335
|
-
hash: 63
|
336
|
-
segments:
|
337
|
-
- 0
|
338
|
-
- 9
|
339
|
-
- 2
|
340
|
-
version: 0.9.2
|
341
|
-
type: :development
|
342
|
-
version_requirements: *id020
|
343
|
-
- !ruby/object:Gem::Dependency
|
344
|
-
name: rspec
|
345
292
|
prerelease: false
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
- - "="
|
350
|
-
- !ruby/object:Gem::Version
|
351
|
-
hash: 27
|
352
|
-
segments:
|
353
|
-
- 1
|
354
|
-
- 3
|
355
|
-
- 0
|
356
|
-
version: 1.3.0
|
357
|
-
type: :development
|
358
|
-
version_requirements: *id021
|
359
|
-
- !ruby/object:Gem::Dependency
|
360
|
-
name: test-construct
|
361
|
-
prerelease: false
|
362
|
-
requirement: &id022 !ruby/object:Gem::Requirement
|
363
|
-
none: false
|
364
|
-
requirements:
|
365
|
-
- - ">="
|
366
|
-
- !ruby/object:Gem::Version
|
367
|
-
hash: 31
|
368
|
-
segments:
|
369
|
-
- 1
|
370
|
-
- 2
|
371
|
-
- 0
|
372
|
-
version: 1.2.0
|
373
|
-
type: :development
|
374
|
-
version_requirements: *id022
|
375
|
-
- !ruby/object:Gem::Dependency
|
376
|
-
name: googlecharts
|
377
|
-
prerelease: false
|
378
|
-
requirement: &id023 !ruby/object:Gem::Requirement
|
379
|
-
none: false
|
380
|
-
requirements:
|
381
|
-
- - ">="
|
382
|
-
- !ruby/object:Gem::Version
|
383
|
-
hash: 3
|
384
|
-
segments:
|
385
|
-
- 0
|
386
|
-
version: "0"
|
387
|
-
type: :development
|
388
|
-
version_requirements: *id023
|
293
|
+
name: Saikuro
|
294
|
+
version_requirements: *id017
|
295
|
+
type: :runtime
|
389
296
|
description: Code metrics from Flog, Flay, Simplecov-RCov, Saikuro, Churn, Reek, Roodi, Rails' stats task and Rails Best Practices
|
390
297
|
email: github@benjaminfleischer.com
|
391
298
|
executables:
|
@@ -403,7 +310,7 @@ files:
|
|
403
310
|
- Manifest.txt
|
404
311
|
- README.md
|
405
312
|
- Rakefile
|
406
|
-
- TODO
|
313
|
+
- TODO.md
|
407
314
|
- bin/metric_fu
|
408
315
|
- config/roodi_config.yml
|
409
316
|
- home_page/back_all.jpg
|
@@ -425,18 +332,12 @@ files:
|
|
425
332
|
- home_page/title_back.gif
|
426
333
|
- lib/configuration.rb
|
427
334
|
- lib/data_structures/careful_array.rb
|
428
|
-
- lib/data_structures/code_issue.rb
|
429
|
-
- lib/data_structures/grouping.rb
|
430
335
|
- lib/data_structures/line_numbers.rb
|
431
336
|
- lib/data_structures/location.rb
|
432
|
-
- lib/data_structures/ranking.rb
|
433
|
-
- lib/data_structures/record.rb
|
434
|
-
- lib/data_structures/table.rb
|
435
337
|
- lib/errors/analysis_error.rb
|
436
338
|
- lib/initial_requires.rb
|
437
339
|
- lib/load_files.rb
|
438
340
|
- lib/logging/mf_debugger.rb
|
439
|
-
- lib/md5_tracker.rb
|
440
341
|
- lib/metric_fu.rb
|
441
342
|
- lib/metrics/base_template.rb
|
442
343
|
- lib/metrics/churn/churn.rb
|
@@ -455,7 +356,13 @@ files:
|
|
455
356
|
- lib/metrics/flog/template_standard/flog.html.erb
|
456
357
|
- lib/metrics/generator.rb
|
457
358
|
- lib/metrics/graph.rb
|
458
|
-
- lib/metrics/
|
359
|
+
- lib/metrics/hotspots/analysis/code_issue.rb
|
360
|
+
- lib/metrics/hotspots/analysis/grouping.rb
|
361
|
+
- lib/metrics/hotspots/analysis/ranking.rb
|
362
|
+
- lib/metrics/hotspots/analysis/record.rb
|
363
|
+
- lib/metrics/hotspots/analysis/scoring_strategies.rb
|
364
|
+
- lib/metrics/hotspots/analysis/table.rb
|
365
|
+
- lib/metrics/hotspots/hotspot_analyzer.rb
|
459
366
|
- lib/metrics/hotspots/hotspots.rb
|
460
367
|
- lib/metrics/hotspots/template_awesome/hotspots.html.erb
|
461
368
|
- lib/metrics/hotspots/template_standard/hotspots.html.erb
|
@@ -505,7 +412,7 @@ files:
|
|
505
412
|
- lib/reporting/templates/standard/default.css
|
506
413
|
- lib/reporting/templates/standard/index.html.erb
|
507
414
|
- lib/reporting/templates/standard/standard_template.rb
|
508
|
-
- lib/
|
415
|
+
- lib/run.rb
|
509
416
|
- lib/tasks/metric_fu.rake
|
510
417
|
- lib/version.rb
|
511
418
|
- metric_fu.gemspec
|
@@ -516,7 +423,6 @@ files:
|
|
516
423
|
- spec/base/hotspot_analyzer_spec.rb
|
517
424
|
- spec/base/line_numbers_spec.rb
|
518
425
|
- spec/base/location_spec.rb
|
519
|
-
- spec/base/md5_tracker_spec.rb
|
520
426
|
- spec/base/ranking_spec.rb
|
521
427
|
- spec/base/report_spec.rb
|
522
428
|
- spec/base/table_spec.rb
|
@@ -583,7 +489,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
583
489
|
version: 1.3.6
|
584
490
|
requirements: []
|
585
491
|
|
586
|
-
rubyforge_project:
|
492
|
+
rubyforge_project: metric_fu
|
587
493
|
rubygems_version: 1.8.24
|
588
494
|
signing_key:
|
589
495
|
specification_version: 3
|
@@ -596,7 +502,6 @@ test_files:
|
|
596
502
|
- spec/base/hotspot_analyzer_spec.rb
|
597
503
|
- spec/base/line_numbers_spec.rb
|
598
504
|
- spec/base/location_spec.rb
|
599
|
-
- spec/base/md5_tracker_spec.rb
|
600
505
|
- spec/base/ranking_spec.rb
|
601
506
|
- spec/base/report_spec.rb
|
602
507
|
- spec/base/table_spec.rb
|
data/TODO
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
== TODO list
|
2
|
-
|
3
|
-
* Determine how to test metric_fu against codebases that are not metric_fu, to ensure it works on most applications
|
4
|
-
* Add configurable logger to all output streams
|
5
|
-
* Color code flog results with scale from: http://jakescruggs.blogspot.com/2008/08/whats-good-flog-score.html
|
6
|
-
* Make running metric_fu on metric_fu less embarrassing
|
7
|
-
* Load all gems at config time so you fail fast if one is missing
|
8
|
-
* Look into removing rcov and churn, and adding laser, brakeman, and/or cane
|
9
|
-
|
data/lib/md5_tracker.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'digest/md5'
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
module MetricFu
|
5
|
-
class MD5Tracker
|
6
|
-
|
7
|
-
@@unchanged_md5s = []
|
8
|
-
|
9
|
-
class << self
|
10
|
-
def md5_dir(path_to_file, base_dir)
|
11
|
-
File.join(base_dir,
|
12
|
-
path_to_file.split('/')[0..-2].join('/'))
|
13
|
-
end
|
14
|
-
|
15
|
-
def md5_file(path_to_file, base_dir)
|
16
|
-
File.join(md5_dir(path_to_file, base_dir),
|
17
|
-
path_to_file.split('/').last.sub(/\.[a-z]+/, '.md5'))
|
18
|
-
end
|
19
|
-
|
20
|
-
def track(path_to_file, base_dir)
|
21
|
-
md5 = Digest::MD5.hexdigest(File.read(path_to_file))
|
22
|
-
FileUtils.mkdir_p(md5_dir(path_to_file, base_dir), :verbose => false)
|
23
|
-
f = File.new(md5_file(path_to_file, base_dir), "w")
|
24
|
-
f.puts(md5)
|
25
|
-
f.close
|
26
|
-
md5
|
27
|
-
end
|
28
|
-
|
29
|
-
def file_changed?(path_to_file, base_dir)
|
30
|
-
orig_md5_file = md5_file(path_to_file, base_dir)
|
31
|
-
return !!track(path_to_file, base_dir) unless File.exist?(orig_md5_file)
|
32
|
-
|
33
|
-
current_md5 = ""
|
34
|
-
file = File.open(orig_md5_file, 'r')
|
35
|
-
file.each_line { |line| current_md5 << line }
|
36
|
-
file.close
|
37
|
-
current_md5.chomp!
|
38
|
-
|
39
|
-
new_md5 = Digest::MD5.hexdigest(File.read(path_to_file))
|
40
|
-
new_md5.chomp!
|
41
|
-
|
42
|
-
@@unchanged_md5s << path_to_file if new_md5 == current_md5
|
43
|
-
|
44
|
-
return new_md5 != current_md5
|
45
|
-
end
|
46
|
-
|
47
|
-
def file_already_counted?(path_to_file)
|
48
|
-
return @@unchanged_md5s.include?(path_to_file)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
-
|
3
|
-
describe MetricFu::MD5Tracker do
|
4
|
-
before do
|
5
|
-
@tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
|
6
|
-
FileUtils.mkdir_p(@tmp_dir, :verbose => false) unless File.directory?(@tmp_dir)
|
7
|
-
@file1 = File.new(File.join(@tmp_dir, 'file1.txt'), 'w')
|
8
|
-
@file2 = File.new(File.join(@tmp_dir, 'file2.txt'), 'w')
|
9
|
-
end
|
10
|
-
|
11
|
-
after do
|
12
|
-
FileUtils.rm_rf(@tmp_dir, :verbose => false)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "identical files should match" do
|
16
|
-
@file1.puts("Hello World")
|
17
|
-
@file1.close
|
18
|
-
file1_md5 = MD5Tracker.track(@file1.path, @tmp_dir)
|
19
|
-
|
20
|
-
@file2.puts("Hello World")
|
21
|
-
@file2.close
|
22
|
-
file2_md5 = MD5Tracker.track(@file2.path, @tmp_dir)
|
23
|
-
|
24
|
-
file2_md5.should == file1_md5
|
25
|
-
end
|
26
|
-
|
27
|
-
it "different files should not match" do
|
28
|
-
@file1.puts("Hello World")
|
29
|
-
@file1.close
|
30
|
-
file1_md5 = MD5Tracker.track(@file1.path, @tmp_dir)
|
31
|
-
|
32
|
-
@file2.puts("Goodbye World")
|
33
|
-
@file2.close
|
34
|
-
file2_md5 = MD5Tracker.track(@file2.path, @tmp_dir)
|
35
|
-
|
36
|
-
file2_md5.should_not == file1_md5
|
37
|
-
end
|
38
|
-
|
39
|
-
it "file_changed? should detect a change" do
|
40
|
-
@file2.close
|
41
|
-
|
42
|
-
@file1.puts("Hello World")
|
43
|
-
@file1.close
|
44
|
-
file1_md5 = MD5Tracker.track(@file1.path, @tmp_dir)
|
45
|
-
|
46
|
-
@file1 = File.new(File.join(@tmp_dir, 'file1.txt'), 'w')
|
47
|
-
@file1.puts("Goodbye World")
|
48
|
-
@file1.close
|
49
|
-
MD5Tracker.file_changed?(@file1.path, @tmp_dir).should be_true
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should detect a new file" do
|
53
|
-
@file2.close
|
54
|
-
MD5Tracker.file_changed?(@file1.path, @tmp_dir).should be_true
|
55
|
-
File.exist?(MD5Tracker.md5_file(@file1.path, @tmp_dir)).should be_true
|
56
|
-
end
|
57
|
-
end
|