mattock 0.2.0 → 0.2.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.
- data/lib/mattock/yard_extensions.rb +126 -0
- data/spec/template-host.rb +17 -0
- data/spec/yard-extensions.rb +1 -0
- data/yard_templates/default/module/html/setting_summary.erb +35 -0
- data/yard_templates/default/module/html/settings.erb +8 -0
- data/yard_templates/default/module/setup.rb +15 -0
- metadata +9 -3
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'yard'
|
2
|
+
YARD::Templates::Engine.register_template_path File::expand_path("../../../yard_templates", __FILE__)
|
3
|
+
|
4
|
+
module Mattock
|
5
|
+
module YARDExtensions
|
6
|
+
class SettingHandler < YARD::Handlers::Ruby::Base
|
7
|
+
include YARD::Parser::Ruby
|
8
|
+
|
9
|
+
handles method_call(:setting)
|
10
|
+
namespace_only
|
11
|
+
|
12
|
+
def extract_name(obj)
|
13
|
+
case obj.type
|
14
|
+
when :symbol_literal
|
15
|
+
obj.jump(:ident, :op, :kw, :const)[0]
|
16
|
+
when :string_literal
|
17
|
+
obj.jump(:tstring_content)[0]
|
18
|
+
else
|
19
|
+
raise YARD::Parser::UndocumentableError, obj.source
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def append_name(sexp, name)
|
24
|
+
prefix = sexp.jump(:ident, :string_content)
|
25
|
+
if prefix == sexp
|
26
|
+
raise YARD::Parser::UndocumentableError, sexp.source
|
27
|
+
end
|
28
|
+
|
29
|
+
"#{prefix[0]}.#{name}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def synthetic_setting(name, value=nil)
|
33
|
+
args = s( s(:string_literal, s(:string_content, s(:tstring_content, name))))
|
34
|
+
args << value unless value.nil?
|
35
|
+
args << false
|
36
|
+
new_call = s(:fcall, s(:ident, "setting"), s(:arg_paren, args))
|
37
|
+
new_call.line_range = (1..1)
|
38
|
+
new_call.traverse do |node|
|
39
|
+
node.full_source ||= ""
|
40
|
+
end
|
41
|
+
new_call.full_source = "setting('#{name}'#{value.nil? ? "" : ", #{value.source}"})"
|
42
|
+
new_call
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def process
|
47
|
+
#filter further based on NS === Configurable...
|
48
|
+
name = extract_name(statement.parameters.first)
|
49
|
+
|
50
|
+
value = statement.parameters(false)[1]
|
51
|
+
if !value.nil? and value.type == :fcall and value.jump(:ident)[0] == "nested"
|
52
|
+
remapped = value.parameters(false).first.map do |assoc|
|
53
|
+
new_name =
|
54
|
+
append_name(statement.parameters[0], extract_name(assoc[0]))
|
55
|
+
synthetic_setting(new_name, assoc[1])
|
56
|
+
end
|
57
|
+
parser.process(remapped)
|
58
|
+
return
|
59
|
+
end
|
60
|
+
|
61
|
+
setting = YARD::CodeObjects::MethodObject.new(namespace, name) do |set|
|
62
|
+
unless value.nil?
|
63
|
+
set['default_value'] = statement.parameters(false)[1].source
|
64
|
+
end
|
65
|
+
set.signature = "def #{name}"
|
66
|
+
if statement.comments.to_s.empty?
|
67
|
+
set.docstring = "The value of setting #{name}"
|
68
|
+
else
|
69
|
+
set.docstring = statement.comments
|
70
|
+
end
|
71
|
+
|
72
|
+
set.dynamic = true
|
73
|
+
end
|
74
|
+
|
75
|
+
register setting
|
76
|
+
(namespace[:settings] ||= []) << setting
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class SettingsHandler < SettingHandler
|
81
|
+
handles method_call(:settings)
|
82
|
+
namespace_only
|
83
|
+
|
84
|
+
def process
|
85
|
+
remapped = statement.parameters(false).first.map do |assoc|
|
86
|
+
new_name =
|
87
|
+
append_name(statement.parameters[0], extract_name(assoc[0]))
|
88
|
+
synthetic_setting(new_name, assoc[1])
|
89
|
+
end
|
90
|
+
parser.process(remapped)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class NilFieldsHandler < SettingHandler
|
95
|
+
handles method_call(:nil_field)
|
96
|
+
handles method_call(:nil_fields)
|
97
|
+
namespace_only
|
98
|
+
|
99
|
+
def a_nil
|
100
|
+
v = s(:kw, nil)
|
101
|
+
v.full_source = "nil"
|
102
|
+
v
|
103
|
+
end
|
104
|
+
|
105
|
+
def process
|
106
|
+
remapped = statement.parameters(false).map do |name|
|
107
|
+
synthetic_setting(extract_name(name), a_nil)
|
108
|
+
end
|
109
|
+
parser.process(remapped)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
class RequiredFieldsHandler < SettingHandler
|
114
|
+
handles method_call(:required_field)
|
115
|
+
handles method_call(:required_fields)
|
116
|
+
namespace_only
|
117
|
+
|
118
|
+
def process
|
119
|
+
remapped = statement.parameters(false).map do |name|
|
120
|
+
synthetic_setting(extract_name(name))
|
121
|
+
end
|
122
|
+
parser.process(remapped)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'mattock'
|
2
|
+
|
3
|
+
describe Mattock::TemplateHost do
|
4
|
+
let :template_host do
|
5
|
+
Object.new.tap do |host|
|
6
|
+
host.extend Mattock::TemplateHost
|
7
|
+
def host.test_value; "A test value"; end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should be able to do easy templating" do
|
12
|
+
template_host.valise = Mattock::ValiseManager.default_valise("spec_help")
|
13
|
+
template_host.render("test.erb").should == "Templated: A test value\n"
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'mattock/yard_extensions'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<li class="<%= @item.visibility %> <%= @item.has_tag?(:deprecated) ? 'deprecated' : '' %>">
|
2
|
+
<span class="summary_signature">
|
3
|
+
<% if @item.tags(:overload).size == 1 %>
|
4
|
+
<%= signature(@item.tag(:overload), true, !@item.attr_info) %>
|
5
|
+
<% else %>
|
6
|
+
<%= signature(@item, true, false, !@item.attr_info) %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% if @item.aliases.size > 0 %>
|
10
|
+
(also: <%= @item.aliases.map {|o| h(o.name(true)) }.join(", ") %>)
|
11
|
+
<% end %>
|
12
|
+
</span>
|
13
|
+
<% if @item.constructor? %>
|
14
|
+
<span class="note title constructor">constructor</span>
|
15
|
+
<% end %>
|
16
|
+
<% if rw = @item.attr_info %>
|
17
|
+
<% if rw[:read] && !rw[:write] %><span class="note title readonly">readonly</span><% end %>
|
18
|
+
<% if rw[:write] && !rw[:read] %><span class="note title writeonly">writeonly</span><% end %>
|
19
|
+
<% end %>
|
20
|
+
<% if @item.visibility != :public %><span class="note title <%= @item.visibility %>"><%= @item.visibility %></span><% end %>
|
21
|
+
<% if @item.has_tag?(:abstract) %><span class="abstract note title">Abstract</span><% end %>
|
22
|
+
<% if @item.has_tag?(:deprecated) %><span class="deprecated note title">Deprecated</span><% end %>
|
23
|
+
<% if @item.has_tag?(:api) && @item.tag(:api).text == 'private' %><span class="private note title">Private</span><% end %>
|
24
|
+
|
25
|
+
<% if @item.has_tag?(:deprecated) %>
|
26
|
+
<span class="summary_desc"><strong>Deprecated.</strong> <%= htmlify_line @item.tag(:deprecated).text %></span>
|
27
|
+
<% else %>
|
28
|
+
<span class="summary_desc"><%= htmlify_line docstring_summary(@item) %></span>
|
29
|
+
<% end %>
|
30
|
+
<% if !@item["default_value"] %>
|
31
|
+
<span class="summary_desc"><em>This setting must have a value set</em></span>
|
32
|
+
<%else%>
|
33
|
+
<span class="summary_desc">Default value: <code><%= @item["default_value"] %></code></span>
|
34
|
+
<%end%>
|
35
|
+
</li>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% groups(object[:settings] || [], "Settings") do |list, name| %>
|
2
|
+
<h2><%= name %> <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2>
|
3
|
+
<ul class="summary">
|
4
|
+
<% list.each do |meth| %>
|
5
|
+
<%= yieldall :item => meth %>
|
6
|
+
<% end %>
|
7
|
+
</ul>
|
8
|
+
<% end %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
def init
|
2
|
+
super
|
3
|
+
sections.place(:settings, [:setting_summary]).before(:attribute_summary)
|
4
|
+
end
|
5
|
+
|
6
|
+
def prune_method_listing(list, hide_attrs=true)
|
7
|
+
list = super
|
8
|
+
list.reject do |o|
|
9
|
+
unless CodeObjects::Proxy === o.namespace or o.namespace[:settings].nil?
|
10
|
+
o.namespace[:settings].include?(o)
|
11
|
+
else
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mattock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Judson Lester
|
@@ -110,12 +110,16 @@ extra_rdoc_files:
|
|
110
110
|
- doc/coverage/assets/0.5.3/loading.gif
|
111
111
|
- doc/coverage/assets/0.5.3/jquery-1.6.2.min.js
|
112
112
|
files:
|
113
|
+
- yard_templates/default/module/setup.rb
|
114
|
+
- yard_templates/default/module/html/setting_summary.erb
|
115
|
+
- yard_templates/default/module/html/settings.erb
|
113
116
|
- lib/mattock/command-line.rb
|
114
117
|
- lib/mattock/command-task.rb
|
115
118
|
- lib/mattock/testing/rake-example-group.rb
|
116
119
|
- lib/mattock/testing/mock-command-line.rb
|
117
120
|
- lib/mattock/testing/record-commands.rb
|
118
121
|
- lib/mattock/template-host.rb
|
122
|
+
- lib/mattock/yard_extensions.rb
|
119
123
|
- lib/mattock/remote-command-task.rb
|
120
124
|
- lib/mattock/tasklib.rb
|
121
125
|
- lib/mattock/task.rb
|
@@ -128,6 +132,8 @@ files:
|
|
128
132
|
- spec/command-task.rb
|
129
133
|
- spec/tasklib.rb
|
130
134
|
- spec/configurable.rb
|
135
|
+
- spec/yard-extensions.rb
|
136
|
+
- spec/template-host.rb
|
131
137
|
- spec_help/spec_helper.rb
|
132
138
|
- spec_help/gem_test_suite.rb
|
133
139
|
- doc/coverage/index.html
|
@@ -189,7 +195,7 @@ rdoc_options:
|
|
189
195
|
- --main
|
190
196
|
- doc/README
|
191
197
|
- --title
|
192
|
-
- mattock-0.2.
|
198
|
+
- mattock-0.2.1 RDoc
|
193
199
|
require_paths:
|
194
200
|
- lib/
|
195
201
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -197,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
197
203
|
requirements:
|
198
204
|
- - ">="
|
199
205
|
- !ruby/object:Gem::Version
|
200
|
-
hash:
|
206
|
+
hash: 697578897
|
201
207
|
segments:
|
202
208
|
- 0
|
203
209
|
version: "0"
|