bashcov 1.7.0 → 1.8.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: 4f9c5cde335ec3f77c2e8671870587c91c0b7921
4
- data.tar.gz: 3aa49b58a3030285aa9dbdbd6852d1090f9770b0
3
+ metadata.gz: 663e369ac45484a1d8df36ec47520edc2a5bd5b5
4
+ data.tar.gz: 3016f906c0b63a1c8d9125c32c197cb1a44bf7f1
5
5
  SHA512:
6
- metadata.gz: fe850cf7e3ff9c56889b853bbb128aeaf4cf4da97702308b2df1ba67f24ec4161c1d96f9dd0ca14d308dc0b8ae374850bd295891e55c94cf25bd7ff8e01bb87f
7
- data.tar.gz: ccf1e25f9be556328f8f6abf311ff95a2161af389f387aa1a2c611fa3f8b8683d954fcd4b710ad337bb5ba6e85d84206cf1dbf2d09ef6c5c2345cdbf215429ab
6
+ metadata.gz: f977398907a51277dbca731ce8351c366324d13b4df904ffbf369bd49ec2f1d08c2417a3d9c5f7667822a7e0bc2ab2cba60c3eb708dddeb291d0144e6a231819
7
+ data.tar.gz: 9e122bfd8679f6422b2c974d4afb990a567662c8279f3d6d4ec709521ffbb61530890ea8ccc9a65da72b9e2758b742172e126d22ca903117f461311aa8515a8c
@@ -1,7 +1,15 @@
1
- ## Unreleased ([changes](https://github.com/infertux/bashcov/compare/v1.7.0...master))
1
+ ## Unreleased ([changes](https://github.com/infertux/bashcov/compare/v1.8.0...master))
2
2
 
3
3
  * TBD
4
4
 
5
+ ## v1.8.0, 2018-01-13 ([changes](https://github.com/infertux/bashcov/compare/v1.7.0...v1.8.0))
6
+
7
+ * [FEATURE] Merge coverage results from multiple runs when
8
+ `SimpleCov.use_merging` is set to `true`. Auto-generate
9
+ likely-unique values for `SimpleCov.command_name`, providing the
10
+ `--command-name` option and `BASHCOV_COMMAND_NAME` environment
11
+ variable for users to set a command name explicitly (#34)
12
+
5
13
  ## v1.7.0, 2017-12-28 ([changes](https://github.com/infertux/bashcov/compare/v1.6.0...v1.7.0))
6
14
 
7
15
  * [MISC] Add support for Ruby 2.5 and drop 2.2
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-2017 Cédric Félizard
1
+ Copyright (c) 2012-2018 Cédric Félizard
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -60,6 +60,35 @@ your project's root (like [this](https://github.com/infertux/bashcov/blob/master
60
60
  See [SimpleCov README](https://github.com/colszowka/simplecov#readme) for more
61
61
  information.
62
62
 
63
+ #### Controlling the command name
64
+
65
+ Bashcov respects all of your `.simplecov` settings save one --
66
+ [`SimpleCov.command_name`](http://www.rubydoc.info/gems/simplecov/SimpleCov/Configuration#command_name-instance_method),
67
+ which is the tag that SimpleCov attaches to coverage results from a particular
68
+ test suite. You can set the value of `SimpleCov.command_name` by using
69
+ Bashcov's `--command-name` option, or by assigning a value to the environment
70
+ variable `BASHCOV_COMMAND_NAME`. Otherwise, Bashcov will generate a command
71
+ name for you based on the name of the currently-executing Bash script and any
72
+ arguments passed to it. For example, assuming your Bash lives at `/bin/bash`
73
+ and you run the command
74
+
75
+ ```
76
+ $ bashcov -- ./test_suite.sh --and some --flags
77
+ ```
78
+
79
+ Bashcov will set `SimpleCov.command_name` to `"/bin/bash ./test_suite.sh --and
80
+ some --flags"`. Basing `SimpleCov.command_name` on the executing command helps
81
+ to ensure that multiple coverage runs don't [overwrite each other's
82
+ results](https://github.com/colszowka/simplecov#test-suite-names) due to
83
+ SimpleCov identifying multiple runs by the same tag. The `--command-name` and
84
+ `BASHCOV_COMMAND_NAME` knobs are there for you to twiddle in case your test
85
+ suite runs the exact same `bashcov` command more than once, in which case the
86
+ generated command name will not distinguish each invocation from the others.
87
+
88
+ For more info on `SimpleCov.command_name` and its relation to SimpleCov's
89
+ result-merging behavior, see the [SimpleCov
90
+ README](https://github.com/colszowka/simplecov#merging-results).
91
+
63
92
  ### Some gory details
64
93
 
65
94
  Figuring out where an executing Bash script lives in the file system can be
data/Rakefile CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  require "bundler/gem_tasks"
4
4
 
5
+ require "cucumber/rake/task"
6
+ Cucumber::Rake::Task.new
7
+
5
8
  require "rspec/core/rake_task"
6
9
  RSpec::Core::RakeTask.new(:spec) do |t|
7
10
  t.ruby_opts = "-w"
@@ -10,4 +13,4 @@ end
10
13
  require "rubocop/rake_task"
11
14
  RuboCop::RakeTask.new
12
15
 
13
- task default: %i[rubocop spec]
16
+ task default: %i[rubocop spec cucumber]
@@ -25,7 +25,9 @@ Gem::Specification.new do |gem|
25
25
 
26
26
  gem.add_dependency "simplecov", "~> 0.15"
27
27
 
28
+ gem.add_development_dependency "aruba", "~> 0.14.3"
28
29
  gem.add_development_dependency "coveralls"
30
+ gem.add_development_dependency "cucumber"
29
31
  gem.add_development_dependency "mutant-rspec"
30
32
  gem.add_development_dependency "rake"
31
33
  gem.add_development_dependency "rspec"
@@ -14,8 +14,20 @@ coverage = runner.result
14
14
 
15
15
  require "simplecov"
16
16
 
17
- SimpleCov.command_name Bashcov.fullname
17
+ SimpleCov.start
18
+
19
+ SimpleCov.command_name Bashcov.command_name
18
20
  SimpleCov.root Bashcov.root_directory
19
- SimpleCov.at_exit { SimpleCov::Result.new(coverage).format! }
21
+
22
+ result = SimpleCov::Result.new(coverage)
23
+ if SimpleCov.use_merging
24
+ SimpleCov::ResultMerger.store_result(result)
25
+ result = SimpleCov::ResultMerger.merged_result
26
+ end
27
+
28
+ SimpleCov.at_exit do
29
+ puts "Run completed using #{Bashcov.fullname}"
30
+ result.format!
31
+ end
20
32
 
21
33
  exit status.exitstatus
@@ -14,19 +14,10 @@ module Bashcov
14
14
 
15
15
  # A +Struct+ to store Bashcov configuration
16
16
  Options = Struct.new(
17
- *%i[skip_uncovered mute bash_path root_directory command]
17
+ *%i[skip_uncovered mute bash_path root_directory command command_name]
18
18
  )
19
19
 
20
20
  class << self
21
- # Define option accessors
22
- Options.new.members.each do |option|
23
- [option, "#{option}="].each do |method|
24
- define_method method do |*args|
25
- options.public_send(*[method, *args])
26
- end
27
- end
28
- end
29
-
30
21
  # @return [Struct] The +Struct+ object representing Bashcov configuration
31
22
  def options
32
23
  set_default_options! unless defined?(@options)
@@ -62,12 +53,22 @@ module Bashcov
62
53
  [
63
54
  program_name,
64
55
  VERSION,
65
- "(with Bash #{BASH_VERSION},",
56
+ "with Bash #{BASH_VERSION},",
66
57
  "Ruby #{RUBY_VERSION},",
67
- "and SimpleCov #{SimpleCov::VERSION})",
58
+ "and SimpleCov #{SimpleCov::VERSION}.",
68
59
  ].join(" ")
69
60
  end
70
61
 
62
+ # @return [String] The value to use as +SimpleCov.command_name+. Uses the
63
+ # value of +--command-name+, if this flag was provided, or
64
+ # +BASHCOV_COMMAND_NAME, if set, defaulting to a stringified
65
+ # representation of {Bashcov#command}.
66
+ def command_name
67
+ return @options.command_name if @options.command_name
68
+ return ENV["BASHCOV_COMMAND_NAME"] unless ENV.fetch("BASHCOV_COMMAND_NAME", "").empty?
69
+ command.compact.join(" ")
70
+ end
71
+
71
72
  # Wipe the current options and reset default values
72
73
  def set_default_options!
73
74
  @options = Options.new
@@ -78,6 +79,17 @@ module Bashcov
78
79
  @options.root_directory = Dir.getwd
79
80
  end
80
81
 
82
+ # Define option accessors
83
+ Options.new.members.each do |option|
84
+ [option, "#{option}="].each do |method|
85
+ next if instance_methods(false).include?(method)
86
+
87
+ define_method method do |*args|
88
+ options.public_send(*[method, *args])
89
+ end
90
+ end
91
+ end
92
+
81
93
  private
82
94
 
83
95
  def help
@@ -113,6 +125,9 @@ module Bashcov
113
125
  raise Errno::ENOENT, d unless File.directory? d
114
126
  options.root_directory = d
115
127
  end
128
+ opts.on("--command-name NAME", "Value to use as SimpleCov.command_name") do |c|
129
+ options.command_name = c
130
+ end
116
131
 
117
132
  opts.separator "\nCommon options:"
118
133
 
@@ -36,9 +36,6 @@ module Bashcov
36
36
  def each(delimiter, field_count, start_match)
37
37
  return enum_for(__method__, delimiter, field_count, start_match) unless block_given?
38
38
 
39
- # Whether the current field is the start-of-fields match
40
- matched_start = nil
41
-
42
39
  # The number of fields processed since passing the last start-of-fields
43
40
  # match
44
41
  seen_fields = 0
@@ -58,7 +55,6 @@ module Bashcov
58
55
  # Fill out any remaining (unparseable) fields with empty strings
59
56
  yield_remaining.call
60
57
 
61
- matched_start = nil
62
58
  seen_fields = 0
63
59
  elsif seen_fields < field_count
64
60
  yield field
@@ -3,5 +3,5 @@
3
3
  # :nodoc:
4
4
  module Bashcov
5
5
  # Current Bashcov version
6
- VERSION = "1.7.0"
6
+ VERSION = "1.8.0"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bashcov
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cédric Félizard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-28 00:00:00.000000000 Z
11
+ date: 2018-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: aruba
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.14.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.14.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: coveralls
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: mutant-rspec
43
71
  requirement: !ruby/object:Gem::Requirement