brief 1.9.14 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9543a0856e03eceabb57759ada882e87238d54e5
4
- data.tar.gz: ceedef4e306dbf4c93fa2e92910ca89259d2a03a
3
+ metadata.gz: c99e43e2cb14081fa9dfb044d30bf1e21771225e
4
+ data.tar.gz: 75be39413bbe58d8d0169eccc6ae936223635e92
5
5
  SHA512:
6
- metadata.gz: 69dd49a7a111aedafdbdef7b18c1ece2501c64916f7e0ddeccfc1a95a0593a74066146a6f484459469b811d0d2cfcfc4f0e68b520e43f2c850feaf58f66247b4
7
- data.tar.gz: c7ff0f8c1549f7b74678f5925df51fd22ed5137fa9e6f1d5107f194f1442775b57bd8f662993d750d3c5b368c12970ffba13345d5324d6b4161efafafa42ae8d
6
+ metadata.gz: 2ee79d64d3b01159c7493672b4c7c13ad9bc7fdab0446253729fd037ed0e576a8813676e9d202ca2e26da33108dae58c1859fac7362953b689818e96c1719d0b
7
+ data.tar.gz: 52992dd1e843eb9259d6210fa828d50c760d6866639280d823b8b2a8581530a38b837647cc21e9464c3a33f44dc591f75a9a241fb637eece79d31cc5a052edc5
data/CHANGELOG.md CHANGED
@@ -83,11 +83,11 @@ attributes.
83
83
  so for example, given a model:
84
84
 
85
85
  ```
86
- define "User Story" do
86
+ define "Feature" do
87
87
 
88
88
  example <<- EOF
89
89
  ---
90
- type: user_story
90
+ type: feature
91
91
  status: draft
92
92
  ---
93
93
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- brief (1.9.14)
4
+ brief (1.10.0)
5
5
  activesupport (~> 4.0)
6
6
  commander (~> 4.3)
7
7
  em-websocket (= 0.5.1)
data/README.md CHANGED
@@ -2,20 +2,15 @@
2
2
  [![Build
3
3
  Status](https://travis-ci.org/datapimp/brief.svg?branch=master)](https://travis-ci.org/datapimp/brief)
4
4
 
5
- ### Putting your writing to work
5
+ ### Turning writers into object oriented programmers
6
6
 
7
- Brief lets writers build applications on top of collections of markdown
8
- files. Brief lets you define different classes or types of documents, called
9
- `Model`s.
7
+ Brief lets writers build applications on top of collections of markdown files. Brief lets you define different classes or types of documents, called `Model`s which are responsible for defining certain writing conventions that apply to a group of documents.
10
8
 
11
- These models turn the documents into objects, which can be
12
- used to do things such as make API calls, or publish a blog post and
13
- send an email campaign at the same time.
9
+ When documents conform to these conventions, it is possible to treat them as software entities with attributes, and give the documents and their content unique identities that can be mapped to other parts of the software systems we work with every day.
14
10
 
15
11
  ### Turn documents into data
16
12
 
17
- The most basic way of combining writing with data, is through the use of
18
- YAML Frontmatter as metadata for the document. For example:
13
+ The most basic way of combining writing with data, is through the use of YAML Frontmatter as metadata for the document. For example:
19
14
 
20
15
  ```
21
16
  ---
@@ -34,8 +29,7 @@ This is the first paragraph.
34
29
  This is another pargraph.
35
30
  ```
36
31
 
37
- This YAML content at the top gets turned into data associated with the
38
- document.
32
+ This YAML content at the top gets turned into data associated with the document.
39
33
 
40
34
  ```
41
35
  post = Post.new("/path/to/post.md")
@@ -43,17 +37,12 @@ post.status # => 'draft'
43
37
  post.tags # => ['help','ruby']
44
38
  ```
45
39
 
46
- The YAML data is useful, but where the brief model system really shines
47
- is in the ability to extract data and metadata from the writing itself.
40
+ The YAML data is useful, but where the brief model system really shines is in the ability to extract data and metadata from the writing itself.
48
41
 
49
- Each `Model` prescribes its own specific structure, usually
50
- in the form of heading hierarchys (h1, h2, h3, etc). Any CSS selector
51
- can be used against the rendered HTML produced by the markdown. A
52
- model can define attributes that will be extracted from the writing, for
53
- example:
42
+ Each `Model` prescribes its own specific structure, usually in the form of heading hierarchys (h1, h2, h3, etc). Any CSS selector can be used against the rendered HTML produced by the markdown. A model can define attributes that will be extracted from the writing, for example:
54
43
 
55
44
  ```ruby
56
- define "Post" do
45
+ define "Recipe" do
57
46
  content do
58
47
  title "h1:first-of-type"
59
48
  subtitle "h2:first-of-type"
@@ -61,10 +50,55 @@ define "Post" do
61
50
 
62
51
  # parses YAML blocks inside the document
63
52
  settings 'code.yaml', :serialize => true
53
+
54
+ define_section("Ingredients") do
55
+ each("li").is_a(:ingredient).has(:name=>"li")
56
+ end
57
+
58
+ define_section("Steps") do
59
+ each("li").is_a(:step).has(:description=>"li")
60
+ end
61
+
62
+ helpers do
63
+ def ingredient_names
64
+ sections.ingredients.items.map(&:name)
65
+ end
66
+
67
+ def have_inventory?
68
+ !ingredient_names.detect {|ingredient| inventory[ingredient].to_i <= 0 }
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ define "Ingredient" do
75
+ content do
76
+ title "h1:first-of-type"
77
+ summary "p:first-of-type"
78
+
79
+ define_section("Vendors") do
80
+ each("h2").is_a(:vendor).has(:title=>"h2",:website=>"a:first-of-type")
81
+ end
82
+ end
83
+
84
+ helpers do
85
+ def vendor_websites
86
+ sections.vendors.items.map(&:website)
87
+ end
64
88
  end
65
89
  end
66
90
  ```
67
91
 
92
+ ### Document Structure
93
+
94
+ Brief works by processing the markdown that is rendered by default, and building a hierarchal structure based on the headings you use. A `Brief::Model` can be assigned to a certain folder of documents, and if all of those documents follow the same heading structure, you can
95
+ interact with the documents as data structures and treat them as relatable entities in your object oriented software system.
96
+
97
+ This opens up writing as a possible user interface for a number of
98
+ systems.
99
+
100
+ That is powerful stuff.
101
+
68
102
  ### Getting Started
69
103
 
70
104
  ```
data/TUTORIAL.md CHANGED
@@ -109,7 +109,7 @@ which is implemented by:
109
109
  ```ruby
110
110
  # brief.rb
111
111
 
112
- define "User Story" do
112
+ define "Feature" do
113
113
  meta do
114
114
  status
115
115
  end
@@ -131,12 +131,12 @@ define "User Story" do
131
131
  end
132
132
 
133
133
  action "publish user stories" do |briefcase, models, options|
134
- user_stories = models
134
+ features = models
135
135
 
136
- user_stories.each do |user_story|
137
- if user_story.create_github_issue()
138
- user_story.status = "published"
139
- user_story.save
136
+ features.each do |feature|
137
+ if feature.create_github_issue()
138
+ feature.status = "published"
139
+ feature.save
140
140
  end
141
141
  end
142
142
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  The Feature Epic model is a document that is used to document a bunch of related user stories related to a general feature category or group.
4
4
 
5
- For example you might have a "3rd Party Integrations" Epic which has User Stories for LinkedIn, Facebook, Github, and Twitter.
5
+ For example you might have a "3rd Party Integrations" Epic which has Features for LinkedIn, Facebook, Github, and Twitter.
6
6
 
7
7
  The Epic Document can be used to describe the importance of the module as a whole at the same time that it captures the user stories.
@@ -1 +1 @@
1
- #### User Stories
1
+ #### Features
@@ -19,18 +19,18 @@ status: draft
19
19
 
20
20
  Write a description for your epic.
21
21
 
22
- # User Stories
22
+ # Features
23
23
 
24
- ## User Story Title
24
+ ## Feature Title
25
25
 
26
26
  As a **PERSONA** I would like to **BEHAVIOR** so that I can **GOAL**
27
27
  EOF
28
28
 
29
29
  template <<-EOF
30
30
  # <%= object.title %>
31
- # User Stories
32
- <% Array(object.user_stories).each do |user_story| %>
33
- ## <%= user_story.title %>
31
+ # Features
32
+ <% Array(object.features).each do |feature| %>
33
+ ## <%= feature.title %>
34
34
  As a **User** I would like to **Do this** so that I can **succeed**
35
35
  <% end %>
36
36
  EOF
@@ -40,19 +40,19 @@ As a **User** I would like to **Do this** so that I can **succeed**
40
40
  paragraph "p:first-of-type"
41
41
  paragraphs "p"
42
42
 
43
- define_section "User Stories" do
43
+ define_section "Features" do
44
44
  each("h2").has(:title => "h2",
45
45
  :paragraph => "p:first-of-type",
46
46
  :components => "p:first-of-type strong"
47
47
  )
48
48
 
49
- each("h2").is_a :user_story
49
+ each("h2").is_a :feature
50
50
  end
51
51
  end
52
52
 
53
53
  helpers do
54
- def user_stories
55
- sections.user_stories.items.map do |item|
54
+ def features
55
+ sections.features.items.map do |item|
56
56
  item.components = Array(item.components)
57
57
 
58
58
  item.merge(goal: item.components[2],
@@ -1,4 +1,4 @@
1
- class Brief::Apps::Blueprint::UserStory
1
+ class Brief::Apps::Blueprint::Feature
2
2
  include Brief::Model
3
3
 
4
4
  defined_in Pathname(__FILE__)
@@ -9,7 +9,7 @@ class Brief::Apps::Blueprint::UserStory
9
9
  epic_title
10
10
  end
11
11
 
12
- template :file => "user_story.md.erb"
12
+ template :file => "feature.md.erb"
13
13
 
14
14
  content do
15
15
  persona "p strong:first-child"
@@ -16,7 +16,7 @@ class Brief::Apps::Blueprint::Release
16
16
  tagline "h2:first-of-type", :hide => true
17
17
  yaml_data "code.yaml:first-of-type", :serialize => :yaml, :hide => true
18
18
 
19
- define_section "User Stories" do
19
+ define_section "Features" do
20
20
  each("h2").has(:title => "h2",
21
21
  :paragraph => "p:first-of-type",
22
22
  :components => "p:first-of-type strong"
@@ -5,7 +5,7 @@ command 'browse documents' do |c|
5
5
  c.option '--presenter-format FORMAT', String, 'Which presenter to use?'
6
6
  c.option '--include-urls', 'Gets passed to the model renderers if present'
7
7
 
8
- c.example "Browsing an arbitrary selection of documents", "brief parse ./blueprint/docs/epics ./blueprint/docs/user_stories --root=./blueprint --format json --include-rendered --include-content"
8
+ c.example "Browsing an arbitrary selection of documents", "brief parse ./blueprint/docs/epics ./blueprint/docs/features --root=./blueprint --format json --include-rendered --include-content"
9
9
 
10
10
  c.action do |args, options|
11
11
  options.default(root: Pathname(Brief.pwd), output_type: "array")
@@ -7,7 +7,7 @@ command 'parse' do |c|
7
7
  c.option '--include-rendered', 'Gets passed to the model renderers if present'
8
8
  c.option '--include-urls', 'Gets passed to the model renderers if present'
9
9
 
10
- c.example "Parsing an arbitrary selection of documents", "brief parse ./blueprint/docs/epics ./blueprint/docs/user_stories --root=./blueprint --format json --include-rendered --include-content"
10
+ c.example "Parsing an arbitrary selection of documents", "brief parse ./blueprint/docs/epics ./blueprint/docs/features --root=./blueprint --format json --include-rendered --include-content"
11
11
 
12
12
  c.action do |args, options|
13
13
  options.default(root: Pathname(Brief.pwd), output_type: "array")
@@ -1,3 +1,27 @@
1
+ # # Structured Documents
2
+ #
3
+ # Normal markdown is rendered flat. While there may be hierarchy,
4
+ # it was difficult to parse it in a way which made the headings
5
+ # collapsible.
6
+ #
7
+ # The Document Structure is responsible for grouping
8
+ # blocks of content under their nearest previous heading element
9
+ # acting as a parent. It does this by wrapping them in `<section>`
10
+ # and <article> tags, and through the use of data-attributes on the elements.
11
+ #
12
+ # ```
13
+ # - h1
14
+ # - h2
15
+ # - h3
16
+ # - h3
17
+ # - h2
18
+ # - h1
19
+ # - h2
20
+ # ```
21
+ #
22
+ # This class allows for us to define rules based on headings, for how
23
+ # we might interpret the meaning of the content that is written. It allows
24
+ # us to say: all level 2 headings are 'TodoItems' if they exist under the level 1 heading 'Tasks'
1
25
  module Brief
2
26
  class Document::Structure
3
27
  attr_accessor :fragment, :content_lines
data/lib/brief/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Brief
2
- VERSION = '1.9.14'
2
+ VERSION = '1.10.0'
3
3
  end
@@ -24,14 +24,14 @@ define "Outline" do
24
24
  end
25
25
  end
26
26
 
27
- define "User Story" do
27
+ define "Feature" do
28
28
  meta do
29
29
  title
30
30
  status :in => %w(draft published)
31
31
  epic_title
32
32
  end
33
33
 
34
- template :file => "user_story.md.erb"
34
+ template :file => "feature.md.erb"
35
35
 
36
36
  content do
37
37
  persona "p strong:first-child"
@@ -6,20 +6,14 @@ state: active
6
6
  ---
7
7
 
8
8
  # Blueprint Epic Example
9
+ This is an example of an Epic Document. An Epic is a single document which contains user stories and such.
9
10
 
10
- This is an example of an Epic Document. An Epic is a single document
11
- which contains user stories and such.
12
-
13
- # User Stories
14
-
11
+ # Features
15
12
  ## A user wants to write epics
16
-
17
13
  As a **User** I want to **write epics** so that I can **write a bunch of user stories in one file**
18
14
 
19
15
  ## A user wants to annotate wireframes
20
-
21
16
  As a **User** I want to **annotate wireframes** so that I can **augment diagrams with targeted explanations**
22
17
 
23
18
  ## A user wants to provide details about domain concepts
24
-
25
19
  As a **User** I want to **provide some detailed explanations of domain concepts** so that I can **augment diagrams with targeted explanations**
@@ -4,7 +4,7 @@ title: Table of Contents
4
4
  transform: true
5
5
  ---
6
6
 
7
- [include:content](path=user_story.html.md)
7
+ [include:content](path=feature.html.md)
8
8
 
9
9
  # Table of contents
10
10
 
@@ -1,6 +1,6 @@
1
1
  ---
2
- type: user_story
3
- title: Blueprint User Story Example
2
+ type: feature
3
+ title: Blueprint Feature Example
4
4
  subheading: A way of describing desired behavior of the software, from the perspective of a persona who has a goal
5
5
  epic: Blueprint Epic Example
6
6
  release: Blueprint Release Example
@@ -17,37 +17,37 @@ status: draft
17
17
 
18
18
  Write a description for your epic.
19
19
 
20
- # User Stories
20
+ # Features
21
21
 
22
- ## User Story Title
22
+ ## Feature Title
23
23
 
24
24
  As a **PERSONA** I would like to **BEHAVIOR** so that I can **GOAL**
25
25
  EOF
26
26
 
27
27
  template <<-EOF
28
28
  # <%= object.title %>
29
- # User Stories
30
- <% Array(object.user_stories).each do |user_story| %>
31
- ## <%= user_story.title %>
29
+ # Features
30
+ <% Array(object.features).each do |feature| %>
31
+ ## <%= feature.title %>
32
32
  As a **User** I would like to **Do this** so that I can **succeed**
33
33
  <% end %>
34
34
  EOF
35
35
 
36
36
  content do
37
37
  title "h1:first-of-type"
38
- define_section "User Stories" do
38
+ define_section "Features" do
39
39
  each("h2").has(:title => "h2",
40
40
  :paragraph => "p:first-of-type",
41
41
  :components => "p:first-of-type strong"
42
42
  )
43
43
 
44
- each("h2").is_a :user_story
44
+ each("h2").is_a :feature
45
45
  end
46
46
  end
47
47
 
48
48
  helpers do
49
- def user_stories
50
- sections.user_stories.items.map do |item|
49
+ def features
50
+ sections.features.items.map do |item|
51
51
  item.components = Array(item.components)
52
52
 
53
53
  item.merge(goal: item.components[2],
@@ -16,7 +16,7 @@ This is a list:
16
16
  # SOME CODE
17
17
  ```
18
18
 
19
- # User Stories
19
+ # Features
20
20
 
21
21
  ## Story Title One
22
22
 
@@ -19,7 +19,7 @@ This is a list:
19
19
  # SOME CODE
20
20
  ```
21
21
 
22
- # User Stories
22
+ # Features
23
23
 
24
24
  ## Story Title One
25
25
 
@@ -23,7 +23,7 @@ describe "The Brief Document" do
23
23
  end
24
24
 
25
25
  it "renders html" do
26
- expect(sample.to_html).to match(/h1.*User Stories.*h1\>/)
26
+ expect(sample.to_html).to match(/h1.*Features.*h1\>/)
27
27
  end
28
28
 
29
29
  it "renders html" do
@@ -59,7 +59,7 @@ describe "The Brief Document" do
59
59
  end
60
60
 
61
61
  it "gives me info about the section headings" do
62
- expect(sample.section_headings).to include("user_stories")
62
+ expect(sample.section_headings).to include("features")
63
63
  end
64
64
 
65
65
  it "has the information from the sections" do
@@ -68,13 +68,13 @@ describe "The Brief Document" do
68
68
 
69
69
  it "lets me define content sections" do
70
70
  expect(sample.sections).not_to be_empty
71
- expect(sample.sections.user_stories).to be_present
72
- expect(sample.sections.user_stories.fragment.name).to eq("section")
73
- expect(sample.sections.user_stories.fragment.css("article").length).to eq(3)
71
+ expect(sample.sections.features).to be_present
72
+ expect(sample.sections.features.fragment.name).to eq("section")
73
+ expect(sample.sections.features.fragment.css("article").length).to eq(3)
74
74
  end
75
75
 
76
76
  it "gives me an array of items underneath the section filled with the key value mappings i laid out" do
77
- items = sample.sections.user_stories.items
77
+ items = sample.sections.features.items
78
78
  expect(items.length).to eq(3)
79
79
  expect(items.map(&:components).map(&:first).uniq).to eq(["User"])
80
80
  end
@@ -5,7 +5,7 @@ describe "The Configuration DSL" do
5
5
  let(:briefcase) { Brief.testcase }
6
6
 
7
7
  it "can create methods on our models" do
8
- expect(briefcase.user_stories.first.defined_helper_method).to eq(true)
8
+ expect(briefcase.features.first.defined_helper_method).to eq(true)
9
9
  end
10
10
 
11
11
  it "treats actions as available commands" do
@@ -13,7 +13,7 @@ describe "The Configuration DSL" do
13
13
  end
14
14
 
15
15
  it "doesnt treat helpers as available commands" do
16
- expect(Brief::Epic.defined_helper_methods).to include(:user_stories)
17
- expect(Brief::Epic.defined_actions).not_to include(:user_stories)
16
+ expect(Brief::Epic.defined_helper_methods).to include(:features)
17
+ expect(Brief::Epic.defined_actions).not_to include(:features)
18
18
  end
19
19
  end
@@ -3,41 +3,41 @@ require "spec_helper"
3
3
  describe "The Brief Model" do
4
4
  let(:briefcase) { Brief.testcase }
5
5
  let(:epic) { briefcase.epics.first }
6
- let(:user_story) { briefcase.user_stories.first }
6
+ let(:feature) { briefcase.features.first }
7
7
 
8
8
  it "exposes information about its schema" do
9
9
  expect(epic.class.to_schema.keys).to include(:schema, :name, :class_name, :type_alias)
10
10
  end
11
11
 
12
12
  context "DSL Style Declarations" do
13
- it "picks up a definition of 'User Story'" do
14
- expect(briefcase.model("User Story")).to be_present
13
+ it "picks up a definition of 'Feature'" do
14
+ expect(briefcase.model("Feature")).to be_present
15
15
  end
16
16
 
17
17
  it "defines a class for us" do
18
- expect((Brief::Model::UserStory rescue nil)).to be_present
18
+ expect((Brief::Model::Feature rescue nil)).to be_present
19
19
  end
20
20
 
21
21
  it "shows up in the model definitions table" do
22
- expect(Brief::Model.table.user_story).to be_present
22
+ expect(Brief::Model.table.feature).to be_present
23
23
  end
24
24
 
25
25
  it "has a definition" do
26
- expect(Brief::Model::UserStory.definition).to be_a(Brief::Model::Definition)
26
+ expect(Brief::Model::Feature.definition).to be_a(Brief::Model::Definition)
27
27
  end
28
28
 
29
29
  it "has paths and document attributes by default" do
30
- set = Brief::Model::UserStory.attribute_set.map(&:name)
30
+ set = Brief::Model::Feature.attribute_set.map(&:name)
31
31
  expect(set).to include(:path, :document)
32
32
  end
33
33
 
34
34
  it "has the attributes defined in the DSL" do
35
- set = Brief::Model::UserStory.attribute_set.map(&:name)
35
+ set = Brief::Model::Feature.attribute_set.map(&:name)
36
36
  expect(set).to include(:title, :status, :epic_title)
37
37
  end
38
38
 
39
39
  it "has attribute setters" do
40
- story = Brief::Model::UserStory.new
40
+ story = Brief::Model::Feature.new
41
41
  expect(story).to respond_to(:title=)
42
42
  end
43
43
  end
@@ -75,7 +75,7 @@ describe "The Brief Model" do
75
75
  context "Briefcase Finders" do
76
76
  it "creates methods on the briefcase for each class" do
77
77
  expect(briefcase.epics).not_to be_empty
78
- expect(briefcase.user_stories).not_to be_empty
78
+ expect(briefcase.features).not_to be_empty
79
79
  end
80
80
 
81
81
  it "finds instances of the desired model" do
@@ -103,18 +103,18 @@ describe "The Brief Model" do
103
103
  end
104
104
 
105
105
  it "users the actions block to define CLI dispatchers (dsl)" do
106
- expect(user_story.class.defined_actions).to include(:custom_action)
106
+ expect(feature.class.defined_actions).to include(:custom_action)
107
107
  end
108
108
 
109
109
  it "lets me define a helper method which utilizes all the extracted data and content structure" do
110
- expect(epic.user_stories.length).to eq(3)
111
- expect(epic.user_stories.map(&:persona)).to include("User")
110
+ expect(epic.features.length).to eq(3)
111
+ expect(epic.features.map(&:persona)).to include("User")
112
112
  end
113
113
  end
114
114
 
115
115
  context "Section Mappings" do
116
- it "defines a section mapping for User Stories" do
117
- mapping = epic.class.section_mapping("User Stories")
116
+ it "defines a section mapping for Features" do
117
+ mapping = epic.class.section_mapping("Features")
118
118
  expect(mapping).to be_a(Brief::Document::Section::Mapping)
119
119
  end
120
120
  end
@@ -31,8 +31,8 @@ describe "The Brief Document Repository" do
31
31
  end
32
32
 
33
33
  it "finds the last document matching a query" do
34
- query = repository.where(state:"active", type:"user_story")
35
- expect(query.last.type).to eq("user_story")
34
+ query = repository.where(state:"active", type:"feature")
35
+ expect(query.last.type).to eq("feature")
36
36
  end
37
37
 
38
38
  it "respects the ordering" do
@@ -6,7 +6,7 @@ describe "Document Templates" do
6
6
  title: "Epic Example",
7
7
  status: "published",
8
8
  type: "epic",
9
- user_stories:[{
9
+ features:[{
10
10
  title: "A user wants to do something",
11
11
  paragraph: "As a user I would like to do something so that I can succeed",
12
12
  goal: "I can succeed",
@@ -35,7 +35,7 @@ describe "Document Templates" do
35
35
  doc = Brief::Document.create_from_data(data)
36
36
  content = doc.content
37
37
 
38
- expect(content).to include("# User Stories")
38
+ expect(content).to include("# Features")
39
39
  expect(content).to include("# Epic Example")
40
40
  expect(content).to include("## A user wants to do something")
41
41
  expect(content).to include("## A user wants to do something else")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brief
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.14
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Soeder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-21 00:00:00.000000000 Z
11
+ date: 2015-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -305,6 +305,7 @@ files:
305
305
  - apps/blueprint/example/docs/diagrams/example-diagram.md
306
306
  - apps/blueprint/models/diagram.rb
307
307
  - apps/blueprint/models/epic.rb
308
+ - apps/blueprint/models/feature.rb
308
309
  - apps/blueprint/models/milestone.rb
309
310
  - apps/blueprint/models/outline.rb
310
311
  - apps/blueprint/models/page.rb
@@ -313,7 +314,6 @@ files:
313
314
  - apps/blueprint/models/release.rb
314
315
  - apps/blueprint/models/roadmap.rb
315
316
  - apps/blueprint/models/sitemap.rb
316
- - apps/blueprint/models/user_story.rb
317
317
  - apps/blueprint/models/wireframe.rb
318
318
  - apps/blueprint/templates/epic.md.erb
319
319
  - apps/blueprint/templates/milestone.md.erb
@@ -521,3 +521,4 @@ test_files:
521
521
  - spec/lib/brief/template_spec.rb
522
522
  - spec/spec_helper.rb
523
523
  - spec/support/test_helpers.rb
524
+ has_rdoc: