groff_parser 0.3.0 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 429a3819c295efa69034015dc48dccc2403ce1ea
4
- data.tar.gz: 6ad5111a4abcdb2ff5fd12870e84289ea08673dd
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MzlhMjU3N2MzNTMyNzMyMDZhMTIwMmFkN2RlNTY1NGNjYjRhNTdjOQ==
5
+ data.tar.gz: !binary |-
6
+ YTFkYzdkYzgyYmQ0Y2RkNjYyZjg0YTliNmRkNmJiYTA1YzYwNDhlYw==
5
7
  SHA512:
6
- metadata.gz: 62c4fb592f27be4d2fdad3195f78160e191152fcef6396a69dae9a0921a5403c4469e973a5c43e5d20a9e861fcb5baa2e5e04f79fdda9d960eb98785d7b04fe6
7
- data.tar.gz: 8d1a5e7db5f2f97bfbe35946c63eb31de024e1bceb8b215f24dd6fed94b51f6d17ccdaf0f04d0c2efd18aaa2a9b642a026c0a26cd54f2f24bf92642e0b8779a0
8
+ metadata.gz: !binary |-
9
+ M2MxZTY4YjE5ZDY4NWZkMGM1YmI0MTJmOTJjYWY3YWQ5MThmZGEzNzE1ODNm
10
+ YjhlZDY0MTgxZjU0ZjE1Y2Q0NTBhYzM3MDhkMTIzMDRjNDkyMjM3ZGRlNDdh
11
+ NjM5MjRiMDI2MzFkN2RjMGZiNDQ3OWE5MzkwZDEzODViZTZiNDE=
12
+ data.tar.gz: !binary |-
13
+ YjdhMTBjMzY1MjU2MmI0ZmJjN2I3MmZkZjM3YzhlZWIyODUyMTU3ZWU0Yzc2
14
+ YjQ4Nzk5NDNkMmVlZTAxM2JjNGIwNjNmYTVlNzM5ODYxYTU0YzI4ZDg1OGMy
15
+ YjAxMWQxMzA0ZTVkYTk3NmQ1MzdhZGQyYTAyNGEyZjlhMDhmNmY=
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.0
7
+ - jruby-1.7.9
8
+
9
+ before_install:
10
+ - sudo apt-get install groff
data/README.md CHANGED
@@ -2,28 +2,28 @@
2
2
 
3
3
  ### Status
4
4
  [![Gem Version](https://badge.fury.io/rb/groff_parser.png)](http://badge.fury.io/rb/groff_parser)
5
+ [![Build Status](https://secure.travis-ci.org/roperzh/groff_parser.png?branch=master)](http://travis-ci.org/roperzh/groff_parser?branch=master)
5
6
  [![Code Climate](https://codeclimate.com/github/roperzh/groff_parser.png)](https://codeclimate.com/github/roperzh/groff_parser)
6
7
 
7
8
  Tiny library to parse groff files, with some handy metods to manage directories with a lot of files
8
9
 
9
10
  ## Installation
10
11
 
11
- Add this line to your application's Gemfile:
12
+ This gem relies on the [`groff`](http://savannah.gnu.org/projects/groff) GNU package, so in order to work you will need to install it.
12
13
 
13
- gem 'groff_parser'
14
+ ```bash
15
+ apt-get install groff
16
+ ```
14
17
 
15
- And then execute:
18
+ If you already have the `groff` package, just install the gem as usual:
16
19
 
17
- $ bundle
18
-
19
- Or install it yourself as:
20
-
21
- $ gem install groff_parser
20
+ ```bash
21
+ $ gem install groff_parser
22
+ ```
22
23
 
23
24
  ## Basic Usage
24
25
 
25
- Coming soon, in the meantime you can read the [`docs`](http://rubydoc.info/gems/groff_parser)
26
-
26
+ For a detailed information about how the gem works internally, you can take a look at the [`docs`](http://rubydoc.info/gems/groff_parser)
27
27
 
28
28
  ## Contributing
29
29
 
@@ -11,16 +11,16 @@ module GroffParser
11
11
  # @since 0.1.0
12
12
  #
13
13
  # @example
14
- # zipped_document = GroffParser::Document.new("path/to/file.gz", zipped: true)
15
- # unzipped_document = GroffParser::Document.new("path/to/file.1", zipped: false)
14
+ # zipped_document = GroffParser::Document.new("path/to/file.gz", :zipped)
15
+ # unzipped_document = GroffParser::Document.new("path/to/file.1")
16
16
  #
17
17
  # @param path [String] the path where the document is located
18
18
  #
19
- # @param zipped [Boolean] indicates if the document is zipped or not
19
+ # @param zipped [Symbol, Boolean, String] indicates if the document is zipped or not
20
20
  #
21
21
  # @return [GroffParser::Document] a new instance of a Document class
22
22
 
23
- def initialize(path, zipped: false)
23
+ def initialize(path, zipped = nil)
24
24
  @path = path
25
25
  @zipped = zipped
26
26
  end
@@ -49,6 +49,24 @@ module GroffParser
49
49
  return raw_section.gsub("SH", "").gsub("#{name}", "") if raw_section
50
50
  end
51
51
 
52
+ # Executes the groff command, with a given set of flags, and returns the
53
+ # output
54
+ #
55
+ # @since 0.4.0
56
+ #
57
+ # @example
58
+ # document.groff(m: :mandoc)
59
+ # # will execute: `groff -m mandoc
60
+ #
61
+ # @param flags [Hash] hash containing flags in key-value format
62
+ #
63
+ # @return [String] the result of the command
64
+
65
+
66
+ def groff(flags = {})
67
+ `#{get} #{@path} | groff #{formatted_flags(flags)}`
68
+ end
69
+
52
70
  # Raw content of the document, without being parsed, in pure
53
71
  # groff format
54
72
  #
@@ -57,10 +75,12 @@ module GroffParser
57
75
  # @example
58
76
  # document.raw_content
59
77
  #
78
+ # @param flags [Hash] hash containing flags in key-value format
79
+ #
60
80
  # @return [String] the document content in groff format
61
81
 
62
- def raw_content
63
- @raw_content ||= `#{get} #{@path}`
82
+ def raw_content(flags = {})
83
+ @raw_content ||= `#{get} #{@path} #{formatted_flags(flags)}`
64
84
  end
65
85
 
66
86
  # Content of the document in a especific format
@@ -73,10 +93,12 @@ module GroffParser
73
93
  # @param format [Symbol, String] indicates the output format, could be:
74
94
  # dvi, html, lbp, lj4, ps, ascii, cp1047, latin1, utf8, X75, X75, X100, X100
75
95
  #
96
+ # @param flags [Hash] hash containing flags in key-value format
97
+ #
76
98
  # @return [String] the document content formated in the requested format
77
99
 
78
- def formatted_content(format)
79
- `#{get} #{@path} | groff -mandoc -T#{format}`
100
+ def formatted_content(format, flags = {})
101
+ `#{get} #{@path} | groff -mandoc -T#{format} #{formatted_flags(flags)}`
80
102
  end
81
103
 
82
104
  private
@@ -98,5 +120,23 @@ module GroffParser
98
120
  def get
99
121
  @zipped ? "zcat" : "cat"
100
122
  end
123
+
124
+ # Helper to reduce a hash containing flags to a single line string
125
+ # according to the usual GNU convention
126
+ #
127
+ # @since 0.4.0
128
+ #
129
+ # @example
130
+ # formatted_flags(m: :mandoc) # => "-mmandoc"
131
+ #
132
+ # @params flags [Hash] flags to be reduced
133
+ #
134
+ # @return [String] string with the parsed flags following the usual GNU convention
135
+
136
+ def formatted_flags(flags)
137
+ flags.reduce("") {
138
+ |result, flag| result.concat(" -#{flag[0]}#{flag[1]}")
139
+ }
140
+ end
101
141
  end
102
142
  end
@@ -23,8 +23,8 @@ module GroffParser
23
23
  #
24
24
  # @return [GroffParser::Engine] a new Engine instance
25
25
 
26
- def initialize(path: Dir.pwd)
27
- @path = path
26
+ def initialize(path)
27
+ @path = path || Dir.pwd
28
28
  end
29
29
 
30
30
  # Parse a document located on a given path, if the document is contained
@@ -42,14 +42,14 @@ module GroffParser
42
42
  #
43
43
  # @param document_path [String] path for a document to parse
44
44
  #
45
- # @param zipped [Boolean] indicates if the file is zipped or not (gzip)
45
+ # @param zipped [Symbol, Boolean, String] indicates if the file is zipped or not (gzip)
46
46
  #
47
47
  # @return [GroffParser::Document] the document, parsed and ready to be manipulated
48
48
 
49
- def parse(document_path, zipped: zipped)
49
+ def parse(document_path, zipped = nil)
50
50
  dpath = document_path.include?(path) ? document_path : "#{path}/#{document_path}"
51
51
 
52
- Document.new(dpath, zipped: zipped)
52
+ Document.new(dpath, zipped)
53
53
  end
54
54
 
55
55
  # Parse all documents in a given directory, with a given format
@@ -60,16 +60,16 @@ module GroffParser
60
60
  # dvi, html, lbp, lj4, ps, ascii, cp1047, latin1, utf8, X75, X75, X100, X100
61
61
  # (default = utf8)
62
62
  #
63
- # @param zipped [Boolean] indicates if the file is zipped or not (gzip)
63
+ # @param zipped [Symbol, Boolean, String] indicates if the file is zipped or not (gzip)
64
64
  #
65
65
  # @return [Array<GroffParser::Document>] an array of all the parsed documents
66
66
 
67
- def parse_all(format: :utf8, zipped: false)
67
+ def parse_all(zipped = nil)
68
68
  documents = []
69
69
  search_path = zipped ? "#{path}/*.gz" : "#{path}/*[0-9]"
70
70
 
71
71
  Dir.glob(search_path) do |document|
72
- documents << parse(document, zipped: zipped)
72
+ documents << parse(document, zipped)
73
73
  end
74
74
 
75
75
  documents
@@ -96,15 +96,15 @@ module GroffParser
96
96
  # parser = GroffParser::Engine.new("/folder/with/some/files")
97
97
  # parser.apply_all { |document| document.parse }
98
98
  #
99
- # @param zipped [Boolean] indicates if the file is zipped or not (gzip)
99
+ # @param zipped [Symbol, Boolean, String] indicates if the file is zipped or not (gzip)
100
100
  #
101
101
  # @return [nil]
102
102
 
103
- def apply_to_all(zipped: false)
103
+ def apply_to_all(zipped = nil)
104
104
  search_path = zipped ? "#{path}/*.gz" : "#{path}/*"
105
105
 
106
106
  Dir.glob(search_path) do |document|
107
- yield parse(document, zipped: zipped)
107
+ yield parse(document, zipped)
108
108
  end
109
109
  end
110
110
  end
@@ -1,3 +1,3 @@
1
1
  module GroffParser
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -3,13 +3,15 @@ require File.expand_path(File.join("test/test_helper"))
3
3
  describe GroffParser::Document do
4
4
 
5
5
  let(:zipped_document) {
6
- GroffParser::Document.new("test/fixtures/git.1.gz", zipped: true)
6
+ GroffParser::Document.new("test/fixtures/git.1.gz", :zipped)
7
7
  }
8
8
 
9
9
  let(:unzipped_document) {
10
- GroffParser::Document.new("test/fixtures/git.1", zipped: false)
10
+ GroffParser::Document.new("test/fixtures/git.1")
11
11
  }
12
12
 
13
+ let(:timestamp) { Regexp.new(/\<\!\-\- CreationDate\: (.*?) \-\-\>/) }
14
+
13
15
  describe "#section" do
14
16
  it "returns the contents of a section delimited by a given title" do
15
17
  zipped_document.section("NAME").must_equal(
@@ -49,7 +51,6 @@ describe GroffParser::Document do
49
51
  end
50
52
 
51
53
  describe "#formatted_content" do
52
- let(:timestamp) { Regexp.new(/\<\!\-\- CreationDate\: (.*?) \-\-\>/) }
53
54
 
54
55
  it "returns the content in the requested format" do
55
56
  # Due to a small delay parsing data, we need to supress the timestamps
@@ -74,4 +75,30 @@ describe GroffParser::Document do
74
75
  )
75
76
  end
76
77
  end
78
+
79
+ describe "#groff" do
80
+ context "given a set of flags" do
81
+ it "executes the groff command with the flags provided" do
82
+ zipped_document.groff(:T => :utf8, :m => :mandoc).must_equal(
83
+ `zcat test/fixtures/git.1.gz | groff -Tutf8 -mmandoc`
84
+ )
85
+
86
+ zipped_document.groff(:T => :utf8, :m => :mandoc).must_equal(
87
+ `cat test/fixtures/git.1 | groff -Tutf8 -mmandoc`
88
+ )
89
+ end
90
+ end
91
+
92
+ context "without flags" do
93
+ it "executes groff command without any aditional options" do
94
+ zipped_document.groff.gsub(timestamp, "").must_equal(
95
+ `zcat test/fixtures/git.1.gz | groff`.gsub(timestamp, "")
96
+ )
97
+
98
+ zipped_document.groff.gsub(timestamp, "").must_equal(
99
+ `cat test/fixtures/git.1 | groff`.gsub(timestamp, "")
100
+ )
101
+ end
102
+ end
103
+ end
77
104
  end
@@ -2,19 +2,19 @@ require File.expand_path(File.join("test/test_helper"))
2
2
 
3
3
  describe GroffParser::Engine do
4
4
 
5
- let(:engine) { GroffParser::Engine.new(path: "test/fixtures") }
5
+ let(:engine) { GroffParser::Engine.new("test/fixtures") }
6
6
 
7
7
  describe "#parse" do
8
8
  context "given a zipped document" do
9
9
  it "returns a new GroffParser::Document instance" do
10
- engine.parse("git.1.gz", zipped: true).class.must_equal(
10
+ engine.parse("git.1.gz", :zipped).class.must_equal(
11
11
  GroffParser::Document
12
12
  )
13
13
  end
14
14
 
15
15
  it "allows to retrieve information of the parsed file" do
16
- engine.parse("git.1.gz", zipped: true).raw_content.must_equal(
17
- GroffParser::Document.new("test/fixtures/git.1.gz", zipped: true)
16
+ engine.parse("git.1.gz", :zipped).raw_content.must_equal(
17
+ GroffParser::Document.new("test/fixtures/git.1.gz", :zipped)
18
18
  .raw_content
19
19
  )
20
20
  end
@@ -29,7 +29,7 @@ describe GroffParser::Engine do
29
29
 
30
30
  it "allows to retrieve information of the parsed file" do
31
31
  engine.parse("git.1").raw_content.must_equal(
32
- GroffParser::Document.new("test/fixtures/git.1.gz", zipped: true)
32
+ GroffParser::Document.new("test/fixtures/git.1.gz", :zipped)
33
33
  .raw_content
34
34
  )
35
35
  end
@@ -39,9 +39,11 @@ describe GroffParser::Engine do
39
39
 
40
40
  describe "#parse_all" do
41
41
  it "returns an array with all the documents contents present in the path" do
42
- engine.parse_all.must_equal(
43
- [GroffParser::Document.new("test/fixtures/git.1", zipped: false)]
44
- )
42
+ documents = engine.parse_all
43
+
44
+ documents.length.must_equal(1)
45
+ documents.first.class.must_equal(GroffParser::Document)
46
+ documents.first.path.must_equal("test/fixtures/git.1")
45
47
  end
46
48
  end
47
49
  end
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groff_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Dip
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-11 00:00:00.000000000 Z
11
+ date: 2014-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
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
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: inch
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: Tiny library to parse groff files, with some handy metods to manage directories
@@ -74,7 +74,8 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - ".gitignore"
77
+ - .gitignore
78
+ - .travis.yml
78
79
  - Gemfile
79
80
  - LICENSE.txt
80
81
  - README.md
@@ -99,12 +100,12 @@ require_paths:
99
100
  - lib
100
101
  required_ruby_version: !ruby/object:Gem::Requirement
101
102
  requirements:
102
- - - ">="
103
+ - - ! '>='
103
104
  - !ruby/object:Gem::Version
104
105
  version: '0'
105
106
  required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  requirements:
107
- - - ">="
108
+ - - ! '>='
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  requirements: []