paperwork 0.3.3 → 0.4.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
  SHA256:
3
- metadata.gz: 30489519acbe8e37aaafa3a46cb8da6c007cd4f4b77bef00e22acd4ee4e3efed
4
- data.tar.gz: 72ee620c27ccc6a8a7968b016713ac02a67a0e19b128868472984b27762a6197
3
+ metadata.gz: 88ee93586dfaeee4e866d016e2590a7d0fe48e2401dc5c29f5a9307adfac54c5
4
+ data.tar.gz: 6e237a15962eec55281ecdd1d93b14a26502d5f53793c7f164e2fdc7780727b3
5
5
  SHA512:
6
- metadata.gz: 362686f84cffe18524ca091f5f50cff9767c739a7554c5e596120a8841aad6396aa35b8cbaef19a98865c86ef712123f3840a0557aff3be9c28e642be8029d12
7
- data.tar.gz: b193c78aa08c1da1dbc3fba4cc098794368d6a146569c8cfbf4900aa18f0dcd323d4f97dbe0efa657e37cfdd3a2e46dd225d10fe53b8ec376bcc2eec41ebfba8
6
+ metadata.gz: f30ee505178ea14ff03258a0f807b1b7aacbd2c738f5d025a6e339a78bab132b897e823c0f90278ce0d69e6751df5446207591c35e8b6b7ca7c122a7579df15c
7
+ data.tar.gz: ed1b2dd3d7713bccb6def5fb4b84c48af51620525960a1ea38db6c5800070c4a29113e34527d2703f80acab7cca6509a30ecb2e0f493ac3951f785dbe0c1f337
data/.gitignore CHANGED
@@ -13,3 +13,4 @@
13
13
  # rspec failure tracking
14
14
  .rspec_status
15
15
  .build
16
+ /lib/paperwork/tasks/middleman_template/node_modules
data/.gitlab-ci.yml CHANGED
@@ -1,20 +1,26 @@
1
- image: "ruby:2.6"
2
-
3
- # include:
4
- # - template: License-Scanning.gitlab-ci.yml
1
+ image: ruby:2.6.8
5
2
 
6
3
  stages:
7
4
  - build
8
5
  - test
6
+ - release
9
7
  - deploy
10
8
 
11
9
  before_script:
12
- - ruby -v
13
- - which ruby
14
10
  - apt update
15
11
  - apt install nodejs npm yarn -y
16
- - gem install bundler --no-document
17
- - bundle install --jobs $(nproc) ${FLAGS}
12
+ # default rubygems CLI in ruby2.6-container-images is 3.0.3, which won't
13
+ # support API KEY being provided by environment variable GEM_HOST_API_KEY.
14
+ # --> update it to >3.0.5
15
+ - gem update --system
16
+ - gem install bundler -v 2.2.27 --no-document
17
+ - bundle config set --local path .bundle
18
+ - bundle install --jobs $(nproc)
19
+
20
+ cache:
21
+ key: ${CI_COMMIT_REF_NAME}
22
+ paths:
23
+ - .bundle
18
24
 
19
25
  build:
20
26
  stage: build
@@ -27,8 +33,6 @@ build:
27
33
 
28
34
  rspec:
29
35
  stage: test
30
- dependencies:
31
- - build
32
36
  script:
33
37
  - bundle exec "rspec --format RspecJunitFormatter --out rspec.xml"
34
38
  artifacts:
@@ -38,28 +42,48 @@ rspec:
38
42
  reports:
39
43
  junit: rspec.xml
40
44
 
41
- rubocop:
42
- stage: test
45
+ # requires environment variable GEM_HOST_API_KEY to be set. content
46
+ # has to be a valid rubygems API key for authentication when publishing the
47
+ # gem to rubygems.org.
48
+ #
49
+ # also requires GIT_REPOSITORY_AUTH in which "access_token_name:access_token"
50
+ # for this git repository is configured.
51
+ release:
52
+ stage: release
53
+ rules:
54
+ - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
55
+ when: manual
56
+ variables:
57
+ GIT_REMOTE_URL: ${CI_SERVER_PROTOCOL}://${GIT_REPOSITORY_AUTH}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/${CI_PROJECT_PATH}.git
43
58
  script:
44
- - bundle exec "rubocop --format junit --out rubocop.xml"
45
- artifacts:
46
- paths:
47
- - rubocop.xml
48
- reports:
49
- junit: rubocop.xml
59
+ - VERSION=$(bundle exec rake version)
60
+ - bundle exec rake build
61
+ # remember who is responsible for this release
62
+ - git config --global user.name "${GITLAB_USER_LOGIN}"
63
+ - git config --global user.email "${GITLAB_USER_EMAIL}"
64
+ - git remote add release ${GIT_REMOTE_URL}
65
+ - git tag ${VERSION}
66
+ - git push release --tags
67
+ - gem push pkg/paperwork-${VERSION}.gem
68
+
69
+ # rubocop:
70
+ # stage: test
71
+ # script:
72
+ # - bundle exec "rubocop --format junit --out rubocop.xml"
73
+ # artifacts:
74
+ # paths:
75
+ # - rubocop.xml
76
+ # reports:
77
+ # junit: rubocop.xml
50
78
 
51
79
  pages:
52
80
  stage: deploy
53
- dependencies:
54
- - build
55
- - rspec
56
- - rubocop
81
+ rules:
82
+ - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
83
+ artifacts:
84
+ paths:
85
+ - public
57
86
  script:
58
87
  - mkdir public
59
88
  - mv .work/doc/build/* public/
60
89
  - mv .work/coverage public/
61
- artifacts:
62
- paths:
63
- - public
64
- only:
65
- - master
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- paperwork (0.3.3)
4
+ paperwork (0.4.0)
5
+ listen (~> 3.4.1)
5
6
  rake (~> 12.3)
6
7
  redcarpet (~> 3.5.0)
7
8
  thor (~> 1.1.0)
@@ -13,11 +14,18 @@ GEM
13
14
  byebug (11.1.3)
14
15
  diff-lcs (1.4.4)
15
16
  docile (1.3.2)
17
+ ffi (1.14.2)
18
+ listen (3.4.1)
19
+ rb-fsevent (~> 0.10, >= 0.10.3)
20
+ rb-inotify (~> 0.9, >= 0.9.10)
16
21
  parallel (1.19.2)
17
22
  parser (2.7.1.4)
18
23
  ast (~> 2.4.1)
19
24
  rainbow (3.0.0)
20
25
  rake (12.3.3)
26
+ rb-fsevent (0.10.4)
27
+ rb-inotify (0.10.1)
28
+ ffi (~> 1.0)
21
29
  redcarpet (3.5.1)
22
30
  regexp_parser (1.7.1)
23
31
  rexml (3.2.4)
@@ -67,4 +75,4 @@ DEPENDENCIES
67
75
  simplecov (~> 0.18.5)
68
76
 
69
77
  BUNDLED WITH
70
- 2.1.4
78
+ 2.2.27
data/README.md CHANGED
@@ -9,6 +9,7 @@ title: paperwork
9
9
 
10
10
  Markdown is used throughout many software development projects because of its simple syntax. Though being simple markdown provides sufficient elements necessary to visualize most aspects of software. And it's integrated into many tools, like github, gitlab, Visual Studio Code,... most likely these are already part of nowadays development processes anyway.
11
11
 
12
+
12
13
  Most developers want to focus on code and progress and not on documentation. *paperwork* tries to keep most of the publishing topics of documentation away from them. One important goal with this is to keep the markdown document independent from the target media. So it is possible to write documentation as HTML pages that can be scrolled, printed,... as you would do with usual web sites. On the other hand, markdown could also be transformed to presentations. If you're reading this in a presentation, you're already looking at one example of such a transformation. If you don't, have a look at the [generated presentation](https://couchbelag.gitlab.io/paperwork). The source file for the presentation is the [regular `README.md` file of the project](https://gitlab.com/couchbelag/paperwork/-/blob/master/README.md).
13
14
 
14
15
 
@@ -21,7 +22,6 @@ Well... you wouldn't, I agree. Nevertheless I've been into situations where I cr
21
22
  *paperwork* is not simply a renderer like *redcarpet* (which is actually used as renderer within *paperwork*). It provides *"markdown API"* to interface with different media formats. Of course, *paperwork* is not limited to presentations and/or books. Any media could be addressed. The idea simply is *reduce, reuse, recycle*, write documentation once and spread it across multiple channels.
22
23
 
23
24
 
24
-
25
25
  ## Installation & Usage
26
26
 
27
27
  ### In a ruby application
data/Rakefile CHANGED
@@ -14,3 +14,8 @@ task default: :spec
14
14
  CLEAN.include(".work/coverage")
15
15
 
16
16
  paperwork :doc, sources: ["README.md", "nested_example/navdemo.md", "paperwork.yml", "custom.js", "custom.css"]
17
+
18
+ desc "returns version information"
19
+ task :version do
20
+ puts Paperwork::VERSION
21
+ end
@@ -22,9 +22,7 @@ module Paperwork
22
22
 
23
23
  def tasks
24
24
  file self.name => self.dependencies do
25
- unless File.exist?(self.name)
26
- ln_sf self.source, self.name
27
- end
25
+ cp self.source, self.name
28
26
  end
29
27
  end
30
28
  end
@@ -5,21 +5,24 @@ module Paperwork
5
5
  # task generators for building with middleman
6
6
  module Tasks
7
7
  require "rake"
8
+ require "listen"
8
9
 
9
10
  ##
10
11
  # main task generator for building the document
11
12
  #
12
13
  class Document < Paperwork::Tasks::Base # rubocop:disable Metrics/ClassLength
13
- attr_reader :dir
14
+ attr_reader :dir, :sources_map
14
15
 
15
16
  include Rake::DSL
16
17
 
17
18
  def initialize(name, sources, *dependencies)
18
19
  @dir = Paperwork::Tasks::Template.new(name).dir
19
20
 
21
+ @sources_map = {}
20
22
  sources.each do |src|
21
23
  dst = get_destination(File.join(self.dir, "source"), src)
22
24
  BuildFile.new(dst, src)
25
+ sources_map[src] = dst
23
26
  dependencies << dst
24
27
  end
25
28
 
@@ -116,22 +119,33 @@ module Paperwork
116
119
  else
117
120
  Process.spawn(cmd, out: :out, in: :in, err: :err)
118
121
  end
119
- puts
120
- puts "+---------------------------------------------------------------+"
121
- puts "| |"
122
- puts "| IMPORTANT: Edit documents in #{self.dir} for live reload! |"
123
- puts "| ---------- The documents there are hard links to your |"
124
- puts "| source files, so the changes will be there |"
125
- puts "| as well. |"
126
- puts "| |"
127
- puts "+---------------------------------------------------------------+"
128
- puts
129
- Process.waitall
130
122
  end
123
+
124
+ listen_to_sources
125
+
126
+ Process.waitall
131
127
  end
132
128
  end
133
129
  end
134
130
  end
131
+
132
+ def listen_to_sources
133
+ sources = {}
134
+ self.sources_map.each do |src, dst|
135
+ sources[File.absolute_path(src)] = dst
136
+ end
137
+
138
+ ignore_list = [/#{Paperwork::Config[:build_root]}/]
139
+ Listen.to(Dir.pwd, ignore: ignore_list) do |modified, added, removed|
140
+ (modified + added + removed).each do |src|
141
+ dst = sources[src]
142
+ unless dst.nil?
143
+ puts "## updating #{src}"
144
+ FileUtils.cp src, dst
145
+ end
146
+ end
147
+ end.start
148
+ end
135
149
  end
136
150
  end
137
151
  end
@@ -1,13 +1,15 @@
1
1
  <nav class="sticky-top navbar navbar-expand-lg navbar-dark bg-dark">
2
2
  <a class="navbar-brand" href="<%= root_path %>"><%= navbar_brand || yield_content(:title) %></a>
3
- <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
4
- <span class="navbar-toggler-icon"></span>
5
- </button>
6
- <div id="navbarSupportedContent" class="collapse navbar-collapse">
7
- <ul class="mr-auto navbar-nav">
8
- <% navbar_links.each do |name, link| %>
9
- <li class=" nav-item"><a class="nav-link" data-method="get" href="<%= link.gsub(/\.md$/, ".html") %>"><%= name %></a></li>
10
- <% end %>
11
- </ul>
12
- </div>
3
+ <% if navbar_links.size > 0 %>
4
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
5
+ <span class="navbar-toggler-icon"></span>
6
+ </button>
7
+ <div id="navbarSupportedContent" class="collapse navbar-collapse">
8
+ <ul class="mr-auto navbar-nav">
9
+ <% navbar_links.each do |name, link| %>
10
+ <li class=" nav-item"><a class="nav-link" data-method="get" href="<%= link.gsub(/\.md$/, ".html") %>"><%= name %></a></li>
11
+ <% end %>
12
+ </ul>
13
+ </div>
14
+ <% end %>
13
15
  </nav>