brief 1.8.6 → 1.8.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -3
- data/.travis.yml +8 -0
- data/Gemfile.lock +9 -8
- data/Rakefile +19 -15
- data/apps/blueprint/models/page.rb +1 -1
- data/apps/blueprint/models/roadmap.rb +14 -0
- data/apps/blueprint/templates/epic.md.erb +0 -0
- data/apps/blueprint/templates/milestone.md.erb +0 -0
- data/apps/blueprint/templates/page.md.erb +0 -0
- data/apps/blueprint/templates/persona.md.erb +0 -0
- data/apps/blueprint/templates/user_story.md.erb +0 -0
- data/bin/brief +3 -3
- data/brief.gemspec +9 -3
- data/examples/blog/brief.rb +13 -18
- data/examples/blog/docs/posts/this-is-my-first-post.md +12 -0
- data/lib/brief.rb +10 -4
- data/lib/brief/apps.rb +1 -1
- data/lib/brief/briefcase.rb +13 -8
- data/lib/brief/briefcase/initializer.rb +64 -0
- data/lib/brief/cli/all.rb +69 -0
- data/lib/brief/cli/export.rb +21 -10
- data/lib/brief/cli/parse.rb +1 -1
- data/lib/brief/cli/render.rb +1 -1
- data/lib/brief/data.rb +1 -1
- data/lib/brief/document.rb +18 -15
- data/lib/brief/document/rendering.rb +18 -33
- data/lib/brief/document_mapper.rb +1 -1
- data/lib/brief/model/serializers.rb +2 -2
- data/lib/brief/version.rb +1 -1
- data/packaging/wrapper.sh +32 -0
- data/spec/fixtures/example/docs/epics/epic.html.md +25 -0
- data/spec/fixtures/example/docs/index.md +15 -0
- data/spec/fixtures/example/docs/page.html.md +14 -0
- data/spec/fixtures/example/docs/persona.html.md +5 -0
- data/spec/fixtures/example/docs/release.html.md +9 -0
- data/spec/fixtures/example/docs/resource.html.md +5 -0
- data/spec/fixtures/example/docs/user_story.html.md +24 -0
- data/spec/fixtures/example/docs/wireframe.html.md +5 -0
- data/spec/fixtures/example/models/page.rb +2 -1
- data/spec/lib/brief/serializers_spec.rb +1 -1
- data/tasks/distribution/configuration.rb +15 -0
- data/tasks/distribution/executable.rb +28 -0
- data/tasks/distribution/package.rb +85 -0
- data/tasks/distribution/package_helpers.rb +12 -0
- data/tasks/distribution/release.rb +49 -0
- data/tasks/distribution/release_notes.erb +14 -0
- data/tasks/distribution/release_notes.rb +62 -0
- data/tasks/distribution/tarball.rb +47 -0
- data/tasks/distribution/travelling_ruby.rb +87 -0
- data/tasks/package.rake +41 -0
- data/tasks/styles.rake +47 -0
- data/tasks/upload.rake +40 -0
- metadata +51 -18
- data/clients/package.json +0 -11
- data/examples/blog/docs/an-intro-to-brief.html.md +0 -9
- data/lib/.DS_Store +0 -0
- data/lib/brief/cli/change.rb +0 -14
- data/lib/brief/cli/init.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 903817ba42bbf2c8231ebe66c95bf636feea9094
|
4
|
+
data.tar.gz: fdc126615c19f6d93f6221501e65b92c0153e860
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 246599c7a7fe9c2fd1ce77fca49f53767d9927c9f7a935cc1a94acc649f805147a8b889e4f1753a0ecd06862fdcbbb8dd92b23c00a688a2879076709aefff1da
|
7
|
+
data.tar.gz: 4dabf6f9d9d274b8af89ff2122f302b63bce3a594a17d7a70466a034b87362b4d3ffbe445cc9cb1ae86dcfb63a3af8df5e303b86ad2cfd3ac6d350f155ed7609
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
brief (1.8.
|
4
|
+
brief (1.8.7)
|
5
5
|
activemodel
|
6
6
|
activesupport (>= 4.0)
|
7
7
|
commander (>= 4.2.1)
|
8
8
|
github-fs
|
9
|
+
github-markdown (~> 0.6.8)
|
9
10
|
hashie
|
10
11
|
inflecto
|
11
|
-
nokogiri
|
12
|
-
redcarpet (>= 3.2.2)
|
12
|
+
nokogiri (= 1.6.5)
|
13
13
|
virtus (>= 1.0.3)
|
14
14
|
|
15
15
|
GEM
|
16
16
|
remote: https://rubygems.org/
|
17
17
|
specs:
|
18
|
-
activemodel (4.2.
|
19
|
-
activesupport (= 4.2.
|
18
|
+
activemodel (4.2.1)
|
19
|
+
activesupport (= 4.2.1)
|
20
20
|
builder (~> 3.1)
|
21
|
-
activesupport (4.2.
|
21
|
+
activesupport (4.2.1)
|
22
22
|
i18n (~> 0.7)
|
23
23
|
json (~> 1.7, >= 1.7.7)
|
24
24
|
minitest (~> 5.1)
|
@@ -45,6 +45,7 @@ GEM
|
|
45
45
|
activesupport (> 3.2.0)
|
46
46
|
octokit
|
47
47
|
rack
|
48
|
+
github-markdown (0.6.8)
|
48
49
|
hashie (3.4.0)
|
49
50
|
highline (1.6.21)
|
50
51
|
i18n (0.7.0)
|
@@ -55,7 +56,7 @@ GEM
|
|
55
56
|
mini_portile (0.6.2)
|
56
57
|
minitest (5.5.1)
|
57
58
|
multipart-post (2.0.0)
|
58
|
-
nokogiri (1.6.
|
59
|
+
nokogiri (1.6.5)
|
59
60
|
mini_portile (~> 0.6.0)
|
60
61
|
octokit (3.8.0)
|
61
62
|
sawyer (~> 0.6.0, >= 0.5.3)
|
@@ -69,7 +70,6 @@ GEM
|
|
69
70
|
rack-test (0.6.3)
|
70
71
|
rack (>= 1.0)
|
71
72
|
rake (10.4.2)
|
72
|
-
redcarpet (3.2.2)
|
73
73
|
rspec (3.1.0)
|
74
74
|
rspec-core (~> 3.1.0)
|
75
75
|
rspec-expectations (~> 3.1.0)
|
@@ -101,6 +101,7 @@ PLATFORMS
|
|
101
101
|
DEPENDENCIES
|
102
102
|
brief!
|
103
103
|
bundler (~> 1.3)
|
104
|
+
octokit
|
104
105
|
pry
|
105
106
|
pry-nav
|
106
107
|
rack-test
|
data/Rakefile
CHANGED
@@ -1,21 +1,25 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
#!/usr/bin/env rake
|
4
|
-
begin
|
5
|
-
require 'bundler/setup'
|
6
|
-
rescue LoadError
|
7
|
-
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
8
|
-
end
|
9
|
-
|
10
|
-
Bundler::GemHelper.install_tasks
|
11
|
-
|
12
|
-
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
|
1
|
+
Dir[File.join(Dir.pwd, 'tasks', '**', '*.rb')].each { |f| require f }
|
2
|
+
Dir[File.join(Dir.pwd, 'tasks', '*.rake')].each { |f| load f }
|
13
3
|
|
14
|
-
require
|
4
|
+
require "bundler/gem_tasks"
|
15
5
|
require 'rspec/core/rake_task'
|
16
6
|
|
17
|
-
desc "Run all specs in spec directory (excluding plugin specs)"
|
18
|
-
|
19
7
|
RSpec::Core::RakeTask.new(:spec)
|
20
8
|
|
9
|
+
Distribution.configure do |config|
|
10
|
+
config.package_name = 'brief'
|
11
|
+
config.version = Brief::VERSION
|
12
|
+
config.rb_version = '20150210-2.1.5'
|
13
|
+
config.packaging_dir = File.expand_path 'packaging'
|
14
|
+
config.native_extensions = [
|
15
|
+
'github-markdown-0.6.8',
|
16
|
+
'escape_utils-1.0.1',
|
17
|
+
#'charlock_holmes-0.7.3',
|
18
|
+
#'posix-spawn-0.3.9',
|
19
|
+
#'nokogumbo-1.3.0',
|
20
|
+
#'rugged-0.21.4',
|
21
|
+
'nokogiri-1.6.5',
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
21
25
|
task :default => :spec
|
@@ -11,6 +11,6 @@ class Brief::Apps::Blueprint::Page
|
|
11
11
|
paragraph "p:first-of-type"
|
12
12
|
title "h1:first-of-type", :hide => true
|
13
13
|
tagline "h2:first-of-type", :hide => true
|
14
|
-
|
14
|
+
yaml "pre[lang='yaml'] code:first-of-type", :serialize => :yaml, :hide => true
|
15
15
|
end
|
16
16
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Brief::Apps::Blueprint::Roadmap
|
2
|
+
include Brief::Model
|
3
|
+
|
4
|
+
meta do
|
5
|
+
title
|
6
|
+
subheading
|
7
|
+
end
|
8
|
+
|
9
|
+
content do
|
10
|
+
define_section "Milestones" do
|
11
|
+
each("h2").has(:title => "h2", :due_date => "li:first-of-type", :paragraph => "p:first-of-type")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/bin/brief
CHANGED
@@ -6,17 +6,17 @@ require 'rubygems'
|
|
6
6
|
require 'brief'
|
7
7
|
require 'brief/dsl'
|
8
8
|
|
9
|
-
$briefcase = Brief::Briefcase.new(root: Dir.pwd())
|
10
9
|
|
11
10
|
if ARGV[0] == "console"
|
12
11
|
require 'pry'
|
12
|
+
$briefcase = Brief::Briefcase.new(root: Brief.pwd)
|
13
13
|
Pry.start($briefcase)
|
14
14
|
else
|
15
15
|
require 'commander/import'
|
16
16
|
|
17
17
|
program :name, "Brief"
|
18
|
-
program :description, "Brief
|
19
|
-
program :version,
|
18
|
+
program :description, "Brief lets you treat your markdown files like active record objects"
|
19
|
+
program :version, Brief::VERSION
|
20
20
|
|
21
21
|
Brief.load_commands()
|
22
22
|
end
|
data/brief.gemspec
CHANGED
@@ -25,8 +25,14 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency 'inflecto'
|
26
26
|
spec.add_dependency 'activemodel'
|
27
27
|
spec.add_dependency 'activesupport', '>= 4.0'
|
28
|
-
spec.add_dependency '
|
29
|
-
|
28
|
+
spec.add_dependency 'nokogiri', '1.6.5'
|
29
|
+
|
30
|
+
#spec.add_dependency 'github-markup', '~> 1.3.1'
|
31
|
+
#spec.add_dependency 'github-linguist', '~> 4.2.5'
|
32
|
+
#spec.add_dependency 'html-pipeline', '~> 1.11.0'
|
33
|
+
#spec.add_dependency 'sanitize', '~> 3.1.0'
|
34
|
+
spec.add_dependency 'github-markdown', '~> 0.6.8'
|
35
|
+
|
30
36
|
|
31
37
|
spec.add_development_dependency "bundler", "~> 1.3"
|
32
38
|
spec.add_development_dependency "rake"
|
@@ -34,7 +40,7 @@ Gem::Specification.new do |spec|
|
|
34
40
|
spec.add_development_dependency "pry-nav"
|
35
41
|
spec.add_development_dependency "rspec"
|
36
42
|
spec.add_development_dependency "rack-test"
|
37
|
-
|
43
|
+
spec.add_development_dependency 'octokit'
|
38
44
|
end
|
39
45
|
|
40
46
|
|
data/examples/blog/brief.rb
CHANGED
@@ -1,28 +1,23 @@
|
|
1
|
-
|
1
|
+
root = Pathname(Dir.pwd)
|
2
|
+
|
2
3
|
config do
|
3
|
-
|
4
|
+
# You can put any special brief configuration here
|
5
|
+
# set(models_path: root.join('models')) if root.join('models').exist?
|
6
|
+
# set(templates_path: root.join('templates')) if root.join('templates').exist?
|
7
|
+
# set(docs_path: root.join('documents')) if root.join('documents').exist?
|
4
8
|
end
|
5
9
|
|
6
|
-
# define a Post model
|
7
|
-
define("Post") do
|
8
10
|
|
9
|
-
|
10
|
-
# with values for 'status' and 'date'
|
11
|
+
define "Post" do
|
11
12
|
meta do
|
12
|
-
|
13
|
-
|
13
|
+
title
|
14
|
+
status :in => %w(draft published)
|
15
|
+
tags Array
|
14
16
|
end
|
17
|
+
|
15
18
|
|
16
|
-
# the post model will have a 'title' method which returns the text
|
17
|
-
# from the first h1 heading
|
18
19
|
content do
|
19
|
-
title "h1"
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
actions do
|
24
|
-
def publish(options={})
|
25
|
-
puts "The publish action"
|
26
|
-
end
|
20
|
+
title "h1:first-of-type"
|
21
|
+
subheading "h2:first-of-type"
|
27
22
|
end
|
28
23
|
end
|
data/lib/brief.rb
CHANGED
@@ -5,12 +5,18 @@ require 'virtus'
|
|
5
5
|
require 'inflecto'
|
6
6
|
require 'active_support'
|
7
7
|
require 'active_support/core_ext'
|
8
|
-
require '
|
8
|
+
require 'github/markdown'
|
9
9
|
require 'nokogiri'
|
10
10
|
require 'yaml'
|
11
11
|
require 'erb'
|
12
12
|
|
13
13
|
module Brief
|
14
|
+
# When packaging this up through the traveling ruby system
|
15
|
+
# Dir.pwd is not accurate because of the wrapper. We shim it
|
16
|
+
# by setting a special ENV variable in that file
|
17
|
+
def self.pwd
|
18
|
+
ENV.fetch('BRIEF_PWD') { Dir.pwd }
|
19
|
+
end
|
14
20
|
|
15
21
|
def self.cases
|
16
22
|
@cases ||= {}
|
@@ -32,16 +38,16 @@ module Brief
|
|
32
38
|
Brief::Configuration.instance
|
33
39
|
end
|
34
40
|
|
35
|
-
def self.
|
41
|
+
def self.lib_root
|
36
42
|
Pathname(File.dirname(__FILE__))
|
37
43
|
end
|
38
44
|
|
39
45
|
def self.apps_path
|
40
|
-
|
46
|
+
lib_root.join("..","apps")
|
41
47
|
end
|
42
48
|
|
43
49
|
def self.load_commands
|
44
|
-
Dir[
|
50
|
+
Dir[lib_root.join('brief', 'cli', '**/*.rb')].each { |f| require(f) }
|
45
51
|
|
46
52
|
# the instance methods which get defined with the helper
|
47
53
|
Brief::Model.classes.each do |klass|
|
data/lib/brief/apps.rb
CHANGED
data/lib/brief/briefcase.rb
CHANGED
@@ -94,9 +94,7 @@ module Brief
|
|
94
94
|
def use(module_type=:app, module_id)
|
95
95
|
options[:app] = module_id.to_s
|
96
96
|
|
97
|
-
if app_path
|
98
|
-
instance_eval(app_config_path.read)
|
99
|
-
end
|
97
|
+
run(app_config_path) if app_path.try(&:exist?)
|
100
98
|
end
|
101
99
|
|
102
100
|
def data
|
@@ -132,9 +130,12 @@ module Brief
|
|
132
130
|
config_path = root.join(config_path)
|
133
131
|
end
|
134
132
|
|
135
|
-
if config_path.exist?
|
136
|
-
|
137
|
-
|
133
|
+
run(config_path) if config_path.exist?
|
134
|
+
end
|
135
|
+
|
136
|
+
def run(code_or_file)
|
137
|
+
code = code_or_file.is_a?(Pathname) ? code_or_file.read : code
|
138
|
+
instance_eval(code)
|
138
139
|
end
|
139
140
|
|
140
141
|
def uses_app?
|
@@ -191,7 +192,7 @@ module Brief
|
|
191
192
|
end
|
192
193
|
|
193
194
|
def root
|
194
|
-
Pathname(options.fetch(:root) {
|
195
|
+
Pathname(options.fetch(:root) { Brief.pwd })
|
195
196
|
end
|
196
197
|
|
197
198
|
def docs_path
|
@@ -206,7 +207,7 @@ module Brief
|
|
206
207
|
value = options.fetch(:models_path) { config.models_path }
|
207
208
|
|
208
209
|
if value.to_s.match(/\./)
|
209
|
-
Pathname(
|
210
|
+
Pathname(Brief.pwd).join(value)
|
210
211
|
elsif value.to_s.match(/\//)
|
211
212
|
Pathname(value)
|
212
213
|
else
|
@@ -228,5 +229,9 @@ module Brief
|
|
228
229
|
super
|
229
230
|
end
|
230
231
|
end
|
232
|
+
|
233
|
+
def self.create_new_briefcase(options={})
|
234
|
+
Brief::Briefcase::Initializer.new(options).run
|
235
|
+
end
|
231
236
|
end
|
232
237
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Brief::Briefcase
|
2
|
+
class Initializer
|
3
|
+
def initialize(options={})
|
4
|
+
@options = options.to_mash
|
5
|
+
end
|
6
|
+
|
7
|
+
def run
|
8
|
+
options = @options
|
9
|
+
root = options.root
|
10
|
+
|
11
|
+
FileUtils.mkdir_p(root.join("docs","posts"))
|
12
|
+
|
13
|
+
config = "use(#{options.app})\n" if options.app
|
14
|
+
|
15
|
+
config = <<-EOF
|
16
|
+
root = Pathname(Dir.pwd)
|
17
|
+
|
18
|
+
config do
|
19
|
+
# You can put any special brief configuration here
|
20
|
+
# set(models_path: root.join('models')) if root.join('models').exist?
|
21
|
+
# set(templates_path: root.join('templates')) if root.join('templates').exist?
|
22
|
+
# set(docs_path: root.join('documents')) if root.join('documents').exist?
|
23
|
+
end
|
24
|
+
\n
|
25
|
+
define "Post" do
|
26
|
+
meta do
|
27
|
+
title
|
28
|
+
status :in => %w(draft published)
|
29
|
+
tags Array
|
30
|
+
end
|
31
|
+
\n
|
32
|
+
content do
|
33
|
+
title "h1:first-of-type"
|
34
|
+
subheading "h2:first-of-type"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
EOF
|
38
|
+
|
39
|
+
example = <<-EOF
|
40
|
+
---
|
41
|
+
type: post
|
42
|
+
title: This is my first post
|
43
|
+
status: published
|
44
|
+
tags:
|
45
|
+
- default
|
46
|
+
- intro
|
47
|
+
---
|
48
|
+
|
49
|
+
# This is my first post
|
50
|
+
|
51
|
+
I should write something clever.
|
52
|
+
EOF
|
53
|
+
|
54
|
+
config.gsub!(/^\ {1,6}/m, '')
|
55
|
+
example.gsub!(/^\ {1,6}/m, '')
|
56
|
+
|
57
|
+
root.join("docs","posts","this-is-my-first-post.md").open("w+") {|fh| fh.write(example) }
|
58
|
+
|
59
|
+
root.join("brief.rb").open("w+") do |fh|
|
60
|
+
fh.write(config)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
command 'change' do |c|
|
2
|
+
c.syntax = 'brief change ATTRIBUTE [OPTIONS]'
|
3
|
+
c.description = 'change attributes of brief documents'
|
4
|
+
|
5
|
+
c.option '--from VALUE', String, 'Only apply when the attributes current value matches.'
|
6
|
+
c.option '--to VALUE', String, 'Only apply when the attributes current value matches.'
|
7
|
+
c.option '--root PATH', String, 'The root directory for the briefcase'
|
8
|
+
c.option '--operator VALUE', String, 'What operator to use in matching the from value. (eq,neq,gt,gte,lt,lte). defaults: eq'
|
9
|
+
c.option '--dry-run', nil, "Don't actually save"
|
10
|
+
|
11
|
+
c.action do |args, options|
|
12
|
+
options.default(root: Pathname(Brief.pwd), operator: "eq")
|
13
|
+
attribute = args.shift
|
14
|
+
paths = args.map {|a| Dir[options.root.join(a)] }.flatten
|
15
|
+
|
16
|
+
briefcase = Brief::Briefcase.new(root: options.root)
|
17
|
+
documents = briefcase.documents_at(*paths)
|
18
|
+
|
19
|
+
if options.from
|
20
|
+
#attribute = attribute.to_sym.send(options.operator)
|
21
|
+
attribute = attribute.to_sym
|
22
|
+
documents = Brief::DocumentMapper::Query.new(documents).where({attribute => options.from}).all
|
23
|
+
end
|
24
|
+
|
25
|
+
if documents.length == 0
|
26
|
+
puts "No documents match this selection"
|
27
|
+
end
|
28
|
+
|
29
|
+
if options.dry_run
|
30
|
+
puts documents
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
command 'init' do |c|
|
36
|
+
c.syntax = 'brief init NAME [OPTIONS]'
|
37
|
+
c.description = 'Create a new brief project, aka a briefcase'
|
38
|
+
|
39
|
+
c.option '--root', String, 'The root folder for the new project.'
|
40
|
+
c.option '--app', String, 'Which existing app would you like to use?'
|
41
|
+
|
42
|
+
c.action do |args, options|
|
43
|
+
options.default :root => (args.first || Brief.pwd)
|
44
|
+
|
45
|
+
root = Pathname(options.root)
|
46
|
+
|
47
|
+
if root.join('brief.rb').exist?
|
48
|
+
puts "A Brief project already exists in this folder"
|
49
|
+
else
|
50
|
+
require 'brief/briefcase/initializer'
|
51
|
+
Brief::Briefcase.create_new_briefcase(root: root, app: options.app)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
command 'info' do |c|
|
57
|
+
c.syntax = 'brief info'
|
58
|
+
c.description = 'View info about the brief environment'
|
59
|
+
|
60
|
+
c.action do |args, options|
|
61
|
+
# traveling ruby is reporting this incorrectly
|
62
|
+
puts "\n-- Paths:"
|
63
|
+
puts "Dir.pwd = #{ Dir.pwd }"
|
64
|
+
puts "Brief.pwd = #{ Brief.pwd }"
|
65
|
+
|
66
|
+
puts "\n-- Available apps:"
|
67
|
+
puts Brief::Apps.available_apps.join("\n")
|
68
|
+
end
|
69
|
+
end
|