kapnismology 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a662a1647e4ff01d3de77f9161a447a3341ffa4f
4
+ data.tar.gz: 730c6710054f95a57c72cff0a89f40ab19df018a
5
+ SHA512:
6
+ metadata.gz: e66ded22c30d6eb294165e0d5c62215be82ae8fcf059d49ae7a6afc54dc246247bf24c6fdc4b5112f98b39d13efb964a5fa20b4eb17effd12be101e29caba029
7
+ data.tar.gz: 79f7130926266fcd9de53c854f70d05e04523b82af428a73eee0b538f520e80a6ced0d1c6fc8c9e4b59d8b7ca65a53309d2ef3dc90c0820a65d05cbba67fc33b
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # Kapnismology
2
+
3
+ Kapnismology 'the study of smoke', is a gem which contains an engine to easily create smoke tests.
4
+
5
+ ## Installation
6
+
7
+ Kapnismology only supports Rails.
8
+ In the Gemfile write:
9
+ ```
10
+ gem 'kapnismology', git: 'git@github.com:mdsol/kapnismology.git'
11
+ ```
12
+
13
+ In your config/routes write:
14
+
15
+ ```
16
+ mount Kapnismology::Engine, at: "/smoke_test"
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ Access the path '/smoke_test' to see the results of the smoke_test
22
+
23
+
24
+ ## Adding more smoke tests
25
+
26
+ Create a class like this:
27
+ ```
28
+ class MySmokeTest < Kapnismology::SmokeTest
29
+
30
+ def self.name
31
+ 'my_test'
32
+ end
33
+
34
+ def result
35
+ "BOOO"
36
+ end
37
+ end
38
+ ```
39
+
40
+ The class must:
41
+ - Inherit from `Kapnismology::SmokeTest`
42
+ - Have a method `self.name` returning a string
43
+ - Have an instance method `result` returning a Kapnismology::Result object
44
+
45
+ Any class created this way will be called and its result will be added to a resulting hash.
46
+ In this case the result of this class would be added to the result as:
47
+ ```
48
+ {'my_test' => 'BOOO'}
49
+ ```
50
+
51
+ ## TODO
52
+
53
+ - rspecs
54
+ - Automount routes
55
+ - Hypermedia output
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Kapnismology'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,4 @@
1
+ module Kapnismology
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ module Kapnismology
2
+ class SmokeTestsController < ApplicationController
3
+ def index
4
+ result = SmokeTest.result
5
+ render text: result.to_json
6
+ end
7
+ end
8
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Kapnismology::Engine.routes.draw do
2
+ root to: 'smoke_tests#index'
3
+ end
@@ -0,0 +1,8 @@
1
+ #Engines blow up when being autoloaded by Rails and at the same time loaded by other gems
2
+ unless defined?(Kapnismology::Engine)
3
+ require "kapnismology/engine"
4
+ end
5
+ require 'contracts'
6
+ require 'kapnismology/result'
7
+ require 'kapnismology/evaluation'
8
+ require 'kapnismology/smoke_test'
@@ -0,0 +1,15 @@
1
+ module Kapnismology
2
+ class Engine < ::Rails::Engine
3
+ initializer "kapnismology.add_autoload_paths", before: :set_autoload_paths do |app|
4
+ app.config.eager_load_paths += Dir["#{app.config.root}/lib/**/*"]
5
+ end
6
+
7
+ # config.eager_load_paths += Dir["#{app.config.root}/lib/**/*"]
8
+ isolate_namespace Kapnismology
9
+ Rails.application.routes.draw do
10
+ mount Kapnismology::Engine, at: "/smoke_test"
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,19 @@
1
+ module Kapnismology
2
+
3
+ # Mapping of test_name => result for each smoke test
4
+ class Evaluation
5
+ include Contracts
6
+ extend Forwardable
7
+ attr_reader :test_name
8
+ def_delegators :@result, :data, :passed, :message
9
+
10
+ # Contract String, Any
11
+ def initialize(test_name, result)
12
+ @test_name, @result = test_name, result
13
+ end
14
+
15
+ def to_json
16
+ {test_name => @result.to_hash}.to_json
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module Kapnismology
2
+
3
+ # This is the result of each smoke test.
4
+ # This class makes sense to enforce smoke test to return something known
5
+ # Params of the constructor:
6
+ # * data : Typically Array or Hash representing the result of the test
7
+ # * passed : Boolean: true -> test passed, false -> test failed
8
+ # * message: String: extra message set by the test if it wants to provide more information
9
+ class Result
10
+ include Contracts
11
+ attr_reader :data, :passed, :message
12
+
13
+ # Contract Any, Bool, String => nil
14
+ def initialize(data, passed, message)
15
+ @data, @passed, @message = data, passed, message
16
+ end
17
+
18
+ def to_hash
19
+ {result: @data, passed: @passed, message: @message}
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,53 @@
1
+
2
+ module Kapnismology
3
+
4
+ class RakeTask
5
+ def output
6
+ evaluations = SmokeTest.result
7
+ evaluations.each do |evaluation|
8
+ puts "The smoke test #{evaluation.test_name} #{passed_or_failed(evaluation.passed)}"
9
+ puts evaluation.message
10
+ puts
11
+ end
12
+ all_passed = evaluations.map(&:passed).inject{|m, result| m && result}
13
+ fail 'We have some failures in our smoke tests' unless all_passed
14
+ end
15
+
16
+ def passed_or_failed(passed)
17
+ passed ? "passed" : "failed"
18
+ end
19
+ end
20
+
21
+ #
22
+ # This is the base class for all the smoke tests.
23
+ # Inherit from this class and implement the result and self.name method
24
+ #
25
+ class SmokeTest
26
+
27
+ def result
28
+ raise 'this method has to be implemented in inherited classes'
29
+ end
30
+
31
+ def self.name
32
+ raise 'this method has to be implemented in inherited classes'
33
+ end
34
+
35
+ class << self
36
+
37
+ def inherited(klass)
38
+ smoke_tests << klass
39
+ end
40
+
41
+ def smoke_tests
42
+ @smoke_tests ||= []
43
+ end
44
+
45
+ def result
46
+ smoke_tests.inject([]) do |memo, smoke_test|
47
+ memo.push(Evaluation.new(smoke_test.name, smoke_test.new.result))
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ module Kapnismology
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ # desc "Explaining what the task does"
2
+ # task :smoke_tests do
3
+
4
+ # # Task goes here
5
+ # end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kapnismology
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jordi Polo Carres
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: contracts
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.0'
69
+ description: Engine for smoke tests and base classes
70
+ email:
71
+ - mumismo@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - README.md
77
+ - Rakefile
78
+ - app/controllers/kapnismology/application_controller.rb
79
+ - app/controllers/kapnismology/smoke_tests_controller.rb
80
+ - config/routes.rb
81
+ - lib/kapnismology.rb
82
+ - lib/kapnismology/engine.rb
83
+ - lib/kapnismology/evaluation.rb
84
+ - lib/kapnismology/result.rb
85
+ - lib/kapnismology/smoke_test.rb
86
+ - lib/kapnismology/version.rb
87
+ - lib/tasks/kapnismology_tasks.rake
88
+ homepage: https://www.github.com/JordiPolo/kapnismology
89
+ licenses: []
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.2.2
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: Engine for smoke tests.
111
+ test_files: []
112
+ has_rdoc: