shaf 1.2.2 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +4 -1
- data.tar.gz.sig +0 -0
- data/lib/shaf.rb +1 -1
- data/lib/shaf/api_doc/document.rb +14 -9
- data/lib/shaf/command/upgrade.rb +31 -6
- data/lib/shaf/generator/serializer.rb +11 -9
- data/lib/shaf/generator/templates/spec/integration_spec.rb.erb +4 -4
- data/lib/shaf/resource_doc.rb +70 -0
- data/lib/shaf/tasks/api_doc_task.rb +5 -5
- data/lib/shaf/upgrade/package.rb +1 -1
- data/lib/shaf/upgrade/version.rb +3 -2
- data/lib/shaf/utils.rb +16 -2
- data/lib/shaf/version.rb +1 -1
- data/templates/api/controllers/docs_controller.rb +8 -6
- data/templates/api/serializers/documentation_serializer.rb +24 -0
- data/templates/frontend/views/layout.erb +1 -1
- data/upgrades/0.5.0.tar.gz +0 -0
- data/upgrades/0.5.1.tar.gz +0 -0
- data/upgrades/1.0.0.tar.gz +0 -0
- data/upgrades/1.3.0.tar.gz +0 -0
- metadata +6 -3
- metadata.gz.sig +0 -0
- data/lib/shaf/doc_model.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 319f7f6a1725c5e3e5d9ab293531dc72cced237cf5967d2beb3ef3f47c5be8e7
|
4
|
+
data.tar.gz: 4f37d5e9c0424c31c6dda4ec2c5e628920963d01dd61d367681504cd6f50f0e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3431790d086472d8cbac8ec9e51ed8fb02ddc4a402ec993a5ed7d17ea1eb048e89902693b3c4c3f88a3630c226fddc175dd4c0024136cac4adb43cd4d2869531
|
7
|
+
data.tar.gz: 004321671f62d6578e35c42ed1a1b3b1345bc9308743710dc5cc645195303af8235e30d4288ec6f8048c3ad7ab04ca6087912d27ea983b5ecc45768b997b6347
|
checksums.yaml.gz.sig
CHANGED
@@ -1 +1,4 @@
|
|
1
|
-
|
1
|
+
x��=����3.��
|
2
|
+
p?�2,x�)���F#�
|
3
|
+
|
4
|
+
OWO���א�ൠ4T�pDkZ�|ߌJ�;��,�ZgB|i:�8���l�y��Ԣ\u�.Ԛ]%D��,zy���Pr�<���B+���XC�p�,yޝԒ�wM�1�<x�M�KvK�H�VӤ��iC<;e�F��0#�G]3r�;{X�͕)<�Gң���I�
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/shaf.rb
CHANGED
@@ -40,7 +40,7 @@ module Shaf
|
|
40
40
|
@embeds[strip_curie(name)] = comment unless comment.empty?
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def valid?
|
44
44
|
return false unless model
|
45
45
|
attributes.merge(links).merge(curies).any?
|
46
46
|
end
|
@@ -70,12 +70,17 @@ module Shaf
|
|
70
70
|
hash.to_yaml
|
71
71
|
end
|
72
72
|
|
73
|
+
def markdown
|
74
|
+
generate_markdown!
|
75
|
+
@md[:doc]
|
76
|
+
end
|
77
|
+
|
73
78
|
def to_html
|
79
|
+
options = {autolink: true, fenced_code_blocks: true}
|
80
|
+
markdown_renderer = Redcarpet::Markdown.new(Redcarpet::Render::HTML, options)
|
81
|
+
html = markdown_renderer.render markdown
|
74
82
|
# For some reason redcarpet don't like to surround my markdown code blocks
|
75
83
|
# with <pre> tags, so let's fix that here.
|
76
|
-
options = {autolink: true, fenced_code_blocks: true}
|
77
|
-
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, options)
|
78
|
-
html = markdown.render(generate_markdown!)
|
79
84
|
html.gsub!("<code>", "<pre><code>")
|
80
85
|
html.gsub!("</code>", "</code></pre>")
|
81
86
|
html
|
@@ -103,26 +108,26 @@ module Shaf
|
|
103
108
|
end
|
104
109
|
|
105
110
|
def generate_title!
|
106
|
-
@md[:doc] = "
|
111
|
+
@md[:doc] = "# #{model.capitalize}\n"
|
107
112
|
@md[:title] = model.capitalize
|
108
113
|
end
|
109
114
|
|
110
115
|
def generate_policy!
|
111
116
|
return if policy.nil?
|
112
|
-
@md[:doc] << "
|
117
|
+
@md[:doc] << "## Policy\n#{policy}\n"
|
113
118
|
@md[:policy] = policy
|
114
119
|
end
|
115
120
|
|
116
121
|
def generate_section!(key:, heading:, sub_title: "")
|
117
122
|
list = send(key)
|
118
|
-
@md[:doc] << "
|
123
|
+
@md[:doc] << "## #{heading}\n"
|
119
124
|
@md[key] = {}
|
120
125
|
if list.empty?
|
121
126
|
@md[:doc] << "This resource does not have any documented #{heading.downcase}\n"
|
122
127
|
else
|
123
|
-
sub_title
|
128
|
+
sub_title += ": " unless sub_title.empty?
|
124
129
|
list.each do |name, comment|
|
125
|
-
@md[:doc] << "
|
130
|
+
@md[:doc] << "- *#{sub_title}#{name.tr('_', '-')}*\n #{comment.to_s.gsub("\n", "\n ")}\n\n"
|
126
131
|
@md[key][name] = comment.to_s.chomp
|
127
132
|
end
|
128
133
|
end
|
data/lib/shaf/command/upgrade.rb
CHANGED
@@ -24,10 +24,23 @@ module Shaf
|
|
24
24
|
|
25
25
|
def call
|
26
26
|
in_project_root do
|
27
|
-
upgrade_packages.each
|
27
|
+
upgrade_packages.each do |package|
|
28
|
+
next if skip? package
|
29
|
+
|
30
|
+
if package.version == current_failed_version
|
31
|
+
print_previous_failed_warning package.version
|
32
|
+
else
|
33
|
+
apply!(package)
|
34
|
+
end
|
35
|
+
|
36
|
+
write_shaf_version(package.version)
|
37
|
+
end
|
38
|
+
|
28
39
|
puts "\nProject is up-to-date! Shaf version: #{current_version}"
|
29
40
|
end
|
30
41
|
rescue UpgradeFailedError => e
|
42
|
+
write_shaf_upgrade_failure e.version
|
43
|
+
|
31
44
|
puts <<~ERR
|
32
45
|
|
33
46
|
Failed to upgrade project to version #{e.version}
|
@@ -35,13 +48,12 @@ module Shaf
|
|
35
48
|
For more info see:
|
36
49
|
https://github.com/sammyhenningsson/shaf/blob/master/doc/UPGRADE.md
|
37
50
|
ERR
|
51
|
+
|
52
|
+
raise
|
38
53
|
end
|
39
54
|
|
40
|
-
def apply(package)
|
41
|
-
|
42
|
-
package.load.apply or raise UpgradeFailedError.new(package.version)
|
43
|
-
end
|
44
|
-
write_shaf_version package.version.to_s
|
55
|
+
def apply!(package)
|
56
|
+
package.load.apply or raise UpgradeFailedError.new(package.version)
|
45
57
|
rescue Errno::ENOENT
|
46
58
|
raise UpgradeFailedError,
|
47
59
|
"Failed to execute system command 'patch'. Make sure that 'patch' installed!" \
|
@@ -70,6 +82,19 @@ module Shaf
|
|
70
82
|
def target_version
|
71
83
|
Shaf::Upgrade::Version.new(ENV.fetch('UPGRADE_TARGET', '99.9.9'))
|
72
84
|
end
|
85
|
+
|
86
|
+
def current_failed_version
|
87
|
+
version = read_shaf_upgrade_failure_version
|
88
|
+
Shaf::Upgrade::Version.new(version) if version
|
89
|
+
end
|
90
|
+
|
91
|
+
def print_previous_failed_warning(version)
|
92
|
+
puts <<~MSG
|
93
|
+
Previous upgrade to version #{version} failed!
|
94
|
+
Assuming all files has been fixed manually and continuing with
|
95
|
+
upgrade.
|
96
|
+
MSG
|
97
|
+
end
|
73
98
|
end
|
74
99
|
end
|
75
100
|
end
|
@@ -69,7 +69,7 @@ module Shaf
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def links
|
72
|
-
%w(collection self
|
72
|
+
%w(collection self edit-form doc:delete)
|
73
73
|
end
|
74
74
|
|
75
75
|
def curies_with_doc
|
@@ -108,7 +108,8 @@ module Shaf
|
|
108
108
|
"Send a POST request to this uri to create a new #{name}",
|
109
109
|
method: "GET or POST",
|
110
110
|
uri: "/#{plural_name}",
|
111
|
-
uri_helper: "#{plural_name}_uri"
|
111
|
+
uri_helper: "#{plural_name}_uri",
|
112
|
+
kwargs: ', embed_depth: 0'
|
112
113
|
)
|
113
114
|
end
|
114
115
|
|
@@ -123,7 +124,7 @@ module Shaf
|
|
123
124
|
|
124
125
|
def edit_link
|
125
126
|
link(
|
126
|
-
rel: "
|
127
|
+
rel: "edit-form",
|
127
128
|
desc: "Link to a form to edit this resource",
|
128
129
|
uri: "/#{plural_name}/5/edit",
|
129
130
|
uri_helper: "edit_#{name}_uri(resource)"
|
@@ -132,30 +133,31 @@ module Shaf
|
|
132
133
|
|
133
134
|
def delete_link
|
134
135
|
link(
|
135
|
-
rel: "
|
136
|
+
rel: "delete",
|
136
137
|
desc: "Link to delete this #{name}",
|
137
138
|
method: "DELETE",
|
138
139
|
uri: "/#{plural_name}/5",
|
139
|
-
uri_helper: "#{name}_uri(resource)"
|
140
|
+
uri_helper: "#{name}_uri(resource)",
|
141
|
+
kwargs: ", curie: :doc"
|
140
142
|
)
|
141
143
|
end
|
142
144
|
|
143
145
|
def create_link
|
144
146
|
link(
|
145
|
-
rel: "
|
147
|
+
rel: "create-form",
|
146
148
|
desc: "Link to a form used to create new #{name} resources",
|
147
149
|
uri: "/#{plural_name}/form",
|
148
150
|
uri_helper: "new_#{name}_uri"
|
149
151
|
)
|
150
152
|
end
|
151
153
|
|
152
|
-
def link(rel:, method: "GET", desc:, uri:, uri_helper:)
|
154
|
+
def link(rel:, method: "GET", desc:, uri:, uri_helper:, kwargs: "")
|
153
155
|
<<~EOS.split("\n")
|
154
156
|
# Auto generated doc:
|
155
157
|
# #{desc}.
|
156
158
|
# Method: #{method}
|
157
159
|
#{example(method, uri)}
|
158
|
-
link #{Utils.symbol_string(rel)} do
|
160
|
+
link #{Utils.symbol_string(rel)}#{kwargs} do
|
159
161
|
#{uri_helper}
|
160
162
|
end
|
161
163
|
EOS
|
@@ -188,7 +190,7 @@ module Shaf
|
|
188
190
|
curie(:doc) { doc_curie_uri('#{name}') }
|
189
191
|
|
190
192
|
link :self, #{plural_name}_uri
|
191
|
-
link :
|
193
|
+
link :up, root_uri
|
192
194
|
|
193
195
|
#{create_link.join("\n ")}
|
194
196
|
end
|
@@ -34,8 +34,8 @@ describe <%= model_class_name %>, type: :integration do
|
|
34
34
|
it "can create <%= plural_name %>" do
|
35
35
|
get <%= plural_name %>_uri
|
36
36
|
|
37
|
-
_(link_rels).must_include(:'
|
38
|
-
follow_rel :'
|
37
|
+
_(link_rels).must_include(:'create-form')
|
38
|
+
follow_rel :'create-form'
|
39
39
|
_(links[:self][:href]).must_equal new_<%= name %>_uri
|
40
40
|
_(attributes[:href]).must_equal <%= plural_name %>_uri
|
41
41
|
_(attributes[:method]).must_equal "POST"
|
@@ -72,8 +72,8 @@ describe <%= model_class_name %>, type: :integration do
|
|
72
72
|
get <%= name %>_uri(<%= name %>)
|
73
73
|
_(status).must_equal 200
|
74
74
|
|
75
|
-
_(link_rels).must_include(:'
|
76
|
-
follow_rel :'
|
75
|
+
_(link_rels).must_include(:'edit-form')
|
76
|
+
follow_rel :'edit-form'
|
77
77
|
|
78
78
|
_(links[:self][:href]).must_equal edit_<%= name %>_uri(<%= name %>)
|
79
79
|
_(attributes[:href]).must_equal <%= name %>_uri(<%= name %>)
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Shaf
|
4
|
+
class ResourceDoc
|
5
|
+
class << self
|
6
|
+
def find(name)
|
7
|
+
unless docs[name]
|
8
|
+
properties = load(name) or return
|
9
|
+
docs[name] = new(name, properties)
|
10
|
+
end
|
11
|
+
docs[name]
|
12
|
+
end
|
13
|
+
|
14
|
+
def find!(name)
|
15
|
+
find(name) or raise(Errors::NotFoundError, "No documentation for #{name}")
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def docs
|
21
|
+
@docs ||= {}
|
22
|
+
end
|
23
|
+
|
24
|
+
def load(name)
|
25
|
+
file = File.join(Settings.documents_dir, "#{name}.yml")
|
26
|
+
return YAML.load(File.read(file)) if File.exist? file
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :name, :attributes, :links, :curies, :embeds
|
31
|
+
|
32
|
+
def initialize(name, properties = {})
|
33
|
+
@name = name
|
34
|
+
@attributes = properties.fetch('attributes', {})
|
35
|
+
@links = properties.fetch('links', {})
|
36
|
+
@curies = properties.fetch('curies', {})
|
37
|
+
@embeds = properties.fetch('embeds', {})
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_s
|
41
|
+
JSON.pretty_generate(
|
42
|
+
attributes: attributes,
|
43
|
+
links: links,
|
44
|
+
curies: curies,
|
45
|
+
embeds: embeds,
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def attribute(attr)
|
50
|
+
attr_doc = attributes[attr.to_s]
|
51
|
+
return attr_doc if attr_doc
|
52
|
+
raise Errors::NotFoundError,
|
53
|
+
"No documentation for #{name} attribute '#{attr}'"
|
54
|
+
end
|
55
|
+
|
56
|
+
def link(rel)
|
57
|
+
link_doc = links[rel.to_s]
|
58
|
+
return link_doc if link_doc
|
59
|
+
raise Errors::NotFoundError,
|
60
|
+
"No documentation for #{name} link relation '#{rel}'"
|
61
|
+
end
|
62
|
+
|
63
|
+
def embedded(name)
|
64
|
+
embed_doc = embeds[name.to_s]
|
65
|
+
return embed_doc if embed_doc
|
66
|
+
raise Errors::NotFoundError,
|
67
|
+
"No documentation for #{name} embedded '#{name}'"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -28,7 +28,7 @@ module Shaf
|
|
28
28
|
files = Dir.glob(File.join(source_dir, "*.rb"))
|
29
29
|
files.each do |file|
|
30
30
|
read_file file do |doc|
|
31
|
-
next unless doc.
|
31
|
+
next unless doc.valid?
|
32
32
|
doc.write_html @html_output_dir
|
33
33
|
doc.write_yaml @yaml_output_dir
|
34
34
|
end
|
@@ -106,19 +106,19 @@ module Shaf
|
|
106
106
|
end
|
107
107
|
|
108
108
|
def attribute(line)
|
109
|
-
line[/\A\s*attribute
|
109
|
+
line[/\A\s*attribute\s+\(?:(\w+)/, 1]
|
110
110
|
end
|
111
111
|
|
112
112
|
def link(line)
|
113
|
-
line[/\A\s*link\s
|
113
|
+
line[/\A\s*link\s+\(?:?['"]?([-:\w]+)['"]?/, 1]
|
114
114
|
end
|
115
115
|
|
116
116
|
def curie(line)
|
117
|
-
line[/\A\s*curie\s
|
117
|
+
line[/\A\s*curie\s+\(?:'?([-\w]+)'?/, 1]
|
118
118
|
end
|
119
119
|
|
120
120
|
def embed(line)
|
121
|
-
line[/\A\s*embed\s
|
121
|
+
line[/\A\s*embed\s+\(?:'?([-:\w]+)'?/, 1]
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
data/lib/shaf/upgrade/package.rb
CHANGED
data/lib/shaf/upgrade/version.rb
CHANGED
data/lib/shaf/utils.rb
CHANGED
@@ -159,7 +159,10 @@ module Shaf
|
|
159
159
|
end
|
160
160
|
|
161
161
|
def write_shaf_file(data = {})
|
162
|
-
|
162
|
+
write_shaf_file! read_shaf_file.merge(data)
|
163
|
+
end
|
164
|
+
|
165
|
+
def write_shaf_file!(data = {})
|
163
166
|
File.write SHAF_VERSION_FILE,
|
164
167
|
YAML.dump(data)
|
165
168
|
end
|
@@ -168,8 +171,19 @@ module Shaf
|
|
168
171
|
read_shaf_file['version']
|
169
172
|
end
|
170
173
|
|
174
|
+
def read_shaf_upgrade_failure_version
|
175
|
+
read_shaf_file['failed_upgrade']
|
176
|
+
end
|
177
|
+
|
171
178
|
def write_shaf_version(version = nil)
|
172
|
-
|
179
|
+
version ||= Shaf::VERSION
|
180
|
+
data = read_shaf_file.merge('version' => version.to_s)
|
181
|
+
data.delete('failed_upgrade')
|
182
|
+
write_shaf_file! data
|
183
|
+
end
|
184
|
+
|
185
|
+
def write_shaf_upgrade_failure(version)
|
186
|
+
write_shaf_file 'failed_upgrade' => version.to_s
|
173
187
|
end
|
174
188
|
end
|
175
189
|
end
|
data/lib/shaf/version.rb
CHANGED
@@ -3,17 +3,19 @@ class DocsController < BaseController
|
|
3
3
|
register_uri :doc_curie, '/doc/:resource/rels/{rel}'
|
4
4
|
register_uri :documentation, '/doc/:resource'
|
5
5
|
|
6
|
-
|
6
|
+
before_action do
|
7
7
|
cache_control(:private, http_cache_max_age: :long)
|
8
|
-
doc.link(params[:rel])
|
9
8
|
end
|
10
9
|
|
11
|
-
get :
|
12
|
-
|
13
|
-
|
10
|
+
get :doc_curie_path do
|
11
|
+
respond_with doc, path: request.path_info, rel: params[:rel]
|
12
|
+
end
|
13
|
+
|
14
|
+
get :documentation_path do
|
15
|
+
respond_with doc, path: request.path_info
|
14
16
|
end
|
15
17
|
|
16
18
|
def doc
|
17
|
-
Shaf::
|
19
|
+
Shaf::ResourceDoc.find!(params[:resource])
|
18
20
|
end
|
19
21
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class DocumentationSerializer < BaseSerializer
|
2
|
+
model Shaf::ResourceDoc
|
3
|
+
|
4
|
+
link :self do
|
5
|
+
options[:path]
|
6
|
+
end
|
7
|
+
|
8
|
+
link :up do
|
9
|
+
next unless options[:rel] || options[:attribute]
|
10
|
+
documentation_path(resource.name)
|
11
|
+
end
|
12
|
+
|
13
|
+
post_serialize do |hash|
|
14
|
+
if rel = options[:rel]
|
15
|
+
hash[rel] = resource.link(rel)
|
16
|
+
elsif attr = options[:attribute]
|
17
|
+
hash[attr] = resource.attribute(attr)
|
18
|
+
else
|
19
|
+
hash[:attributes] = resource.attributes
|
20
|
+
hash[:rels] = resource.links
|
21
|
+
hash[:embeds] = resource.embeds
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/upgrades/0.5.0.tar.gz
CHANGED
Binary file
|
Binary file
|
data/upgrades/1.0.0.tar.gz
CHANGED
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shaf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sammy Henningsson
|
@@ -30,7 +30,7 @@ cert_chain:
|
|
30
30
|
ZMhjYR7sRczGJx+GxGU2EaR0bjRsPVlC4ywtFxoOfRG3WaJcpWGEoAoMJX6Z0bRv
|
31
31
|
M40=
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date: 2019-10-
|
33
|
+
date: 2019-10-24 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: minitest
|
@@ -161,7 +161,6 @@ files:
|
|
161
161
|
- lib/shaf/command/test/runner.rb
|
162
162
|
- lib/shaf/command/upgrade.rb
|
163
163
|
- lib/shaf/command/version.rb
|
164
|
-
- lib/shaf/doc_model.rb
|
165
164
|
- lib/shaf/errors.rb
|
166
165
|
- lib/shaf/extensions.rb
|
167
166
|
- lib/shaf/extensions/authorize.rb
|
@@ -213,6 +212,7 @@ files:
|
|
213
212
|
- lib/shaf/rake/db.rb
|
214
213
|
- lib/shaf/rake/test.rb
|
215
214
|
- lib/shaf/registrable_factory.rb
|
215
|
+
- lib/shaf/resource_doc.rb
|
216
216
|
- lib/shaf/router.rb
|
217
217
|
- lib/shaf/settings.rb
|
218
218
|
- lib/shaf/spec.rb
|
@@ -244,6 +244,7 @@ files:
|
|
244
244
|
- templates/api/controllers/root_controller.rb
|
245
245
|
- templates/api/policies/base_policy.rb
|
246
246
|
- templates/api/serializers/base_serializer.rb
|
247
|
+
- templates/api/serializers/documentation_serializer.rb
|
247
248
|
- templates/api/serializers/error_serializer.rb
|
248
249
|
- templates/api/serializers/form_serializer.rb
|
249
250
|
- templates/api/serializers/root_serializer.rb
|
@@ -271,12 +272,14 @@ files:
|
|
271
272
|
- templates/spec/spec_helper.rb
|
272
273
|
- upgrades/0.4.0.tar.gz
|
273
274
|
- upgrades/0.5.0.tar.gz
|
275
|
+
- upgrades/0.5.1.tar.gz
|
274
276
|
- upgrades/0.6.0.tar.gz
|
275
277
|
- upgrades/1.0.0.tar.gz
|
276
278
|
- upgrades/1.0.4.tar.gz
|
277
279
|
- upgrades/1.1.0.tar.gz
|
278
280
|
- upgrades/1.2.0.tar.gz
|
279
281
|
- upgrades/1.2.1.tar.gz
|
282
|
+
- upgrades/1.3.0.tar.gz
|
280
283
|
homepage:
|
281
284
|
licenses:
|
282
285
|
- MIT
|
metadata.gz.sig
CHANGED
Binary file
|
data/lib/shaf/doc_model.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Shaf
|
4
|
-
class DocModel
|
5
|
-
class << self
|
6
|
-
def find(name)
|
7
|
-
@@docs ||= {}
|
8
|
-
@@docs[name] ||= load(name)
|
9
|
-
new(name) if @@docs[name]
|
10
|
-
end
|
11
|
-
|
12
|
-
def find!(name)
|
13
|
-
find(name) or raise(Errors::NotFoundError, "No documentation for #{name}")
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def load(name)
|
19
|
-
file = File.join(Settings.documents_dir, "#{name}.yml")
|
20
|
-
return YAML.load(File.read(file)) if File.exist? file
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def initialize(name)
|
25
|
-
@name = name
|
26
|
-
end
|
27
|
-
|
28
|
-
def to_s
|
29
|
-
return "#{@name} not found" unless @@docs[@name]
|
30
|
-
JSON.pretty_generate(@@docs[@name])
|
31
|
-
end
|
32
|
-
|
33
|
-
def attribute(attr)
|
34
|
-
attr_doc = @@docs.dig(@name, 'attributes', attr.to_s)
|
35
|
-
return attr_doc if attr_doc
|
36
|
-
raise Errors::NotFoundError,
|
37
|
-
"No documentation for #{@name} attribute '#{attr}'"
|
38
|
-
end
|
39
|
-
|
40
|
-
def link(rel)
|
41
|
-
link_doc = @@docs.dig(@name, 'links', rel.to_s)
|
42
|
-
return link_doc if link_doc
|
43
|
-
raise Errors::NotFoundError,
|
44
|
-
"No documentation for #{@name} link relation '#{rel}'"
|
45
|
-
end
|
46
|
-
|
47
|
-
def embedded(name)
|
48
|
-
embed_doc = @@docs.dig(@name, 'embeds', name.to_s)
|
49
|
-
return embed_doc if embed_doc
|
50
|
-
raise Errors::NotFoundError,
|
51
|
-
"No documentation for #{@name} embedded '#{name}'"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|