forked from ViewComponent/view_component
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
120 lines (101 loc) · 3.4 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# frozen_string_literal: true
require "bundler/gem_tasks"
require "rake/testtask"
require "yard"
require "yard/mattr_accessor_handler"
Rake::TestTask.new(:test) do |t|
t.libs << "test"
t.libs << "lib"
t.test_files = FileList["test/**/*_test.rb"]
end
begin
require "rspec/core/rake_task"
RSpec::Core::RakeTask.new(:spec)
rescue LoadError
end
desc "Runs benchmarks against components"
task :partial_benchmark do
ruby "./performance/partial_benchmark.rb"
end
task :translatable_benchmark do
ruby "./performance/translatable_benchmark.rb"
end
namespace :coverage do
task :report do
require "simplecov"
require "simplecov-console"
SimpleCov.minimum_coverage 100
SimpleCov.collate Dir["{coverage,simplecov-resultset-*}/.resultset.json"], "rails" do
formatter SimpleCov::Formatter::Console
end
end
end
namespace :docs do
# Build api.md documentation page from YARD comments.
task :build do
YARD::Rake::YardocTask.new
puts "Building YARD documentation."
Rake::Task["yard"].execute
puts "Converting YARD documentation to Markdown files."
registry = YARD::RegistryStore.new
registry.load!(".yardoc")
meths =
registry
.get("ViewComponent::Base")
.meths
.select do |method|
!method.tag(:private) &&
method.path.include?("ViewComponent::Base") &&
method.visibility == :public &&
!method[:name].to_s.start_with?("_") # Ignore methods we mark as internal by prefixing with underscores
end.sort_by { |method| method[:name] }
instance_methods_to_document = meths.select { |method| method.scope != :class }
class_methods_to_document = meths.select { |method| method.scope == :class }
configuration_methods_to_document = registry.get("ViewComponent::Config").meths.select(&:reader?)
test_helper_methods_to_document = registry
.get("ViewComponent::TestHelpers")
.meths
.sort_by { |method| method[:name] }
.select do |method|
!method.tag(:private) &&
method.visibility == :public
end
require "rails"
require "action_controller"
require "view_component"
ViewComponent::Base.config.view_component_path = "view_component"
require "view_component/docs_builder_component"
error_keys = registry.keys.select { |key| key.to_s.include?("Error::MESSAGE") }.map(&:to_s)
docs = ActionController::Base.new.render_to_string(
ViewComponent::DocsBuilderComponent.new(
sections: [
ViewComponent::DocsBuilderComponent::Section.new(
heading: "Class methods",
methods: class_methods_to_document
),
ViewComponent::DocsBuilderComponent::Section.new(
heading: "Instance methods",
methods: instance_methods_to_document
),
ViewComponent::DocsBuilderComponent::Section.new(
heading: "Configuration",
methods: configuration_methods_to_document,
show_types: false
),
ViewComponent::DocsBuilderComponent::Section.new(
heading: "ViewComponent::TestHelpers",
methods: test_helper_methods_to_document
),
ViewComponent::DocsBuilderComponent::Section.new(
heading: "Errors",
error_klasses: error_keys
)
]
)
).chomp
File.open("docs/api.md", "w") do |f|
f.puts(docs)
end
end
end
task default: :test