bundle_outdated_formatter 0.2.0 → 0.3.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,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46d8e274c48811f1a392cf4c0535b82d2aca4df7
4
- data.tar.gz: a64b6f0deea5b0af8bf91060aa8a87ebf1a713e9
3
+ metadata.gz: 01ca034f54fe1038725483780bd66d5ffaa54dd4
4
+ data.tar.gz: 4d73ac36a9fbc80284074eef08d8e277b69a031d
5
5
  SHA512:
6
- metadata.gz: 2834c969fe8cab275e2909b75fc5394fb835b39e331c0f6e0796fa47351aedee8ae968cf0923c200f532291312e79ad85ce1f9f8e231debe175b64509ac3ab1a
7
- data.tar.gz: afb16f7d8bfe1f683bbf718d368b269997a95f7389de780024b73b4e1c7c2a1ea5b94eb5e0dd17d169eca4bf1ba3c0852f435ec805eadc9a1438dd91bc4f6338
6
+ metadata.gz: bd843a7fe2d0ea2d97d4a1517576db6dc6b9cc4272ca5573e1330d9de37dd1d13203b17572bf978e3aa018f82f6dcfbe5bb31ece0129198307cdc6a5b096a035
7
+ data.tar.gz: 5c8ffeeb1c97cb179bee7ffe33d2de0355b3c3c827eef1bd1715fb10b8df779f9ee10cb448bc8b1314511e6054c72b57d0e9c1bd9243ec85c2d19b08833e9288
data/.rubocop.yml CHANGED
@@ -10,7 +10,13 @@ Layout/TrailingWhitespace:
10
10
  Exclude:
11
11
  - 'spec/**/*.rb'
12
12
 
13
+ Metrics/AbcSize:
14
+ Max: 20
15
+
13
16
  Metrics/BlockLength:
14
17
  Exclude:
15
18
  - 'spec/**/*.rb'
16
19
  - '*.gemspec'
20
+
21
+ Metrics/LineLength:
22
+ Enabled: false
data/.rubocop_todo.yml CHANGED
@@ -1,66 +1,7 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2017-06-19 20:57:55 +0900 using RuboCop version 0.49.1.
3
+ # on 2017-07-08 13:45:56 +0900 using RuboCop version 0.49.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 1
10
- # Cop supports --auto-correct.
11
- Layout/EmptyLineAfterMagicComment:
12
- Exclude:
13
- - 'bundle_outdated_formatter.gemspec'
14
-
15
- # Offense count: 2
16
- Metrics/AbcSize:
17
- Max: 23
18
-
19
- # Offense count: 1
20
- # Configuration parameters: CountComments.
21
- Metrics/ClassLength:
22
- Max: 102
23
-
24
- # Offense count: 1
25
- Metrics/CyclomaticComplexity:
26
- Max: 7
27
-
28
- # Offense count: 8
29
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
30
- # URISchemes: http, https
31
- Metrics/LineLength:
32
- Max: 126
33
-
34
- # Offense count: 4
35
- # Configuration parameters: CountComments.
36
- Metrics/MethodLength:
37
- Max: 20
38
-
39
- # Offense count: 2
40
- Style/Documentation:
41
- Exclude:
42
- - 'spec/**/*'
43
- - 'test/**/*'
44
- - 'lib/bundle_outdated_formatter/cli.rb'
45
- - 'lib/bundle_outdated_formatter/formatter.rb'
46
-
47
- # Offense count: 1
48
- # Cop supports --auto-correct.
49
- # Configuration parameters: EnforcedStyle, SupportedStyles, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
50
- # SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
51
- Style/HashSyntax:
52
- Exclude:
53
- - 'Rakefile'
54
-
55
- # Offense count: 2
56
- # Cop supports --auto-correct.
57
- # Configuration parameters: PreferredDelimiters.
58
- Style/PercentLiteralDelimiters:
59
- Exclude:
60
- - 'bundle_outdated_formatter.gemspec'
61
-
62
- # Offense count: 2
63
- # Cop supports --auto-correct.
64
- Style/UnneededPercentQ:
65
- Exclude:
66
- - 'bundle_outdated_formatter.gemspec'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Change Log
2
2
 
3
+ ## 0.3.0 (2017-07-08)
4
+
5
+ ### Features
6
+
7
+ * Support TSV format
8
+ * Add `--pretty` option for `output` command
9
+ * Raise `UnknownFormatError` if format is not allowed
10
+
3
11
  ## 0.2.0 (2017-06-19)
4
12
 
5
13
  ### Features
data/README.md CHANGED
@@ -41,6 +41,7 @@ $ bundle outdated | bof
41
41
  | Option | Alias | Description | Default |
42
42
  | :----- | :---- | :---------- | :------ |
43
43
  | `--format` | `-f` | Format. `markdown`, `json`, `yaml`, `csv`, `xml`, or `html`. | `markdown` |
44
+ | `--pretty` | `-p` | `true` if pretty output.<br>This option is available in `json`, `xml`, or `html` formats. | `false` |
44
45
 
45
46
  ## Examples
46
47
 
@@ -70,10 +71,40 @@ Outdated gems included in the bundle:
70
71
 
71
72
  ### Convert to JSON
72
73
 
74
+ Normal output:
75
+
73
76
  ```
74
77
  [{"gem":"faker","newest":"1.6.6","installed":"1.6.5","requested":"~> 1.4","groups":"development, test"},{"gem":"hashie","newest":"3.4.6","installed":"1.2.0","requested":"= 1.2.0","groups":"default"},{"gem":"headless","newest":"2.3.1","installed":"2.2.3","requested":"","groups":""}]
75
78
  ```
76
79
 
80
+ Pretty output:
81
+
82
+ ```
83
+ [
84
+ {
85
+ "gem": "faker",
86
+ "newest": "1.6.6",
87
+ "installed": "1.6.5",
88
+ "requested": "~> 1.4",
89
+ "groups": "development, test"
90
+ },
91
+ {
92
+ "gem": "hashie",
93
+ "newest": "3.4.6",
94
+ "installed": "1.2.0",
95
+ "requested": "= 1.2.0",
96
+ "groups": "default"
97
+ },
98
+ {
99
+ "gem": "headless",
100
+ "newest": "2.3.1",
101
+ "installed": "2.2.3",
102
+ "requested": "",
103
+ "groups": ""
104
+ }
105
+ ]
106
+ ```
107
+
77
108
  ### Convert to YAML
78
109
 
79
110
  ```
@@ -104,18 +135,95 @@ Outdated gems included in the bundle:
104
135
  "headless","2.3.1","2.2.3","",""
105
136
  ```
106
137
 
138
+ ### Convert to TSV
139
+
140
+ ```
141
+ "gem" "newest" "installed" "requested" "groups"
142
+ "faker" "1.6.6" "1.6.5" "~> 1.4" "development, test"
143
+ "hashie" "3.4.6" "1.2.0" "= 1.2.0" "default"
144
+ "headless" "2.3.1" "2.2.3" "" ""
145
+ ```
146
+
107
147
  ### Convert to XML
108
148
 
149
+ Normal output:
150
+
109
151
  ```
110
152
  <?xml version='1.0' encoding='UTF-8'?><gems><outdated><gem>faker</gem><newest>1.6.6</newest><installed>1.6.5</installed><requested>~> 1.4</requested><groups>development, test</groups></outdated><outdated><gem>hashie</gem><newest>3.4.6</newest><installed>1.2.0</installed><requested>= 1.2.0</requested><groups>default</groups></outdated><outdated><gem>headless</gem><newest>2.3.1</newest><installed>2.2.3</installed><requested></requested><groups></groups></outdated></gems>
111
153
  ```
112
154
 
155
+ Pretty output:
156
+
157
+ ```
158
+ <?xml version='1.0' encoding='UTF-8'?>
159
+ <gems>
160
+ <outdated>
161
+ <gem>faker</gem>
162
+ <newest>1.6.6</newest>
163
+ <installed>1.6.5</installed>
164
+ <requested>~> 1.4</requested>
165
+ <groups>development, test</groups>
166
+ </outdated>
167
+ <outdated>
168
+ <gem>hashie</gem>
169
+ <newest>3.4.6</newest>
170
+ <installed>1.2.0</installed>
171
+ <requested>= 1.2.0</requested>
172
+ <groups>default</groups>
173
+ </outdated>
174
+ <outdated>
175
+ <gem>headless</gem>
176
+ <newest>2.3.1</newest>
177
+ <installed>2.2.3</installed>
178
+ <requested></requested>
179
+ <groups></groups>
180
+ </outdated>
181
+ </gems>
182
+ ```
183
+
113
184
  ### Convert to HTML
114
185
 
186
+ Normal output:
187
+
115
188
  ```
116
189
  <table><tr><th>gem</th><th>newest</th><th>installed</th><th>requested</th><th>groups</th></tr><tr><td>faker</td><td>1.6.6</td><td>1.6.5</td><td>~> 1.4</td><td>development, test</td></tr><tr><td>hashie</td><td>3.4.6</td><td>1.2.0</td><td>= 1.2.0</td><td>default</td></tr><tr><td>headless</td><td>2.3.1</td><td>2.2.3</td><td></td><td></td></tr></table>
117
190
  ```
118
191
 
192
+ Pretty output:
193
+
194
+ ```
195
+ <table>
196
+ <tr>
197
+ <th>gem</th>
198
+ <th>newest</th>
199
+ <th>installed</th>
200
+ <th>requested</th>
201
+ <th>groups</th>
202
+ </tr>
203
+ <tr>
204
+ <td>faker</td>
205
+ <td>1.6.6</td>
206
+ <td>1.6.5</td>
207
+ <td>~> 1.4</td>
208
+ <td>development, test</td>
209
+ </tr>
210
+ <tr>
211
+ <td>hashie</td>
212
+ <td>3.4.6</td>
213
+ <td>1.2.0</td>
214
+ <td>= 1.2.0</td>
215
+ <td>default</td>
216
+ </tr>
217
+ <tr>
218
+ <td>headless</td>
219
+ <td>2.3.1</td>
220
+ <td>2.2.3</td>
221
+ <td></td>
222
+ <td></td>
223
+ </tr>
224
+ </table>
225
+ ```
226
+
119
227
  ## Supported Ruby Versions
120
228
 
121
229
  * Ruby 2.0.0
data/Rakefile CHANGED
@@ -3,4 +3,4 @@ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
@@ -1,4 +1,5 @@
1
1
  # coding: utf-8
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'bundle_outdated_formatter/version'
@@ -9,8 +10,8 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['emsk']
10
11
  spec.email = ['emsk1987@gmail.com']
11
12
 
12
- spec.summary = %q{Formatter for `bundle outdated`}
13
- spec.description = %q{BundleOutdatedFormatter is a command-line tool to format output of `bundle outdated`}
13
+ spec.summary = 'Formatter for `bundle outdated`'
14
+ spec.description = 'BundleOutdatedFormatter is a command-line tool to format output of `bundle outdated`'
14
15
  spec.homepage = 'https://github.com/emsk/bundle_outdated_formatter'
15
16
  spec.license = 'MIT'
16
17
 
@@ -1,20 +1,37 @@
1
1
  require 'thor'
2
- require 'bundle_outdated_formatter/formatter'
2
+ require 'bundle_outdated_formatter/error'
3
+ require 'bundle_outdated_formatter/formatter/markdown_formatter'
4
+ require 'bundle_outdated_formatter/formatter/json_formatter'
5
+ require 'bundle_outdated_formatter/formatter/yaml_formatter'
6
+ require 'bundle_outdated_formatter/formatter/csv_formatter'
7
+ require 'bundle_outdated_formatter/formatter/tsv_formatter'
8
+ require 'bundle_outdated_formatter/formatter/xml_formatter'
9
+ require 'bundle_outdated_formatter/formatter/html_formatter'
3
10
 
4
11
  module BundleOutdatedFormatter
12
+ # Command-line interface of {BundleOutdatedFormatter}
5
13
  class CLI < Thor
6
- ALLOW_FORMAT = %w[markdown json yaml csv xml html].freeze
14
+ FORMATTERS = {
15
+ 'markdown' => MarkdownFormatter,
16
+ 'json' => JSONFormatter,
17
+ 'yaml' => YAMLFormatter,
18
+ 'csv' => CSVFormatter,
19
+ 'tsv' => TSVFormatter,
20
+ 'xml' => XMLFormatter,
21
+ 'html' => HTMLFormatter
22
+ }.freeze
7
23
 
8
24
  default_command :output
9
25
 
10
26
  desc 'output', 'Format output of `bundle outdated`'
11
- option :format, type: :string, aliases: '-f', default: 'markdown', desc: 'Format. (markdown, json, yaml, csv, xml, html)'
27
+ option :format, type: :string, aliases: '-f', default: 'markdown', desc: 'Format. (markdown, json, yaml, csv, tsv, xml, html)'
28
+ option :pretty, type: :boolean, aliases: '-p', desc: '`true` if pretty output.'
12
29
 
13
30
  def output
31
+ raise BundleOutdatedFormatter::UnknownFormatError, options[:format] unless allow_format?
14
32
  return if STDIN.tty?
15
- return unless allow_format?
16
33
 
17
- formatter = Formatter.new(options[:format])
34
+ formatter = create_formatter
18
35
  formatter.read_stdin
19
36
  puts formatter.convert
20
37
  end
@@ -29,7 +46,11 @@ module BundleOutdatedFormatter
29
46
  private
30
47
 
31
48
  def allow_format?
32
- ALLOW_FORMAT.include?(options[:format])
49
+ FORMATTERS.keys.include?(options[:format])
50
+ end
51
+
52
+ def create_formatter
53
+ FORMATTERS[options[:format]].new(options)
33
54
  end
34
55
  end
35
56
  end
@@ -0,0 +1,4 @@
1
+ module BundleOutdatedFormatter
2
+ class Error < StandardError; end
3
+ class UnknownFormatError < Error; end
4
+ end
@@ -1,24 +1,18 @@
1
- require 'json'
2
- require 'psych'
3
- require 'csv'
4
1
  require 'rexml/document'
5
2
 
6
3
  module BundleOutdatedFormatter
4
+ # Formatter for all formats
7
5
  class Formatter
8
- NAME_REGEXP = /\A(\* )*(?<name>.+) \(/
6
+ GEM_REGEXP = /\A(\* )*(?<gem>.+) \(/
9
7
  NEWEST_REGEXP = /newest (?<newest>[\d\.]+)/
10
8
  INSTALLED_REGEXP = /installed (?<installed>[\d\.]+)/
11
9
  REQUESTED_REGEXP = /requested (?<requested>.+)\)/
12
10
  GROUPS_REGEXP = /in groups "(?<groups>.+)"/
13
11
 
14
- MARKDOWN_HEADER = <<-EOS.freeze
15
- | gem | newest | installed | requested | groups |
16
- | --- | --- | --- | --- | --- |
17
- EOS
18
12
  COLUMNS = %w[gem newest installed requested groups].freeze
19
13
 
20
- def initialize(format)
21
- @format = format
14
+ def initialize(options)
15
+ @pretty = options[:pretty]
22
16
  @outdated_gems = []
23
17
  end
24
18
 
@@ -26,111 +20,53 @@ module BundleOutdatedFormatter
26
20
  @outdated_gems = STDIN.each.to_a.map(&:strip).reject(&:empty?)
27
21
 
28
22
  @outdated_gems.map! do |line|
29
- matched_name = NAME_REGEXP.match(line)
30
- matched_newest = NEWEST_REGEXP.match(line)
31
- matched_installed = INSTALLED_REGEXP.match(line)
32
- matched_requested = REQUESTED_REGEXP.match(line)
33
- matched_groups = GROUPS_REGEXP.match(line)
34
-
35
- if matched_name.nil? && matched_newest.nil? && matched_installed.nil? && matched_requested.nil? && matched_groups.nil?
36
- nil
37
- else
38
- {
39
- 'gem' => gem_text(matched_name, :name),
40
- 'newest' => gem_text(matched_newest, :newest),
41
- 'installed' => gem_text(matched_installed, :installed),
42
- 'requested' => gem_text(matched_requested, :requested),
43
- 'groups' => gem_text(matched_groups, :groups)
44
- }
45
- end
23
+ find_gem(line)
46
24
  end
47
25
 
48
26
  @outdated_gems.compact!
49
27
  end
50
28
 
51
- def convert
52
- text =
53
- case @format
54
- when 'markdown' then format_markdown
55
- when 'json' then format_json
56
- when 'yaml' then format_yaml
57
- when 'csv' then format_csv
58
- when 'xml' then format_xml
59
- when 'html' then format_html
60
- else ''
61
- end
62
- text.chomp
63
- end
64
-
65
29
  private
66
30
 
67
- def format_markdown
68
- @outdated_gems.map! do |gem|
69
- "| #{gem.values.join(' | ')} |".gsub(/ /, ' ')
70
- end
71
-
72
- MARKDOWN_HEADER + @outdated_gems.join("\n")
73
- end
74
-
75
- def format_json
76
- @outdated_gems.to_json
31
+ def find_gem(line)
32
+ matched = match_gem(line)
33
+ return unless match_gem?(matched)
34
+
35
+ {
36
+ 'gem' => gem_text(matched[:gem], :gem),
37
+ 'newest' => gem_text(matched[:newest], :newest),
38
+ 'installed' => gem_text(matched[:installed], :installed),
39
+ 'requested' => gem_text(matched[:requested], :requested),
40
+ 'groups' => gem_text(matched[:groups], :groups)
41
+ }
77
42
  end
78
43
 
79
- def format_yaml
80
- @outdated_gems.to_yaml
44
+ def match_gem(line)
45
+ {
46
+ gem: GEM_REGEXP.match(line),
47
+ newest: NEWEST_REGEXP.match(line),
48
+ installed: INSTALLED_REGEXP.match(line),
49
+ requested: REQUESTED_REGEXP.match(line),
50
+ groups: GROUPS_REGEXP.match(line)
51
+ }
81
52
  end
82
53
 
83
- def format_csv
84
- CSV.generate(force_quotes: true) do |csv|
85
- csv << COLUMNS
86
- @outdated_gems.each do |gem|
87
- csv << gem.values
88
- end
54
+ def match_gem?(matched)
55
+ COLUMNS.any? do |column|
56
+ !matched[column.to_sym].nil?
89
57
  end
90
58
  end
91
59
 
92
- def format_xml
93
- xml = REXML::Document.new(nil, raw: :all)
94
- xml << REXML::XMLDecl.new('1.0', 'UTF-8')
95
-
96
- root = REXML::Element.new('gems')
97
- xml.add_element(root)
98
-
99
- @outdated_gems.each do |gem|
100
- elements = root.add_element(REXML::Element.new('outdated'))
101
-
102
- COLUMNS.each do |column|
103
- elements.add_element(column).add_text(gem[column])
104
- end
105
- end
106
-
107
- xml.to_s
60
+ def gem_text(text, name)
61
+ text ? text[name] : ''
108
62
  end
109
63
 
110
- def format_html
111
- html = REXML::Document.new(nil, raw: :all)
112
-
113
- root = REXML::Element.new('table')
114
- html.add_element(root)
115
-
116
- elements = root.add_element(REXML::Element.new('tr'))
117
- COLUMNS.each do |column|
118
- elements.add_element('th').add_text(column)
119
- end
120
-
121
- @outdated_gems.each do |gem|
122
- elements = root.add_element(REXML::Element.new('tr'))
64
+ def xml_formatter
65
+ return REXML::Formatters::Default.new unless @pretty
123
66
 
124
- COLUMNS.each do |column|
125
- elements.add_element('td').add_text(gem[column])
126
- end
127
- end
128
-
129
- html.to_s
130
- end
131
-
132
- def gem_text(text, name)
133
- text ? text[name] : ''
67
+ formatter = REXML::Formatters::Pretty.new
68
+ formatter.compact = true
69
+ formatter
134
70
  end
135
71
  end
136
72
  end
@@ -0,0 +1,17 @@
1
+ require 'csv'
2
+ require 'bundle_outdated_formatter/formatter'
3
+
4
+ module BundleOutdatedFormatter
5
+ # Formatter for CSV
6
+ class CSVFormatter < Formatter
7
+ def convert
8
+ text = CSV.generate(force_quotes: true) do |csv|
9
+ csv << COLUMNS
10
+ @outdated_gems.each do |gem|
11
+ csv << gem.values
12
+ end
13
+ end
14
+ text.chomp
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ require 'rexml/document'
2
+ require 'bundle_outdated_formatter/formatter'
3
+
4
+ module BundleOutdatedFormatter
5
+ # Formatter for HTML
6
+ class HTMLFormatter < Formatter
7
+ def initialize(options)
8
+ super(options)
9
+
10
+ @html = REXML::Document.new(nil, raw: :all)
11
+ @root = REXML::Element.new('table')
12
+ @html.add_element(@root)
13
+ end
14
+
15
+ def convert
16
+ add_header_row
17
+
18
+ @outdated_gems.each do |gem|
19
+ add_data_row(gem)
20
+ end
21
+
22
+ io = StringIO.new
23
+ xml_formatter.write(@html, io)
24
+ io.string.chomp
25
+ end
26
+
27
+ private
28
+
29
+ def add_header_row
30
+ elements = @root.add_element(REXML::Element.new('tr'))
31
+
32
+ COLUMNS.each do |column|
33
+ elements.add_element('th').add_text(column)
34
+ end
35
+ end
36
+
37
+ def add_data_row(gem)
38
+ elements = @root.add_element(REXML::Element.new('tr'))
39
+
40
+ COLUMNS.each do |column|
41
+ elements.add_element('td').add_text(gem[column])
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,12 @@
1
+ require 'json'
2
+ require 'bundle_outdated_formatter/formatter'
3
+
4
+ module BundleOutdatedFormatter
5
+ # Formatter for JSON
6
+ class JSONFormatter < Formatter
7
+ def convert
8
+ text = @pretty ? JSON.pretty_generate(@outdated_gems) : @outdated_gems.to_json
9
+ text.chomp
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ require 'bundle_outdated_formatter/formatter'
2
+
3
+ module BundleOutdatedFormatter
4
+ # Formatter for Markdown
5
+ class MarkdownFormatter < Formatter
6
+ HEADER = <<-EOS.freeze
7
+ | gem | newest | installed | requested | groups |
8
+ | --- | --- | --- | --- | --- |
9
+ EOS
10
+
11
+ def convert
12
+ @outdated_gems.map! do |gem|
13
+ "| #{gem.values.join(' | ')} |".gsub(/ /, ' ')
14
+ end
15
+
16
+ (HEADER + @outdated_gems.join("\n")).chomp
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'csv'
2
+ require 'bundle_outdated_formatter/formatter'
3
+
4
+ module BundleOutdatedFormatter
5
+ # Formatter for TSV
6
+ class TSVFormatter < Formatter
7
+ def convert
8
+ text = CSV.generate(force_quotes: true, col_sep: "\t") do |tsv|
9
+ tsv << COLUMNS
10
+ @outdated_gems.each do |gem|
11
+ tsv << gem.values
12
+ end
13
+ end
14
+ text.chomp
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ require 'rexml/document'
2
+ require 'bundle_outdated_formatter/formatter'
3
+
4
+ module BundleOutdatedFormatter
5
+ # Formatter for XML
6
+ class XMLFormatter < Formatter
7
+ def initialize(options)
8
+ super(options)
9
+
10
+ @xml = REXML::Document.new(nil, raw: :all)
11
+ @xml << REXML::XMLDecl.new('1.0', 'UTF-8')
12
+ @root = REXML::Element.new('gems')
13
+ @xml.add_element(@root)
14
+ end
15
+
16
+ def convert
17
+ @outdated_gems.each do |gem|
18
+ add_outdated(gem)
19
+ end
20
+
21
+ io = StringIO.new
22
+ xml_formatter.write(@xml, io)
23
+ io.string.chomp
24
+ end
25
+
26
+ private
27
+
28
+ def add_outdated(gem)
29
+ elements = @root.add_element(REXML::Element.new('outdated'))
30
+
31
+ COLUMNS.each do |column|
32
+ elements.add_element(column).add_text(gem[column])
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ require 'psych'
2
+ require 'bundle_outdated_formatter/formatter'
3
+
4
+ module BundleOutdatedFormatter
5
+ # Formatter for YAML
6
+ class YAMLFormatter < Formatter
7
+ def convert
8
+ @outdated_gems.to_yaml.chomp
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module BundleOutdatedFormatter
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundle_outdated_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - emsk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-19 00:00:00.000000000 Z
11
+ date: 2017-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: psych
@@ -147,7 +147,15 @@ files:
147
147
  - exe/bof
148
148
  - lib/bundle_outdated_formatter.rb
149
149
  - lib/bundle_outdated_formatter/cli.rb
150
+ - lib/bundle_outdated_formatter/error.rb
150
151
  - lib/bundle_outdated_formatter/formatter.rb
152
+ - lib/bundle_outdated_formatter/formatter/csv_formatter.rb
153
+ - lib/bundle_outdated_formatter/formatter/html_formatter.rb
154
+ - lib/bundle_outdated_formatter/formatter/json_formatter.rb
155
+ - lib/bundle_outdated_formatter/formatter/markdown_formatter.rb
156
+ - lib/bundle_outdated_formatter/formatter/tsv_formatter.rb
157
+ - lib/bundle_outdated_formatter/formatter/xml_formatter.rb
158
+ - lib/bundle_outdated_formatter/formatter/yaml_formatter.rb
151
159
  - lib/bundle_outdated_formatter/version.rb
152
160
  homepage: https://github.com/emsk/bundle_outdated_formatter
153
161
  licenses: