bundle_outdated_formatter 0.2.0 → 0.3.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
  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: