continuus_lenimentus 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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