shaf 2.1.0 → 3.0.1
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/shaf/app.rb +27 -9
- data/lib/shaf/command/base.rb +4 -0
- data/lib/shaf/command/new.rb +5 -1
- data/lib/shaf/command/server.rb +5 -1
- data/lib/shaf/command/templates/config/settings.yml.erb +9 -8
- data/lib/shaf/extensions/resource_uris.rb +37 -155
- data/lib/shaf/extensions/symbolic_routes.rb +5 -18
- data/lib/shaf/formable/builder.rb +58 -19
- data/lib/shaf/formable/form.rb +13 -10
- data/lib/shaf/formable.rb +10 -23
- data/lib/shaf/generator/base.rb +82 -0
- data/lib/shaf/generator/controller.rb +19 -35
- data/lib/shaf/generator/forms.rb +10 -14
- data/lib/shaf/generator/migration/add_column.rb +0 -4
- data/lib/shaf/generator/migration/add_index.rb +0 -4
- data/lib/shaf/generator/migration/base.rb +8 -0
- data/lib/shaf/generator/migration/create_table.rb +0 -4
- data/lib/shaf/generator/migration/drop_column.rb +0 -4
- data/lib/shaf/generator/migration/rename_column.rb +0 -4
- data/lib/shaf/generator/model.rb +29 -14
- data/lib/shaf/generator/policy.rb +8 -14
- data/lib/shaf/generator/profile.rb +9 -14
- data/lib/shaf/generator/scaffold.rb +6 -9
- data/lib/shaf/generator/serializer.rb +31 -30
- data/lib/shaf/generator/templates/api/controller.rb.erb +13 -13
- data/lib/shaf/generator/templates/api/forms.rb.erb +2 -2
- data/lib/shaf/generator/templates/api/model.rb.erb +1 -1
- data/lib/shaf/generator/templates/api/profile.rb.erb +1 -1
- data/lib/shaf/generator/templates/api/serializer.rb.erb +1 -1
- data/lib/shaf/generator/templates/spec/integration_spec.rb.erb +14 -14
- data/lib/shaf/helpers/paginate.rb +1 -1
- data/lib/shaf/link_relations.rb +77 -0
- data/lib/shaf/profile.rb +8 -8
- data/lib/shaf/registrable_factory.rb +62 -32
- data/lib/shaf/responder/problem_json.rb +1 -1
- data/lib/shaf/router.rb +65 -12
- data/lib/shaf/spec/integration_spec.rb +1 -1
- data/lib/shaf/tasks.rb +0 -1
- data/lib/shaf/upgrade/package.rb +5 -7
- data/lib/shaf/utils.rb +2 -2
- data/lib/shaf/version.rb +1 -1
- data/lib/shaf/yard/link_object.rb +2 -3
- data/templates/Rakefile +0 -6
- data/templates/api/controllers/base_controller.rb +0 -2
- data/templates/api/serializers/root_serializer.rb +0 -11
- data/templates/config/initializers/middleware.rb +6 -0
- data/templates/spec/spec_helper.rb +4 -1
- data/upgrades/3.0.0.tar.gz +0 -0
- data/yard_templates/api_doc/profile_attribute/html/attribute.erb +2 -1
- data/yard_templates/api_doc/resource_attribute/html/attribute.erb +2 -1
- data/yard_templates/api_doc/sidebar/html/profile_list.erb +2 -1
- data/yard_templates/api_doc/sidebar/html/serializer_list.erb +2 -1
- data.tar.gz.sig +0 -0
- metadata +34 -36
- metadata.gz.sig +0 -0
- data/lib/shaf/api_doc/comment.rb +0 -27
- data/lib/shaf/api_doc/document.rb +0 -137
- data/lib/shaf/api_doc/link_relations.rb +0 -77
- data/lib/shaf/middleware.rb +0 -1
- data/lib/shaf/tasks/api_doc_task.rb +0 -146
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'net/http'
|
4
|
-
require 'tempfile'
|
5
|
-
require 'uri'
|
6
|
-
require 'csv'
|
7
|
-
|
8
|
-
module Shaf
|
9
|
-
module ApiDoc
|
10
|
-
class LinkRelations
|
11
|
-
class LinkRelation
|
12
|
-
attr_reader :name, :description, :reference, :notes
|
13
|
-
|
14
|
-
def initialize(name, description, reference, notes)
|
15
|
-
@name = name.to_sym
|
16
|
-
@description = description.freeze
|
17
|
-
@reference = reference.freeze
|
18
|
-
@notes = notes.freeze
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class << self
|
23
|
-
IANA_URL = URI('https://www.iana.org/assignments/link-relations/link-relations-1.csv')
|
24
|
-
|
25
|
-
def all
|
26
|
-
relations.values
|
27
|
-
end
|
28
|
-
|
29
|
-
def [](key)
|
30
|
-
relations[key]
|
31
|
-
end
|
32
|
-
|
33
|
-
def []=(key, value)
|
34
|
-
relations[key] = value
|
35
|
-
end
|
36
|
-
|
37
|
-
def add(link_relation)
|
38
|
-
relations[link_relation.name] = link_relation
|
39
|
-
end
|
40
|
-
|
41
|
-
def load_iana
|
42
|
-
csv.each do |name, desc, ref, notes|
|
43
|
-
next if name == 'Relation Name'
|
44
|
-
add LinkRelation.new(name, desc, ref, notes)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def relations
|
51
|
-
@relations ||= {}
|
52
|
-
end
|
53
|
-
|
54
|
-
def tmp_file_name
|
55
|
-
File.join(Dir.tmpdir, 'shaf_iana_link_relations')
|
56
|
-
end
|
57
|
-
|
58
|
-
def csv
|
59
|
-
if File.readable? tmp_file_name
|
60
|
-
content = File.read(tmp_file_name)
|
61
|
-
return CSV.new(content)
|
62
|
-
end
|
63
|
-
|
64
|
-
response = Net::HTTP.get_response(IANA_URL)
|
65
|
-
|
66
|
-
if response.code.to_i == 200
|
67
|
-
content = response.body
|
68
|
-
File.open(tmp_file_name, 'w') { |file| file.write(content) }
|
69
|
-
CSV.new(content)
|
70
|
-
else
|
71
|
-
Utils.iana_link_relations_csv
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
data/lib/shaf/middleware.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'shaf/middleware/request_id'
|
@@ -1,146 +0,0 @@
|
|
1
|
-
module Shaf
|
2
|
-
module Tasks
|
3
|
-
class ApiDocTask
|
4
|
-
include Rake::DSL
|
5
|
-
|
6
|
-
attr_accessor :document_class, :source_dir, :html_output_dir, :yaml_output_dir
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
return show_deprecation_message if RUBY_VERSION >= '3.0.0'
|
10
|
-
|
11
|
-
require 'shaf/api_doc/document'
|
12
|
-
require 'shaf/api_doc/comment'
|
13
|
-
|
14
|
-
yield self if block_given?
|
15
|
-
validate_attributes!
|
16
|
-
@document_class ||= ApiDoc::Document
|
17
|
-
define_tasks
|
18
|
-
end
|
19
|
-
|
20
|
-
def validate_attributes!
|
21
|
-
raise "source_dir must be set!" unless source_dir
|
22
|
-
raise "html_output_dir must be configured in ApiDocTask" unless html_output_dir
|
23
|
-
raise "yaml_output_dir must be configured in ApiDocTask" unless yaml_output_dir
|
24
|
-
end
|
25
|
-
|
26
|
-
def define_tasks
|
27
|
-
namespace :doc do
|
28
|
-
desc "Generate API documentation"
|
29
|
-
task :generate do
|
30
|
-
show_deprecation_message
|
31
|
-
|
32
|
-
files = Dir.glob(File.join(source_dir, "*.rb"))
|
33
|
-
files.each do |file|
|
34
|
-
read_file file do |doc|
|
35
|
-
next unless doc.valid?
|
36
|
-
doc.write_html @html_output_dir
|
37
|
-
doc.write_yaml @yaml_output_dir
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
desc "Remove generated documentation"
|
43
|
-
task :clean do
|
44
|
-
[
|
45
|
-
Dir.glob(File.join(@yaml_output_dir, "*.yml")),
|
46
|
-
Dir.glob(File.join(@html_output_dir, "*.html"))
|
47
|
-
].flatten.each do |file|
|
48
|
-
File.unlink file
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def show_deprecation_message
|
55
|
-
ruby3_msg = <<~RUBY3 if RUBY_VERSION >= '3.0.0'
|
56
|
-
|
57
|
-
Due to errors with the Redcarpet gem it's not possible to use this deprecated rake task with Ruby >= 3.0.0
|
58
|
-
If you need to continue with this task please use an older version of Ruby.
|
59
|
-
RUBY3
|
60
|
-
|
61
|
-
puts <<~MSG
|
62
|
-
This way of generating documentation is DEPRECATED.#{ruby3_msg}
|
63
|
-
|
64
|
-
Please move the documentation comments into profiles instead and run:
|
65
|
-
shaf generate doc
|
66
|
-
See https://github.com/sammyhenningsson/shaf/blob/main/doc/DOCUMENTATION.md for more info
|
67
|
-
|
68
|
-
MSG
|
69
|
-
end
|
70
|
-
|
71
|
-
def read_file(file)
|
72
|
-
doc = document_class.new
|
73
|
-
comment = ApiDoc::Comment.new
|
74
|
-
|
75
|
-
File.readlines(file).each do |line|
|
76
|
-
next if empty_line?(line)
|
77
|
-
|
78
|
-
if c = comment(line)
|
79
|
-
comment << c
|
80
|
-
next
|
81
|
-
end
|
82
|
-
|
83
|
-
parse_line(line, doc, comment)
|
84
|
-
comment = ApiDoc::Comment.new
|
85
|
-
end
|
86
|
-
|
87
|
-
return doc unless block_given?
|
88
|
-
yield doc
|
89
|
-
end
|
90
|
-
|
91
|
-
def parse_line(line, doc, comment)
|
92
|
-
if model = model(line)
|
93
|
-
doc.model = model
|
94
|
-
elsif serializer_class = serializer_class(line)
|
95
|
-
doc.serializer_class = serializer_class
|
96
|
-
elsif policy = policy(line)
|
97
|
-
doc.policy = policy
|
98
|
-
elsif attr = attribute(line)
|
99
|
-
doc.attribute(attr, comment)
|
100
|
-
elsif rel = link(line)
|
101
|
-
doc.link(rel, comment)
|
102
|
-
elsif rel = curie(line)
|
103
|
-
doc.curie(rel, comment)
|
104
|
-
elsif name = embed(line)
|
105
|
-
doc.embedded(name, comment)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def empty_line?(line)
|
110
|
-
true if line[/\A[#\s*]*\Z/]
|
111
|
-
end
|
112
|
-
|
113
|
-
def serializer_class(line)
|
114
|
-
line[/\A\s*class\s*(\w+)\Z/, 1]
|
115
|
-
end
|
116
|
-
|
117
|
-
def model(line)
|
118
|
-
line[/\A\s*model\s*(?:::)?(\w+)/, 1]
|
119
|
-
end
|
120
|
-
|
121
|
-
def policy(line)
|
122
|
-
line[/\A\s*policy\s*(?:::)?(\w+)/, 1]
|
123
|
-
end
|
124
|
-
|
125
|
-
def comment(line)
|
126
|
-
line[/\A\s*#(.*)/, 1]
|
127
|
-
end
|
128
|
-
|
129
|
-
def attribute(line)
|
130
|
-
line[/\A\s*attribute\s+\(?:(\w+)/, 1]
|
131
|
-
end
|
132
|
-
|
133
|
-
def link(line)
|
134
|
-
line[/\A\s*link\s+\(?:?['"]?([-:\w]+)['"]?/, 1]
|
135
|
-
end
|
136
|
-
|
137
|
-
def curie(line)
|
138
|
-
line[/\A\s*curie\s+\(?:'?([-\w]+)'?/, 1]
|
139
|
-
end
|
140
|
-
|
141
|
-
def embed(line)
|
142
|
-
line[/\A\s*embed\s+\(?:'?([-:\w]+)'?/, 1]
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|