gollum-lib 4.0.3-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +3 -0
  3. data/HISTORY.md +11 -0
  4. data/LICENSE +21 -0
  5. data/README.md +286 -0
  6. data/Rakefile +187 -0
  7. data/docs/sanitization.md +33 -0
  8. data/gemspec.rb +100 -0
  9. data/gollum-lib.gemspec +4 -0
  10. data/gollum-lib_java.gemspec +4 -0
  11. data/lib/gollum-lib.rb +64 -0
  12. data/lib/gollum-lib/blob_entry.rb +95 -0
  13. data/lib/gollum-lib/committer.rb +243 -0
  14. data/lib/gollum-lib/file.rb +158 -0
  15. data/lib/gollum-lib/file_view.rb +155 -0
  16. data/lib/gollum-lib/filter.rb +78 -0
  17. data/lib/gollum-lib/filter/code.rb +145 -0
  18. data/lib/gollum-lib/filter/macro.rb +57 -0
  19. data/lib/gollum-lib/filter/metadata.rb +29 -0
  20. data/lib/gollum-lib/filter/plain_text.rb +16 -0
  21. data/lib/gollum-lib/filter/remote_code.rb +63 -0
  22. data/lib/gollum-lib/filter/render.rb +20 -0
  23. data/lib/gollum-lib/filter/sanitize.rb +18 -0
  24. data/lib/gollum-lib/filter/tags.rb +320 -0
  25. data/lib/gollum-lib/filter/toc.rb +109 -0
  26. data/lib/gollum-lib/filter/wsd.rb +54 -0
  27. data/lib/gollum-lib/git_access.rb +247 -0
  28. data/lib/gollum-lib/gitcode.rb +48 -0
  29. data/lib/gollum-lib/helpers.rb +13 -0
  30. data/lib/gollum-lib/hook.rb +35 -0
  31. data/lib/gollum-lib/macro.rb +43 -0
  32. data/lib/gollum-lib/macro/all_pages.rb +11 -0
  33. data/lib/gollum-lib/markup.rb +197 -0
  34. data/lib/gollum-lib/markups.rb +20 -0
  35. data/lib/gollum-lib/page.rb +491 -0
  36. data/lib/gollum-lib/pagination.rb +62 -0
  37. data/lib/gollum-lib/sanitization.rb +176 -0
  38. data/lib/gollum-lib/version.rb +5 -0
  39. data/lib/gollum-lib/wiki.rb +925 -0
  40. data/licenses/licenses.txt +6 -0
  41. metadata +410 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTBlOGQ3ZDA1OTc3ZDRhNDQxYWEyZWFmMDQxN2Q3ODUzNTlmZjkzNw==
5
+ data.tar.gz: !binary |-
6
+ NmQzNTQ4YTg4YTI1NGZkNTI0NGQyY2FmN2FjMWRhNWE3N2U2MzI0YQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZjI0YjMxZDQ4NjQ2ZmVmODY0YjNiNmFiMWExZWI4ZDNkZGI5MjBhOTQyNGI2
10
+ ODlmNGYwYjYxNzNkZjJiNDNkMDIwZTdjNWZhNzQxNTRmZWRiYjJlYWZlNTEw
11
+ OTM2ZjEyZWY4YmQwN2Y2MjU0MjNjZTg3ZmU2MDJhZjljYTJiOTA=
12
+ data.tar.gz: !binary |-
13
+ ZTc4MTZkNDM3OGE4YmY5YzI3NzYxZDRkMWM1MTFiMTgzZTk4M2RlZGFkOGQz
14
+ NjdhNTNkN2ViYTJhMjllOWRkNzg4ZGVjMjYyY2IxMzc3NWMyNTlkMWIwMjEz
15
+ YzJlYzJhNDhhZDMxMjA3Njc2MzM5YmI4NTNmMTQ0ZmM0MWQ4YWE=
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec :name => RUBY_PLATFORM == 'java' ? 'gollum-lib_java' : 'gollum-lib'
data/HISTORY.md ADDED
@@ -0,0 +1,11 @@
1
+ # v4.0.2 /2015-0119
2
+
3
+ * Bugfixes
4
+
5
+ # v4.0.1 /2014-12-04
6
+
7
+ * Security fix for [remote code execution issue](https://github.com/gollum/gollum/issues/913). Please update!
8
+
9
+ # v0.0.1 / 2013-03-19
10
+
11
+ * First release, extrated from https://github.com/gollum/gollum
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) Tom Preston-Werner, Rick Olson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the 'Software'), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,286 @@
1
+ gollum lib -- A wiki built on top of Git
2
+ ========================================
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/gollum-lib.svg)](http://badge.fury.io/rb/gollum-lib)
5
+ [![Build Status](https://travis-ci.org/gollum/gollum-lib.svg?branch=master)](https://travis-ci.org/gollum/gollum-lib)
6
+ [![Dependency Status](https://gemnasium.com/gollum/gollum-lib.svg)](https://gemnasium.com/gollum/gollum-lib)
7
+
8
+ ## DESCRIPTION
9
+
10
+ [Gollum](https://github.com/gollum/gollum) is a simple wiki system built on
11
+ top of Git that powers GitHub Wikis.
12
+
13
+ Gollum-lib is the Ruby API that allows you to retrieve raw or formatted wiki
14
+ content from a Git repository, write new content to the repository, and collect
15
+ various meta data about the wiki as a whole.
16
+
17
+ Gollum-lib follows the rules of [Semantic Versioning](http://semver.org/) and uses
18
+ [TomDoc](http://tomdoc.org/) for inline documentation.
19
+
20
+ ## SYSTEM REQUIREMENTS
21
+
22
+ - Python 2.5+ (2.7.3 recommended)
23
+ - Ruby 1.9.3+ (1.9.3 recommended)
24
+ - Unix like operating system (OS X, Ubuntu, Debian, and more)
25
+ - Will not work on Windows (because of [grit](https://github.com/github/grit))
26
+
27
+ ## INSTALLATION
28
+
29
+ The best way to install Gollum-lib is with RubyGems:
30
+
31
+ ```bash
32
+ $ [sudo] gem install gollum-lib
33
+ ```
34
+
35
+ If you're installing from source, you can use [Bundler][bundler] to pick up all the
36
+ gems:
37
+
38
+ ```bash
39
+ $ bundle install
40
+ ```
41
+
42
+ In order to use the various formats that Gollum supports, you will need to
43
+ separately install the necessary dependencies for each format. You only need
44
+ to install the dependencies for the formats that you plan to use.
45
+
46
+ * [AsciiDoc](http://www.methods.co.nz/asciidoc/) -- `gem install asciidoctor`
47
+ * [Creole](http://wikicreole.org/) -- `gem install creole`
48
+ * [Markdown](http://daringfireball.net/projects/markdown/) -- `gem install redcarpet`
49
+ * [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown) -- `gem install github-markdown`
50
+ * [Org](http://orgmode.org/) -- `gem install org-ruby`
51
+ * [Pod](http://search.cpan.org/dist/perl/pod/perlpod.pod) -- `Pod::Simple::HTML` comes with Perl >= 5.10. Lower versions should install Pod::Simple from CPAN.
52
+ * [RDoc](http://rdoc.sourceforge.net/)
53
+ * [ReStructuredText](http://docutils.sourceforge.net/rst.html) -- `easy_install docutils`
54
+ * [Textile](http://www.textism.com/tools/textile/) -- `gem install RedCloth`
55
+ * [MediaWiki](http://www.mediawiki.org/wiki/Help:Formatting) -- `gem install wikicloth`
56
+
57
+ [bundler]: http://gembundler.com/
58
+
59
+ ## SYNTAX
60
+
61
+ Gollum supports a variety of formats and extensions (Markdown, MediaWiki, Textile, …).
62
+ On top of these formats Gollum lets you insert headers, footers, links, image, math and more.
63
+
64
+ Check out the [Gollum Wiki](https://github.com/gollum/gollum/wiki) for all of Gollum's formats and syntactic options.
65
+
66
+ ## API DOCUMENTATION
67
+
68
+ Initialize the `Gollum::Repo` object:
69
+
70
+ ```ruby
71
+ # Require rubygems if necessary
72
+ require 'rubygems'
73
+
74
+ # Require the Gollum library
75
+ require 'gollum-lib'
76
+
77
+ # Create a new Gollum::Wiki object by initializing it with the path to the
78
+ # Git repository.
79
+ wiki = Gollum::Wiki.new("my-gollum-repo.git")
80
+ # => <Gollum::Wiki>
81
+ ```
82
+
83
+ By default, internal wiki links are all absolute from the root. To specify a different
84
+ base path, you can specify the `:base_path` option:
85
+
86
+ ```ruby
87
+ wiki = Gollum::Wiki.new("my-gollum-repo.git", :base_path => "/wiki")
88
+ ```
89
+
90
+ Note that `base_path` just modifies the links.
91
+
92
+ Get the latest version of the given human or canonical page name:
93
+
94
+ ```ruby
95
+ page = wiki.page('page-name')
96
+ # => <Gollum::Page>
97
+
98
+ page.raw_data
99
+ # => "# My wiki page"
100
+
101
+ page.formatted_data
102
+ # => "<h1>My wiki page</h1>"
103
+
104
+ page.format
105
+ # => :markdown
106
+
107
+ vsn = page.version
108
+ # => <Gollum::Git::Commit>
109
+
110
+ vsn.id
111
+ # => '3ca43e12377ea1e32ea5c9ce5992ec8bf266e3e5'
112
+ ```
113
+
114
+ Get the footer (if any) for a given page:
115
+
116
+ ```ruby
117
+ page.footer
118
+ # => <Gollum::Page>
119
+ ```
120
+
121
+ Get the header (if any) for a given page:
122
+
123
+ ```ruby
124
+ page.header
125
+ # => <Gollum::Page>
126
+ ```
127
+
128
+ Get a list of versions for a given page:
129
+
130
+ ```ruby
131
+ vsns = wiki.page('page-name').versions
132
+ # => [<Gollum::Git::Commit, <Gollum::Git::Commit, <Gollum::Git::Commit>]
133
+
134
+ vsns.first.id
135
+ # => '3ca43e12377ea1e32ea5c9ce5992ec8bf266e3e5'
136
+
137
+ vsns.first.authored_date
138
+ # => Sun Mar 28 19:11:21 -0700 2010
139
+ ```
140
+
141
+ Get a specific version of a given canonical page file:
142
+
143
+ ```ruby
144
+ wiki.page('page-name', '5ec521178e0eec4dc39741a8978a2ba6616d0f0a')
145
+ ```
146
+
147
+ Get the latest version of a given static file:
148
+
149
+ ```ruby
150
+ file = wiki.file('asset.js')
151
+ # => <Gollum::File>
152
+
153
+ file.raw_data
154
+ # => "alert('hello');"
155
+
156
+ file.version
157
+ # => <Gollum::Git::Commit>
158
+ ```
159
+
160
+ Get a specific version of a given static file:
161
+
162
+ ```ruby
163
+ wiki.file('asset.js', '5ec521178e0eec4dc39741a8978a2ba6616d0f0a')
164
+ ```
165
+
166
+ Get an in-memory Page preview (useful for generating previews for web
167
+ interfaces):
168
+
169
+ ```ruby
170
+ preview = wiki.preview_page("My Page", "# Contents", :markdown)
171
+ preview.formatted_data
172
+ # => "<h1>Contents</h1>"
173
+ ```
174
+
175
+ Methods that write to the repository require a Hash of commit data that takes
176
+ the following form:
177
+
178
+ ```ruby
179
+ commit = { :message => 'commit message',
180
+ :name => 'Tom Preston-Werner',
181
+ :email => 'tom@github.com' }
182
+ ```
183
+
184
+ Write a new version of a page (the file will be created if it does not already
185
+ exist) and commit the change. The file will be written at the repo root.
186
+
187
+ ```ruby
188
+ wiki.write_page('Page Name', :markdown, 'Page contents', commit)
189
+ ```
190
+
191
+ Update an existing page. If the format is different than the page's current
192
+ format, the file name will be changed to reflect the new format.
193
+
194
+ ```ruby
195
+ page = wiki.page('Page Name')
196
+ wiki.update_page(page, page.name, page.format, 'Page contents', commit)
197
+ ```
198
+
199
+ To delete a page and commit the change:
200
+
201
+ ```ruby
202
+ wiki.delete_page(page, commit)
203
+ ```
204
+
205
+ Register or unregister a hook to be called after a page commit:
206
+
207
+ ```ruby
208
+ Gollum::Hook.register(:post_commit, :hook_id) do |committer, sha1|
209
+ # Your code here
210
+ end
211
+
212
+ Gollum::Hook.unregister(:post_commit, :hook_id)
213
+ ```
214
+
215
+ ## WINDOWS FILENAME VALIDATION
216
+
217
+ Note that filenames on windows must not contain any of the following characters `\ / : * ? " < > |`. See [this support article](http://support.microsoft.com/kb/177506) for details.
218
+
219
+ ## CONTRIBUTE
220
+
221
+ If you'd like to hack on Gollum-lib, start by forking the repo on GitHub:
222
+
223
+ http://github.com/gollum/gollum-lib
224
+
225
+ To get all of the dependencies, install the gem first. The best way to get
226
+ your changes merged back into core is as follows:
227
+
228
+ 1. Clone down your fork
229
+ 1. Create a thoughtfully named topic branch to contain your change
230
+ 1. Hack away
231
+ 1. Add tests and make sure everything still passes by running `rake`
232
+ 1. If you are adding new functionality, document it in the README
233
+ 1. Do not change the version number, I will do that on my end
234
+ 1. If necessary, rebase your commits into logical chunks, without errors
235
+ 1. Push the branch up to GitHub
236
+ 1. Send a pull request to the gollum/gollum-lib project.
237
+
238
+ ## RELEASING
239
+
240
+ Gollum-lib uses [Semantic Versioning](http://semver.org/). Having `x.y.z` :
241
+
242
+ For z releases:
243
+
244
+ ```bash
245
+ $ rake bump
246
+ $ rake release
247
+ ```
248
+
249
+ For x.y releases:
250
+
251
+ ```bash
252
+ $ rake gemspec
253
+ $ rake release
254
+ ```
255
+
256
+ ## BUILDING THE GEM FROM MASTER
257
+
258
+ ```bash
259
+ $ gem uninstall -aIx gollum-lib
260
+ $ git clone https://github.com/gollum/gollum-lib.git
261
+ $ cd gollum-lib
262
+ gollum-lib$ rake build
263
+ gollum-lib$ rake install
264
+ ```
265
+
266
+ ## RUN THE TESTS
267
+
268
+ ```bash
269
+ $ bundle install
270
+ $ bundle exec rake test
271
+ ```
272
+
273
+ ## WORK WITH TEST REPOS
274
+
275
+ An example of how to add a test file to the bare repository `lotr.git`.
276
+
277
+ ```bash
278
+ $ mkdir tmp; cd tmp
279
+ $ git clone ../lotr.git/ .
280
+ Cloning into '.'...
281
+ done.
282
+ $ git log
283
+ $ echo "test" > test.md
284
+ $ git add . ; git commit -am "Add test"
285
+ $ git push ../lotr.git/ master
286
+ ```
data/Rakefile ADDED
@@ -0,0 +1,187 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'date'
4
+
5
+ #############################################################################
6
+ #
7
+ # Helper functions
8
+ #
9
+ #############################################################################
10
+
11
+ def name
12
+ @name ||= Dir['*.gemspec'].first.split('.').first
13
+ end
14
+
15
+ def version
16
+ line = File.read("lib/gollum-lib/version.rb")[/^\s*VERSION\s*=\s*.*/]
17
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
18
+ end
19
+
20
+ # assumes x.y.z all digit version
21
+ def next_version
22
+ # x.y.z
23
+ v = version.split '.'
24
+ # bump z
25
+ v[-1] = v[-1].to_i + 1
26
+ v.join '.'
27
+ end
28
+
29
+ def bump_version
30
+ old_file = File.read("lib/gollum-lib/version.rb")
31
+ old_version_line = old_file[/^\s*VERSION\s*=\s*.*/]
32
+ new_version = next_version
33
+ # replace first match of old version with new version
34
+ old_file.sub!(old_version_line, " VERSION = '#{new_version}'")
35
+
36
+ File.write("lib/gollum-lib/version.rb", old_file)
37
+
38
+ new_version
39
+ end
40
+
41
+ def date
42
+ Date.today.to_s
43
+ end
44
+
45
+ def rubyforge_project
46
+ name
47
+ end
48
+
49
+ def gemspec_file
50
+ "gemspec.rb"
51
+ end
52
+
53
+ def gemspecs
54
+ ["#{name}.gemspec", "#{name}_java.gemspec"]
55
+ end
56
+
57
+ def gem_files
58
+ ["#{name}-#{version}.gem", "#{name}-#{version}-java.gem"]
59
+ end
60
+
61
+ def replace_header(head, header_name)
62
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
63
+ end
64
+
65
+ #############################################################################
66
+ #
67
+ # Standard tasks
68
+ #
69
+ #############################################################################
70
+
71
+ task :default => :test
72
+
73
+ require 'rake/testtask'
74
+ Rake::TestTask.new(:test) do |test|
75
+ test.libs << 'lib' << 'test' << '.'
76
+ test.pattern = 'test/**/test_*.rb'
77
+ test.verbose = true
78
+ end
79
+
80
+ desc "Generate RCov test coverage and open in your browser"
81
+ task :coverage do
82
+ require 'rcov'
83
+ sh "rm -fr coverage"
84
+ sh "rcov test/test_*.rb"
85
+ sh "open coverage/index.html"
86
+ end
87
+
88
+ desc "Open an irb session preloaded with this library"
89
+ task :console do
90
+ sh "irb -rubygems -r ./lib/#{name}.rb"
91
+ end
92
+
93
+ #############################################################################
94
+ #
95
+ # Custom tasks (add your own tasks here)
96
+ #
97
+ #############################################################################
98
+
99
+ desc "Update version number and gemspec"
100
+ task :bump do
101
+ puts "Updated version to #{bump_version}"
102
+ # Execute does not invoke dependencies.
103
+ # Manually invoke gemspec then validate.
104
+ Rake::Task[:gemspec].execute
105
+ Rake::Task[:validate].execute
106
+ end
107
+
108
+ desc "Build and install"
109
+ task :install => :build do
110
+ sh "gem install --local --no-ri --no-rdoc pkg/#{name}-#{version}.gem"
111
+ end
112
+
113
+ #############################################################################
114
+ #
115
+ # Packaging tasks
116
+ #
117
+ #############################################################################
118
+
119
+ desc 'Create a release build'
120
+ task :release => :build do
121
+ unless `git branch` =~ /^\* master$/
122
+ puts "You must be on the master branch to release!"
123
+ exit!
124
+ end
125
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
126
+ sh "git pull --rebase origin master"
127
+ sh "git tag v#{version}"
128
+ sh "git push origin master"
129
+ sh "git push origin v#{version}"
130
+ sh "gem push pkg/#{name}-#{version}.gem"
131
+ sh "gem push pkg/#{name}-#{version}-java.gem"
132
+ end
133
+
134
+ desc 'Publish to rubygems. Same as release'
135
+ task :publish => :release
136
+
137
+ desc 'Build gem'
138
+ task :build => :gemspec do
139
+ sh "mkdir -p pkg"
140
+ gemspecs.each do |gemspec|
141
+ sh "gem build #{gemspec}"
142
+ end
143
+ gem_files.each do |gem_file|
144
+ sh "mv #{gem_file} pkg"
145
+ end
146
+ end
147
+
148
+ desc 'Update gemspec'
149
+ task :gemspec => :validate do
150
+ # read spec file and split out manifest section
151
+ spec = File.read(gemspec_file)
152
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
153
+
154
+ # replace name version and date
155
+ replace_header(head, :name)
156
+ replace_header(head, :date)
157
+ #comment this out if your rubyforge_project has a different name
158
+ replace_header(head, :rubyforge_project)
159
+
160
+ # determine file list from git ls-files
161
+ files = `git ls-files`.
162
+ split("\n").
163
+ sort.
164
+ reject { |file| file =~ /^\./ }.
165
+ reject { |file| file =~ /^(rdoc|pkg|test|Home\.md|\.gitattributes|Guardfile)/ }.
166
+ map { |file| " #{file}" }.
167
+ join("\n")
168
+
169
+ # piece file back together and write
170
+ manifest = " s.files = %w[\n#{files}\n ]\n"
171
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
172
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
173
+ puts "Updated #{gemspec_file}"
174
+ end
175
+
176
+ desc 'Validate lib files and version file'
177
+ task :validate do
178
+ libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
179
+ unless libfiles.empty?
180
+ puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
181
+ exit!
182
+ end
183
+ unless Dir['VERSION*'].empty?
184
+ puts "A `VERSION` file at root level violates Gem best practices."
185
+ exit!
186
+ end
187
+ end