shomen-model 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby +53 -0
- data/.yardopts +7 -0
- data/HISTORY.md +9 -0
- data/LICENSE.txt +28 -0
- data/README.md +82 -0
- data/lib/shomen-model.rb +35 -0
- data/lib/shomen-model.yml +53 -0
- data/lib/shomen-model/abstract.rb +114 -0
- data/lib/shomen-model/attribute.rb +23 -0
- data/lib/shomen-model/class.rb +18 -0
- data/lib/shomen-model/constant.rb +32 -0
- data/lib/shomen-model/core_ext.rb +5 -0
- data/lib/shomen-model/document.rb +48 -0
- data/lib/shomen-model/generator.rb +187 -0
- data/lib/shomen-model/interface.rb +33 -0
- data/lib/shomen-model/metadata.rb +83 -0
- data/lib/shomen-model/method.rb +101 -0
- data/lib/shomen-model/module.rb +54 -0
- data/lib/shomen-model/script.rb +72 -0
- metadata +81 -0
data/.ruby
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
---
|
2
|
+
source:
|
3
|
+
- meta
|
4
|
+
authors:
|
5
|
+
- name: trans
|
6
|
+
email: transfire@gmail.com
|
7
|
+
copyrights: []
|
8
|
+
requirements:
|
9
|
+
- name: detroit
|
10
|
+
groups:
|
11
|
+
- build
|
12
|
+
development: true
|
13
|
+
dependencies: []
|
14
|
+
alternatives: []
|
15
|
+
conflicts: []
|
16
|
+
repositories:
|
17
|
+
- uri: git://github.com/rubyworks/shomen-model.git
|
18
|
+
scm: git
|
19
|
+
name: upstream
|
20
|
+
resources:
|
21
|
+
- uri: http://rubyworks.github.com/shomen-model
|
22
|
+
name: home
|
23
|
+
type: home
|
24
|
+
- uri: http://rubydoc.info/gems/shomen-model/frames
|
25
|
+
name: docs
|
26
|
+
type: doc
|
27
|
+
- uri: http://github.com/rubyworks/shomen-model
|
28
|
+
name: code
|
29
|
+
type: code
|
30
|
+
- uri: http://github.com/rubyworks/shomen-model/issues
|
31
|
+
name: bugs
|
32
|
+
type: bugs
|
33
|
+
- uri: http://groups.google.com/groups/rubyworks-mailinglist
|
34
|
+
name: mail
|
35
|
+
type: mail
|
36
|
+
- uri: http://chat.us.freenode.net/rubyworks
|
37
|
+
name: chat
|
38
|
+
type: chat
|
39
|
+
extra: {}
|
40
|
+
load_path:
|
41
|
+
- lib
|
42
|
+
revision: 0
|
43
|
+
created: '2010-07-01'
|
44
|
+
summary: Ruby Models for Shomen Documentation Format
|
45
|
+
title: Shomen Model
|
46
|
+
version: 0.1.0
|
47
|
+
name: shomen-model
|
48
|
+
description: ! "Shomen defines a standard API documentaiton format for object-oriented
|
49
|
+
software\n(Ruby programs in particular) which can be used by documentation interfaces,
|
50
|
+
\ne.g. Hypervisor, to render API documentation. Shomen Model is a set of Ruby\nclasses
|
51
|
+
the module this format, and can be used to generate Shomen documentation."
|
52
|
+
organization: rubyworks
|
53
|
+
date: '2012-04-20'
|
data/.yardopts
ADDED
data/HISTORY.md
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Shomen Model - Ruby Models for Shomen Documentation Format
|
2
|
+
(http://github.com/rubyworks/shomen)
|
3
|
+
|
4
|
+
Copyright (c) 2011 Rubyworks. All rights reserved.
|
5
|
+
|
6
|
+
Redistribution and use in source and binary forms,
|
7
|
+
with or without modification, are permitted provided that the following
|
8
|
+
conditions are met:
|
9
|
+
|
10
|
+
1. Redistributions of source code must retain the above copyright notice,
|
11
|
+
this list of conditions and the following disclaimer.
|
12
|
+
|
13
|
+
2. Redistributions in binary form must reproduce the above copyright
|
14
|
+
notice, this list of conditions and the following disclaimer in the
|
15
|
+
documentation and/or other materials provided with the distribution.
|
16
|
+
|
17
|
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
18
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
20
|
+
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
21
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
22
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
24
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
26
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
+
|
28
|
+
SPDX: BSD-2-Clause
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# Shomen
|
2
|
+
|
3
|
+
[Website](http://rubyworks.github.com/shomen) /
|
4
|
+
[User Manual](http://github.com/rubyworks/shomen/wiki) /
|
5
|
+
[Development](http://github.com/rubyworks/shomen) /
|
6
|
+
[Mailing List](http://groups.google.com/groups/rubyworks-mailinglist) /
|
7
|
+
[IRC Channel](http://chat.us.freenode.net/rubyworks)
|
8
|
+
|
9
|
+
|
10
|
+
## Description
|
11
|
+
|
12
|
+
Shomen is an intermediary documentation model designed for documenting
|
13
|
+
object-oriented programming languages, particularly Ruby. The specification
|
14
|
+
is a flat mapping, without internal referencing, suitable for storage in both
|
15
|
+
YAML and JSON formats.
|
16
|
+
|
17
|
+
|
18
|
+
## Why?
|
19
|
+
|
20
|
+
By using a standard intermediary format, documentation parsers need only concern
|
21
|
+
themselves with a single output target. And documentation templates in turn only
|
22
|
+
need to concern themselves with a single input format regardless of the parsing
|
23
|
+
system that was used to generate it.
|
24
|
+
|
25
|
+
|
26
|
+
## Features
|
27
|
+
|
28
|
+
* Update a single portable file to update documentation.
|
29
|
+
* Site disc footprint is extra small thanks to CDNs.
|
30
|
+
* Personalize site design to best fit your project.
|
31
|
+
* Test drive others customizations with your own remote docs!
|
32
|
+
|
33
|
+
|
34
|
+
## Instructions
|
35
|
+
|
36
|
+
To learn about Shomen in detail please visit:
|
37
|
+
|
38
|
+
* [User Manual](http://github.com/rubyworks/shomen/wiki)
|
39
|
+
* [API Documentation](http://rubyworks.github.com/shomen)
|
40
|
+
|
41
|
+
Overall usage consists of generating a Shomen documentation file for a
|
42
|
+
project. Typical usage looks something like:
|
43
|
+
|
44
|
+
$ shomen -R -r README.rdoc lib - [A-Z]*.* > doc.json
|
45
|
+
|
46
|
+
Next you want to pair up your doc.json file with a viewer. Currently that means
|
47
|
+
using one of the following:
|
48
|
+
|
49
|
+
* [HyperVisor](http://github.com/rubyworks/hypervisor)
|
50
|
+
* [Rebecca](http://github.com/rubyworks/rebecca)
|
51
|
+
* [Rubyfaux](http://github.com/rubyworks/rubyfaux)
|
52
|
+
|
53
|
+
You can copy any of those repos to your website (e.g. site/) and run with it.
|
54
|
+
If you want to try it out locally, we recommend using [thin](http://code.macournoyer.com/thin/)
|
55
|
+
to view the site.
|
56
|
+
|
57
|
+
$ cd site
|
58
|
+
$ thin start -A file
|
59
|
+
|
60
|
+
If you can't use thin, Shomen provides a simplistic rack-based static server
|
61
|
+
which can be used.
|
62
|
+
|
63
|
+
$ cd site
|
64
|
+
$ shomen-server
|
65
|
+
|
66
|
+
Viewers don't necessarily need to be copied. All three above can take
|
67
|
+
a `doc={url-to-shomen-json-file}` http parameter and server up the docs remotely.
|
68
|
+
You just need to publish your `doc.json` file to a publicly accessible URL.
|
69
|
+
Note, I recommend that in this case you name the file more specifically,
|
70
|
+
e.g. `myapp-1.0.0.json`.
|
71
|
+
|
72
|
+
See the viewer projects for more information.
|
73
|
+
|
74
|
+
|
75
|
+
## Copying
|
76
|
+
|
77
|
+
Copyright (c) 2010 Rubyworks
|
78
|
+
|
79
|
+
Shomen is distributed under the terms of the **BSD-2-Clause** license.
|
80
|
+
|
81
|
+
See License.txt for license details.
|
82
|
+
|
data/lib/shomen-model.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Shomen is an intermediary documentation model designed for documenting
|
2
|
+
# object-oriented programming languages, particularly Ruby. The specification
|
3
|
+
# is a flat mapping, without internal referencing, suitable for storage in both
|
4
|
+
# YAML and JSON formats.
|
5
|
+
#
|
6
|
+
module Shomen
|
7
|
+
end
|
8
|
+
|
9
|
+
if RUBY_VERSION > '1.9'
|
10
|
+
require_relative 'shomen-model/core_ext'
|
11
|
+
require_relative 'shomen-model/generator'
|
12
|
+
require_relative 'shomen-model/abstract'
|
13
|
+
require_relative 'shomen-model/document'
|
14
|
+
require_relative 'shomen-model/script'
|
15
|
+
require_relative 'shomen-model/module'
|
16
|
+
require_relative 'shomen-model/class'
|
17
|
+
require_relative 'shomen-model/method'
|
18
|
+
require_relative 'shomen-model/attribute'
|
19
|
+
# require_relative 'shomen-model/function'
|
20
|
+
require_relative 'shomen-model/constant'
|
21
|
+
require_relative 'shomen-model/metadata'
|
22
|
+
else
|
23
|
+
require 'shomen-model/core_ext'
|
24
|
+
require 'shomen-model/generator'
|
25
|
+
require 'shomen-model/abstract'
|
26
|
+
require 'shomen-model/document'
|
27
|
+
require 'shomen-model/script'
|
28
|
+
require 'shomen-model/module'
|
29
|
+
require 'shomen-model/class'
|
30
|
+
require 'shomen-model/method'
|
31
|
+
require 'shomen-model/attribute'
|
32
|
+
# require 'shomen-model/function'
|
33
|
+
require 'shomen-model/constant'
|
34
|
+
require 'shomen-model/metadata'
|
35
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
---
|
2
|
+
source:
|
3
|
+
- meta
|
4
|
+
authors:
|
5
|
+
- name: trans
|
6
|
+
email: transfire@gmail.com
|
7
|
+
copyrights: []
|
8
|
+
requirements:
|
9
|
+
- name: detroit
|
10
|
+
groups:
|
11
|
+
- build
|
12
|
+
development: true
|
13
|
+
dependencies: []
|
14
|
+
alternatives: []
|
15
|
+
conflicts: []
|
16
|
+
repositories:
|
17
|
+
- uri: git://github.com/rubyworks/shomen-model.git
|
18
|
+
scm: git
|
19
|
+
name: upstream
|
20
|
+
resources:
|
21
|
+
- uri: http://rubyworks.github.com/shomen-model
|
22
|
+
name: home
|
23
|
+
type: home
|
24
|
+
- uri: http://rubydoc.info/gems/shomen-model/frames
|
25
|
+
name: docs
|
26
|
+
type: doc
|
27
|
+
- uri: http://github.com/rubyworks/shomen-model
|
28
|
+
name: code
|
29
|
+
type: code
|
30
|
+
- uri: http://github.com/rubyworks/shomen-model/issues
|
31
|
+
name: bugs
|
32
|
+
type: bugs
|
33
|
+
- uri: http://groups.google.com/groups/rubyworks-mailinglist
|
34
|
+
name: mail
|
35
|
+
type: mail
|
36
|
+
- uri: http://chat.us.freenode.net/rubyworks
|
37
|
+
name: chat
|
38
|
+
type: chat
|
39
|
+
extra: {}
|
40
|
+
load_path:
|
41
|
+
- lib
|
42
|
+
revision: 0
|
43
|
+
created: '2010-07-01'
|
44
|
+
summary: Ruby Models for Shomen Documentation Format
|
45
|
+
title: Shomen Model
|
46
|
+
version: 0.1.0
|
47
|
+
name: shomen-model
|
48
|
+
description: ! "Shomen defines a standard API documentaiton format for object-oriented
|
49
|
+
software\n(Ruby programs in particular) which can be used by documentation interfaces,
|
50
|
+
\ne.g. Hypervisor, to render API documentation. Shomen Model is a set of Ruby\nclasses
|
51
|
+
the module this format, and can be used to generate Shomen documentation."
|
52
|
+
organization: rubyworks
|
53
|
+
date: '2012-04-20'
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
# Base class for all model classes.
|
6
|
+
#
|
7
|
+
class AbstractPrime
|
8
|
+
|
9
|
+
# Models use an internal hash to store attributes instead of
|
10
|
+
# the usual instance methods.
|
11
|
+
#
|
12
|
+
# Returns nothing.
|
13
|
+
def self.attr_accessor(name)
|
14
|
+
name = name.to_s
|
15
|
+
define_method(name) do
|
16
|
+
self[name]
|
17
|
+
end
|
18
|
+
define_method(name+'=') do |x|
|
19
|
+
self[name] = x
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Module type is the "last name" of the module downcased.
|
24
|
+
#
|
25
|
+
# Returns String of module type.
|
26
|
+
def self.type
|
27
|
+
name.split('::').last.downcase
|
28
|
+
end
|
29
|
+
|
30
|
+
# Initialize new instance of model.
|
31
|
+
#
|
32
|
+
# settings - Hash of attribute settings.
|
33
|
+
#
|
34
|
+
# Returns new model instance.
|
35
|
+
def initialize(settings={})
|
36
|
+
@table = {}
|
37
|
+
settings.each do |k,v|
|
38
|
+
s = "#{k}=".gsub('-','_')
|
39
|
+
__send__(s,v)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Fetch attribute.
|
44
|
+
#
|
45
|
+
# key - String of attribute's name.
|
46
|
+
#
|
47
|
+
# Returns attribute value.
|
48
|
+
def [](key)
|
49
|
+
@table[key.to_s]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Store attribute.
|
53
|
+
#
|
54
|
+
# key - String of attribute's name.
|
55
|
+
# value - Object as value of attribute.
|
56
|
+
#
|
57
|
+
# Returns attribute value.
|
58
|
+
def []=(k,v)
|
59
|
+
@table[k.to_s] = v
|
60
|
+
end
|
61
|
+
|
62
|
+
# Convert attributes to hash, including all nested object
|
63
|
+
# that repsond to #to_h.
|
64
|
+
#
|
65
|
+
# Returns Hash of attribute's key-value pairs.
|
66
|
+
def to_h
|
67
|
+
t = {}
|
68
|
+
@table.each do |k,v|
|
69
|
+
if v.respond_to?(:to_h)
|
70
|
+
t[k] = v.to_h
|
71
|
+
else
|
72
|
+
t[k] = v
|
73
|
+
end
|
74
|
+
end
|
75
|
+
t
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
# Abstract base class for model classes that have a type field,
|
81
|
+
# i.e. a `!` field.
|
82
|
+
#
|
83
|
+
class Abstract < AbstractPrime
|
84
|
+
|
85
|
+
# Initialize new model instance.
|
86
|
+
def initialize(settings={})
|
87
|
+
super(settings)
|
88
|
+
@table['!'] = self.class.type
|
89
|
+
end
|
90
|
+
|
91
|
+
# Full path name of documentation entry.
|
92
|
+
#
|
93
|
+
# Returns String.
|
94
|
+
attr_accessor :path
|
95
|
+
|
96
|
+
# Hash of `label => description`.
|
97
|
+
#
|
98
|
+
# Returns Hash.
|
99
|
+
attr_accessor :tags
|
100
|
+
|
101
|
+
# Type of documentation entry. Valid types are `document`,
|
102
|
+
# `script`, `method`, `class_method`, `constant` and, for one
|
103
|
+
# entry only, `(metadata)`.
|
104
|
+
#
|
105
|
+
# Retuns String of documentation entry type.
|
106
|
+
def type
|
107
|
+
self['!']
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Attribute < Method
|
7
|
+
#
|
8
|
+
def self.type; 'attribute'; end
|
9
|
+
|
10
|
+
#
|
11
|
+
def initialize(settings={})
|
12
|
+
super(settings)
|
13
|
+
self['!'] = settings['singleton'] ? 'class-attribute' : 'attribute'
|
14
|
+
end
|
15
|
+
|
16
|
+
# 'R', 'W' or 'RW'
|
17
|
+
attr_accessor :rw
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Constant < Abstract
|
7
|
+
#
|
8
|
+
def self.type; 'constant'; end
|
9
|
+
|
10
|
+
# Constant's basename, must start with a capitalized letter.
|
11
|
+
attr_accessor :name
|
12
|
+
|
13
|
+
#
|
14
|
+
attr_accessor :namespace
|
15
|
+
|
16
|
+
#
|
17
|
+
attr_accessor :comment
|
18
|
+
|
19
|
+
# Format of comment (rdoc, markdown or plain).
|
20
|
+
attr_accessor :format
|
21
|
+
|
22
|
+
#
|
23
|
+
attr_accessor :value
|
24
|
+
|
25
|
+
#
|
26
|
+
attr_accessor :files
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Document < Abstract
|
7
|
+
#
|
8
|
+
def self.type
|
9
|
+
'document'
|
10
|
+
end
|
11
|
+
|
12
|
+
#def key=(path)
|
13
|
+
# path = '/' + path unless path[0,1] == '/'
|
14
|
+
# super(path)
|
15
|
+
#end
|
16
|
+
|
17
|
+
attr_accessor :name
|
18
|
+
|
19
|
+
#attr_accessor :parent
|
20
|
+
|
21
|
+
attr_accessor :path
|
22
|
+
|
23
|
+
# Time stamp when script was last modifed.
|
24
|
+
attr_accessor :modified
|
25
|
+
|
26
|
+
alias :mtime :modified
|
27
|
+
alias :mtime= :modified=
|
28
|
+
|
29
|
+
# Time stamp when script was first created.
|
30
|
+
attr_accessor :created
|
31
|
+
|
32
|
+
alias :ctime :created
|
33
|
+
alias :ctime= :created=
|
34
|
+
|
35
|
+
# Source code URI.
|
36
|
+
attr_accessor :uri
|
37
|
+
|
38
|
+
#
|
39
|
+
attr_accessor :text
|
40
|
+
|
41
|
+
# Format of comment (rdoc, markdown or plain).
|
42
|
+
attr_accessor :format
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
begin; gem 'json'; rescue; end
|
4
|
+
|
5
|
+
require 'yaml'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
#require 'shomen-model/metadata'
|
9
|
+
#require 'shomen-model'
|
10
|
+
|
11
|
+
# Shared base class that can be used by generators.
|
12
|
+
#
|
13
|
+
class Generator
|
14
|
+
|
15
|
+
# Default output format is JSON.
|
16
|
+
DEFAULT_FORMAT = 'json'
|
17
|
+
|
18
|
+
# Is `$FORCE` set?
|
19
|
+
#
|
20
|
+
# Return true/false.
|
21
|
+
def force?
|
22
|
+
$FORCE
|
23
|
+
end
|
24
|
+
|
25
|
+
# Outpu format is eitehr :yaml or :json. The default is :json.
|
26
|
+
attr_accessor :format
|
27
|
+
|
28
|
+
# Flag to include full source code in script entries.
|
29
|
+
#
|
30
|
+
# Returns true/false.
|
31
|
+
attr_accessor :source
|
32
|
+
|
33
|
+
# URI prefix to link to online documentation.
|
34
|
+
#
|
35
|
+
# Returns String.
|
36
|
+
attr_accessor :webcvs
|
37
|
+
|
38
|
+
# Name of README file.
|
39
|
+
attr_accessor :readme
|
40
|
+
|
41
|
+
# Markup used for comments. This is typically either :rdoc or :markdown.
|
42
|
+
attr_accessor :markup
|
43
|
+
|
44
|
+
# List of scripts to document.
|
45
|
+
attr_accessor :scripts
|
46
|
+
|
47
|
+
# List of "information documents" to document.
|
48
|
+
attr_accessor :documents
|
49
|
+
|
50
|
+
# Include source code in scripts?
|
51
|
+
#
|
52
|
+
# Returns true/false.
|
53
|
+
def source?
|
54
|
+
@soruce
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Initialize new generator.
|
60
|
+
#
|
61
|
+
# options - Hash of generator options.
|
62
|
+
#
|
63
|
+
# Returns Generator instance.
|
64
|
+
def initialize(options)
|
65
|
+
@format = DEFAULT_FORMAT
|
66
|
+
@readme = Dir['README*'].first
|
67
|
+
@source = false
|
68
|
+
@use_cache = false
|
69
|
+
@markup = nil
|
70
|
+
@scripts = []
|
71
|
+
@documents = []
|
72
|
+
|
73
|
+
options.each do |k,v|
|
74
|
+
__send__("#{k}=", v)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
public
|
79
|
+
|
80
|
+
# Produce documentation in YAML or JSON format depending
|
81
|
+
# on the setting of #format setting.
|
82
|
+
#
|
83
|
+
# Returns String of either YAML or JSON.
|
84
|
+
def produce_format
|
85
|
+
case format.to_sym
|
86
|
+
when :yaml
|
87
|
+
produce_yaml
|
88
|
+
else
|
89
|
+
produce_json
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Alias for #produce_format.
|
94
|
+
#
|
95
|
+
# Returns String of either YAML or JSON.
|
96
|
+
alias to_s produce_format
|
97
|
+
|
98
|
+
# Documentation table in YAML format.
|
99
|
+
#
|
100
|
+
# Returns String of YAML.
|
101
|
+
def produce_yaml
|
102
|
+
produce_table.to_yaml
|
103
|
+
end
|
104
|
+
|
105
|
+
# Documentation table in JSON format.
|
106
|
+
#
|
107
|
+
# Returns String of JSON.
|
108
|
+
def produce_json
|
109
|
+
force_encoding(produce_table).to_json
|
110
|
+
end
|
111
|
+
|
112
|
+
# Generates documentation table using rdoc or yard
|
113
|
+
# depending on the `adapter` setting.
|
114
|
+
#
|
115
|
+
# Returns documentation table. [Hash]
|
116
|
+
def produce_table
|
117
|
+
generate
|
118
|
+
end
|
119
|
+
|
120
|
+
# Project metadata.
|
121
|
+
#
|
122
|
+
# Returns Metadata instance.
|
123
|
+
def project_metadata
|
124
|
+
@project_metadata ||= Shomen::Metadata.new
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
|
130
|
+
=begin
|
131
|
+
#
|
132
|
+
# Remove setting options from command line arguments.
|
133
|
+
#
|
134
|
+
def remove_options(argv, *options)
|
135
|
+
options.each do |opt|
|
136
|
+
i = argv.index(opt)
|
137
|
+
if i
|
138
|
+
argv.delete_at(i)
|
139
|
+
argv.delete_at(i)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
argv
|
143
|
+
end
|
144
|
+
|
145
|
+
#
|
146
|
+
# Remove flag options from command line arguments.
|
147
|
+
#
|
148
|
+
def remove_flags(argv, *flags)
|
149
|
+
flags.each do |opt|
|
150
|
+
i = argv.index(opt)
|
151
|
+
if i
|
152
|
+
argv.delete_index(i)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
argv
|
156
|
+
end
|
157
|
+
=end
|
158
|
+
|
159
|
+
# Force encoding to UTF-8.
|
160
|
+
#
|
161
|
+
# value - Common core object.
|
162
|
+
#
|
163
|
+
# Returns object with values encoded to UTF-8.
|
164
|
+
def force_encoding(value)
|
165
|
+
case value
|
166
|
+
when Time,Date
|
167
|
+
value = value.dup if value.frozen?
|
168
|
+
value.to_s.force_encoding('UTF-8')
|
169
|
+
when String
|
170
|
+
value = value.dup if value.frozen?
|
171
|
+
value.force_encoding('UTF-8')
|
172
|
+
when Array
|
173
|
+
value.map{ |v| force_encoding(v) }
|
174
|
+
when Hash
|
175
|
+
new = {}
|
176
|
+
value.each do |k,v|
|
177
|
+
k = force_encoding(k)
|
178
|
+
v = force_encoding(v)
|
179
|
+
new[k] = v
|
180
|
+
end
|
181
|
+
new
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Interface < AbstractPrime
|
7
|
+
|
8
|
+
# TODO: validate that there is an interface image.
|
9
|
+
def initialize(settings={})
|
10
|
+
#@table = {'arguments'=>[], 'parameters'=>[]}
|
11
|
+
super(settings)
|
12
|
+
end
|
13
|
+
|
14
|
+
# The source code "image" of the method's inteface.
|
15
|
+
attr_accessor :signature
|
16
|
+
|
17
|
+
# Arguments breakdown.
|
18
|
+
attr_accessor :arguments
|
19
|
+
|
20
|
+
# Parameters breakdown.
|
21
|
+
attr_accessor :parameters
|
22
|
+
|
23
|
+
# Block
|
24
|
+
attr_accessor :block
|
25
|
+
|
26
|
+
# Return value.
|
27
|
+
attr_accessor :returns
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Shomen
|
4
|
+
|
5
|
+
# Encapsulate metadata, which preferably comes from a .ruby file,
|
6
|
+
# but can fallback to a gemspec.
|
7
|
+
#
|
8
|
+
class Metadata
|
9
|
+
include Enumerable
|
10
|
+
|
11
|
+
# Present working directoty.
|
12
|
+
PWD = Dir.pwd
|
13
|
+
|
14
|
+
# Glob pattern for looking up gemspec.
|
15
|
+
GEMSPEC_PATTERN = '{.gemspec,*.gemspec}'
|
16
|
+
|
17
|
+
#
|
18
|
+
# Initialize new Metadata instance.
|
19
|
+
#
|
20
|
+
def initialize
|
21
|
+
@data = (
|
22
|
+
data = {}
|
23
|
+
if dotruby
|
24
|
+
data.merge!(YAML.load_file(dotruby))
|
25
|
+
elsif gemspec
|
26
|
+
# prefereably use dotruby library to convert,
|
27
|
+
# but wait until it's more mainstream
|
28
|
+
require 'rubygems/specification'
|
29
|
+
spec = ::Gem::Specification.load(gemspec)
|
30
|
+
data['name'] = spec.name,
|
31
|
+
data['title'] = spec.name.capitalize,
|
32
|
+
data['version'] = spec.version.to_s,
|
33
|
+
data['authors'] = [spec.author],
|
34
|
+
data['summary'] = spec.summary,
|
35
|
+
data['description'] = spec.description,
|
36
|
+
data['resources'] = {'homepage' => spec.homepage}
|
37
|
+
else
|
38
|
+
# TODO: Raise error instead ?
|
39
|
+
data['name'] = File.basename(Dir.pwd)
|
40
|
+
end
|
41
|
+
data['path'] = '(metadata)'
|
42
|
+
data['markup'] = 'rdoc' # FIXME
|
43
|
+
data
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
def dotruby
|
49
|
+
file = File.join(PWD, '.ruby')
|
50
|
+
return nil unless File.exist?(file)
|
51
|
+
file
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
def gemspec
|
56
|
+
file = Dir[File.join(PWD, GEMSPEC_PATTERN)].first
|
57
|
+
return nil unless file && File.exist?(file)
|
58
|
+
file
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
def [](name)
|
63
|
+
@data[name]
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
def size
|
68
|
+
@data.size
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
72
|
+
def each(&blk)
|
73
|
+
@data.each(&blk)
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
def to_h
|
78
|
+
@data
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Method < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def initialize(settings={})
|
10
|
+
super(settings)
|
11
|
+
@table['declarations'] ||= []
|
12
|
+
end
|
13
|
+
|
14
|
+
# Method's name.
|
15
|
+
attr_accessor :name
|
16
|
+
|
17
|
+
# Method's namespace.
|
18
|
+
attr_accessor :namespace
|
19
|
+
|
20
|
+
# Comment accompanying method definition.
|
21
|
+
attr_accessor :comment
|
22
|
+
|
23
|
+
# Format of comment (rdoc, markdown or plain).
|
24
|
+
attr_accessor :format
|
25
|
+
|
26
|
+
# Singleton method `true` or `false/nil`.
|
27
|
+
attr_accessor :singleton
|
28
|
+
|
29
|
+
# Delarations is a list of keywords that designates characteristics
|
30
|
+
# about a method. Common characteristics include `reader`, `writer`
|
31
|
+
# or `accessor` if the method is defined via an attr method; `public`
|
32
|
+
# `private` or `protected` given the methods visibility; and `class`
|
33
|
+
# or `instance` given the methods scope. Default designations are
|
34
|
+
# are impled if not specifically stated, such as `public` and `instance`.
|
35
|
+
#
|
36
|
+
# Using a declarations list simplifies the Shomen data format by allowing
|
37
|
+
# declarations to be freely defined, rather than creating a field for each
|
38
|
+
# possible designation possible.
|
39
|
+
attr_accessor :declarations
|
40
|
+
|
41
|
+
# Aliases.
|
42
|
+
attr_accessor :aliases
|
43
|
+
|
44
|
+
# Aliases.
|
45
|
+
attr_accessor :alias_for
|
46
|
+
|
47
|
+
# Breakdown of interfaces signature, arguments, parameters, block argument
|
48
|
+
# an return values.
|
49
|
+
attr_accessor :interfaces
|
50
|
+
|
51
|
+
#
|
52
|
+
def interfaces=(array)
|
53
|
+
self['interfaces'] = (
|
54
|
+
array.map do |settings|
|
55
|
+
case settings
|
56
|
+
when Interface
|
57
|
+
settings
|
58
|
+
else
|
59
|
+
Interface.new(settings)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
# List of possible returns types.
|
66
|
+
attr_accessor :returns
|
67
|
+
|
68
|
+
# List of possible raised errors.
|
69
|
+
attr_accessor :raises
|
70
|
+
|
71
|
+
# Method generated dynamically?
|
72
|
+
attr_accessor :dynamic
|
73
|
+
|
74
|
+
# Filename.
|
75
|
+
attr_accessor :file
|
76
|
+
|
77
|
+
# Line number.
|
78
|
+
attr_accessor :line
|
79
|
+
|
80
|
+
# Source code.
|
81
|
+
attr_accessor :source
|
82
|
+
|
83
|
+
# Source code language.
|
84
|
+
attr_accessor :language
|
85
|
+
|
86
|
+
|
87
|
+
# Deprecated method.
|
88
|
+
alias :parent :namespace
|
89
|
+
|
90
|
+
#
|
91
|
+
def to_h
|
92
|
+
h = super
|
93
|
+
h['!'] = 'method'
|
94
|
+
h['interfaces'] = (interfaces || []).map{ |s| s.to_h }
|
95
|
+
h
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Module < Abstract
|
7
|
+
|
8
|
+
#
|
9
|
+
def self.type; 'module'; end
|
10
|
+
|
11
|
+
# Method's name.
|
12
|
+
attr_accessor :name
|
13
|
+
|
14
|
+
# Namespace of module is the path of the class or module
|
15
|
+
# containing this module.
|
16
|
+
attr_accessor :namespace
|
17
|
+
|
18
|
+
# Comment associated with module.
|
19
|
+
attr_accessor :comment
|
20
|
+
|
21
|
+
# Format of comment (rdoc, markdown or plain).
|
22
|
+
attr_accessor :format
|
23
|
+
|
24
|
+
# Mixins.
|
25
|
+
attr_accessor :includes
|
26
|
+
|
27
|
+
# Metaclass mixins.
|
28
|
+
attr_accessor :extensions
|
29
|
+
|
30
|
+
# Constants defined within this module.
|
31
|
+
attr_accessor :constants
|
32
|
+
|
33
|
+
#
|
34
|
+
attr_accessor :modules
|
35
|
+
|
36
|
+
#
|
37
|
+
attr_accessor :classes
|
38
|
+
|
39
|
+
# List of instance methods defined in the module.
|
40
|
+
attr_accessor :methods
|
41
|
+
|
42
|
+
# List of attributes.
|
43
|
+
attr_accessor :accessors
|
44
|
+
|
45
|
+
# The files in which the module is defined.
|
46
|
+
attr_accessor :files
|
47
|
+
|
48
|
+
#
|
49
|
+
alias :fullname :path
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Shomen
|
2
|
+
|
3
|
+
module Model
|
4
|
+
|
5
|
+
#
|
6
|
+
class Script < Document
|
7
|
+
#
|
8
|
+
def self.type; 'script'; end
|
9
|
+
|
10
|
+
# Full source code or +nil+ if not provided.
|
11
|
+
attr_accessor :source
|
12
|
+
|
13
|
+
# Route text to source.
|
14
|
+
alias :text :source
|
15
|
+
alias :text= :source=
|
16
|
+
|
17
|
+
# TODO: Since we are making source available should we deprecate header and footer,
|
18
|
+
# or should we include it if source is excluded ?
|
19
|
+
|
20
|
+
attr_accessor :header
|
21
|
+
|
22
|
+
attr_accessor :footer
|
23
|
+
|
24
|
+
# Source code URI.
|
25
|
+
attr_accessor :uri
|
26
|
+
|
27
|
+
# The lanuage of the script.
|
28
|
+
attr_accessor :language
|
29
|
+
|
30
|
+
# File basename of script path.
|
31
|
+
attr_accessor :name
|
32
|
+
|
33
|
+
# Full path of script, relative to project root.
|
34
|
+
attr_accessor :path
|
35
|
+
|
36
|
+
# Time stamp when script was last modifed.
|
37
|
+
attr_accessor :modified
|
38
|
+
|
39
|
+
alias :mtime :modified
|
40
|
+
alias :mtime= :modified=
|
41
|
+
|
42
|
+
# Time stamp when script was first created.
|
43
|
+
attr_accessor :created
|
44
|
+
|
45
|
+
alias :ctime :created
|
46
|
+
alias :ctime= :created=
|
47
|
+
|
48
|
+
# Other scripts required by this script.
|
49
|
+
attr_accessor :requires
|
50
|
+
|
51
|
+
# TODO: Presently these are not being fully utilized by the parsers, need to fix.
|
52
|
+
|
53
|
+
# Constants defined by this script.
|
54
|
+
attr_accessor :constants
|
55
|
+
|
56
|
+
# Modules defined by this script.
|
57
|
+
attr_accessor :modules
|
58
|
+
|
59
|
+
# Classes defined by this script.
|
60
|
+
attr_accessor :classes
|
61
|
+
|
62
|
+
# Class methods defined in this script.
|
63
|
+
attr_accessor :class_methods
|
64
|
+
|
65
|
+
# Methods defined in this script.
|
66
|
+
attr_accessor :methods
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shomen-model
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- trans
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: detroit
|
16
|
+
requirement: &22566460 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *22566460
|
25
|
+
description: ! "Shomen defines a standard API documentaiton format for object-oriented
|
26
|
+
software\n(Ruby programs in particular) which can be used by documentation interfaces,
|
27
|
+
\ne.g. Hypervisor, to render API documentation. Shomen Model is a set of Ruby\nclasses
|
28
|
+
the module this format, and can be used to generate Shomen documentation."
|
29
|
+
email:
|
30
|
+
- transfire@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files:
|
34
|
+
- LICENSE.txt
|
35
|
+
- HISTORY.md
|
36
|
+
- README.md
|
37
|
+
files:
|
38
|
+
- .ruby
|
39
|
+
- .yardopts
|
40
|
+
- lib/shomen-model/abstract.rb
|
41
|
+
- lib/shomen-model/attribute.rb
|
42
|
+
- lib/shomen-model/class.rb
|
43
|
+
- lib/shomen-model/constant.rb
|
44
|
+
- lib/shomen-model/core_ext.rb
|
45
|
+
- lib/shomen-model/document.rb
|
46
|
+
- lib/shomen-model/generator.rb
|
47
|
+
- lib/shomen-model/interface.rb
|
48
|
+
- lib/shomen-model/metadata.rb
|
49
|
+
- lib/shomen-model/method.rb
|
50
|
+
- lib/shomen-model/module.rb
|
51
|
+
- lib/shomen-model/script.rb
|
52
|
+
- lib/shomen-model.rb
|
53
|
+
- lib/shomen-model.yml
|
54
|
+
- LICENSE.txt
|
55
|
+
- HISTORY.md
|
56
|
+
- README.md
|
57
|
+
homepage: http://rubyworks.github.com/shomen-model
|
58
|
+
licenses: []
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 1.8.11
|
78
|
+
signing_key:
|
79
|
+
specification_version: 3
|
80
|
+
summary: Ruby Models for Shomen Documentation Format
|
81
|
+
test_files: []
|