plans 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.versions.conf +2 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +102 -0
  6. data/Guardfile +46 -0
  7. data/LICENSE +22 -0
  8. data/README.md +100 -0
  9. data/Rakefile +6 -0
  10. data/bin/_guard-core +16 -0
  11. data/bin/console +14 -0
  12. data/bin/guard +16 -0
  13. data/bin/rake +16 -0
  14. data/bin/rspec +16 -0
  15. data/bin/setup +7 -0
  16. data/exe/plans +5 -0
  17. data/lib/plans/cli.rb +121 -0
  18. data/lib/plans/command.rb +61 -0
  19. data/lib/plans/init.rb +19 -0
  20. data/lib/plans/list.rb +47 -0
  21. data/lib/plans/new.rb +29 -0
  22. data/lib/plans/publish.rb +98 -0
  23. data/lib/plans/thumbs.rb +47 -0
  24. data/lib/plans/version.rb +3 -0
  25. data/lib/plans.rb +15 -0
  26. data/plans.gemspec +31 -0
  27. data/template/README.md +39 -0
  28. data/template/doc/README.md +12 -0
  29. data/template/doc/img/.empty_directory +0 -0
  30. data/template/doc/publish/.empty_directory +0 -0
  31. data/template/doc/reference.docx +0 -0
  32. data/template/doc/template.yml +3 -0
  33. data/template/functional/README.md +60 -0
  34. data/template/functional/img/.empty_directory +0 -0
  35. data/template/functional/publish/.empty_directory +0 -0
  36. data/template/functional/reference.docx +0 -0
  37. data/template/functional/template.yml +3 -0
  38. data/template/glossary/README.md +20 -0
  39. data/template/glossary/img/.empty_directory +0 -0
  40. data/template/glossary/publish/.empty_directory +0 -0
  41. data/template/glossary/reference.docx +0 -0
  42. data/template/glossary/template.yml +3 -0
  43. data/template/scope/README.md +127 -0
  44. data/template/scope/img/.empty_directory +0 -0
  45. data/template/scope/publish/.empty_directory +0 -0
  46. data/template/scope/reference.docx +0 -0
  47. data/template/scope/template.yml +3 -0
  48. data/template/users/README.md +13 -0
  49. data/template/users/img/.empty_directory +0 -0
  50. data/template/users/publish/.empty_directory +0 -0
  51. data/template/users/reference.docx +0 -0
  52. data/template/users/template.yml +3 -0
  53. metadata +210 -0
@@ -0,0 +1,98 @@
1
+ require 'plans/command'
2
+
3
+ module Plans
4
+ class Publish < Command
5
+ def do(path)
6
+ # Create the thumbnails first.
7
+ say 'Updating thumbnails.'
8
+ Thumbs.new(shell, options).do(path)
9
+
10
+ path = pathname(path)
11
+ toc_flag = options[:toc] ? "--toc" : ""
12
+ open_flag = options[:open]
13
+
14
+ plans_path = plans_pathname(options[:'plans-path'])
15
+ check_plans_pathname_exists(plans_path)
16
+
17
+ source_file = path + 'README.md'
18
+ check_source_file(source_file)
19
+
20
+ doc_type = get_doctype(path)
21
+
22
+ # Set the path to the reference doc for this type of document.
23
+ reference_docx = plans_path + doc_type + 'reference.docx'
24
+ check_reference_docx(reference_docx)
25
+
26
+ output_dir = path + 'publish'
27
+ # Make the publish directory if it does not exist.
28
+ FileUtils.mkdir output_dir unless Dir.exist? output_dir
29
+ output_file = output_dir + "#{doc_type}.docx"
30
+
31
+ # We need to set the current working directory to where the markdown file is so
32
+ # the images render correctly.
33
+ # Pandoc only looks in the current working directory.
34
+ Dir.chdir(path) do
35
+ `pandoc #{toc_flag} #{source_file} --reference-docx=#{reference_docx} --standalone -f markdown -t docx -o #{output_file}`
36
+ end
37
+
38
+ # Get the return code from pandoc.
39
+ pandoc_return = $?.to_i
40
+ check_pandoc_return(pandoc_return)
41
+
42
+ say "#{doc_type} published.", :green
43
+
44
+ # Open the word doc if requested
45
+ `open #{output_file}` if open_flag
46
+ end
47
+
48
+ def check_pandoc_return(pandoc_return)
49
+ unless pandoc_return == 0
50
+ say "Problem publishing #{doc_type}. (Pandoc ERR: #{pandoc_return})", :red
51
+ say " #{source_file}"
52
+ raise_error("Pandoc ERR: #{pandoc_return}")
53
+ end
54
+ end
55
+
56
+ def check_reference_docx(reference_docx)
57
+ unless reference_docx.exist?
58
+ say 'Could not find the reference.docx for this type of file in the .plans directory.', :red
59
+ say 'Check to make sure that reference.docx is available here:'
60
+ say " #{reference_docx}"
61
+ raise_error('Reference.docx not found.')
62
+ end
63
+ end
64
+
65
+ def check_source_file(source_file)
66
+ unless File.exist? source_file
67
+ say 'Markdown file to be published does not exist.', :red
68
+ say " #{source_file}"
69
+ say 'Are you in the right directory?'
70
+ raise_error('README.md not found.')
71
+ end
72
+ end
73
+
74
+ # Get the document type from the YAML file next to the document.
75
+ #
76
+ # @param [Pathname] The path to the location of the template.yml file.
77
+ # @return [String] the type of the document found in the YAML file.
78
+ def get_doctype(path)
79
+ doc_type = nil
80
+ begin
81
+ metadata = YAML.load_file(path + 'template.yml')
82
+ doc_type = metadata['type']
83
+ if doc_type.nil?
84
+ say 'Type value not found. Check template.yml in the document directory', :red
85
+ say 'Make sure there is an entry `type: DOC_TYPE` in the file.'
86
+ say " #{path}"
87
+ raise_error('DOC_TYPE not found in template.yml')
88
+ end
89
+ rescue Errno::ENOENT # File not found
90
+ say 'No template.yml found in the document directory. Did you forget to add it?', :red
91
+ say 'Did you run the command in the directory where the document is located?'
92
+ say " #{path}"
93
+ raise_error('template.yml not found')
94
+ end
95
+ return doc_type
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,47 @@
1
+ require 'plans/command'
2
+
3
+ module Plans
4
+ class Thumbs < Command
5
+
6
+ def do(path)
7
+ img_path = pathname(path) + 'img'
8
+
9
+ unless img_path.exist?
10
+ say 'Images directory (img) does not exist.'
11
+ say " #{img_path}"
12
+ if (yes? 'Would you like to create the directory?')
13
+ say 'Creating it.'
14
+ FileUtils.mkdir img_path
15
+ end
16
+ end
17
+
18
+ images = Dir.glob(img_path + '*.*')
19
+ if (images.length == 0)
20
+ say 'Nothing to do. No images found in img directory.', :green
21
+ say " #{img_path}"
22
+ return
23
+ end
24
+ create_thumbnails(200, images, img_path)
25
+ create_thumbnails(400, images, img_path)
26
+ create_thumbnails(600, images, img_path)
27
+ say 'Thumbnails creation complete.', :green
28
+ end
29
+
30
+ def create_thumbnails(size, images, path)
31
+ target_directory = path + "#{size}px"
32
+ FileUtils.remove_dir target_directory if Dir.exist? target_directory
33
+ FileUtils.mkdir target_directory
34
+ FileUtils.cp images, target_directory
35
+ `mogrify -resize #{size} #{target_directory}/*.*`
36
+ # Check mogrify's return code.
37
+ if $?.to_i == 0
38
+ say "Created #{images.length} #{size}px images."
39
+ else
40
+ say "Problem creating #{size}px images. (Mogrify ERR: #{$?.to_i})", :red
41
+ say " #{target_directory}"
42
+ raise_error("Mogrify ERR: #{$?.to_i}")
43
+ end
44
+ end
45
+ end
46
+ end
47
+
@@ -0,0 +1,3 @@
1
+ module Plans
2
+ VERSION = "0.1.0"
3
+ end
data/lib/plans.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'plans/version'
2
+ require 'plans/cli'
3
+ require 'thor'
4
+
5
+ module Plans
6
+
7
+ # Determine where gem is installed.
8
+ #
9
+ # @return The path to the gem.
10
+ def self.source_root
11
+ File.absolute_path(File.join(File.dirname(__FILE__), '..'))
12
+ end
13
+
14
+ end
15
+
data/plans.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'plans/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "plans"
8
+ spec.version = Plans::VERSION
9
+ spec.authors = ["Gabriel Cook"]
10
+ spec.email = ["gabe@codelever.com"]
11
+
12
+ spec.summary = %q{Command line application for creating markdown documents from templates and publishing them in MS Word.}
13
+ spec.description = %q{Command line application for creating markdown documents from templates and publishing them in MS Word.}
14
+ spec.homepage = "https://github.com/code-lever/plans-gem"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.10"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "guard"
26
+ spec.add_development_dependency "guard-rspec"
27
+ spec.add_development_dependency "terminal-notifier-guard"
28
+ spec.add_development_dependency "aruba"
29
+
30
+ spec.add_dependency 'thor'
31
+ end
@@ -0,0 +1,39 @@
1
+ # Plans templates for code lever.
2
+
3
+ This project contains the following document templates.
4
+
5
+ * [Vision and Scope](./scope)
6
+ * [Functional Specifications](./functional)
7
+ * [User Classes and Characteristics](./users)
8
+ * [Glossary](./glossary)
9
+ * [Plain Document](./doc)
10
+
11
+ Templates are composed of a folder containing a few documents. The first is the initial version of the markdown document. This document is named *README.md*. The second is the reference document, named *reference.docx*. This is the word file used by Pandoc for style information publishing the document.
12
+
13
+ ## README.md
14
+
15
+ When you create a new document based on this template, this file will be copied to the new document location to be used as a starting point.
16
+
17
+ ## reference.docx
18
+
19
+ When you render the markdown document into MS Word, the styles, headers and footers of the reference.docx will be used as the basis for the published document. Modify the reference.docx to change the look and feel of the rendered document. You can, for example, add images to the header for a company logo.
20
+
21
+ From [pandoc.org](http://pandoc.org/README.html)
22
+
23
+ > Use the specified file as a style reference in producing a docx file. For best results, the reference docx should be a modified version of a docx file produced using pandoc. The contents of the reference docx are ignored, but its stylesheets and document properties (including margins, page size, header, and footer) are used in the new docx. If no reference docx is specified on the command line, pandoc will look for a file reference.docx in the user data directory (see --data-dir). If this is not found either, sensible defaults will be used. The following styles are used by pandoc: [paragraph] Normal, Body Text, First Paragraph, Compact, Title, Subtitle, Author, Date, Abstract, Bibliography, Heading 1, Heading 2, Heading 3, Heading 4, Heading 5, Heading 6, Block Text, Footnote Text, Definition Term, Definition, Caption, Table Caption, Image Caption, Figure, Figure With Caption, TOC Heading; [character] Default Paragraph Font, Body Text Char, Verbatim Char, Footnote Reference, Hyperlink; [table] Normal Table.
24
+
25
+ You can modify the document styles and add items to the headers and footers of the *reference.docx* to customize the output. One thing to note, Pandoc seems to work best if the document is blank, so clear any text in the *reference.docx* before using it.
26
+
27
+ ## template.yml
28
+
29
+ Metadata for the template.
30
+
31
+ # The longer title of the document
32
+ # Used help for plans.
33
+ title: User Classes and Characteristics
34
+
35
+ # A description of the document
36
+ # Used by help for plans.
37
+ description: A list of all of the users and their major characteristics. These users should be referenced by the Vision and Scope document and any associated Functional Specifications.
38
+
39
+ Note that the name of the document used by plans is the name of the folder. To create the *User Classes and Characteristics* document above, you would enter the command `plans create user`.
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: A Document
3
+ subtitle: Subtitle
4
+ ---
5
+
6
+ **Revision History**
7
+
8
+ |Name|Date|Reason for Changes|Version|
9
+ |----|----|------------------|-------|
10
+ |G. Cook| July 22, 2015 | Initial draft. | v0.1 |
11
+
12
+ # Overview
File without changes
File without changes
Binary file
@@ -0,0 +1,3 @@
1
+ type: doc
2
+ title: Plain Document
3
+ description: An empty markdown document.
@@ -0,0 +1,60 @@
1
+ ---
2
+ title: <%=@project.project_name%>
3
+ subtitle: Functional Specification - <%=@name%>
4
+ ---
5
+
6
+ **Revision History**
7
+
8
+ |Name|Date|Reason for Changes|Version|
9
+ |----|----|------------------|-------|
10
+ |G. Cook| July 22, 2015 | Initial draft. | v0.1 |
11
+
12
+ # Overview
13
+ <!-- A brief description of the feature -->
14
+
15
+ # User Stories
16
+ <!-- Repeat the following for each user story. -->
17
+
18
+ ## User Story
19
+ <!--
20
+ User stories are short, simple descriptions of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system. They typically follow a simple template:
21
+
22
+ As a <type of user>, I want <some goal> so that <some reason>.
23
+ -->
24
+
25
+ ### Scenarios
26
+ <!-- Write out scenarios using Gherkin syntax.
27
+
28
+ https://github.com/cucumber/cucumber/wiki/Gherkin
29
+
30
+ Use Given to establish preconditions for the scenario.
31
+ Use When to describe the key actions preformed by the user.
32
+ Use Then to observe outcomes. In general, these will be responses form the System
33
+
34
+ Here is an example:
35
+
36
+ Given some precondition
37
+ And some other precondition
38
+ When some action by the user type
39
+ And some other action
40
+ And yet another action
41
+ Then some testable outcome is achieved
42
+ And something else we can check happens too
43
+
44
+ Make the user one of the user types defined in the User Classes document.
45
+ -->
46
+
47
+ ### Mockups
48
+ <!-- Show each of the mockups used by the scenarios here.
49
+ Add any additional detail about the mockup below it. For example, important validations or data types for fields.
50
+ -->
51
+
52
+ ### Confirmations
53
+ <!-- Something the system must do that needs to have a test. A requirement that is important to the customer and must be verified. These can also be non-fuctional requirements related to the feature.
54
+
55
+ Ex: Test different privacy status - private, public, unlisted.
56
+ -->
57
+
58
+
59
+
60
+
File without changes
File without changes
Binary file
@@ -0,0 +1,3 @@
1
+ type: functional
2
+ title: Functional Specification
3
+ description: Used to describe and document a feature's intended capabilities, appearance, and user interactions.
@@ -0,0 +1,20 @@
1
+ ---
2
+ title: <%=@project.project_name%>
3
+ subtitle: Glossary
4
+ ---
5
+
6
+ **Revision History**
7
+
8
+ |Name|Date|Reason for Changes|Version|
9
+ |----|----|------------------|-------|
10
+ |G. Cook| July 22, 2015 | Initial draft. | v0.1 |
11
+
12
+ # Glossary
13
+
14
+ <!--
15
+ Define any specialized terms that a reader needs to know to understand the document, including acronyms and abbreviations. Spell out each acronym and provide its definition. Consider building a reusable enterprise-level glossary that spans multiple projects and incorporating by reference any terms that pertain to this project.
16
+ -->
17
+
18
+ Term
19
+ : Definition.
20
+
File without changes
File without changes
Binary file
@@ -0,0 +1,3 @@
1
+ type: glossary
2
+ title: Glossary
3
+ description: Specialized terms and abbreviations related to the project.
@@ -0,0 +1,127 @@
1
+ ---
2
+ title: <%=@project.project_name%>
3
+ subtitle: Vision and Scope
4
+ ---
5
+
6
+ **Revision History**
7
+
8
+ |Name|Date|Reason for Changes|Version|
9
+ |----|----|------------------|-------|
10
+ |G. Cook| July 22, 2015 | Initial draft. | v0.1 |
11
+
12
+ # Business Requirements
13
+ <!-- The business requirements provide the foundation and reference for all detailed requirements development. You may gather business requirements from the customer or development organization’s senior management, an executive sponsor, a project visionary, product management, the marketing department, or other individuals who have a clear sense of why the project is being undertaken and the ultimate value it will provide, both to the business and to customers.-->
14
+
15
+ ## Background
16
+ <!-- This section summarizes the rationale for the new product. Provide a general description of the history or situation that leads to the recognition that this product should be built.-->
17
+
18
+
19
+ ## Business Opportunity
20
+ <!-- Describe the market opportunity that exists or the business problem that is being solved. Describe the market in which a commercial product will be competing or the environment in which an information system will be used. This may include a brief comparative evaluation of existing products and potential solutions, indicating why the proposed product is attractive. Identify the problems that cannot currently be solved without the product, and how the product fits in with market trends or corporate strategic directions.-->
21
+
22
+
23
+ ## Business Objectives
24
+ <!-- Describe the important business objectives of the product in a way that is quantitative and measurable. This section should focus on the value provided to the business. This could include estimates of revenue or cost savings, return on investment analysis, or target release dates.-->
25
+
26
+ ## Success Metrics
27
+ <!-- Determine how success will be defined and measured on this project, and describe the factors that are likely to have the greatest impact on achieving that success. Include things within the direct control of the organization, as well as external factors. Establish measurable criteria to assess whether the business objectives have been met.-->
28
+
29
+ ## Vision Statement
30
+ <!-- Write a concise vision statement that summarizes the purpose and intent of the new product and describes what the world will be like when it includes the product. The vision statement should reflect a balanced view that will satisfy the needs of diverse customers as well as those of the developing organization. It may be somewhat idealistic, but it should be grounded in the realities of existing or anticipated customer markets, enterprise architectures, organizational strategic directions, and cost and resource limitations.-->
31
+
32
+ <!-- Here is the template suggested by Wiegers.
33
+ For [target customer]
34
+ Who [statement of need or opportunity]
35
+ The [product name]
36
+ Is [a product category]
37
+ That [key benefit, compelling reason to buy or use]
38
+ Unlike [primary competitive alternative, current system, or current business process]
39
+ Our product [statement of primary differentiation and advantages of new product]
40
+ -->
41
+
42
+ ## Business Risks
43
+ <!-- Summarize the major business risks associated with developing this product, such as marketplace competition, timing issues, user acceptance, implementation issues, or possible negative impacts on the business. Estimate the severity of the risks and identify any risk mitigation actions that could be taken.-->
44
+
45
+ ## Business Assumptions and Dependencies
46
+ <!-- Record any assumptions that were made when conceiving the project and writing this vision and scope document. Note any major dependencies the project must rely upon for success, such as specific technologies, third-party vendors, development partners, or other business relationships. -->
47
+
48
+ # Scope and Limitations
49
+ <!-- The project scope defines the concept and range of the proposed solution. It’s also important to define what will not be included in the product. Clarifying the scope and limitations helps to establish realistic expectations of the many stakeholders. It also provides a reference frame against which proposed features and requirements changes can be evaluated. Proposed requirements that are out of scope for the envisioned product must be rejected, unless they are so beneficial that the scope should be enlarged to accommodate them (with accompanying changes in budget, schedule, and/or resources).-->
50
+
51
+ ## Major Features
52
+ <!-- Include a numbered list of the major features of the new product, emphasizing those features that distinguish it from previous or competing products. Specific user requirements and functional requirements may be traced back to these features.-->
53
+
54
+ FE-1
55
+ : I'm a feature.
56
+
57
+ ## Scope of Initial Release
58
+ <!-- Describe the intended major features that will be included in the initial release of the product. Consider the benefits the product is intended to bring to the various customer communities, and generally describe the product features and quality characteristics that will enable it to provide those benefits. Avoid the temptation to include every possible feature that any potential customer category might conceivably want some day. Focus on those features and product characteristics that will provide the most value, at the most acceptable development cost, to the broadest community.-->
59
+
60
+
61
+ ## Scope of Subsequent Releases
62
+ <!-- If a staged evolution of the product is envisioned over time, indicate which major features will be deferred to later releases.-->
63
+
64
+
65
+ ## Limitations and Exclusions
66
+ <!-- Identify any product features or characteristics that a stakeholder might anticipate, but which are not planned to be included in the new product.-->
67
+
68
+
69
+
70
+ # Business Context
71
+ <!-- This section summarizes some of the business issues around the project, including profiles of major customer categories, assumptions that went into the project concept, and the management priorities for the project.-->
72
+
73
+ ## Stakeholder Profiles
74
+ <!-- Stakeholders are individuals, groups, or organizations that are actively involved in a project, are affected by its outcome, or can influence its outcome. The stakeholder profiles identify the customers for this product and other stakeholders, and states their major interests in the product. Characterize business-level customers, target market segments, and different user classes, to reduce the likelihood of unexpected requirements surfacing later that cannot be accommodated because of schedule or scope constraints. For each stakeholder category, the profile includes the major value or benefits they will receive from the product, their likely attitudes toward the product, major features and characteristics of interest, and any known constraints that must be accommodated. Examples of stakeholder value include:
75
+
76
+
77
+ improved productivity
78
+ reduced rework
79
+ cost savings
80
+ streamlined business processes
81
+ automation of previously manual tasks
82
+ ability to perform entirely new tasks or functions
83
+ conformance to current standards or regulations
84
+ improved usability or reduced frustration level compared to current applications
85
+ -->
86
+
87
+ ### Stakeholder
88
+
89
+ * **Major value or benefit of the system**
90
+
91
+ *Info here*
92
+
93
+ * **Attitude toward system**
94
+
95
+ *Info here*
96
+
97
+ * **Major interests**
98
+
99
+ *Info here*
100
+
101
+ * **Constraints that must be accommodated**
102
+
103
+ *Info here*
104
+
105
+
106
+ ## Project Priorities
107
+
108
+ <!-- Describe the priorities among the project’s requirements, schedule, and budget. The table below may be helpful in identifying the parameters around the project’s key drivers (top priority objectives), constraints to work within, and dimensions that can be balanced against each other to achieve the drivers within the known constraints. For more information, see chapter 2 of Creating a Software Engineering Culture by Karl E. Wiegers (Dorset House, 1996). Examples:-->
109
+
110
+ * **Schedule**
111
+
112
+
113
+ * **Features**
114
+
115
+
116
+ * **Quality**
117
+
118
+
119
+ * **Staff**
120
+
121
+
122
+ * **Cost**
123
+
124
+ ## Operating Environment and Deployment Considerations
125
+
126
+ <!-- Summarize the information and activities that are needed to ensure an effective deployment of the solution into its operating environment. Describe the access that users will require to be able to use the system, such as whether the users are distributed over multiple time zones or located close to each other. State when the users in various locations need to access the system. If infrastructure changes are needed to support the software’s need for capacity, network access, data storage, or data migration, describe those changes. Record any information that will be needed by people who will be preparing training or modifying business processes in conjunction with deployment of the new solution.-->
127
+
File without changes
File without changes
Binary file
@@ -0,0 +1,3 @@
1
+ type: scope
2
+ title: Vision and Scope
3
+ description: Define the overal vision and scope for a project.
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%=@project.project_name%>
3
+ subtitle: User Classes and Characteristics
4
+ ---
5
+
6
+ **Revision History**
7
+
8
+ |Name|Date|Reason for Changes|Version|
9
+ |----|----|------------------|-------|
10
+ |G. Cook| July 22, 2015 | Initial draft. | v0.1 |
11
+
12
+ # Overview
13
+ <!-- A brief description of the feature -->
File without changes
File without changes
Binary file
@@ -0,0 +1,3 @@
1
+ type: users
2
+ title: User Classes and Characteristics
3
+ description: A list of all of the users and their major characteristics. These users should be referenced by the Vision and Scope document and any associated Functional Specifications.