rails_best_practices 1.15.3 → 1.15.4

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: cef5dd69f1ae647200ad40a7fd84b9bd758df233
4
- data.tar.gz: 7852c75a5be3ddda15983cd75177e7d187449928
3
+ metadata.gz: 4f58c94e40ab3dcb7632dc9f975de4133eefb801
4
+ data.tar.gz: 5997c946de7c2a0f14a45d65882f6c47ae9b57dd
5
5
  SHA512:
6
- metadata.gz: e6bd653c5accb78475a08c6e56be229e35f2a8175632e423e994a07835d65952094f30cfed3d50da5d44ce7a4cf4ef755f3121bba7d1c1b0f3152b08ff8eaebb
7
- data.tar.gz: 3ea57d56bf747f9bfbeea1709f5a9d6128a7375356321205c36185e21bc16fe96a649e7eb9c5925f923cc0c9c0934cdca535bbdc0777589ef99c11fd29469667
6
+ metadata.gz: ec037490d306afd4d767eaebeb94c782b8c572a07a282f11d123dd964f6711876c4c7b4cbafa7b82b25d8a9bc8a8986dfd4bb6458ffbdcc30f94fe38d17f900d
7
+ data.tar.gz: cefcea37746e5a2a92005f5920f8ca7e5ba7a41040e8743a775a4a2ea12bcc4e8cd059b8daae6849a93f777b7e649e40ef8ea30dc5b886bfeb9b46be98c7281f
data/.travis.yml CHANGED
@@ -2,4 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
- - 2.1.0
5
+ - 2.1.1
data/Rakefile CHANGED
@@ -1,4 +1,6 @@
1
1
  require "bundler"
2
+ require "bundler/gem_tasks"
3
+
2
4
  Bundler.setup
3
5
 
4
6
  require "rake"
@@ -8,23 +10,6 @@ require "rspec/core/rake_task"
8
10
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
9
11
  require "rails_best_practices/version"
10
12
 
11
- task :build do
12
- system "gem build rails_best_practices.gemspec"
13
- end
14
-
15
- task :install => :build do
16
- system "sudo gem install rails_best_practices-#{RailsBestPractices::VERSION}.gem"
17
- end
18
-
19
- task :release => :build do
20
- puts "Tagging #{RailsBestPractices::VERSION}..."
21
- system "git tag -a #{RailsBestPractices::VERSION} -m 'Tagging #{RailsBestPractices::VERSION}'"
22
- puts "Pushing to Github..."
23
- system "git push --tags"
24
- puts "Pushing to rubygems.org..."
25
- system "gem push rails_best_practices-#{RailsBestPractices::VERSION}.gem"
26
- end
27
-
28
13
  RSpec::Core::RakeTask.new(:spec) do |spec|
29
14
  spec.pattern = "spec/**/*_spec.rb"
30
15
  end
@@ -2,6 +2,7 @@
2
2
  require 'ap'
3
3
  require 'colored'
4
4
  require 'fileutils'
5
+ require 'json'
5
6
  require 'ruby-progressbar'
6
7
 
7
8
  module RailsBestPractices
@@ -25,7 +26,7 @@ module RailsBestPractices
25
26
  #
26
27
  # @param [String] path where to generate the configuration yaml file
27
28
  # @param [Hash] options
28
- def initialize(path, options={})
29
+ def initialize(path, options = {})
29
30
  @path = File.expand_path(path || ".")
30
31
 
31
32
  @options = options
@@ -59,10 +60,14 @@ module RailsBestPractices
59
60
 
60
61
  # Output the analyze result.
61
62
  def output
62
- if @options["format"] == 'html'
63
+ case @options["format"]
64
+ when "html"
63
65
  @options["output-file"] ||= "rails_best_practices_output.html"
64
66
  output_html_errors
65
- elsif @options["format"] == 'yaml'
67
+ when "json"
68
+ @options["output-file"] ||= "rails_best_practices_output.json"
69
+ output_json_errors
70
+ when "yaml"
66
71
  @options["output-file"] ||= "rails_best_practices_output.yaml"
67
72
  output_yaml_errors
68
73
  else
@@ -248,6 +253,21 @@ module RailsBestPractices
248
253
  end
249
254
  end
250
255
 
256
+ # output errors with json format.
257
+ def output_json_errors
258
+ errors_as_hashes = errors.map do |err|
259
+ {
260
+ filename: err.filename,
261
+ line_number: err.line_number,
262
+ message: err.message
263
+ }
264
+ end
265
+
266
+ File.open(@options["output-file"], "w+") do |file|
267
+ file.write JSON.dump(errors_as_hashes)
268
+ end
269
+ end
270
+
251
271
  # plain output with color.
252
272
  #
253
273
  # @param [String] message to output
@@ -1,10 +1,10 @@
1
1
  # encoding: utf-8
2
- require 'optparse'
2
+ require "optparse"
3
3
 
4
4
  # Usage: rails_best_practices [options] path
5
5
  # -d, --debug debug mode
6
6
  # --silent silent mode
7
- # -f, --format FORMAT output format
7
+ # -f, --format FORMAT output format (text, html, yml, json)
8
8
  # --output-file FILE output html file for the analyzing result
9
9
  # --without-color only output plain text without color
10
10
  # --with-textmate open file by textmate in html format
@@ -25,16 +25,18 @@ require 'optparse'
25
25
  # -g, --generate generate configuration yaml
26
26
  # -v, --version show this version
27
27
  # -h, --help show this message
28
+
28
29
  options = {}
30
+
29
31
  OptionParser.new do |opts|
30
32
  opts.banner = "Usage: rails_best_practices [options] path"
31
33
 
32
34
  opts.on("-d", "--debug", "Debug mode") do
33
- options['debug'] = true
35
+ options["debug"] = true
34
36
  end
35
37
 
36
- opts.on("-f", "--format FORMAT", "output format") do |format|
37
- options['format'] = format
38
+ opts.on("-f", "--format FORMAT", "output format (text, html, yml, json)") do |format|
39
+ options["format"] = format
38
40
  end
39
41
 
40
42
  opts.on("--without-color", "only output plain text without color") do
@@ -88,8 +90,8 @@ OptionParser.new do |opts|
88
90
  end
89
91
  end
90
92
 
91
- opts.on_tail('-v', '--version', 'Show this version') do
92
- require 'rails_best_practices/version'
93
+ opts.on_tail("-v", "--version", "Show this version") do
94
+ require "rails_best_practices/version"
93
95
  puts RailsBestPractices::VERSION
94
96
  exit
95
97
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module RailsBestPractices
3
- VERSION = "1.15.3"
3
+ VERSION = "1.15.4"
4
4
  end
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
23
23
  s.add_dependency("i18n")
24
24
  s.add_dependency("require_all")
25
25
  s.add_dependency("ruby-progressbar")
26
+ s.add_dependency("json")
26
27
 
27
28
  s.add_development_dependency("rake")
28
29
  s.add_development_dependency("rspec")
@@ -40,6 +40,42 @@ module RailsBestPractices
40
40
  end
41
41
  end
42
42
 
43
+ describe "output" do
44
+ subject { described_class.new(".", "format" => format) }
45
+
46
+ before do
47
+ subject.stub(:output_terminal_errors)
48
+ subject.stub(:output_html_errors)
49
+ subject.stub(:output_yaml_errors)
50
+
51
+ subject.output
52
+ end
53
+
54
+ context "when format is not set" do
55
+ let(:format) { nil }
56
+
57
+ it "runs text output" do
58
+ expect(subject).to have_received(:output_terminal_errors)
59
+ end
60
+ end
61
+
62
+ context "when format is yaml" do
63
+ let(:format) { "yaml" }
64
+
65
+ it "runs yaml output" do
66
+ expect(subject).to have_received(:output_yaml_errors)
67
+ end
68
+ end
69
+
70
+ context "when format is html" do
71
+ let(:format) { "html" }
72
+
73
+ it "runs html output" do
74
+ expect(subject).to have_received(:output_html_errors)
75
+ end
76
+ end
77
+ end
78
+
43
79
  describe "output_terminal_errors" do
44
80
  it "should output errors in terminal" do
45
81
  check1 = Reviews::LawOfDemeterReview.new
@@ -59,6 +95,37 @@ module RailsBestPractices
59
95
  end
60
96
  end
61
97
 
98
+ describe "output_json_errors" do
99
+ let(:output_file) { "rails_best_practices_output.json" }
100
+
101
+ subject do
102
+ described_class.new(".", {
103
+ "format" => "json",
104
+ "output-file" => output_file
105
+ })
106
+ end
107
+
108
+ let(:check1) { Reviews::LawOfDemeterReview.new }
109
+ let(:check2) { Reviews::UseQueryAttributeReview.new }
110
+ let(:runner) { Core::Runner.new(reviews: [check1, check2]) }
111
+ let(:result) { File.read(output_file) }
112
+
113
+ before do
114
+ check1.add_error("law of demeter", "app/models/user.rb", 10)
115
+ check2.add_error("use query attribute", "app/models/post.rb", 100)
116
+ subject.runner = runner
117
+ subject.output
118
+ end
119
+
120
+ after do
121
+ File.delete(output_file) if File.exists?(output_file)
122
+ end
123
+
124
+ it "saves output as json into output file" do
125
+ expect(result).to eq '[{"filename":"app/models/user.rb","line_number":"10","message":"law of demeter"},{"filename":"app/models/post.rb","line_number":"100","message":"use query attribute"}]'
126
+ end
127
+ end
128
+
62
129
  describe 'parse_files' do
63
130
 
64
131
  it 'should not filter out all files when the path contains "vendor"' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_best_practices
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.15.3
4
+ version: 1.15.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-30 00:00:00.000000000 Z
11
+ date: 2014-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: json
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rake
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -202,7 +216,6 @@ extra_rdoc_files: []
202
216
  files:
203
217
  - ".gitignore"
204
218
  - ".rspec"
205
- - ".ruby-version"
206
219
  - ".travis.yml"
207
220
  - Gemfile
208
221
  - Guardfile
@@ -400,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
400
413
  version: 1.3.6
401
414
  requirements: []
402
415
  rubyforge_project:
403
- rubygems_version: 2.2.0.rc.1
416
+ rubygems_version: 2.2.2
404
417
  signing_key:
405
418
  specification_version: 4
406
419
  summary: a code metric tool for rails codes.
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- ruby-2.1.0