peak_flow_utils 0.0.1 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/{LICENSE.txt → MIT-LICENSE} +1 -1
- data/README.md +22 -13
- data/Rakefile +20 -30
- data/app/assets/config/peak_flow_utils_manifest.js +2 -0
- data/app/assets/javascripts/peak_flow_utils/application.js +14 -0
- data/app/assets/stylesheets/peak_flow_utils/application.css +15 -0
- data/app/controllers/peak_flow_utils/application_controller.rb +13 -0
- data/app/controllers/peak_flow_utils/pings/sidekiq_pings_controller.rb +10 -0
- data/app/handlers/peak_flow_utils/application_handler.rb +36 -0
- data/app/handlers/peak_flow_utils/devise_handler.rb +126 -0
- data/app/handlers/peak_flow_utils/file_handler.rb +42 -0
- data/app/handlers/peak_flow_utils/model_handler.rb +123 -0
- data/app/handlers/peak_flow_utils/rails_handler.rb +206 -0
- data/app/handlers/peak_flow_utils/simple_form_handler.rb +76 -0
- data/app/handlers/peak_flow_utils/validations_handler.rb +85 -0
- data/app/handlers/peak_flow_utils/will_paginate_handler.rb +59 -0
- data/app/helpers/peak_flow_utils/application_helper.rb +2 -0
- data/app/jobs/peak_flow_utils/application_job.rb +2 -0
- data/app/mailers/peak_flow_utils/application_mailer.rb +4 -0
- data/app/migrations/20150902155200_create_translation_keys.rb +8 -0
- data/app/migrations/20150907070909_create_groups.rb +12 -0
- data/app/migrations/20150907090900_create_handlers.rb +9 -0
- data/app/migrations/20150908085500_create_translation_values.rb +13 -0
- data/app/migrations/20150908090800_create_handler_texts.rb +22 -0
- data/app/migrations/20160411190500_create_scanned_files.rb +10 -0
- data/app/migrations/peak_flow_utils/application_migration.rb +5 -0
- data/app/models/peak_flow_utils/application_record.rb +9 -0
- data/app/models/peak_flow_utils/group.rb +22 -0
- data/app/models/peak_flow_utils/handler.rb +14 -0
- data/app/models/peak_flow_utils/handler_text.rb +46 -0
- data/app/models/peak_flow_utils/scanned_file.rb +2 -0
- data/app/models/peak_flow_utils/translation_key.rb +8 -0
- data/app/models/peak_flow_utils/translation_value.rb +24 -0
- data/app/services/peak_flow_utils/application_service.rb +2 -0
- data/app/services/peak_flow_utils/attribute_service.rb +32 -0
- data/app/services/peak_flow_utils/configuration_service.rb +11 -0
- data/app/services/peak_flow_utils/database_initializer_service.rb +39 -0
- data/app/services/peak_flow_utils/erb_inspector.rb +71 -0
- data/app/services/peak_flow_utils/erb_inspector/file_inspector.rb +137 -0
- data/app/services/peak_flow_utils/erb_inspector/translation_inspector.rb +100 -0
- data/app/services/peak_flow_utils/group_service.rb +50 -0
- data/app/services/peak_flow_utils/handlers_finder_service.rb +25 -0
- data/app/services/peak_flow_utils/model_inspector.rb +133 -0
- data/app/services/peak_flow_utils/translation_service.rb +138 -0
- data/app/services/peak_flow_utils/translations_parser_service.rb +211 -0
- data/app/views/layouts/peak_flow_utils/application.html.erb +14 -0
- data/bin/peak_flow_rspec_files +4 -2
- data/config/routes.rb +2 -0
- data/lib/peak_flow_utils.rb +10 -2
- data/lib/peak_flow_utils/engine.rb +7 -0
- data/lib/peak_flow_utils/handler_helper.rb +39 -0
- data/lib/peak_flow_utils/rspec_helper.rb +162 -25
- data/lib/peak_flow_utils/version.rb +3 -0
- data/lib/tasks/peak_flow_utils_tasks.rake +6 -0
- metadata +121 -42
- data/.document +0 -5
- data/.rspec +0 -1
- data/.rubocop.yml +0 -83
- data/Gemfile +0 -20
- data/Gemfile.lock +0 -93
- data/VERSION +0 -1
- data/peak_flow_utils.gemspec +0 -65
- data/spec/peak_flow_utils_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -12
@@ -0,0 +1,211 @@
|
|
1
|
+
class PeakFlowUtils::TranslationsParserService < PeakFlowUtils::ApplicationService
|
2
|
+
attr_reader :db
|
3
|
+
|
4
|
+
def execute
|
5
|
+
PeakFlowUtils::DatabaseInitializerService.execute!
|
6
|
+
|
7
|
+
cache_translations_in_dir(Rails.root.join("config/locales"))
|
8
|
+
cache_translations_in_handlers
|
9
|
+
|
10
|
+
clean_up_not_found
|
11
|
+
|
12
|
+
ServicePattern::Response.new(success: true)
|
13
|
+
end
|
14
|
+
|
15
|
+
def with_transactioner
|
16
|
+
require "active-record-transactioner"
|
17
|
+
|
18
|
+
ActiveRecordTransactioner.new do |transactioner|
|
19
|
+
@transactioner = transactioner
|
20
|
+
yield
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.database_path
|
25
|
+
@database_path ||= Rails.root.join("db/peak_flow_utils.sqlite3").to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def database_path
|
29
|
+
@database_path ||= self.class.database_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def update_handlers
|
33
|
+
@handlers_found ||= {}
|
34
|
+
|
35
|
+
PeakFlowUtils::HandlersFinderService.execute!.each do |handler|
|
36
|
+
debug "Updating handler: #{handler.name}"
|
37
|
+
handler_model = PeakFlowUtils::Handler.find_or_initialize_by(identifier: handler.id)
|
38
|
+
handler_model.update!(name: handler.name)
|
39
|
+
|
40
|
+
@handlers_found[handler_model.id] = true
|
41
|
+
|
42
|
+
yield handler_model if block_given?
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def update_groups_for_handler(handler_model)
|
47
|
+
@groups_found ||= {}
|
48
|
+
handler = handler_model.at_handler
|
49
|
+
|
50
|
+
handler.groups.each do |group|
|
51
|
+
debug "Updating group: #{group.name}"
|
52
|
+
group_model = PeakFlowUtils::Group.find_or_initialize_by(handler_id: handler_model.id, identifier: group.id)
|
53
|
+
group_model.update!(name: group.name)
|
54
|
+
|
55
|
+
@groups_found[group_model.id] = true
|
56
|
+
|
57
|
+
group_model.at_group = group
|
58
|
+
yield group_model if block_given?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def update_translations_for_group(handler_model, group_model)
|
63
|
+
group = group_model.at_group
|
64
|
+
@translation_keys_found ||= {}
|
65
|
+
@handler_translations_found ||= {}
|
66
|
+
|
67
|
+
group.translations.each do |translation|
|
68
|
+
debug "Updating translation: #{translation.key}"
|
69
|
+
|
70
|
+
translation_key = PeakFlowUtils::TranslationKey.find_or_create_by!(key: translation.key)
|
71
|
+
|
72
|
+
raise "KEY ERROR: #{translation_key.inspect}" unless translation_key.id.to_i.positive?
|
73
|
+
|
74
|
+
@translation_keys_found[translation_key.id] = true
|
75
|
+
|
76
|
+
handler_translation = PeakFlowUtils::HandlerText.find_or_initialize_by(
|
77
|
+
translation_key_id: translation_key.id,
|
78
|
+
handler_id: handler_model.id,
|
79
|
+
group_id: group_model.id
|
80
|
+
)
|
81
|
+
handler_translation.assign_attributes(
|
82
|
+
default: translation.default,
|
83
|
+
file_path: translation.file_path,
|
84
|
+
line_no: translation.line_no,
|
85
|
+
key_show: translation.key_show,
|
86
|
+
full_path: translation.full_path,
|
87
|
+
dir: translation.dir
|
88
|
+
)
|
89
|
+
|
90
|
+
if @transactioner && handler_translation.persisted?
|
91
|
+
@transactioner.save!(handler_translation)
|
92
|
+
else
|
93
|
+
handler_translation.save!
|
94
|
+
end
|
95
|
+
|
96
|
+
@handler_translations_found[handler_translation.id] = true
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def debug(message)
|
103
|
+
puts message.to_s if @debug # rubocop:disable Rails/Output
|
104
|
+
end
|
105
|
+
|
106
|
+
def execute_migrations
|
107
|
+
require "baza_migrations"
|
108
|
+
|
109
|
+
executor = BazaMigrations::MigrationsExecutor.new(db: @db)
|
110
|
+
executor.add_dir "#{File.dirname(__FILE__)}/../../db/baza_translations_migrations"
|
111
|
+
executor.execute_migrations
|
112
|
+
end
|
113
|
+
|
114
|
+
def cache_translations_in_handlers
|
115
|
+
with_transactioner do
|
116
|
+
update_handlers do |handler_model|
|
117
|
+
update_groups_for_handler(handler_model) do |group_model|
|
118
|
+
update_translations_for_group(handler_model, group_model)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def cache_translations_in_dir(dir_path)
|
125
|
+
debug "Looking for translations in #{dir_path}"
|
126
|
+
@translation_values_found ||= {}
|
127
|
+
|
128
|
+
Dir.foreach(dir_path) do |file|
|
129
|
+
next if file == "." || file == ".."
|
130
|
+
|
131
|
+
full_path = "#{dir_path}/#{file}"
|
132
|
+
|
133
|
+
if File.directory?(full_path)
|
134
|
+
cache_translations_in_dir(full_path)
|
135
|
+
elsif File.extname(full_path) == ".yml"
|
136
|
+
cache_translations_in_file(full_path)
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def cache_translations_in_file(file_path)
|
142
|
+
@translation_keys_found ||= {}
|
143
|
+
|
144
|
+
debug "Cache translations in #{file_path}"
|
145
|
+
|
146
|
+
i18n_hash = YAML.load_file(file_path)
|
147
|
+
debug "Hash: #{i18n_hash}"
|
148
|
+
|
149
|
+
i18n_hash.each do |locale, translations|
|
150
|
+
cache_translations_in_hash(file_path, locale, translations)
|
151
|
+
end
|
152
|
+
|
153
|
+
debug "Done caching translations in #{file_path}"
|
154
|
+
end
|
155
|
+
|
156
|
+
def cache_translations_in_hash(file_path, locale, i18n_hash, keys = [])
|
157
|
+
i18n_hash.each do |key, value|
|
158
|
+
current_key = keys.clone
|
159
|
+
current_key << key
|
160
|
+
|
161
|
+
if value.is_a?(Hash)
|
162
|
+
debug "Found new hash: #{current_key.join(".")}"
|
163
|
+
cache_translations_in_hash(file_path, locale, value, current_key)
|
164
|
+
else
|
165
|
+
debug "Found new key: #{current_key.join(".")} translated to #{value}"
|
166
|
+
|
167
|
+
key = current_key.join(".")
|
168
|
+
|
169
|
+
translation_key = PeakFlowUtils::TranslationKey.find_or_create_by!(key: key)
|
170
|
+
@translation_keys_found[translation_key.id] = true
|
171
|
+
raise "KEY ERROR: #{translation_key.inspect}" unless translation_key.id.to_i.positive?
|
172
|
+
|
173
|
+
translation_value = PeakFlowUtils::TranslationValue.find_or_initialize_by(
|
174
|
+
translation_key_id: translation_key.id,
|
175
|
+
locale: locale,
|
176
|
+
file_path: file_path
|
177
|
+
)
|
178
|
+
translation_value.assign_attributes(value: value)
|
179
|
+
translation_value.save!
|
180
|
+
|
181
|
+
@translation_values_found[translation_value.id] = true
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
def clean_up_not_found
|
187
|
+
debug "Cleaning up not found"
|
188
|
+
|
189
|
+
PeakFlowUtils::ApplicationRecord.transaction do
|
190
|
+
PeakFlowUtils::Handler
|
191
|
+
.where.not(id: @handlers_found.keys)
|
192
|
+
.destroy_all
|
193
|
+
|
194
|
+
PeakFlowUtils::HandlerText
|
195
|
+
.where.not(id: @handler_translations_found.keys)
|
196
|
+
.destroy_all
|
197
|
+
|
198
|
+
PeakFlowUtils::Group
|
199
|
+
.where.not(id: @groups_found.keys)
|
200
|
+
.destroy_all
|
201
|
+
|
202
|
+
PeakFlowUtils::TranslationKey
|
203
|
+
.where.not(id: @translation_keys_found.keys)
|
204
|
+
.destroy_all
|
205
|
+
|
206
|
+
PeakFlowUtils::TranslationValue
|
207
|
+
.where.not(id: @translation_values_found.keys)
|
208
|
+
.destroy_all
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Peak flow utils</title>
|
5
|
+
<%= stylesheet_link_tag "peak_flow_utils/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "peak_flow_utils/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/bin/peak_flow_rspec_files
CHANGED
@@ -13,7 +13,9 @@ end
|
|
13
13
|
|
14
14
|
rspec_helper = PeakFlowUtils::RspecHelper.new(
|
15
15
|
groups: args.fetch("groups").to_i,
|
16
|
-
group_number: args.fetch("group-number").to_i
|
16
|
+
group_number: args.fetch("group-number").to_i,
|
17
|
+
only_types: args["only-types"]&.split(","),
|
18
|
+
tags: args["tags"]&.split(",")
|
17
19
|
)
|
18
20
|
|
19
|
-
print rspec_helper.group_files.join(" ")
|
21
|
+
print rspec_helper.group_files.map { |group_file| group_file.fetch(:path) }.join(" ")
|
data/config/routes.rb
ADDED
data/lib/peak_flow_utils.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative "peak_flow_utils/engine"
|
2
|
+
|
3
|
+
require "array_enumerator"
|
4
|
+
require "service_pattern"
|
5
|
+
|
6
|
+
module PeakFlowUtils
|
7
|
+
path = "#{File.dirname(__FILE__)}/peak_flow_utils"
|
8
|
+
|
9
|
+
autoload :RspecHelper, "#{path}/rspec_helper"
|
10
|
+
autoload :HandlerHelper, "#{path}/handler_helper"
|
3
11
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class PeakFlowUtils::HandlerHelper
|
2
|
+
delegate :translations, to: :instance
|
3
|
+
|
4
|
+
def self.find(id)
|
5
|
+
PeakFlowUtils::HandlersFinderService.execute!.each do |handler|
|
6
|
+
return handler if handler.id == id.to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
raise ActiveRecord::RecordNotFound, "Handlers not found: '#{id}'."
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(data)
|
13
|
+
@data = data
|
14
|
+
end
|
15
|
+
|
16
|
+
def id
|
17
|
+
@data.fetch(:id)
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_param
|
21
|
+
id
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
@data.fetch(:name)
|
26
|
+
end
|
27
|
+
|
28
|
+
def const
|
29
|
+
PeakFlowUtils.const_get(@data.fetch(:const_name))
|
30
|
+
end
|
31
|
+
|
32
|
+
def instance
|
33
|
+
const.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def groups
|
37
|
+
const.new.groups
|
38
|
+
end
|
39
|
+
end
|
@@ -1,54 +1,191 @@
|
|
1
1
|
class PeakFlowUtils::RspecHelper
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
attr_reader :only_types, :tags
|
3
|
+
|
4
|
+
def initialize(groups:, group_number:, only_types: nil, tags: nil)
|
5
|
+
@groups = groups
|
6
|
+
@group_number = group_number
|
7
|
+
@example_data_exists = File.exist?("spec/examples.txt")
|
8
|
+
@only_types = only_types
|
9
|
+
@tags = tags
|
10
|
+
end
|
11
|
+
|
12
|
+
def example_data_exists?
|
13
|
+
@example_data_exists
|
14
|
+
end
|
15
|
+
|
16
|
+
def example_data
|
17
|
+
@example_data ||= begin
|
18
|
+
raw_data = File.read("spec/examples.txt")
|
19
|
+
|
20
|
+
result = []
|
21
|
+
raw_data.scan(/^\.\/(.+)\[(.+?)\]\s+\|\s+(.+?)\s+\|\s+((.+?) seconds|)\s+\|$/) do |match|
|
22
|
+
file_path = match[0]
|
23
|
+
spec_result = match[1]
|
24
|
+
seconds = match[4]&.to_f
|
25
|
+
|
26
|
+
spec_data = {
|
27
|
+
file_path: file_path,
|
28
|
+
spec_result: spec_result,
|
29
|
+
seconds: seconds
|
30
|
+
}
|
31
|
+
|
32
|
+
result << spec_data
|
33
|
+
end
|
34
|
+
|
35
|
+
result
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def example_files
|
40
|
+
@example_files ||= begin
|
41
|
+
files = {}
|
42
|
+
example_data.each do |spec_data|
|
43
|
+
file_path = spec_data.fetch(:file_path)
|
44
|
+
seconds = spec_data.fetch(:seconds)
|
45
|
+
|
46
|
+
files[file_path] ||= {examples: 0, seconds: 0.0}
|
47
|
+
files[file_path][:examples] += 1
|
48
|
+
files[file_path][:seconds] += seconds if seconds
|
49
|
+
end
|
50
|
+
|
51
|
+
files
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def example_file(path)
|
56
|
+
example_files[path]
|
5
57
|
end
|
6
58
|
|
7
59
|
def group_files
|
8
60
|
return @group_files if @group_files
|
9
61
|
|
10
62
|
# Sort them so that they are sorted by file path in three groups so each group have an equal amount of controller specs, features specs and so on
|
11
|
-
|
12
|
-
|
13
|
-
|
63
|
+
|
64
|
+
sorted_files.each do |file|
|
65
|
+
file_path = file.fetch(:path)
|
66
|
+
file_data = example_file(file_path) if example_data_exists?
|
67
|
+
|
68
|
+
if file_data
|
69
|
+
examples = file_data.fetch(:examples)
|
70
|
+
seconds = file_data.fetch(:seconds)
|
71
|
+
else
|
72
|
+
examples = file.fetch(:examples)
|
73
|
+
end
|
74
|
+
|
75
|
+
group = group_with_least
|
76
|
+
group[:examples] += examples
|
77
|
+
group[:files] << file
|
78
|
+
group[:seconds] += seconds if seconds
|
14
79
|
end
|
15
80
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
81
|
+
@group_files = group_orders[@group_number - 1].fetch(:files)
|
82
|
+
end
|
83
|
+
|
84
|
+
def group_orders
|
85
|
+
@group_orders ||= begin
|
86
|
+
group_orders = []
|
87
|
+
@groups.times do
|
88
|
+
group_orders << {
|
89
|
+
examples: 0,
|
90
|
+
files: [],
|
91
|
+
seconds: 0.0
|
92
|
+
}
|
93
|
+
end
|
94
|
+
group_orders
|
21
95
|
end
|
96
|
+
end
|
22
97
|
|
23
|
-
|
98
|
+
def group_with_least
|
99
|
+
group_orders.min do |group1, group2|
|
100
|
+
if example_data_exists? && group1.fetch(:seconds) != 0.0 && group2.fetch(:seconds) != 0.0
|
101
|
+
group1.fetch(:seconds) <=> group2.fetch(:seconds)
|
102
|
+
else
|
103
|
+
group1.fetch(:examples) <=> group2.fetch(:examples)
|
104
|
+
end
|
105
|
+
end
|
24
106
|
end
|
25
107
|
|
26
|
-
def
|
27
|
-
files
|
28
|
-
|
108
|
+
def sorted_files
|
109
|
+
files.values.sort do |file1, file2|
|
110
|
+
file1_path = file1.fetch(:path)
|
111
|
+
file2_path = file2.fetch(:path)
|
112
|
+
|
113
|
+
file1_data = example_file(file1_path) if example_data_exists?
|
114
|
+
file2_data = example_file(file2_path) if example_data_exists?
|
115
|
+
|
116
|
+
if file1_data && file2_data && file1_data.fetch(:seconds) != 0.0 && file2_data.fetch(:seconds) != 0.0
|
117
|
+
value1 = file1_data[:seconds]
|
118
|
+
else
|
119
|
+
value1 = file1.fetch(:points)
|
120
|
+
end
|
121
|
+
|
122
|
+
if file2_data && file2_data && file2_data.fetch(:seconds) != 0.0 && file2_data.fetch(:seconds) != 0.0
|
123
|
+
value2 = file2_data[:seconds]
|
124
|
+
else
|
125
|
+
value2 = file2.fetch(:points)
|
126
|
+
end
|
127
|
+
|
128
|
+
value2 <=> value1
|
129
|
+
end
|
29
130
|
end
|
30
131
|
|
31
132
|
private
|
32
133
|
|
134
|
+
def dry_result_command
|
135
|
+
command = "bundle exec rspec --dry-run --format json"
|
136
|
+
|
137
|
+
tags&.each do |tag|
|
138
|
+
command << " --tag #{tag}"
|
139
|
+
end
|
140
|
+
|
141
|
+
command
|
142
|
+
end
|
143
|
+
|
33
144
|
def dry_result
|
34
145
|
require "json"
|
35
|
-
@dry_result ||= ::JSON.parse(`
|
146
|
+
@dry_result ||= ::JSON.parse(`#{dry_result_command}`)
|
147
|
+
end
|
148
|
+
|
149
|
+
def dry_file(path)
|
150
|
+
files.fetch(path)
|
36
151
|
end
|
37
152
|
|
38
153
|
def files
|
39
|
-
|
154
|
+
@files ||= begin
|
155
|
+
result = {}
|
156
|
+
dry_result.fetch("examples").each do |example|
|
157
|
+
file_path = example.fetch("file_path")
|
158
|
+
file_path = file_path[2, file_path.length]
|
159
|
+
type = type_from_path(file_path)
|
160
|
+
points = points_from_type(type)
|
40
161
|
|
41
|
-
|
162
|
+
next if ignore_type?(type)
|
42
163
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
164
|
+
result[file_path] = {examples: 0, path: file_path, points: 0, type: type} unless result.key?(file_path)
|
165
|
+
result[file_path][:examples] += 1
|
166
|
+
result[file_path][:points] += points
|
167
|
+
end
|
47
168
|
|
48
|
-
|
49
|
-
@total_tests += 1
|
169
|
+
result
|
50
170
|
end
|
171
|
+
end
|
51
172
|
|
52
|
-
|
173
|
+
def ignore_type?(type)
|
174
|
+
only_types && !only_types.include?(type)
|
175
|
+
end
|
176
|
+
|
177
|
+
def type_from_path(file_path)
|
178
|
+
match = file_path.match(/^spec\/(.+?)\//)
|
179
|
+
match[1] if match
|
180
|
+
end
|
181
|
+
|
182
|
+
def points_from_type(type)
|
183
|
+
if type == "feature" || type == "system"
|
184
|
+
10
|
185
|
+
elsif type == "controllers"
|
186
|
+
3
|
187
|
+
else
|
188
|
+
1
|
189
|
+
end
|
53
190
|
end
|
54
191
|
end
|