Commit 1bad209b01c3fa730905e879fa22cc9646a6bd5c
Committed by
Paulo Meireles
1 parent
0e272fb7
Exists in
master
and in
22 other branches
Replacing old lib directory
Showing
33 changed files
with
531 additions
and
349 deletions
Show diff stats
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +class Kalibro::Client::BaseToolClient | ||
2 | + | ||
3 | + def initialize | ||
4 | + @port = Kalibro::Client::Port.new('BaseTool') | ||
5 | + end | ||
6 | + | ||
7 | + def base_tool_names | ||
8 | + @port.request(:get_base_tool_names)[:base_tool_name].to_a | ||
9 | + end | ||
10 | + | ||
11 | + def base_tool(name) | ||
12 | + hash = @port.request(:get_base_tool, {:base_tool_name => name})[:base_tool] | ||
13 | + Kalibro::Entities::BaseTool.from_hash(hash) | ||
14 | + end | ||
15 | + | ||
16 | +end | ||
0 | \ No newline at end of file | 17 | \ No newline at end of file |
plugins/mezuro/lib/kalibro/client/configuration_client.rb
0 → 100644
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +class Kalibro::Client::ConfigurationClient | ||
2 | + | ||
3 | + def initialize | ||
4 | + @port = Kalibro::Client::Port.new('Configuration') | ||
5 | + end | ||
6 | + | ||
7 | + def save(configuration) | ||
8 | + @port.request(:save_configuration, {:configuration => configuration.to_hash}) | ||
9 | + end | ||
10 | + | ||
11 | + def configuration_names | ||
12 | + @port.request(:get_configuration_names)[:configuration_name].to_a | ||
13 | + end | ||
14 | + | ||
15 | + def configuration(name) | ||
16 | + hash = @port.request(:get_configuration, {:configuration_name => name})[:configuration] | ||
17 | + Kalibro::Entities::Configuration.from_hash(hash) | ||
18 | + end | ||
19 | + | ||
20 | + def remove(configuration_name) | ||
21 | + @port.request(:remove_configuration, {:configuration_name => configuration_name}) | ||
22 | + end | ||
23 | + | ||
24 | +end | ||
0 | \ No newline at end of file | 25 | \ No newline at end of file |
@@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
1 | +class Kalibro::Client::KalibroClient | ||
2 | + | ||
3 | + def initialize | ||
4 | + @port = Kalibro::Client::Port.new('Kalibro') | ||
5 | + end | ||
6 | + | ||
7 | + def supported_repository_types | ||
8 | + @port.request(:get_supported_repository_types)[:repository_type].to_a | ||
9 | + end | ||
10 | + | ||
11 | + def process_project(project_name) | ||
12 | + @port.request(:process_project, {:project_name => project_name}) | ||
13 | + end | ||
14 | + | ||
15 | +end | ||
0 | \ No newline at end of file | 16 | \ No newline at end of file |
plugins/mezuro/lib/kalibro/client/module_result_client.rb
0 → 100644
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +class Kalibro::Client::ModuleResultClient | ||
2 | + | ||
3 | + def initialize | ||
4 | + @port = Kalibro::Client::Port.new('ModuleResult') | ||
5 | + end | ||
6 | + | ||
7 | + def module_result(project_name, module_name, date) | ||
8 | + hash = @port.request(:get_module_result, | ||
9 | + {:project_name => project_name, :module_name => module_name, :date => date})[:module_result] | ||
10 | + Kalibro::Entities::ModuleResult.from_hash(hash) | ||
11 | + end | ||
12 | + | ||
13 | + def result_history(project_name, module_name) | ||
14 | + value = @port.request(:get_result_history, | ||
15 | + {:project_name => project_name, :module_name => module_name})[:module_result] | ||
16 | + Kalibro::Entities::Entity.new.to_entity_array(value, Kalibro::Entities::ModuleResult) | ||
17 | + end | ||
18 | + | ||
19 | +end | ||
0 | \ No newline at end of file | 20 | \ No newline at end of file |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +require 'savon' | ||
2 | + | ||
3 | +class Kalibro::Client::Port | ||
4 | + | ||
5 | + @@service_address = 'http://valinhos.ime.usp.br:50688/KalibroService/' | ||
6 | + | ||
7 | + def self.service_address | ||
8 | + @@service_address | ||
9 | + end | ||
10 | + | ||
11 | + def self.service_address=(service_address) | ||
12 | + @@service_address = service_address | ||
13 | + end | ||
14 | + | ||
15 | + def initialize(endpoint) | ||
16 | + @client = Savon::Client.new("#{@@service_address}#{endpoint}Endpoint/?wsdl") | ||
17 | + end | ||
18 | + | ||
19 | + def request(action, request_body = nil) | ||
20 | + response = @client.request(:kalibro, action) { soap.body = request_body } | ||
21 | + response.to_hash["#{action}_response".to_sym] | ||
22 | + end | ||
23 | + | ||
24 | +end | ||
0 | \ No newline at end of file | 25 | \ No newline at end of file |
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +class Kalibro::Client::ProjectClient | ||
2 | + | ||
3 | + def initialize | ||
4 | + @port = Kalibro::Client::Port.new('Project') | ||
5 | + end | ||
6 | + | ||
7 | + def save(project) | ||
8 | + @port.request(:save_project, {:project => project.to_hash}) | ||
9 | + end | ||
10 | + | ||
11 | + def project_names | ||
12 | + @port.request(:get_project_names)[:project_name].to_a | ||
13 | + end | ||
14 | + | ||
15 | + def project(name) | ||
16 | + hash = @port.request(:get_project, {:project_name => name})[:project] | ||
17 | + Kalibro::Entities::Project.from_hash(hash) | ||
18 | + end | ||
19 | + | ||
20 | + def remove(project_name) | ||
21 | + @port.request(:remove_project, {:project_name => project_name}) | ||
22 | + end | ||
23 | + | ||
24 | +end | ||
0 | \ No newline at end of file | 25 | \ No newline at end of file |
plugins/mezuro/lib/kalibro/client/project_result_client.rb
0 → 100644
@@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
1 | +class Kalibro::Client::ProjectResultClient | ||
2 | + | ||
3 | + def initialize | ||
4 | + @port = Kalibro::Client::Port.new('ProjectResult') | ||
5 | + end | ||
6 | + | ||
7 | + def has_results_for(project_name) | ||
8 | + @port.request(:has_results_for, {:project_name => project_name})[:has_results] | ||
9 | + end | ||
10 | + | ||
11 | + def has_results_before(project_name, date) | ||
12 | + @port.request(:has_results_before, {:project_name => project_name, :date => date})[:has_results] | ||
13 | + end | ||
14 | + | ||
15 | + def has_results_after(project_name, date) | ||
16 | + @port.request(:has_results_after, {:project_name => project_name, :date => date})[:has_results] | ||
17 | + end | ||
18 | + | ||
19 | + def first_result(project_name) | ||
20 | + hash = @port.request(:get_first_result_of, {:project_name => project_name})[:project_result] | ||
21 | + Kalibro::Entities::ProjectResult.from_hash(hash) | ||
22 | + end | ||
23 | + | ||
24 | + def last_result(project_name) | ||
25 | + hash = @port.request(:get_last_result_of, {:project_name => project_name})[:project_result] | ||
26 | + Kalibro::Entities::ProjectResult.from_hash(hash) | ||
27 | + end | ||
28 | + | ||
29 | + def first_result_after(project_name, date) | ||
30 | + request_body = {:project_name => project_name, :date => date} | ||
31 | + hash = @port.request(:get_first_result_after, request_body)[:project_result] | ||
32 | + Kalibro::Entities::ProjectResult.from_hash(hash) | ||
33 | + end | ||
34 | + | ||
35 | + def last_result_before(project_name, date) | ||
36 | + request_body = {:project_name => project_name, :date => date} | ||
37 | + hash = @port.request(:get_last_result_before, request_body)[:project_result] | ||
38 | + Kalibro::Entities::ProjectResult.from_hash(hash) | ||
39 | + end | ||
40 | + | ||
41 | +end | ||
0 | \ No newline at end of file | 42 | \ No newline at end of file |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +class Kalibro::Entities::BaseTool < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :name, :description, :supported_metric | ||
4 | + | ||
5 | + def supported_metric=(value) | ||
6 | + @supported_metric = to_entity_array(value, Kalibro::Entities::NativeMetric) | ||
7 | + end | ||
8 | + | ||
9 | + def supported_metrics | ||
10 | + @supported_metric | ||
11 | + end | ||
12 | + | ||
13 | + def supported_metrics=(supported_metrics) | ||
14 | + @supported_metric = supported_metrics | ||
15 | + end | ||
16 | + | ||
17 | +end | ||
0 | \ No newline at end of file | 18 | \ No newline at end of file |
plugins/mezuro/lib/kalibro/entities/compound_metric_with_error.rb
0 → 100644
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class Kalibro::Entities::CompoundMetricWithError < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :metric, :error | ||
4 | + | ||
5 | + def metric=(value) | ||
6 | + @metric = to_entity(value, Kalibro::Entities::CompoundMetric) | ||
7 | + end | ||
8 | + | ||
9 | + def error=(value) | ||
10 | + @error = to_entity(value, Kalibro::Entities::Error) | ||
11 | + end | ||
12 | + | ||
13 | +end | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +class Kalibro::Entities::Configuration < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :name, :description, :metric_configuration | ||
4 | + | ||
5 | + def metric_configuration=(value) | ||
6 | + @metric_configuration = to_entity_array(value, Kalibro::Entities::MetricConfiguration) | ||
7 | + end | ||
8 | + | ||
9 | + def metric_configurations | ||
10 | + @metric_configuration | ||
11 | + end | ||
12 | + | ||
13 | + def metric_configurations=(metric_configurations) | ||
14 | + @metric_configuration = metric_configurations | ||
15 | + end | ||
16 | + | ||
17 | +end | ||
0 | \ No newline at end of file | 18 | \ No newline at end of file |
@@ -0,0 +1,53 @@ | @@ -0,0 +1,53 @@ | ||
1 | +class Kalibro::Entities::Entity | ||
2 | + | ||
3 | + def self.from_hash(hash) | ||
4 | + entity = self.new | ||
5 | + hash.each { |field, value| entity.set(field, value) } | ||
6 | + entity | ||
7 | + end | ||
8 | + | ||
9 | + def set(field, value) | ||
10 | + send("#{field}=", value) | ||
11 | + end | ||
12 | + | ||
13 | + def to_entity_array(value, entity_class = nil) | ||
14 | + array = value.kind_of?(Array) ? value : [value] | ||
15 | + array.each.collect { |element| to_entity(element, entity_class) } | ||
16 | + end | ||
17 | + | ||
18 | + def to_entity(value, entity_class) | ||
19 | + value.kind_of?(Hash) ? entity_class.from_hash(value) : value | ||
20 | + end | ||
21 | + | ||
22 | + def to_hash | ||
23 | + hash = Hash.new | ||
24 | + fields.each do |field| | ||
25 | + field_value = self.get(field) | ||
26 | + hash[field] = convert_to_hash(field_value) if ! field_value.nil? | ||
27 | + end | ||
28 | + hash | ||
29 | + end | ||
30 | + | ||
31 | + def convert_to_hash(value) | ||
32 | + return value.collect { |element| convert_to_hash(element) } if value.kind_of?(Array) | ||
33 | + return value.to_hash if value.kind_of?(Kalibro::Entities::Entity) | ||
34 | + value | ||
35 | + end | ||
36 | + | ||
37 | + def ==(other) | ||
38 | + begin | ||
39 | + fields.each.inject(true) { |equal, field| equal && (self.get(field) == other.get(field)) } | ||
40 | + rescue NoMethodError | ||
41 | + false | ||
42 | + end | ||
43 | + end | ||
44 | + | ||
45 | + def fields | ||
46 | + instance_variable_names.each.collect { |variable| variable.to_s.sub(/@/, '').to_sym } | ||
47 | + end | ||
48 | + | ||
49 | + def get(field) | ||
50 | + send("#{field}") | ||
51 | + end | ||
52 | + | ||
53 | +end | ||
0 | \ No newline at end of file | 54 | \ No newline at end of file |
@@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
1 | +class Kalibro::Entities::Error < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :message, :stack_trace_element | ||
4 | + | ||
5 | + def stack_trace_element=(value) | ||
6 | + @stack_trace_element = to_entity_array(value, Kalibro::Entities::StackTraceElement) | ||
7 | + end | ||
8 | + | ||
9 | + def stack_trace | ||
10 | + @stack_trace_element | ||
11 | + end | ||
12 | + | ||
13 | + def stack_trace=(stack_trace) | ||
14 | + @stack_trace_element = stack_trace | ||
15 | + end | ||
16 | + | ||
17 | +end | ||
0 | \ No newline at end of file | 18 | \ No newline at end of file |
plugins/mezuro/lib/kalibro/entities/metric_configuration.rb
0 → 100644
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +class Kalibro::Entities::MetricConfiguration < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :metric, :code, :weight, :aggregation_form, :range | ||
4 | + | ||
5 | + def metric=(value) | ||
6 | + if value.kind_of?(Hash) | ||
7 | + @metric = to_entity(value, Kalibro::Entities::CompoundMetric) if value.has_key?(:script) | ||
8 | + @metric = to_entity(value, Kalibro::Entities::NativeMetric) if value.has_key?(:origin) | ||
9 | + else | ||
10 | + @metric = value | ||
11 | + end | ||
12 | + end | ||
13 | + | ||
14 | + def range=(value) | ||
15 | + @range = to_entity_array(value, Kalibro::Entities::Range) | ||
16 | + end | ||
17 | + | ||
18 | + def ranges | ||
19 | + @range | ||
20 | + end | ||
21 | + | ||
22 | + def ranges=(ranges) | ||
23 | + @range = ranges | ||
24 | + end | ||
25 | + | ||
26 | +end | ||
0 | \ No newline at end of file | 27 | \ No newline at end of file |
@@ -0,0 +1,30 @@ | @@ -0,0 +1,30 @@ | ||
1 | +class Kalibro::Entities::MetricResult < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :metric, :value, :range, :descendent_result | ||
4 | + | ||
5 | + def metric=(value) | ||
6 | + if value.kind_of?(Hash) | ||
7 | + @metric = to_entity(value, Kalibro::Entities::CompoundMetric) if value.has_key?(:script) | ||
8 | + @metric = to_entity(value, Kalibro::Entities::NativeMetric) if value.has_key?(:origin) | ||
9 | + else | ||
10 | + @metric = value | ||
11 | + end | ||
12 | + end | ||
13 | + | ||
14 | + def range=(value) | ||
15 | + @range = to_entity(value, Kalibro::Entities::Range) | ||
16 | + end | ||
17 | + | ||
18 | + def descendent_result=(value) | ||
19 | + @descendent_result = to_entity_array(value) | ||
20 | + end | ||
21 | + | ||
22 | + def descendent_results | ||
23 | + @descendent_result | ||
24 | + end | ||
25 | + | ||
26 | + def descendent_results=(descendent_results) | ||
27 | + @descendent_result = descendent_results | ||
28 | + end | ||
29 | + | ||
30 | +end | ||
0 | \ No newline at end of file | 31 | \ No newline at end of file |
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +class Kalibro::Entities::ModuleNode < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :module, :child | ||
4 | + | ||
5 | + def module=(value) | ||
6 | + @module = to_entity(value, Kalibro::Entities::Module) | ||
7 | + end | ||
8 | + | ||
9 | + def child=(value) | ||
10 | + @child = to_entity_array(value, Kalibro::Entities::ModuleNode) | ||
11 | + end | ||
12 | + | ||
13 | + def children | ||
14 | + @child | ||
15 | + end | ||
16 | + | ||
17 | + def children=(children) | ||
18 | + @child = children | ||
19 | + end | ||
20 | + | ||
21 | +end | ||
0 | \ No newline at end of file | 22 | \ No newline at end of file |
@@ -0,0 +1,33 @@ | @@ -0,0 +1,33 @@ | ||
1 | +class Kalibro::Entities::ModuleResult < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :module, :date, :grade, :metric_result, :compound_metric_with_error | ||
4 | + | ||
5 | + def module=(value) | ||
6 | + @module = to_entity(value, Kalibro::Entities::Module) | ||
7 | + end | ||
8 | + | ||
9 | + def metric_result=(value) | ||
10 | + @metric_result = to_entity_array(value, Kalibro::Entities::MetricResult) | ||
11 | + end | ||
12 | + | ||
13 | + def metric_results | ||
14 | + @metric_result | ||
15 | + end | ||
16 | + | ||
17 | + def metric_results=(metric_results) | ||
18 | + @metric_result = metric_results | ||
19 | + end | ||
20 | + | ||
21 | + def compound_metric_with_error=(value) | ||
22 | + @compound_metric_with_error = to_entity_array(value, Kalibro::Entities::CompoundMetricWithError) | ||
23 | + end | ||
24 | + | ||
25 | + def compound_metrics_with_error | ||
26 | + @compound_metric_with_error | ||
27 | + end | ||
28 | + | ||
29 | + def compound_metrics_with_error=(compound_metrics_with_error) | ||
30 | + @compound_metric_with_error = compound_metrics_with_error | ||
31 | + end | ||
32 | + | ||
33 | +end | ||
0 | \ No newline at end of file | 34 | \ No newline at end of file |
@@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
1 | +class Kalibro::Entities::Project < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :name, :license, :description, :repository, :configuration_name, :state, :error | ||
4 | + | ||
5 | + def repository=(value) | ||
6 | + @repository = to_entity(value, Kalibro::Entities::Repository) | ||
7 | + end | ||
8 | + | ||
9 | + def error=(value) | ||
10 | + @error = to_entity(value, Kalibro::Entities::Error) | ||
11 | + end | ||
12 | + | ||
13 | +end | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
@@ -0,0 +1,34 @@ | @@ -0,0 +1,34 @@ | ||
1 | +class Kalibro::Entities::ProjectResult < Kalibro::Entities::Entity | ||
2 | + | ||
3 | + attr_accessor :project, :date, :load_time, :analysis_time, :source_tree | ||
4 | + | ||
5 | + def project=(value) | ||
6 | + @project = to_entity(value, Kalibro::Entities::Project) | ||
7 | + end | ||
8 | + | ||
9 | + def source_tree=(value) | ||
10 | + @source_tree = to_entity(value, Kalibro::Entities::ModuleNode) | ||
11 | + end | ||
12 | + | ||
13 | + def formatted_load_time | ||
14 | + format_milliseconds(@load_time) | ||
15 | + end | ||
16 | + | ||
17 | + def formatted_analysis_time | ||
18 | + format_milliseconds(@analysis_time) | ||
19 | + end | ||
20 | + | ||
21 | + def format_milliseconds(value) | ||
22 | + seconds = value/1000 | ||
23 | + hours = seconds/3600 | ||
24 | + seconds -= hours * 3600 | ||
25 | + minutes = seconds/60 | ||
26 | + seconds -= minutes * 60 | ||
27 | + "#{format(hours)}:#{format(minutes)}:#{format(seconds)}" | ||
28 | + end | ||
29 | + | ||
30 | + def format(amount) | ||
31 | + ('%2d' % amount).sub(/\s/, '0') | ||
32 | + end | ||
33 | + | ||
34 | +end | ||
0 | \ No newline at end of file | 35 | \ No newline at end of file |
plugins/mezuro/lib/kalibro/entities/stack_trace_element.rb
0 → 100644
plugins/mezuro/lib/mezuro_plugin.rb
@@ -8,20 +8,20 @@ class MezuroPlugin < Noosfero::Plugin | @@ -8,20 +8,20 @@ class MezuroPlugin < Noosfero::Plugin | ||
8 | _("A metric analizer plugin.") | 8 | _("A metric analizer plugin.") |
9 | end | 9 | end |
10 | 10 | ||
11 | - def control_panel_buttons | ||
12 | - if context.profile.community? | ||
13 | - { :title => 'Mezuro projects', :icon => 'mezuro', :url => {:controller => 'mezuro_plugin_myprofile', :action => 'index'} } | ||
14 | - end | 11 | + def content_types |
12 | + MezuroPlugin::ProjectContent | ||
15 | end | 13 | end |
16 | 14 | ||
17 | - def profile_tabs | ||
18 | - if context.profile.community? && !MezuroPlugin::Project.by_profile(context.profile).blank? | ||
19 | - MezuroPlugin::Project.by_profile(context.profile).with_tab.map do |project| | ||
20 | - { :title => 'Mezuro ' + project.name, | ||
21 | - :id => 'mezuro-project-'+project.identifier, | ||
22 | - :content => lambda { render :partial => 'project_tab', :locals => {:current_project => project} } } | ||
23 | - end | ||
24 | - end | 15 | + def view_path |
16 | + File.join(RAILS_ROOT, "plugins", "mezuro", "views") | ||
25 | end | 17 | end |
26 | 18 | ||
27 | -end | 19 | + def stylesheet? |
20 | + true | ||
21 | + end | ||
22 | + | ||
23 | + def js_files | ||
24 | + 'javascripts/collapsable.js' | ||
25 | + end | ||
26 | + | ||
27 | +end | ||
28 | \ No newline at end of file | 28 | \ No newline at end of file |
plugins/mezuro/lib/mezuro_plugin/analizo_extractor.rb
@@ -1,43 +0,0 @@ | @@ -1,43 +0,0 @@ | ||
1 | -class MezuroPlugin::AnalizoExtractor < Noosfero::Plugin::ActiveRecord | ||
2 | - attr_reader :string_output, :hash_output | ||
3 | - | ||
4 | - def initialize project | ||
5 | - @project = project | ||
6 | - end | ||
7 | - | ||
8 | - def perform | ||
9 | - run_analizo | ||
10 | - create_hash | ||
11 | - save_metrics | ||
12 | - end | ||
13 | - | ||
14 | - def run_analizo | ||
15 | - project_path = "#{RAILS_ROOT}/tmp/#{@project.identifier}" | ||
16 | - @string_output = `analizo metrics #{project_path}` | ||
17 | - end | ||
18 | - | ||
19 | - def create_hash | ||
20 | - @hash_output = {} | ||
21 | - first_line = true | ||
22 | - | ||
23 | - @string_output.lines.each do |line| | ||
24 | - if line =~ /---/ | ||
25 | - if first_line | ||
26 | - first_line = false | ||
27 | - else | ||
28 | - break | ||
29 | - end | ||
30 | - end | ||
31 | - | ||
32 | - if line =~ /(\S+): (~|(\d+)(\.\d+)?).*/ | ||
33 | - @hash_output[$1.to_sym] = $2 | ||
34 | - end | ||
35 | - end | ||
36 | - end | ||
37 | - | ||
38 | - def save_metrics | ||
39 | - @hash_output.each do | key, value | | ||
40 | - MezuroPlugin::Metric.create(:name => key.to_s, :value => value.to_f, :metricable => @project) | ||
41 | - end | ||
42 | - end | ||
43 | -end |
plugins/mezuro/lib/mezuro_plugin/calculate_metrics_job.rb
plugins/mezuro/lib/mezuro_plugin/metric.rb
@@ -1,19 +0,0 @@ | @@ -1,19 +0,0 @@ | ||
1 | -class MezuroPlugin::Metric < Noosfero::Plugin::ActiveRecord | ||
2 | - validates_presence_of :name, :metricable_id, :metricable_type | ||
3 | - | ||
4 | - belongs_to :metricable, :polymorphic => true | ||
5 | - before_save :round_value | ||
6 | - | ||
7 | - def initialize params | ||
8 | - params[:value] = nil if params[:value] == '~' | ||
9 | - super params | ||
10 | - end | ||
11 | - | ||
12 | - def round_value | ||
13 | - if self.value | ||
14 | - multiplied = self.value * 100 | ||
15 | - rounded = multiplied.round | ||
16 | - self.value = rounded / 100.0 | ||
17 | - end | ||
18 | - end | ||
19 | -end |
plugins/mezuro/lib/mezuro_plugin/project.rb
@@ -1,76 +0,0 @@ | @@ -1,76 +0,0 @@ | ||
1 | -require 'svn/client' | ||
2 | - | ||
3 | -class MezuroPlugin::Project < Noosfero::Plugin::ActiveRecord | ||
4 | - has_many :metrics, :as => :metricable | ||
5 | - | ||
6 | - validates_presence_of :name, :repository_url, :identifier | ||
7 | - validates_format_of :identifier, :with => /^[a-z0-9|\-|\.]*$/, :message => "Identifier can only have a combination of lower case, number, hyphen and dot!" | ||
8 | - validates_uniqueness_of :identifier | ||
9 | - | ||
10 | - named_scope :with_tab, :conditions => {:with_tab => true} | ||
11 | - named_scope :by_profile, lambda {|profile| {:conditions => {:profile_id => profile.id}}} | ||
12 | - | ||
13 | - | ||
14 | - after_create :asynchronous_calculate_metrics | ||
15 | - | ||
16 | - def calculate_metrics | ||
17 | - begin | ||
18 | - download_source_code | ||
19 | - extractor = MezuroPlugin::AnalizoExtractor.new self | ||
20 | - extractor.perform | ||
21 | - rescue Svn::Error => error | ||
22 | - update_attribute :svn_error, error.error_message | ||
23 | - end | ||
24 | - end | ||
25 | - | ||
26 | - def asynchronous_calculate_metrics | ||
27 | - Delayed::Job.enqueue MezuroPlugin::CalculateMetricsJob.new(id) | ||
28 | - end | ||
29 | - | ||
30 | - def download_source_code | ||
31 | - download_prepare | ||
32 | - Svn::Client::Context.new.checkout(repository_url, "#{RAILS_ROOT}/tmp/#{identifier}") | ||
33 | - end | ||
34 | - | ||
35 | - def download_prepare | ||
36 | - project_path = "#{RAILS_ROOT}/tmp/#{identifier}" | ||
37 | - FileUtils.rm_r project_path if (File.exists? project_path) | ||
38 | - end | ||
39 | - | ||
40 | - def metrics_calculated? | ||
41 | - return !metrics.empty? | ||
42 | - end | ||
43 | - | ||
44 | - def total_metrics | ||
45 | - total_metrics = metrics.select do |metric| | ||
46 | - metric.name.start_with?("total") | ||
47 | - end | ||
48 | - return total_metrics.sort_by {|metric| metric.name} | ||
49 | - end | ||
50 | - | ||
51 | - def statistical_metrics | ||
52 | - statistical_metrics = collect_statistical_metrics | ||
53 | - | ||
54 | - hash = {} | ||
55 | - statistical_metrics.each do |metric| | ||
56 | - insert_metric_in_hash metric, hash | ||
57 | - end | ||
58 | - hash | ||
59 | - end | ||
60 | - | ||
61 | - def collect_statistical_metrics | ||
62 | - statistical_metrics = metrics.select do |metric| | ||
63 | - not metric.name.start_with?("total") | ||
64 | - end | ||
65 | - statistical_metrics.sort_by {|metric| metric.name} | ||
66 | - end | ||
67 | - | ||
68 | - def insert_metric_in_hash metric, hash | ||
69 | - metric_name, metric_statistic = metric.name.split("_") | ||
70 | - unless hash.key?(metric_name) | ||
71 | - hash[metric_name] = {metric_statistic => metric.value} | ||
72 | - else | ||
73 | - hash[metric_name][metric_statistic] = metric.value | ||
74 | - end | ||
75 | - end | ||
76 | -end |
@@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
1 | +class MezuroPlugin::ProjectContent < Article | ||
2 | + | ||
3 | + def self.short_description | ||
4 | + 'Kalibro project' | ||
5 | + end | ||
6 | + | ||
7 | + def self.description | ||
8 | + 'Software project tracked by Kalibro' | ||
9 | + end | ||
10 | + | ||
11 | + settings_items :license, :description, :repository_type, :repository_url, :configuration_name | ||
12 | + | ||
13 | + include ActionView::Helpers::TagHelper | ||
14 | + def to_html(options = {}) | ||
15 | + lambda do | ||
16 | + render :file => 'content_viewer/show_project.rhtml' | ||
17 | + end | ||
18 | + end | ||
19 | + | ||
20 | + after_save :send_project_to_service | ||
21 | + | ||
22 | + private | ||
23 | + | ||
24 | + def send_project_to_service | ||
25 | + Kalibro::Client::ProjectClient.new.save(project) | ||
26 | + end | ||
27 | + | ||
28 | + def project | ||
29 | + project = Kalibro::Entities::Project.new | ||
30 | + project.name = title | ||
31 | + project.license = license | ||
32 | + project.description = description | ||
33 | + project.repository = repository | ||
34 | + project.configuration_name = configuration_name | ||
35 | + project | ||
36 | + end | ||
37 | + | ||
38 | + def repository | ||
39 | + repository = Kalibro::Entities::Repository.new | ||
40 | + repository.type = repository_type | ||
41 | + repository.address = repository_url | ||
42 | + repository | ||
43 | + end | ||
44 | + | ||
45 | +end | ||
46 | + |
plugins/mezuro/lib/tasks/cucumber.rake
@@ -1,47 +0,0 @@ | @@ -1,47 +0,0 @@ | ||
1 | -# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. | ||
2 | -# It is recommended to regenerate this file in the future when you upgrade to a | ||
3 | -# newer version of cucumber-rails. Consider adding your own code to a new file | ||
4 | -# instead of editing this one. Cucumber will automatically load all features/**/*.rb | ||
5 | -# files. | ||
6 | - | ||
7 | - | ||
8 | -unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks | ||
9 | - | ||
10 | -vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first | ||
11 | -$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil? | ||
12 | - | ||
13 | -begin | ||
14 | - require 'cucumber/rake/task' | ||
15 | - | ||
16 | - namespace :cucumber do | ||
17 | - Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t| | ||
18 | - t.binary = vendored_cucumber_bin # If nil, the gem's binary is used. | ||
19 | - t.fork = true # You may get faster startup if you set this to false | ||
20 | - t.profile = 'default' | ||
21 | - end | ||
22 | - | ||
23 | - Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t| | ||
24 | - t.binary = vendored_cucumber_bin | ||
25 | - t.fork = true # You may get faster startup if you set this to false | ||
26 | - t.profile = 'wip' | ||
27 | - end | ||
28 | - | ||
29 | - desc 'Run all features' | ||
30 | - task :all => [:ok, :wip] | ||
31 | - end | ||
32 | - desc 'Alias for cucumber:ok' | ||
33 | - task :cucumber => 'cucumber:ok' | ||
34 | - | ||
35 | - task :default => :cucumber | ||
36 | - | ||
37 | - task :features => :cucumber do | ||
38 | - STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***" | ||
39 | - end | ||
40 | -rescue LoadError | ||
41 | - desc 'cucumber rake task not available (cucumber not installed)' | ||
42 | - task :cucumber do | ||
43 | - abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin' | ||
44 | - end | ||
45 | -end | ||
46 | - | ||
47 | -end |
plugins/mezuro/lib/tasks/rspec.rake
@@ -1,144 +0,0 @@ | @@ -1,144 +0,0 @@ | ||
1 | -gem 'test-unit', '1.2.3' if RUBY_VERSION.to_f >= 1.9 | ||
2 | -rspec_gem_dir = nil | ||
3 | -Dir["#{RAILS_ROOT}/vendor/gems/*"].each do |subdir| | ||
4 | - rspec_gem_dir = subdir if subdir.gsub("#{RAILS_ROOT}/vendor/gems/","") =~ /^(\w+-)?rspec-(\d+)/ && File.exist?("#{subdir}/lib/spec/rake/spectask.rb") | ||
5 | -end | ||
6 | -rspec_plugin_dir = File.expand_path(File.dirname(__FILE__) + '/../../vendor/plugins/rspec') | ||
7 | - | ||
8 | -if rspec_gem_dir && (test ?d, rspec_plugin_dir) | ||
9 | - raise "\n#{'*'*50}\nYou have rspec installed in both vendor/gems and vendor/plugins\nPlease pick one and dispose of the other.\n#{'*'*50}\n\n" | ||
10 | -end | ||
11 | - | ||
12 | -if rspec_gem_dir | ||
13 | - $LOAD_PATH.unshift("#{rspec_gem_dir}/lib") | ||
14 | -elsif File.exist?(rspec_plugin_dir) | ||
15 | - $LOAD_PATH.unshift("#{rspec_plugin_dir}/lib") | ||
16 | -end | ||
17 | - | ||
18 | -# Don't load rspec if running "rake gems:*" | ||
19 | -unless ARGV.any? {|a| a =~ /^gems/} | ||
20 | - | ||
21 | -begin | ||
22 | - require 'spec/rake/spectask' | ||
23 | -rescue MissingSourceFile | ||
24 | - module Spec | ||
25 | - module Rake | ||
26 | - class SpecTask | ||
27 | - def initialize(name) | ||
28 | - task name do | ||
29 | - # if rspec-rails is a configured gem, this will output helpful material and exit ... | ||
30 | - require File.expand_path(File.join(File.dirname(__FILE__),"..","..","config","environment")) | ||
31 | - | ||
32 | - # ... otherwise, do this: | ||
33 | - raise <<-MSG | ||
34 | - | ||
35 | -#{"*" * 80} | ||
36 | -* You are trying to run an rspec rake task defined in | ||
37 | -* #{__FILE__}, | ||
38 | -* but rspec can not be found in vendor/gems, vendor/plugins or system gems. | ||
39 | -#{"*" * 80} | ||
40 | -MSG | ||
41 | - end | ||
42 | - end | ||
43 | - end | ||
44 | - end | ||
45 | - end | ||
46 | -end | ||
47 | - | ||
48 | -Rake.application.instance_variable_get('@tasks').delete('default') | ||
49 | - | ||
50 | -spec_prereq = File.exist?(File.join(RAILS_ROOT, 'config', 'database.yml')) ? "db:test:prepare" : :noop | ||
51 | -task :noop do | ||
52 | -end | ||
53 | - | ||
54 | -task :default => :spec | ||
55 | -task :stats => "spec:statsetup" | ||
56 | - | ||
57 | -desc "Run all specs in spec directory (excluding plugin specs)" | ||
58 | -Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t| | ||
59 | - t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] | ||
60 | - t.spec_files = FileList['spec/**/*_spec.rb'] | ||
61 | -end | ||
62 | - | ||
63 | -namespace :spec do | ||
64 | - desc "Run all specs in spec directory with RCov (excluding plugin specs)" | ||
65 | - Spec::Rake::SpecTask.new(:rcov) do |t| | ||
66 | - t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] | ||
67 | - t.spec_files = FileList['spec/**/*_spec.rb'] | ||
68 | - t.rcov = true | ||
69 | - t.rcov_opts = lambda do | ||
70 | - IO.readlines("#{RAILS_ROOT}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten | ||
71 | - end | ||
72 | - end | ||
73 | - | ||
74 | - desc "Print Specdoc for all specs (excluding plugin specs)" | ||
75 | - Spec::Rake::SpecTask.new(:doc) do |t| | ||
76 | - t.spec_opts = ["--format", "specdoc", "--dry-run"] | ||
77 | - t.spec_files = FileList['spec/**/*_spec.rb'] | ||
78 | - end | ||
79 | - | ||
80 | - desc "Print Specdoc for all plugin examples" | ||
81 | - Spec::Rake::SpecTask.new(:plugin_doc) do |t| | ||
82 | - t.spec_opts = ["--format", "specdoc", "--dry-run"] | ||
83 | - t.spec_files = FileList['vendor/plugins/**/spec/**/*_spec.rb'].exclude('vendor/plugins/rspec/*') | ||
84 | - end | ||
85 | - | ||
86 | - [:models, :controllers, :views, :helpers, :lib, :integration].each do |sub| | ||
87 | - desc "Run the code examples in spec/#{sub}" | ||
88 | - Spec::Rake::SpecTask.new(sub => spec_prereq) do |t| | ||
89 | - t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] | ||
90 | - t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"] | ||
91 | - end | ||
92 | - end | ||
93 | - | ||
94 | - desc "Run the code examples in vendor/plugins (except RSpec's own)" | ||
95 | - Spec::Rake::SpecTask.new(:plugins => spec_prereq) do |t| | ||
96 | - t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] | ||
97 | - t.spec_files = FileList['vendor/plugins/**/spec/**/*_spec.rb'].exclude('vendor/plugins/rspec/*').exclude("vendor/plugins/rspec-rails/*") | ||
98 | - end | ||
99 | - | ||
100 | - namespace :plugins do | ||
101 | - desc "Runs the examples for rspec_on_rails" | ||
102 | - Spec::Rake::SpecTask.new(:rspec_on_rails) do |t| | ||
103 | - t.spec_opts = ['--options', "\"#{RAILS_ROOT}/spec/spec.opts\""] | ||
104 | - t.spec_files = FileList['vendor/plugins/rspec-rails/spec/**/*_spec.rb'] | ||
105 | - end | ||
106 | - end | ||
107 | - | ||
108 | - # Setup specs for stats | ||
109 | - task :statsetup do | ||
110 | - require 'code_statistics' | ||
111 | - ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models') | ||
112 | - ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views') | ||
113 | - ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers') | ||
114 | - ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers') | ||
115 | - ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib') | ||
116 | - ::STATS_DIRECTORIES << %w(Routing\ specs spec/routing) if File.exist?('spec/routing') | ||
117 | - ::STATS_DIRECTORIES << %w(Integration\ specs spec/integration) if File.exist?('spec/integration') | ||
118 | - ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models') | ||
119 | - ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views') | ||
120 | - ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers') | ||
121 | - ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers') | ||
122 | - ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib') | ||
123 | - ::CodeStatistics::TEST_TYPES << "Routing specs" if File.exist?('spec/routing') | ||
124 | - ::CodeStatistics::TEST_TYPES << "Integration specs" if File.exist?('spec/integration') | ||
125 | - end | ||
126 | - | ||
127 | - namespace :db do | ||
128 | - namespace :fixtures do | ||
129 | - desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z." | ||
130 | - task :load => :environment do | ||
131 | - ActiveRecord::Base.establish_connection(Rails.env) | ||
132 | - base_dir = File.join(Rails.root, 'spec', 'fixtures') | ||
133 | - fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir | ||
134 | - | ||
135 | - require 'active_record/fixtures' | ||
136 | - (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file| | ||
137 | - Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) | ||
138 | - end | ||
139 | - end | ||
140 | - end | ||
141 | - end | ||
142 | -end | ||
143 | - | ||
144 | -end |