continuus_lenimentus 0.0.2 → 0.0.3

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGRkN2E0MjI3MDhkZmEwNThmNzk5ODU0ZGViM2EyYTBmNDBlNGZhMw==
4
+ NDAyZDBkNDQwNTU1NGJhMzA1NDcxYjg2MWJjMDlhOTdkZTFlZjRkNg==
5
5
  data.tar.gz: !binary |-
6
- NzhjMjE1ZmZjNGYyYTNmZDZkZDc1OGE1MWIyZGQ4YzdmODYzNDM0Yg==
6
+ NGJiMGE0NTNmZjk1ZDM5NWRlZjM2ZTU4YTViOWE2MGZkODQ3YmVkMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTIxZjhhMDE4N2U5NjMzM2ZkMjJkYjAxMGMyZjI3MGRkYWJmNTY3ODgyODgw
10
- NGY0YzI0Y2Y1OTczZGMzOGFjNTUxYmU5NWM3MjJkNmI1ZDUxZWEyOWZmN2Jk
11
- YmRiOTRhMTc4ZGI1MTk1ZmQ4ZjVkZTY2MDI1NmE5YWU2YjY2ZTE=
9
+ NjllOGE5NGVhNmVmZWY3NGU4ZTdlMDc3N2M5ZWM3N2UyODZlNGJjNTA5NDU4
10
+ NmU1NGJiNDdmYzY3ZTg5MzM3ZTIyMTMwZjgwZmY0MDUyMmVhYWRmMjAxNDc1
11
+ YmFkNTc0YjRlZjE5N2U1ZjhhMTgwNmM2YzkzYzQyNjM3NGM5MjU=
12
12
  data.tar.gz: !binary |-
13
- M2U4ZmFmNmVmNzU5YTJlOWQyMGZhMjZlMWMyODQyNDhlMDVmNzYzNDdiZWYy
14
- YTcxM2M5MTMzMzVhZWUxZDE1YjgyNTEyZGNkYTM5NWM4OTM2MTYyZTQ5ZDMw
15
- NTllMTkyMjk0YWJiZmYwZDFlNDc0MzQ4ZjhmNGMzZTJkYTExNjQ=
13
+ N2MxODZmMWM4MzY3NDdiZTk1YjljYjE5MzM1OGUyZjRhNTA2MGEwYTUwOGM4
14
+ ODgyYWM1Mzk4MmE1ODY5MTA4MjY1NDQzN2I0NGZlMzk0MGM0M2M4MWI4YzRj
15
+ OGRmY2M5MzdjOWY4NWVhMWM0MDAwZGRlZGQ0YTQ1YWUwOTAyNzM=
data/README.md CHANGED
@@ -2,13 +2,17 @@
2
2
 
3
3
  # Continuus Lenimentus
4
4
 
5
- A SimpleCov Formatter for Continuus Lenimentus Local CI. When the spec suite is run a file is generated with data on the state of the test suite. This is encrypted with a key to ensure minimal conflicts when using version control.
5
+ A SimpleCov Formatter for Continuus Lenimentus Local CI. When the spec suite is run a file is generated with metrics and the state of the test suite.
6
6
 
7
7
  ## Installation
8
8
 
9
9
  Add this line to your application's Gemfile:
10
10
 
11
- gem 'continuus_lenimentus', '~> 0.0.1'
11
+ group :test do
12
+ gem 'rspec', '~> 2.14.1'
13
+ gem 'simplecov', '~> 0.7.1', require: false
14
+ gem 'continuus_lenimentus', '~> 0.0.3', require: false
15
+ end
12
16
 
13
17
  And then execute:
14
18
 
@@ -35,17 +39,70 @@ Within your applications `.simplecov` file add `SimpleCov::Formatter::ContinuusL
35
39
 
36
40
  And within your `spec_helper.rb` file add a configuration block if required.
37
41
 
42
+ **Note**: The RSpec `ContinuusLenimentusRspecFormatter` formatter currently only supports the default `progress` format.
43
+
38
44
  require "simplecov"
39
45
  require 'continuus_lenimentus'
46
+
47
+ RSpec.configure do |config|
48
+ config.formatter = ContinuusLenimentusRspecFormatter
49
+ end
40
50
 
41
51
  ContinuusLenimentus.configure do |config|
42
- config.key = 'MQofYpgCMZ79shxTtgYiQFEuvPdw'
43
- config.file = 'ci.enc'
52
+ config.encrypted = true
53
+ config.key = 'MQofYpgCMZ79shxTtgYiQFEuvPdw'
54
+ config.file = 'ci.enc'
44
55
  config.directory = Dir.getwd
45
- condig.message = "CI generated."
56
+ condig.message = "CI generated."
46
57
  end
47
58
 
48
- Each time you run your spec suite a file will be generated.
59
+ Each time you run your spec suite a file will be generated, in this case `/ci.enc`.
60
+
61
+ ## Generated File
62
+
63
+ Regardless of encryption the file generated will contain the following data.
64
+
65
+ {
66
+ created_at: 2013-11-07 20:49:16 +0000,
67
+ duration: 0.003154,
68
+ counts: {
69
+ example: 28,
70
+ failure: 2,
71
+ pending: 1
72
+ },
73
+ metrics: {
74
+ total_lines: 521,
75
+ coverage: {
76
+ percent: 100.0,
77
+ strength: 1.1428571428571428,
78
+ lines: 521
79
+ }
80
+ }
81
+ }
82
+
83
+ ## Encryption
84
+ `Type (AES - 256)`
85
+
86
+ The generated file is encrypted by default to ensure minimal conflicts when using version control. Be sure to set your private `key` within the configuration block if your wish to use encryption.
87
+
88
+ There may be a case where you wish to append or alter the generated file before encrypting the content. In this case, be sure to set `encrypted` in the configuration block to `false`.
89
+
90
+ require "simplecov"
91
+ require 'continuus_lenimentus'
92
+
93
+ ContinuusLenimentus::Safe.new('OnTheBeach').encrypt
94
+ # => "EnjUhJkaI..."
95
+
96
+ ## Decryption
97
+ `Type (AES - 256)`
98
+
99
+ The encrypted file is useless to you unless you can decrypt it.
100
+
101
+ require "simplecov"
102
+ require 'continuus_lenimentus'
103
+
104
+ ContinuusLenimentus::Safe.new(generated_content).decrypt
105
+ # => { created_at: 2013-11-07 20:49:16 +0000... }
49
106
 
50
107
  ## Configuration
51
108
 
@@ -58,6 +115,7 @@ Each time you run your spec suite a file will be generated.
58
115
  ## Requirements
59
116
 
60
117
  * ruby > 1.9.x
118
+ * rspec-core > 2.0.x
61
119
  * simplecov > 0.7.x
62
120
  * gibberish > 1.3.x
63
121
 
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Chuck J hardy"]
10
10
  spec.email = ["chuckjhardy@gmail.com"]
11
11
  spec.description = %q{A SimpleCov Formatter for Continuus Lenimentus Local CI.}
12
- spec.summary = %q{A SimpleCov Formatter for Continuus Lenimentus Local CI. When the spec suite is run a file is generated with data on the state of the test suite. This is encrypted with a key to ensure minimal conflicts when using version control.}
13
- spec.homepage = "https://github.com/ChuckJHardy/SimpleLocalCI"
12
+ spec.summary = %q{A SimpleCov Formatter for Continuus Lenimentus Local CI. When the spec suite is run a file is generated with metrics and the state of the test suite.}
13
+ spec.homepage = "https://github.com/ChuckJHardy/ContinuusLenimentus"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -6,6 +6,10 @@ module ContinuusLenimentus
6
6
  @result = result
7
7
  end
8
8
 
9
+ def as_user
10
+ encrypt? ? as_json : as_hash
11
+ end
12
+
9
13
  def as_json
10
14
  as_hash.to_json
11
15
  end
@@ -13,7 +17,8 @@ module ContinuusLenimentus
13
17
  def as_hash
14
18
  {
15
19
  created_at: result.created_at,
16
- command_name: result.command_name,
20
+ duration: rspec.fetch(:duration, 0),
21
+ counts: rspec.fetch(:counts, {}),
17
22
  metrics: metrics
18
23
  }
19
24
  end
@@ -21,6 +26,10 @@ module ContinuusLenimentus
21
26
  private
22
27
  attr_reader :result
23
28
 
29
+ def rspec
30
+ ContinuusLenimentus::Runner.rspec.results
31
+ end
32
+
24
33
  def metrics
25
34
  {
26
35
  total_lines: result.total_lines,
@@ -39,5 +48,9 @@ module ContinuusLenimentus
39
48
  def strength
40
49
  result.covered_strength.nan? ? 0.0 : result.covered_strength
41
50
  end
51
+
52
+ def encrypt?
53
+ ContinuusLenimentus.configuration.encrypted
54
+ end
42
55
  end
43
56
  end
@@ -1,6 +1,6 @@
1
1
  module ContinuusLenimentus
2
2
  class Configuration
3
- attr_accessor :encrypted, :key, :file, :directory, :message
3
+ attr_accessor :rspec, :encrypted, :key, :file, :directory, :message
4
4
 
5
5
  def initialize
6
6
  self.encrypted = true
@@ -0,0 +1,13 @@
1
+ module ContinuusLenimentus
2
+ class Runner
3
+ attr_accessor :results
4
+
5
+ def initialize
6
+ self.results = {}
7
+ end
8
+
9
+ def self.rspec
10
+ @rspec ||= Runner.new
11
+ end
12
+ end
13
+ end
@@ -9,11 +9,15 @@ module ContinuusLenimentus
9
9
  end
10
10
 
11
11
  def writer
12
- File.open(path, mode) { |file| file.puts Safe.encrypt(@data) }
12
+ File.open(path, mode) { |file| file.puts data }
13
13
  end
14
14
 
15
15
  private
16
16
 
17
+ def data
18
+ encrypt? ? Safe.encrypt(@data) : @data
19
+ end
20
+
17
21
  def mode
18
22
  'w+'
19
23
  end
@@ -21,6 +25,10 @@ module ContinuusLenimentus
21
25
  def path
22
26
  Path.full
23
27
  end
28
+
29
+ def encrypt?
30
+ ContinuusLenimentus.configuration.encrypted
31
+ end
24
32
  end
25
33
  end
26
34
 
@@ -1,3 +1,3 @@
1
1
  module ContinuusLenimentus
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,10 +1,13 @@
1
1
  require "continuus_lenimentus/configuration"
2
+ require "continuus_lenimentus/runner"
2
3
  require "continuus_lenimentus/version"
3
4
  require "continuus_lenimentus/safe"
4
5
  require "continuus_lenimentus/adapter"
5
6
  require "continuus_lenimentus/path"
6
7
  require "continuus_lenimentus/save"
7
8
 
9
+ require "rspec/core/formatters/base_text_formatter"
10
+
8
11
  module ContinuusLenimentus
9
12
  def self.configuration
10
13
  @configuration ||= Configuration.new
@@ -16,12 +19,27 @@ module ContinuusLenimentus
16
19
  end
17
20
 
18
21
  def self.format(result)
19
- Save.this(Adapter.new(result).as_json).tap do |_|
22
+ Save.this(Adapter.new(result).as_user).tap do |_|
20
23
  puts ContinuusLenimentus.configuration.message
21
24
  end
22
25
  end
23
26
  end
24
27
 
28
+ class ContinuusLenimentusRspecFormatter < RSpec::Core::Formatters::BaseTextFormatter
29
+ def dump_summary(duration, example_count, failure_count, pending_count)
30
+ ContinuusLenimentus::Runner.rspec.results = {
31
+ duration: duration,
32
+ counts: {
33
+ example: example_count,
34
+ failure: failure_count,
35
+ pending: pending_count
36
+ }
37
+ }
38
+
39
+ super(duration, example_count, failure_count, pending_count)
40
+ end
41
+ end
42
+
25
43
  class SimpleCov::Formatter::ContinuusLenimentusFormatter
26
44
  def format(result)
27
45
  ContinuusLenimentus.format(result)
@@ -27,6 +27,34 @@ describe ContinuusLenimentus do
27
27
  end
28
28
  end
29
29
 
30
+ describe '#dump_summary' do
31
+ subject { formatter.dump_summary(duration, example_count, failure_count, pending_count) }
32
+
33
+ let(:formatter) { ContinuusLenimentusRspecFormatter.new(output) }
34
+ let(:output) { double('Output', puts: '') }
35
+ let(:runner) { ContinuusLenimentus::Runner.rspec.results }
36
+ let(:duration) { 100 }
37
+ let(:example_count) { 10 }
38
+ let(:failure_count) { 1 }
39
+ let(:pending_count) { 2 }
40
+
41
+ let(:expected_hash) do
42
+ {
43
+ duration: duration,
44
+ counts: {
45
+ example: example_count,
46
+ failure: failure_count,
47
+ pending: pending_count
48
+ }
49
+ }
50
+ end
51
+
52
+ it 'assigns the runner rspec results instance' do
53
+ subject
54
+ expect(runner).to eq(expected_hash)
55
+ end
56
+ end
57
+
30
58
  describe '#format' do
31
59
  subject { formatter.format(result) }
32
60
 
@@ -45,7 +73,8 @@ describe ContinuusLenimentus do
45
73
 
46
74
  let(:data) { ContinuusLenimentus::Adapter.new(result).as_json }
47
75
 
48
- it 'class off to Save with Adapted results' do
76
+ it 'calls off to Save with Adapted results' do
77
+ ContinuusLenimentus.configuration.encrypted = true
49
78
  ContinuusLenimentus::Save.should_receive(:this).with(data)
50
79
 
51
80
  described_class.should_receive(:puts).
@@ -19,7 +19,8 @@ describe ContinuusLenimentus::Adapter do
19
19
  let(:expected_hash) do
20
20
  {
21
21
  created_at: "2013-11-05 18:35:29 +0000",
22
- command_name: "RSpec",
22
+ duration: duration,
23
+ counts: rspec_counts,
23
24
  metrics: {
24
25
  total_lines: 21,
25
26
  coverage: {
@@ -31,6 +32,48 @@ describe ContinuusLenimentus::Adapter do
31
32
  }
32
33
  end
33
34
 
35
+ let(:duration) { 0.003537 }
36
+ let(:rspec_results) do
37
+ {
38
+ duration: duration,
39
+ counts: rspec_counts
40
+ }
41
+ end
42
+
43
+ let(:rspec_counts) do
44
+ {
45
+ example: 100,
46
+ failure: 10,
47
+ pending: 2
48
+ }
49
+ end
50
+
51
+ before do
52
+ ContinuusLenimentus::Runner.rspec.results = rspec_results
53
+ end
54
+
55
+ describe '#as_user' do
56
+ subject { instance.as_user }
57
+
58
+ before { ContinuusLenimentus.configuration.encrypted = encrypted }
59
+
60
+ context 'when encrypted' do
61
+ let(:encrypted) { true }
62
+
63
+ it 'returns the json response' do
64
+ expect(subject).to be_an_instance_of(String)
65
+ end
66
+ end
67
+
68
+ context 'when encryption' do
69
+ let(:encrypted) { false }
70
+
71
+ it 'returns the hash response' do
72
+ expect(subject).to eq(expected_hash)
73
+ end
74
+ end
75
+ end
76
+
34
77
  describe '#as_json' do
35
78
  subject { instance.as_json }
36
79
 
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe ContinuusLenimentus::Runner do
4
+ let(:instance) { described_class.new }
5
+
6
+ describe '.rspec' do
7
+ subject { described_class.rspec }
8
+
9
+ it 'returns an instance of runner' do
10
+ expect(subject).to be_an_instance_of(ContinuusLenimentus::Runner)
11
+ end
12
+ end
13
+
14
+ describe "#results" do
15
+ subject { instance.results }
16
+
17
+ let(:default) { {} }
18
+ let(:new) { { key: :value} }
19
+
20
+ it "returns a hash" do
21
+ expect(subject).to be_an_instance_of(Hash)
22
+ end
23
+
24
+ it 'returns a default hash' do
25
+ expect(subject).to eq(default)
26
+ end
27
+
28
+ it 'returns altered hash' do
29
+ instance.results = new
30
+ expect(subject).to eq(new)
31
+ end
32
+ end
33
+ end
@@ -20,13 +20,35 @@ describe ContinuusLenimentus::Save do
20
20
  let(:path) { 'path/to/file' }
21
21
  let(:mode) { 'w+' }
22
22
  let(:file) { double('File') }
23
+ let(:encrypted) { true }
23
24
 
24
- it 'writes encryped string to file' do
25
- ContinuusLenimentus::Path.should_receive(:full).and_return(path)
26
- File.should_receive(:open).with(path, mode).and_yield(file)
27
- file.should_receive(:puts).with(an_instance_of(String))
25
+ before do
26
+ ContinuusLenimentus.configuration.encrypted = encrypted
27
+ end
28
+
29
+ context 'with encryptd content' do
30
+ it 'writes encryped string to file' do
31
+ ContinuusLenimentus::Path.should_receive(:full).and_return(path)
32
+ ContinuusLenimentus::Safe.should_receive(:encrypt).
33
+ with(adapter).and_return('')
34
+
35
+ File.should_receive(:open).with(path, mode).and_yield(file)
36
+ file.should_receive(:puts).with('')
37
+
38
+ subject
39
+ end
40
+ end
41
+
42
+ context 'without encryptd content' do
43
+ let(:encrypted) { false }
44
+
45
+ it 'writes encryped string to file' do
46
+ ContinuusLenimentus::Path.should_receive(:full).and_return(path)
47
+ File.should_receive(:open).with(path, mode).and_yield(file)
48
+ file.should_receive(:puts).with(adapter)
28
49
 
29
- subject
50
+ subject
51
+ end
30
52
  end
31
53
  end
32
54
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: continuus_lenimentus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuck J hardy
@@ -100,6 +100,7 @@ files:
100
100
  - lib/continuus_lenimentus/adapter.rb
101
101
  - lib/continuus_lenimentus/configuration.rb
102
102
  - lib/continuus_lenimentus/path.rb
103
+ - lib/continuus_lenimentus/runner.rb
103
104
  - lib/continuus_lenimentus/safe.rb
104
105
  - lib/continuus_lenimentus/save.rb
105
106
  - lib/continuus_lenimentus/version.rb
@@ -107,10 +108,11 @@ files:
107
108
  - spec/lib/continuus_lenimentus/adapter_spec.rb
108
109
  - spec/lib/continuus_lenimentus/configuration_spec.rb
109
110
  - spec/lib/continuus_lenimentus/path_spec.rb
111
+ - spec/lib/continuus_lenimentus/runner_spec.rb
110
112
  - spec/lib/continuus_lenimentus/safe_spec.rb
111
113
  - spec/lib/continuus_lenimentus/save_spec.rb
112
114
  - spec/spec_helper.rb
113
- homepage: https://github.com/ChuckJHardy/SimpleLocalCI
115
+ homepage: https://github.com/ChuckJHardy/ContinuusLenimentus
114
116
  licenses:
115
117
  - MIT
116
118
  metadata: {}
@@ -134,13 +136,13 @@ rubygems_version: 2.1.9
134
136
  signing_key:
135
137
  specification_version: 4
136
138
  summary: A SimpleCov Formatter for Continuus Lenimentus Local CI. When the spec suite
137
- is run a file is generated with data on the state of the test suite. This is encrypted
138
- with a key to ensure minimal conflicts when using version control.
139
+ is run a file is generated with metrics and the state of the test suite.
139
140
  test_files:
140
141
  - spec/continuus_lenimentus_spec.rb
141
142
  - spec/lib/continuus_lenimentus/adapter_spec.rb
142
143
  - spec/lib/continuus_lenimentus/configuration_spec.rb
143
144
  - spec/lib/continuus_lenimentus/path_spec.rb
145
+ - spec/lib/continuus_lenimentus/runner_spec.rb
144
146
  - spec/lib/continuus_lenimentus/safe_spec.rb
145
147
  - spec/lib/continuus_lenimentus/save_spec.rb
146
148
  - spec/spec_helper.rb