asciidoctor-bibliography 0.0.1.dev → 0.1

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: 864d555fbe79431ffb94b5124072822f100119a7
4
- data.tar.gz: e6c24a670ebf6b0ee35db0abd0829a33d74b0d48
3
+ metadata.gz: 24be1ddb4ec69d1ffabf68e2fc7cf1c628be6130
4
+ data.tar.gz: b0abf289da6967d4da9e1aeb75acfadc3a4a5f24
5
5
  SHA512:
6
- metadata.gz: ca771ffe5c26c93f734adf5378a952708f231206562d840719a2271f30b9cd9445b1c93e497696cb4e8688d2d05ff0f24c60a975764ddab2a6ca972f713ee049
7
- data.tar.gz: 88a2f80a67c5e7fe03aeacd2a0e25c4cb8a251a2226d6be0b3cb5a57b955ea7972b7fa46337290872da18fba888071d5ca1edff08a1b413938c1a9b8f5ebb119
6
+ metadata.gz: a46db6e6d83b1faa86df2d69d521a7f1810e0f7bd53ee6abe339328c425aff40b7fe9f804c94fe6fb6d93a5afc19f241311e79caf333fce6fcc12cd5f4a610dc
7
+ data.tar.gz: dc999d205e2c1d919489ba773eb37ea42253eb4b922e40a9abca0109e76ded8e8446cfe9276959ab92c1dffd8831fb81e610fa425a5910a8f2ae1919769ec52f
data/.gitignore CHANGED
@@ -42,7 +42,7 @@ build-iPhoneSimulator/
42
42
 
43
43
  # for a library or gem, you might want to ignore these files since the code is
44
44
  # intended to run in multiple environments; otherwise, check them in:
45
- # Gemfile.lock
45
+ Gemfile.lock
46
46
  .ruby-version
47
47
  .ruby-gemset
48
48
 
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.4.0
data/Gemfile CHANGED
@@ -1,21 +1,3 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/riboseinc/asciidoctor-bibliography" }
4
-
5
3
  gemspec
6
-
7
- # gem 'asciidoctor'
8
-
9
- # gem 'bibtex-ruby'
10
- # gem 'latex-decode'
11
-
12
- # gem 'byebug'
13
-
14
- # gem 'citeproc-ruby'
15
- # gem 'csl-styles'
16
-
17
-
18
- # s.add_runtime_dependency('bibliography-ruby', "~> 4")
19
- # s.add_runtime_dependency('citeproc-ruby')
20
- # s.add_runtime_dependency('csl-styles', '~> 1')
21
- # s.add_runtime_dependency('latex-decode', '~> 0.2')
data/README.adoc CHANGED
@@ -21,25 +21,66 @@ gem "asciidoctor-bibliography"
21
21
 
22
22
  And then execute:
23
23
 
24
- [source,sh]
24
+ [source,console]
25
25
  ----
26
26
  $ bundle install
27
27
  ----
28
28
 
29
29
  Or install it yourself as:
30
30
 
31
- [source,sh]
31
+ [source,console]
32
32
  ----
33
33
  $ gem install asciidoctor-bibliography
34
34
  ----
35
35
 
36
36
  == Configure
37
37
 
38
- TODO
38
+ In your document header, define the following below the title.
39
+
40
+ ----
41
+ = Latex Macros In Bibtex Items
42
+ :bibliography-database: first.bib
43
+ :bibliography-database: second.bib
44
+ :bibliography-reference-style: ieee
45
+ ----
39
46
 
40
47
  == Usage
41
48
 
42
- TODO
49
+ Include asciidoctor-bibliography in your chain:
50
+
51
+ [source,console]
52
+ ----
53
+ $ asciidoctor -r asciidoctor-bibliography main.adoc
54
+ ----
55
+
56
+ Add citation commands within your AsciiDoc:
57
+
58
+ ----
59
+ Searching Function (see cite:guo2009[])
60
+ ----
61
+
62
+ List out bibliography:
63
+
64
+ ----
65
+ bibliography::[]
66
+ ----
67
+
68
+ == Example
69
+
70
+ ----
71
+ = Latex Macros In Bibtex Items
72
+ :bibliography-database: reference.bib
73
+ :bibliography-reference-style: ieee
74
+
75
+ == Contents
76
+
77
+ This is a paper "Validation and Verificaton of Computer Forensic Software
78
+ tools -- Searching Function" (see cite:guo2009[]).
79
+
80
+ == Bibliography
81
+
82
+ bibliography::[]
83
+ ----
43
84
 
44
85
  == Development
45
86
 
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -26,12 +26,15 @@ END
26
26
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
27
27
  spec.required_ruby_version = Gem::Requirement.new(">= 2.0.0")
28
28
 
29
- spec.add_development_dependency "bundler", "~> 1.14"
29
+ spec.add_dependency "asciidoctor"
30
+ spec.add_dependency "citeproc-ruby"
31
+ spec.add_dependency "csl-styles", "~> 1"
32
+ spec.add_dependency "latex-decode", "~> 0.2"
33
+ spec.add_dependency "bibtex-ruby"
30
34
 
31
- spec.add_development_dependency "asciidoctor"
32
- spec.add_development_dependency "bibtex-ruby"
35
+ spec.add_development_dependency "bundler", "~> 1.14"
33
36
  spec.add_development_dependency "byebug"
34
- spec.add_development_dependency "citeproc-ruby"
35
- spec.add_development_dependency "csl-styles"
36
- spec.add_development_dependency "latex-decode"
37
+ spec.add_development_dependency "rspec"
38
+ spec.add_development_dependency "rake"
39
+ spec.add_development_dependency "simplecov"
37
40
  end
@@ -1,3 +1,3 @@
1
- require 'byebug'
1
+ # require 'byebug' if Gem.gem("byebug")
2
2
 
3
3
  require_relative 'asciidoctor-bibliography/asciidoctor'
@@ -11,15 +11,7 @@ module AsciidoctorBibliography
11
11
  module Asciidoctor
12
12
  class BibliographerPreprocessor < ::Asciidoctor::Extensions::Preprocessor
13
13
  def process document, reader
14
-
15
- # We peek at the document attributes we need, without perturbing the parsing flow.
16
- # NOTE: we're in a preprocessor and they haven't been parsed yet; doing it manually.
17
- document_attributes =
18
- ::Asciidoctor::Parser
19
- .parse(reader, ::Asciidoctor::Document.new, header_only: true)
20
- .attributes
21
- # We extract only the ones we recognize.
22
- document.bibliographer.options = Hash[Helpers.slice(document_attributes, 'bibliography-citation-style', 'bibliography-order', 'bibliography-reference-style', 'bibliography-database').map {|k, v| [k.sub(/^bibliography-/, ''), v] }]
14
+ set_bibliographer_options(document, reader)
23
15
 
24
16
  # We're handling single database/formatters; generalization will be straightforward when needed.
25
17
  document.bibliographer.database = Database.new(document.bibliographer.options['database'])
@@ -63,6 +55,18 @@ module AsciidoctorBibliography
63
55
  processed_lines.flatten!
64
56
  reader = ::Asciidoctor::Reader.new processed_lines
65
57
  end
58
+
59
+ private
60
+
61
+ def set_bibliographer_options(document, reader)
62
+ # We peek at the document attributes we need, without perturbing the parsing flow.
63
+ # NOTE: we're in a preprocessor and they haven't been parsed yet; doing it manually.
64
+ document_attributes =
65
+ ::Asciidoctor::Parser
66
+ .parse(reader, ::Asciidoctor::Document.new, header_only: true)
67
+ .attributes
68
+ document.bibliographer.options = Hash[Helpers.slice(document_attributes, 'bibliography-citation-style', 'bibliography-order', 'bibliography-reference-style', 'bibliography-database').map {|k, v| [k.sub(/^bibliography-/, ''), v] }]
69
+ end
66
70
  end
67
71
  end
68
72
  end
@@ -5,6 +5,7 @@ module AsciidoctorBibliography
5
5
  class Citation
6
6
  TEX_MACROS_NAMES = Formatters::TeX::MACROS.keys.map { |s| Regexp.escape s }.concat(['fullcite']).join('|')
7
7
  REGEXP = /\\?(#{TEX_MACROS_NAMES}):(?:(\S*?)?\[(|.*?[^\\])\])(?:\+(\S*?)?\[(|.*?[^\\])\])*/
8
+ REF_ATTRIBUTES = %i[chapter page section clause]
8
9
 
9
10
  # No need for a fully fledged class right now.
10
11
  Cite = Struct.new(:key, :occurrence_index, :target, :positional_attributes, :named_attributes)
@@ -33,10 +34,19 @@ module AsciidoctorBibliography
33
34
 
34
35
  def render(bibliographer)
35
36
  if macro == 'fullcite'
36
- # NOTE: we reinstantiate to avoid tracking used keys.
37
37
  formatter = Formatters::CSL.new(bibliographer.options['reference-style'])
38
- formatter.import bibliographer.database
38
+
39
+ # NOTE: being able to overwrite a more general family of attributes would be neat.
40
+ mergeable_attributes = Helpers.slice(cites.first.named_attributes || {}, *(REF_ATTRIBUTES.map(&:to_s)))
41
+
42
+ # reject empty values
43
+ mergeable_attributes.reject! do |key, value|
44
+ value.nil? || value.empty?
45
+ end
39
46
  # TODO: as is, cites other than the first are simply ignored.
47
+ database_entry = bibliographer.database.find { |e| e['id'] == cites.first.key }
48
+ database_entry.merge!(mergeable_attributes)
49
+ formatter.import([database_entry])
40
50
  '{empty}' + Helpers.html_to_asciidoc(formatter.render(:bibliography, id: cites.first.key).join)
41
51
  elsif Formatters::TeX::MACROS.keys.include? macro
42
52
  bibliographer.citation_formatter.render(self)
@@ -114,23 +114,49 @@ module AsciidoctorBibliography
114
114
  [@opening_bracket, string, @closing_bracket].compact.join
115
115
  end
116
116
 
117
+ def find_entry(key)
118
+ entry = @database.find{ |h| h['id'] == key }
119
+ if entry.nil?
120
+ raise StandardError, "Can't find entry: #{key}"
121
+ end
122
+ entry
123
+ end
124
+
117
125
  def year(cite)
118
- issued = @database.find{ |h| h['id'] == cite.key }['issued']['date-parts']
119
- return "" if issued.nil?
120
- return "" if issued.first.nil?
121
- issued.first.first
126
+ entry = find_entry(cite.key)
127
+ issued = entry['issued']
128
+
129
+ if issued.nil?
130
+ puts "asciidoctor-bibliography: citation (#{cite.key}) has no 'issued' information"
131
+ return ""
132
+ end
133
+
134
+ date_parts = issued['date-parts']
135
+ return "" if date_parts.nil?
136
+
137
+ return "" if date_parts.first.nil?
138
+ date_parts.first.first
122
139
  end
123
140
 
124
141
  def extra(cite)
125
142
  na = cite.named_attributes
126
143
  extra = []
127
144
  return extra if na.nil?
128
- # TODO: should this be configurable?
129
- extra << "Chapter #{na['chapter']}" unless na['chapter'].nil?
130
- extra << "Page #{na['page']}" unless na['page'].nil?
145
+
146
+ Citation::REF_ATTRIBUTES.each do |sym|
147
+ next if na[sym.to_s].nil?
148
+ extra << ref_content(sym, na[sym.to_s])
149
+ end
150
+
131
151
  extra
132
152
  end
133
153
 
154
+ # TODO: should this be configurable?
155
+ # TODO RT: Yes, and i18n!
156
+ def ref_content(sym, content)
157
+ "#{sym.to_s.capitalize} #{content}"
158
+ end
159
+
134
160
  def authors(mode, cite)
135
161
  case mode
136
162
  when :full
@@ -143,7 +169,8 @@ module AsciidoctorBibliography
143
169
  end
144
170
 
145
171
  def authors_list(cite)
146
- authors = @database.find{ |h| h['id'] == cite.key }['author']
172
+ entry = find_entry(cite.key)
173
+ authors = entry['author']
147
174
  return [] if authors.nil?
148
175
  authors.map{ |h| h['family'] }.compact
149
176
  end
@@ -14,6 +14,7 @@ module AsciidoctorBibliography
14
14
  .gsub(/<\/?b>/, '*')
15
15
  .gsub(/<\/?span.*?>/, '')
16
16
  .gsub(/\{|\}/, '')
17
+ # TODO: bracket dropping is inappropriate here.
17
18
  end
18
19
 
19
20
  # NOTE: mostly stolen from ActiveSupport.
@@ -15,14 +15,24 @@ module AsciidoctorBibliography
15
15
  end
16
16
 
17
17
  def render(bibliographer)
18
- lines = []
18
+ unsorted_lines = []
19
19
  bibliographer.occurring_keys.each_with_index do |target, index|
20
20
  line = '{empty}'
21
21
  line << "[#{index + 1}] " if bibliographer.options['citation-style'] == 'numbers'
22
22
  line << render_entry(target, bibliographer.index_formatter)
23
- lines << line
23
+ if bibliographer.options['order'] == 'alphabetical'
24
+ sortable_index = first_author_family_name(target, bibliographer)
25
+ elsif bibliographer.options['order'] == 'appearance'
26
+ sortable_index = index
27
+ else # defaults to appearance
28
+ sortable_index = index
29
+ end
30
+
31
+ unsorted_lines << { line: line, sortable_index: sortable_index }
24
32
  end
25
33
 
34
+ lines = unsorted_lines.sort_by { |l| l[:sortable_index] }.map { |l| l[:line] }
35
+
26
36
  # Intersperse the lines with empty ones to render as paragraphs.
27
37
  lines.join("\n\n").lines.map(&:strip)
28
38
  end
@@ -38,6 +48,14 @@ module AsciidoctorBibliography
38
48
  def render_entry(target, formatter)
39
49
  "anchor:#{render_entry_id(target)}[]#{render_entry_label(target, formatter)}"
40
50
  end
51
+
52
+ private
53
+
54
+ def first_author_family_name(key, bibliographer)
55
+ authors = bibliographer.database.find{ |h| h['id'] == key }['author']
56
+ return "" if authors.nil?
57
+ authors.map{ |h| h['family'] }.compact.first # TODO: is the first also alphabetically the first?
58
+ end
41
59
  end
42
60
  end
43
61
 
@@ -1,3 +1,3 @@
1
1
  module AsciidoctorBibliography
2
- VERSION = '0.0.1.dev'
2
+ VERSION = '0.1'
3
3
  end
@@ -18,6 +18,8 @@ cite:[Anderson04, page=10, chapter=12]
18
18
 
19
19
  fullcite:[Anderson04] (fullcite, single)
20
20
 
21
+ fullcite:[Anderson04, page=123] (fullcite, single)
22
+
21
23
  citet:[Anderson04] (citet, single)
22
24
 
23
25
  citet:[Lane12a]+[Lane12b] (citet, multiple)
@@ -453,6 +453,9 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
453
453
  <p>Anderson, J. R., D. Bothell, M. D. Byrne, S. Douglass, C. Lebiere, and Y. L. Qin. 2004. “An Integrated Theory of the Mind.” <em>Psychological Review</em> 111 (4): 1036–60. (fullcite, single)</p>
454
454
  </div>
455
455
  <div class="paragraph">
456
+ <p>Anderson, J. R., D. Bothell, M. D. Byrne, S. Douglass, C. Lebiere, and Y. L. Qin. 2004. “An Integrated Theory of the Mind.” <em>Psychological Review</em> 111 (4): 123. (fullcite, single)</p>
457
+ </div>
458
+ <div class="paragraph">
456
459
  <p><a href="#bibliography-Anderson04">Anderson et al. (2004)</a> (citet, single)</p>
457
460
  </div>
458
461
  <div class="paragraph">
@@ -543,7 +546,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
543
546
  </div>
544
547
  <div id="footer">
545
548
  <div id="footer-text">
546
- Last updated 2017-08-20 21:01:42 CEST
549
+ Last updated 2017-08-22 23:24:34 CEST
547
550
  </div>
548
551
  </div>
549
552
  </body>
@@ -0,0 +1,71 @@
1
+ require 'asciidoctor-bibliography/helpers'
2
+
3
+ describe AsciidoctorBibliography::Helpers do
4
+ describe '.slice' do
5
+ it 'finds one or more existing keys' do
6
+ expect(subject.slice({ foo: 'bar', baz: 'qux' }, :foo)).to eq({ foo: 'bar' })
7
+ expect(subject.slice({ foo: 'bar', baz: 'qux' }, :foo, :baz)).to eq({ foo: 'bar', baz: 'qux' })
8
+ end
9
+
10
+ it 'returns nil for missing keys' do
11
+ expect(subject.slice({}, :foo)).to eq({ foo: nil })
12
+ expect(subject.slice({ foo: 'bar' }, :bar)).to eq({ bar: nil })
13
+ expect(subject.slice({ foo: 'bar' }, :foo, :baz)).to eq({ foo: 'bar', baz: nil })
14
+ end
15
+ end
16
+
17
+ describe '.join_nonempty' do
18
+ it 'ignores nils' do
19
+ expect(subject.join_nonempty([nil], '-')).to eq('')
20
+ expect(subject.join_nonempty(['foo', nil], '-')).to eq('foo')
21
+ expect(subject.join_nonempty([nil, 'bar'], '-')).to eq('bar')
22
+ expect(subject.join_nonempty(['foo', nil, 'bar'], '-')).to eq('foo-bar')
23
+ end
24
+
25
+ it 'ignores empty strings' do
26
+ expect(subject.join_nonempty([''], '-')).to eq('')
27
+ expect(subject.join_nonempty(['foo', ''], '-')).to eq('foo')
28
+ expect(subject.join_nonempty(['', 'bar'], '-')).to eq('bar')
29
+ expect(subject.join_nonempty(['foo', '', 'bar'], '-')).to eq('foo-bar')
30
+ end
31
+ end
32
+
33
+ describe '.html_to_asciidoc' do
34
+ it 'converts italic' do
35
+ expect(subject.html_to_asciidoc('This is <i>italic</i>.')).to eq('This is _italic_.')
36
+ end
37
+
38
+ it 'converts bold' do
39
+ expect(subject.html_to_asciidoc('This is <b>bold</b>.')).to eq('This is *bold*.')
40
+ end
41
+
42
+ it 'drops spans' do
43
+ expect(subject.html_to_asciidoc('This is a <span attribute="value">span</span>.'))
44
+ .to eq('This is a span.')
45
+ end
46
+
47
+ it 'drops curly brackets' do
48
+ expect(subject.html_to_asciidoc('This is {bracketed}.'))
49
+ .to eq('This is bracketed.')
50
+ end
51
+ end
52
+
53
+ describe '.to_sentence' do
54
+ let(:new_options) { { words_connector: '1',
55
+ two_words_connector: '2',
56
+ last_word_connector: '3' } }
57
+
58
+ it 'concatenates arbitrary arrays' do
59
+ expect(subject.to_sentence([])).to eq('')
60
+ expect(subject.to_sentence(['foo'])).to eq('foo')
61
+ expect(subject.to_sentence(['foo', 'bar'])).to eq('foo and bar')
62
+ expect(subject.to_sentence(['foo', 'bar', 'baz'])).to eq('foo, bar, and baz')
63
+ expect(subject.to_sentence(['foo', 'bar', 'baz', 'qux'])).to eq('foo, bar, baz, and qux')
64
+ end
65
+
66
+ it 'accepts custom separators' do
67
+ expect(subject.to_sentence(['foo', 'bar'], new_options)).to eq('foo2bar')
68
+ expect(subject.to_sentence(['foo', 'bar', 'baz'], new_options)).to eq('foo1bar3baz')
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,107 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter "/spec/"
4
+ end
5
+
6
+ require 'asciidoctor-bibliography'
7
+
8
+ # This file was generated by the `rspec --init` command. Conventionally, all
9
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
10
+ # The generated `.rspec` file contains `--require spec_helper` which will cause
11
+ # this file to always be loaded, without a need to explicitly require it in any
12
+ # files.
13
+ #
14
+ # Given that it is always loaded, you are encouraged to keep this file as
15
+ # light-weight as possible. Requiring heavyweight dependencies from this file
16
+ # will add to the boot time of your test suite on EVERY test run, even for an
17
+ # individual file that may not need all of that loaded. Instead, consider making
18
+ # a separate helper file that requires the additional dependencies and performs
19
+ # the additional setup, and require it from the spec files that actually need
20
+ # it.
21
+ #
22
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
23
+ RSpec.configure do |config|
24
+ # rspec-expectations config goes here. You can use an alternate
25
+ # assertion/expectation library such as wrong or the stdlib/minitest
26
+ # assertions if you prefer.
27
+ config.expect_with :rspec do |expectations|
28
+ # This option will default to `true` in RSpec 4. It makes the `description`
29
+ # and `failure_message` of custom matchers include text for helper methods
30
+ # defined using `chain`, e.g.:
31
+ # be_bigger_than(2).and_smaller_than(4).description
32
+ # # => "be bigger than 2 and smaller than 4"
33
+ # ...rather than:
34
+ # # => "be bigger than 2"
35
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
36
+ end
37
+
38
+ # rspec-mocks config goes here. You can use an alternate test double
39
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
40
+ config.mock_with :rspec do |mocks|
41
+ # Prevents you from mocking or stubbing a method that does not exist on
42
+ # a real object. This is generally recommended, and will default to
43
+ # `true` in RSpec 4.
44
+ mocks.verify_partial_doubles = true
45
+ end
46
+
47
+ # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
48
+ # have no way to turn it off -- the option exists only for backwards
49
+ # compatibility in RSpec 3). It causes shared context metadata to be
50
+ # inherited by the metadata hash of host groups and examples, rather than
51
+ # triggering implicit auto-inclusion in groups with matching metadata.
52
+ config.shared_context_metadata_behavior = :apply_to_host_groups
53
+
54
+ # The settings below are suggested to provide a good initial experience
55
+ # with RSpec, but feel free to customize to your heart's content.
56
+ =begin
57
+ # This allows you to limit a spec run to individual examples or groups
58
+ # you care about by tagging them with `:focus` metadata. When nothing
59
+ # is tagged with `:focus`, all examples get run. RSpec also provides
60
+ # aliases for `it`, `describe`, and `context` that include `:focus`
61
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
62
+ config.filter_run_when_matching :focus
63
+
64
+ # Allows RSpec to persist some state between runs in order to support
65
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
66
+ # you configure your source control system to ignore this file.
67
+ config.example_status_persistence_file_path = "spec/examples.txt"
68
+
69
+ # Limits the available syntax to the non-monkey patched syntax that is
70
+ # recommended. For more details, see:
71
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
72
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
73
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
74
+ config.disable_monkey_patching!
75
+
76
+ # This setting enables warnings. It's recommended, but in some cases may
77
+ # be too noisy due to issues in dependencies.
78
+ config.warnings = true
79
+
80
+ # Many RSpec users commonly either run the entire suite or an individual
81
+ # file, and it's useful to allow more verbose output when running an
82
+ # individual spec file.
83
+ if config.files_to_run.one?
84
+ # Use the documentation formatter for detailed output,
85
+ # unless a formatter has already been configured
86
+ # (e.g. via a command-line flag).
87
+ config.default_formatter = "doc"
88
+ end
89
+
90
+ # Print the 10 slowest examples and example groups at the
91
+ # end of the spec run, to help surface which specs are running
92
+ # particularly slow.
93
+ config.profile_examples = 10
94
+
95
+ # Run specs in random order to surface order dependencies. If you find an
96
+ # order dependency and want to debug it, you can fix the order by providing
97
+ # the seed, which is printed after each run.
98
+ # --seed 1234
99
+ config.order = :random
100
+
101
+ # Seed global randomization in this process using the `--seed` CLI option.
102
+ # Setting this allows you to use `--seed` to deterministically reproduce
103
+ # test failures related to randomization by passing the same `--seed` value
104
+ # as the one that triggered the failure.
105
+ Kernel.srand config.seed
106
+ =end
107
+ end
metadata CHANGED
@@ -1,43 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-bibliography
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.dev
4
+ version: '0.1'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-20 00:00:00.000000000 Z
11
+ date: 2017-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: asciidoctor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.14'
20
- type: :development
19
+ version: '0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.14'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: asciidoctor
28
+ name: citeproc-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: csl-styles
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: latex-decode
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.2'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: bibtex-ruby
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -45,13 +73,27 @@ dependencies:
45
73
  - - ">="
46
74
  - !ruby/object:Gem::Version
47
75
  version: '0'
48
- type: :development
76
+ type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - ">="
53
81
  - !ruby/object:Gem::Version
54
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.14'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.14'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: byebug
57
99
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +109,7 @@ dependencies:
67
109
  - !ruby/object:Gem::Version
68
110
  version: '0'
69
111
  - !ruby/object:Gem::Dependency
70
- name: citeproc-ruby
112
+ name: rspec
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
115
  - - ">="
@@ -81,7 +123,7 @@ dependencies:
81
123
  - !ruby/object:Gem::Version
82
124
  version: '0'
83
125
  - !ruby/object:Gem::Dependency
84
- name: csl-styles
126
+ name: rake
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
129
  - - ">="
@@ -95,7 +137,7 @@ dependencies:
95
137
  - !ruby/object:Gem::Version
96
138
  version: '0'
97
139
  - !ruby/object:Gem::Dependency
98
- name: latex-decode
140
+ name: simplecov
99
141
  requirement: !ruby/object:Gem::Requirement
100
142
  requirements:
101
143
  - - ">="
@@ -121,10 +163,12 @@ extensions: []
121
163
  extra_rdoc_files: []
122
164
  files:
123
165
  - ".gitignore"
166
+ - ".rspec"
167
+ - ".travis.yml"
124
168
  - Gemfile
125
- - Gemfile.lock
126
169
  - LICENSE.txt
127
170
  - README.adoc
171
+ - Rakefile
128
172
  - SYNTAX.adoc
129
173
  - asciidoctor-bibliography.gemspec
130
174
  - deprecated/asciidoctor-bibliography/asciidoctor/bibliographer_postprocessor.rb
@@ -152,7 +196,6 @@ files:
152
196
  - lib/asciidoctor-bibliography/helpers.rb
153
197
  - lib/asciidoctor-bibliography/index.rb
154
198
  - lib/asciidoctor-bibliography/version.rb
155
- - samples/.byebug_history
156
199
  - samples/biblio.bib
157
200
  - samples/latex_macros_in_bibtex/reference.bib
158
201
  - samples/latex_macros_in_bibtex/sample.adoc
@@ -160,6 +203,8 @@ files:
160
203
  - samples/sample-authoryear.html
161
204
  - samples/sample-numbers.adoc
162
205
  - samples/sample-numbers.html
206
+ - spec/helpers_spec.rb
207
+ - spec/spec_helper.rb
163
208
  homepage: https://github.com/riboseinc/asciidoctor-bibliography
164
209
  licenses:
165
210
  - MIT
@@ -175,9 +220,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
175
220
  version: 2.0.0
176
221
  required_rubygems_version: !ruby/object:Gem::Requirement
177
222
  requirements:
178
- - - ">"
223
+ - - ">="
179
224
  - !ruby/object:Gem::Version
180
- version: 1.3.1
225
+ version: '0'
181
226
  requirements: []
182
227
  rubyforge_project:
183
228
  rubygems_version: 2.5.2
data/Gemfile.lock DELETED
@@ -1,41 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- asciidoctor-bibliography (0.0.1.dev)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- asciidoctor (1.5.6.1)
10
- bibtex-ruby (4.4.4)
11
- latex-decode (~> 0.0)
12
- byebug (9.0.6)
13
- citeproc (1.0.5)
14
- namae (~> 0.8)
15
- citeproc-ruby (1.1.7)
16
- citeproc (>= 1.0.4, < 2.0)
17
- csl (~> 1.4)
18
- csl (1.4.5)
19
- namae (~> 0.7)
20
- csl-styles (1.0.1.8)
21
- csl (~> 1.0)
22
- latex-decode (0.2.2)
23
- unicode (~> 0.4)
24
- namae (0.11.3)
25
- unicode (0.4.4.4)
26
-
27
- PLATFORMS
28
- ruby
29
-
30
- DEPENDENCIES
31
- asciidoctor
32
- asciidoctor-bibliography!
33
- bibtex-ruby
34
- bundler (~> 1.14)
35
- byebug
36
- citeproc-ruby
37
- csl-styles
38
- latex-decode
39
-
40
- BUNDLED WITH
41
- 1.15.3
@@ -1,245 +0,0 @@
1
- c
2
- q
3
- puts processed_lines
4
- q
5
- puts processed_lines
6
- processed_lines
7
- q
8
- puts processed_lines.lines.map(&:chomp)
9
- processed_lines.lines.map(&:chomp)
10
- processed_lines.lines
11
- processed_lines
12
- q
13
- Helpers.html_to_asciidoc form
14
- form
15
- q
16
- document.bibliographer.options
17
- q
18
- Hash[document_attributes]
19
- ENV
20
- document_attributes
21
- document_attributes.to_hash
22
- document_attributes.to_h
23
- document_attributes
24
- q
25
- cites.first.key
26
- cites.first
27
- cites
28
- q
29
- self.macro
30
- self
31
- q
32
- output
33
- q
34
- @closing_bracket
35
- q
36
- bibpunct.scan(/{.*?}/)
37
- bibpunct.scan(/{*.?}/)
38
- puts bibpunct
39
- bibpunct = '{[}{\\]}{,}{n}{,}{,}'
40
- bibpunct.length
41
- bibpunct = '{[}{]}{,}{n}{,}{,}'
42
- bibpunct.length
43
- bibpunct = '{[}{\\]}{,}{n}{,}{,}'
44
- bibpunct.scan(/{*.?}/)
45
- bibpunct = '{[}{\\]}{,}{n}{,}{,}'
46
- '\'
47
- bibpunct = '{[}{\]}{,}{n}{,}{,}'
48
- bibpunct.scan(/{*.?}/)
49
- bibpunct = '{[}{\\]}{,}{n}{,}{,}'
50
- bibpunct.scan(/{*.?}/)
51
- bibpunct = '{[}{\]}{,}{n}{,}{,}'
52
- bibpunct.scan(/{*.?}/)
53
- bibpunct.scan(/{*.?}/).map { |s| s[1..-2] }
54
- @closing_bracket
55
- q
56
- @closing_bracket
57
- @opening_bracket
58
- bracket "wot asd"
59
- bracket "wot"
60
- bracket(cetera)
61
- label
62
- citation.xref(cite.key, label)
63
- output
64
- q
65
- y
66
- rend
67
- q
68
- rend
69
- q
70
- rend
71
- q
72
- rend
73
- q
74
- rend
75
- q
76
- document.bibliographer.citations.last.cites.last.occurrence_index
77
- document.bibliographer.citations.last.cites.last
78
- document.bibliographer.citations.last.cites
79
- document.bibliographer.citations.last
80
- document.bibliographer.citations
81
- document.bibliographer
82
- q
83
- citations.first.cites.first
84
- citations.first.cites.first.target = "FOO"
85
- citations.first.cites.first.target
86
- citations.first.cites.first
87
- citations.first.cites
88
- citations.first
89
- citations
90
- q
91
- document.bibliographer.citations.first.uuid
92
- document.bibliographer.citations.first
93
- document.bibliographer.citations
94
- reader.lines.join("\n").lines.map(&:chomp)
95
- reader.lines.join("\n").lines
96
- reader.lines.join("\n")
97
- reader.lines
98
- reader
99
- reader.lines
100
- reader
101
- q
102
- reader.processed_lines
103
- reader.lines
104
- reader
105
- processed_lines.join("\n").lines
106
- processed_lines.join('\n').lines
107
- processed_lines.join('\n')
108
- processed_lines.join('"\n')
109
- processed_lines.join
110
- q
111
- processed_lines
112
- q
113
- bibliographer.cited_keys.index(cite.key)q
114
- bibliographer.cited_keys.index(cite.key)
115
- bibliographer.cited_keys
116
- bibliographer
117
- q
118
- document
119
- cite
120
- q
121
- cite.named_attributes || {}
122
- cite.named_attributes
123
- extra(cite)
124
- c
125
- cetera
126
- c
127
- cetera
128
- c
129
- cetera
130
- n
131
- c
132
- [year(cite)].concat(extra(cite)).join(@years_separator + ' ')
133
- [year(cite)].concat(extra(cite))
134
- q
135
- extra
136
- extr
137
- q
138
- cite.named_attributes['page']
139
- cite.named_attributes
140
- cite
141
- q
142
- y
143
- cq
144
- c
145
- q
146
- ct.key
147
- ct
148
- q
149
- ct
150
- n
151
- ct
152
- q
153
- ct[:attributes][:named]['pagea']
154
- ct[:attributes][:named]['page']
155
- ct[:attributes][:named]['page]
156
- ct[:attributes][:named]
157
- ct[:named]
158
- ct[:named]['page']
159
- ct
160
- q
161
- ct[:key]
162
- ct.key
163
- ct
164
- cite
165
- ct
166
- q
167
- document.bibliographer.citations
168
- q
169
- TeXFormatter::DEFAULTS
170
- TeXFormatter
171
- q
172
- @opening_bracket
173
- bibpunct
174
- q
175
- Citation::DEFAULTS[cite.macro][:type]
176
- q
177
- Citation::DEFAULTS['citet'][:type]
178
- Citation::DEFAULTS['citet'][:tyep]
179
- Citation::DEFAULTS['citet']
180
- Citation::DEFAULTS[cite.macro]
181
- Citation::DEFAULTS[cite.macro][:type]
182
- q
183
- continue
184
- Citation::DEFAULTS['citet']
185
- Citation::DEFAULTS[:cite]
186
- Citation::DEFAULTS['cite']
187
- Citation::DEFAULTS
188
- Citation
189
- cite.macro
190
- cite
191
- q
192
- c
193
- q
194
- [].empty?
195
- [].blank?
196
- [].any?
197
- @database.find{ |h| h['id'] == ct[:key] }['issued']['date-parts'].first.first
198
- @database.find{ |h| h['id'] == ct[:key] }['issued']['date-parts'].first
199
- @database.find{ |h| h['id'] == ct[:key] }['issued']['date-parts']
200
- @database.find{ |h| h['id'] == ct[:key] }['issued']
201
- @database.find{ |h| h['id'] == ct[:key] }
202
- ct
203
- q
204
- continue
205
- c
206
- q
207
- cite
208
- q
209
- Helpers.to_sentence(authors_family_names)
210
- n
211
- Helpers.to_sentence(authors_family_names)
212
- q
213
- Helpers.to_sentence(authors_family_names)
214
- n
215
- c
216
- ci.key
217
- ci
218
- c
219
- cite.cites
220
- cite
221
- c
222
- @database.find{ |h| h['id'] == 'asd' }
223
- @database.find{ |h| h['id'] == c.key }
224
- @database.find{ |h| h['id'] == c.key }['author']
225
- q
226
- cite.cites.first[:key]
227
- cite.cites.first['key']
228
- cite.cites
229
- cite.cites.key
230
- cite
231
- @database.find { |h| h['id'] == 'Anderson04' }['author'].map { |h| h['family'] }.compact
232
- @database.find { |h| h['id'] == 'Anderson04' }['author'].map { |h| h['family'] }
233
- @database.find { |h| h['id'] == 'Anderson04' }['author']
234
- @database.find { |h| h['id'] == 'Anderson04' }
235
- self.find { |h| h['id'] == 'Anderson04' }
236
- @database.
237
- cite
238
- q
239
- c
240
- q
241
- self.find { |h| h['id'] == 'Lane12a' }
242
- self.find(id: 'Lane12a').first
243
- self.find(id: 'Lane12a')
244
- self.find
245
- self