polytrix 0.1.3 → 0.1.4

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.
@@ -0,0 +1,3 @@
1
+ [submodule "samples/tests/polytrix/generators/slate/files"]
2
+ path = samples/tests/polytrix/generators/slate/files
3
+ url = git@github.com:polytrix/slate_generator.git
@@ -13,3 +13,4 @@ AllCops:
13
13
  - bin/**/*
14
14
  - tmp/**/*
15
15
  - tmp/**/*.rb
16
+ - samples/tests/polytrix/generators/**/*
data/README.md CHANGED
@@ -9,18 +9,18 @@ A lot of Polytrix was influenced by and based on [test-kitchen](http://kitchen.c
9
9
  ## Features
10
10
 
11
11
  - Validate sample code by running it through a series of stages:
12
- * Clone: Fetch existing code samples from other git repos
12
+ * Clone: Fetch existing code samples from other git repos
13
13
  * Detect: Match code samples for specific implementors to shared test scenarios
14
14
  * Bootstrap: Install runtime dependencies for each implementor
15
15
  * Exec: Invoke each test sample and capture the results (with built-in or custom spies)
16
16
  * Validate: Ensure execution results (and data captured by spies) matches expectations
17
+ - Use spies to capture data on how each code sample behaves when executed
17
18
  - Generate reports or documentation:
18
19
  - A feature matrix comparing several implementations
19
- - Detailed test reports showing validation results and data captured by spies
20
- - Custom reports from custom spies
20
+ - A test dashboard with detailed results and captured data for each code sample that was tested
21
21
  - Convert code samples to documentation
22
- - Inject code samples and/or captured execution data into documentation templates
23
22
  - Generate to-do lists for pending features
23
+ - Custom reports or documentation generation for anything else
24
24
 
25
25
  ## Installing Polytrix
26
26
 
@@ -1,3 +1,4 @@
1
+ require 'cause'
1
2
  require 'thor'
2
3
  require 'pathname'
3
4
  require 'polytrix/version'
@@ -53,18 +54,12 @@ module Polytrix
53
54
  fail StandardError, "No manifest found at #{manifest_file} and not using --solo mode"
54
55
  end
55
56
 
56
- Polytrix.configuration.documentation_dir = options[:target_dir]
57
- Polytrix.configuration.documentation_format = options[:format]
58
-
59
57
  manifest.build_challenges
60
58
 
61
59
  test_dir = options[:test_dir].nil? ? nil : File.expand_path(options[:test_dir])
62
60
  return nil unless test_dir && File.directory?(test_dir)
63
61
 
64
- $LOAD_PATH.unshift test_dir
65
- Dir["#{test_dir}/**/*.rb"].each do | file_to_require |
66
- require relativize(file_to_require, test_dir).to_s.gsub('.rb', '')
67
- end
62
+ autoload_polytrix_files(test_dir)
68
63
  end
69
64
 
70
65
  def solo_setup(options)
@@ -177,6 +172,17 @@ module Polytrix
177
172
  def tty?
178
173
  $stdout.tty?
179
174
  end
175
+
176
+ protected
177
+
178
+ def autoload_polytrix_files(dir)
179
+ $LOAD_PATH.unshift dir
180
+ Dir["#{dir}/**/*.rb"].each do | file_to_require |
181
+ # TODO: Need a better way to skip generators or only load validators
182
+ next if file_to_require.match %r{generators/.*/files/}
183
+ require relativize(file_to_require, dir).to_s.gsub('.rb', '')
184
+ end
185
+ end
180
186
  end
181
187
  end
182
188
 
@@ -123,7 +123,7 @@ module Polytrix
123
123
  validation = validator.validate(self)
124
124
  status = case validation.result
125
125
  when :passed
126
- Polytrix::Color.colorize('✓ Passed', :green)
126
+ Polytrix::Color.colorize("\u2713 Passed", :green)
127
127
  when :failed
128
128
  Polytrix::Color.colorize('x Failed', :red)
129
129
  Polytrix.handle_validation_failure(validation.error)
@@ -2,7 +2,7 @@ require 'thor'
2
2
 
3
3
  require 'polytrix'
4
4
  require 'polytrix/command'
5
- require 'polytrix/command/report'
5
+ require 'polytrix/command/generate'
6
6
 
7
7
  module Polytrix
8
8
  class CLI < Thor # rubocop:disable ClassLength
@@ -212,14 +212,8 @@ module Polytrix
212
212
  end
213
213
  map %w(-v --version) => :version
214
214
 
215
- desc 'report', 'Generate reports'
216
- subcommand 'report', Polytrix::Command::Report
217
- # register Polytrix::Command::Report, 'report',
218
- # 'report', 'Generates a report'
219
- # long_desc <<-D, for: 'report'
220
- # Polytrix will generate an HTML report.
221
- # D
222
- # tasks['report'].options = Polytrix::Command::Report.class_options
215
+ desc 'generate', 'Generate reports, documentation, etc.'
216
+ subcommand 'generate', Polytrix::Command::Generate
223
217
 
224
218
  private
225
219
 
@@ -0,0 +1,27 @@
1
+ module Polytrix
2
+ module Command
3
+ class Generate < Thor
4
+ namespace :generate
5
+
6
+ autoload :Dashboard, 'polytrix/command/generators/dashboard'
7
+ register Dashboard, 'dashboard', 'dashboard', 'Create a report dashboard'
8
+ tasks['dashboard'].options = Dashboard.class_options
9
+
10
+ autoload :Code2Doc, 'polytrix/command/generators/code2doc'
11
+ register Code2Doc, 'code2doc', 'code2doc [INSTANCE|REGEXP|all]', 'Generates documenation from sample code for one or more scenarios'
12
+ tasks['code2doc'].options = Code2Doc.class_options
13
+
14
+ autoload :Documentation, 'polytrix/command/generators/documentation'
15
+ register Documentation, 'docs', 'docs', 'Generate documentation from a template'
16
+ tasks['docs'].options = Documentation.class_options
17
+ tasks['docs'].long_description = <<-eos
18
+ Generates documentation from a template. The templates may use Thor actions and Padrino helpers
19
+ in order to inject data from Polytrix test runs, code samples, or other sources.
20
+
21
+ Available templates: #{Documentation.generator_names.join(', ')}
22
+ eos
23
+
24
+ # FIXME: Help shows unwanted usage, e.g. "polytrix polytrix:command:report:code2_doc"
25
+ end
26
+ end
27
+ end
@@ -3,7 +3,7 @@ require 'polytrix/reporters'
3
3
 
4
4
  module Polytrix
5
5
  module Command
6
- class Report
6
+ class Generate
7
7
  class Code2Doc < Thor::Group
8
8
  include Polytrix::DefaultLogger
9
9
  include Polytrix::Logging
@@ -3,7 +3,7 @@ require 'polytrix/reporters'
3
3
 
4
4
  module Polytrix
5
5
  module Command
6
- class Report
6
+ class Generate
7
7
  class Dashboard < Thor::Group
8
8
  include Thor::Actions
9
9
  include Polytrix::Util::FileSystem
@@ -63,7 +63,7 @@ module Polytrix
63
63
  class_option :code_style, default: 'github'
64
64
 
65
65
  def self.source_root
66
- Polytrix::Reporters::TEMPLATE_DIR
66
+ Polytrix::Reporters::GENERATORS_DIR
67
67
  end
68
68
 
69
69
  def report_name
@@ -88,14 +88,7 @@ module Polytrix
88
88
  # end
89
89
 
90
90
  def setup
91
- Polytrix.manifest.build_challenges
92
- test_dir = 'tests/polytrix' # @test_dir.nil? ? nil : File.expand_path(@test_dir)
93
- return nil unless test_dir && File.directory?(test_dir)
94
-
95
- $LOAD_PATH.unshift test_dir
96
- Dir["#{test_dir}/**/*.rb"].each do | file_to_require |
97
- require relativize(file_to_require, test_dir).to_s.gsub('.rb', '')
98
- end
91
+ Polytrix.setup(options)
99
92
  end
100
93
 
101
94
  def copy_assets
@@ -106,6 +99,10 @@ module Polytrix
106
99
  directory 'files', '.'
107
100
  end
108
101
 
102
+ def create_results_json
103
+ create_file 'matrix.json', as_json(results)
104
+ end
105
+
109
106
  def create_test_reports
110
107
  Polytrix.manifest.challenges.values.each do |challenge|
111
108
  @challenge = challenge
@@ -0,0 +1,60 @@
1
+ require 'json'
2
+ require 'polytrix/reporters'
3
+
4
+ module Polytrix
5
+ module Command
6
+ class Generate
7
+ class Documentation < Thor::Group
8
+ include Thor::Actions
9
+ include Polytrix::Util::FileSystem
10
+ include Polytrix::Util::FileSystem
11
+ include Polytrix::Documentation::Helpers::CodeHelper
12
+
13
+ BUILTIN_GENERATORS = Dir["#{Polytrix::Reporters::GENERATORS_DIR}/*"].select { |f| File.directory? f }
14
+
15
+ class << self
16
+ def generators
17
+ BUILTIN_GENERATORS + Dir['tests/polytrix/generators/*'].select { |f| File.directory? f }
18
+ end
19
+
20
+ def generator_names
21
+ generators.map { |d| File.basename d }
22
+ end
23
+
24
+ def generator_not_found(generator)
25
+ s = "ERROR: No generator named #{generator}, available generators: "
26
+ s << generator_names.join(', ')
27
+ end
28
+ end
29
+
30
+ argument :regexp, default: 'all'
31
+ class_option :template, default: 'summary', desc: 'The generator template name or directory'
32
+ class_option :destination, default: 'docs/', desc: 'Destination for generated documentation'
33
+ class_option :failed, type: :boolean, desc: 'Only list tests that failed / passed'
34
+ class_option :skipped, type: :boolean, desc: 'Only list tests that were skipped / executed'
35
+ class_option :samples, type: :boolean, desc: 'Only list tests that have sample code / do not have sample code'
36
+
37
+ def setup
38
+ Polytrix.setup(options)
39
+ end
40
+
41
+ def select_challenges
42
+ @challenges = Polytrix.filter_scenarios(regexp, options)
43
+ end
44
+
45
+ def set_source_and_destination
46
+ generator = self.class.generators.find { |d| File.basename(d) == options[:template] }
47
+ abort self.class.generator_not_found(generator) if generator.nil?
48
+ source_paths << generator
49
+
50
+ self.destination_root = options[:destination]
51
+ end
52
+
53
+ def apply_template
54
+ generator_script = "#{options[:template]}_template.rb"
55
+ apply(generator_script)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -136,7 +136,7 @@ module Polytrix
136
136
  def indicator(validation)
137
137
  case validation.result
138
138
  when :passed
139
- colorize('✓ Passed', :green)
139
+ colorize("\u2713 Passed", :green)
140
140
  when :failed
141
141
  colorize('x Failed', :red)
142
142
  else
@@ -11,11 +11,6 @@ module Polytrix
11
11
  property :log_level, default: :info
12
12
  property :implementors, default: []
13
13
  # coerce_key :implementors, Polytrix::Implementor
14
- property :suppress_output, default: false
15
- property :default_doc_template
16
- property :template_dir, default: "#{RESOURCES_DIR}"
17
- property :documentation_dir, default: 'docs/'
18
- property :documentation_format, default: 'md'
19
14
 
20
15
  # TODO: This should probably be configurable, or tied to Thor color options.
21
16
  if RSpec.respond_to?(:configuration)
@@ -9,7 +9,7 @@ module Polytrix
9
9
  Dir.chdir(cwd) do
10
10
  shell = Buff::ShellOut.shell_out(command)
11
11
  # Buff doesn't have a live_stream like Mixlib
12
- puts shell.stdout unless Polytrix.configuration.suppress_output
12
+ puts shell.stdout if Polytrix.configuration.log_level == :debug
13
13
  execution_result = ExecutionResult.new exitstatus: shell.exitstatus, stdout: shell.stdout, stderr: shell.stderr
14
14
  end
15
15
  execution_result
@@ -6,7 +6,7 @@ module Polytrix
6
6
  autoload :YAMLReporter, 'polytrix/reporters/yaml_reporter'
7
7
 
8
8
  RESOURCES_DIR = File.expand_path '../../../resources/', __FILE__
9
- TEMPLATE_DIR = File.expand_path 'templates/', RESOURCES_DIR
9
+ GENERATORS_DIR = File.expand_path 'generators/', RESOURCES_DIR
10
10
  ASSETS_DIR = File.expand_path 'assets/', RESOURCES_DIR
11
11
 
12
12
  def self.reporter(format, shell)
@@ -20,7 +20,7 @@ module Polytrix
20
20
  when 'yaml'
21
21
  YAMLReporter.new
22
22
  else
23
- fail "Unknown report format #{options[:format]}"
23
+ fail "Unknown report format #{format}"
24
24
  end
25
25
  end
26
26
  end
@@ -1,3 +1,3 @@
1
1
  module Polytrix
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency "bundler", "~> 1.5"
34
34
  spec.add_development_dependency "rake"
35
35
  spec.add_development_dependency "aruba", "~> 0.5"
36
- spec.add_development_dependency 'rubocop', '~> 0.18'
36
+ spec.add_development_dependency 'rubocop', '~> 0.18', '<= 0.27'
37
37
  spec.add_development_dependency 'rubocop-rspec', '~> 1.2'
38
38
  spec.add_development_dependency 'fabrication', '~> 2.11'
39
39
  end
@@ -24,5 +24,8 @@ suites:
24
24
  samples: # samples defines the individual tests in a suite
25
25
  - show
26
26
  - dashboard
27
+ - code2doc
27
28
  - custom spy report
28
-
29
+ Generate:
30
+ samples:
31
+ - slate docs
@@ -1,3 +1,18 @@
1
+ .table td {
2
+ padding: 7px 10px;
3
+ vertical-align: top;
4
+ text-align: left;
5
+ border: 1px solid #ddd;
6
+ }
7
+
8
+ .table a:visited {
9
+ color: #000000;
10
+ }
11
+
12
+ .table a:link {
13
+ color: #000000;
14
+ }
15
+
1
16
  .passed {
2
17
  background-color: green;
3
18
  }
@@ -2,64 +2,18 @@
2
2
  <head>
3
3
  <meta charset="UTF-8"/>
4
4
  <link data-require="bootstrap-css@*" data-semver="3.0.0" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
5
- <!-- <link href="style.css" rel="stylesheet"> -->
6
- <style type="text/css">
7
- td {
8
- padding: 7px 10px;
9
- vertical-align: top;
10
- text-align: left;
11
- border: 1px solid #ddd;
12
- }
13
- .passed {
14
- background-color: green;
15
- }
16
- .partial {
17
- background-color: #FF9900;
18
- }
19
- .failed {
20
- background-color: red;
21
- }
22
- .pending {
23
- background-color: LightGrey;
24
- }
25
-
26
- a:link {
27
- color: #000000;
28
- }
29
-
30
- /* visited link */
31
- a:visited {
32
- color: #000000;
33
- }
34
- </style>
5
+ <link href="assets/style.css" rel="stylesheet" type="text/css">
35
6
  </head>
36
7
  <body ng-app="main" ng-controller="DemoCtrl">
37
8
  <script data-require="angular.js@*" data-semver="1.2.26" src="https://code.angularjs.org/1.2.26/angular.min.js"></script>
38
9
  <script data-require="ng-table@*" data-semver="0.3.3" src="http://bazalt-cms.com/assets/ng-table/0.3.0/ng-table.js"></script>
39
10
  <link data-require="ng-table@*" data-semver="0.3.3" href="http://bazalt-cms.com/assets/ng-table/0.3.3/ng-table.css" rel="stylesheet">
40
- <script type="text/javascript">
41
- var app = angular.module('main', ['ngTable']).
42
- controller('DemoCtrl', function($scope, $filter, ngTableParams) {
43
- var data = <%= as_json(results) %>;
44
-
45
- $scope.tableParams = new ngTableParams({
46
- page: 1, // show first page
47
- count: data.length // count per page
48
- }, {
49
- counts: [],
50
- groupBy: 'suite',
51
- total: data.length,
52
- getData: function($defer, params) {
53
- var orderedData = params.sorting() ?
54
- $filter('orderBy')(data, $scope.tableParams.orderBy()) :
55
- data;
56
-
57
- $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
58
- }
59
- });
60
- })
61
- </script>
62
- <table class="table" ng-table="tableParams">
11
+ <script type="text/javascript" src="dashboard.js"></script>
12
+ <button ng-click="tableParams.sorting({})" class="btn btn-default pull-right">Clear sorting</button>
13
+ <button ng-click="tableParams.filter({})" class="btn btn-default pull-right">Clear filter</button>
14
+ <p><strong>Sorting:</strong> {{tableParams.sorting()|json}}
15
+ <p><strong>Filter:</strong> {{tableParams.filter()|json}}
16
+ <table class="table" ng-table="tableParams" show-filter="true">
63
17
  <tbody ng-repeat="group in $groups">
64
18
  <tr class="ng-table-group">
65
19
  <td colspan="{{$columns.length}}">
@@ -67,16 +21,23 @@
67
21
  </td>
68
22
  </tr>
69
23
  <tr ng-hide="group.$hideRows" ng-repeat="results in group.data">
70
- <td data-title="'Scenario'" sortable="scenario">
24
+ <td data-title="'Scenario'" sortable="scenario" filter="{ 'scenario': 'text' }">
71
25
  {{results.scenario}}
72
26
  </td>
73
27
  <% implementors.each do |implementor| %>
74
- <td data-title="'<%= implementor %>'" ng-class="{'passed': results.<%= implementor %>.indexOf('Fully Verified') != -1, 'partial': results.<%= implementor %>.indexOf('Partially Verified') != -1, 'failed': results.<%= implementor %>.indexOf('Failed') != -1 }" sortable="<%= implementor %>">
28
+ <td data-title="'<%= implementor %>'" ng-class="{'passed': results.<%= implementor %>.indexOf('Fully Verified') != -1, 'partial': results.<%= implementor %>.indexOf('Partially Verified') != -1, 'failed': results.<%= implementor %>.indexOf('Failed') != -1 }" sortable="<%= implementor %>" filter="{ '<%= implementor %>': 'implementor' }">
75
29
  <a href="details/{{results.slug_prefix}}-<%= implementor %>.html">{{results.<%= implementor %>}}</a>
76
30
  </td>
77
31
  <% end %>
78
32
  </tr>
79
33
  </tbody>
80
34
  </table>
35
+ <script type="text/ng-template" id="ng-table/filters/implementor.html">
36
+ <select ng-model="params.filter()[name]" name="filter-implementor">
37
+ <option value="">None</option>
38
+ <option value="Fully Verified">Fully Verified</option>
39
+ <option value="Partially Verified">Partially Verified</option>
40
+ </select>
41
+ </script>
81
42
  </body>
82
43
  </html>
@@ -0,0 +1,26 @@
1
+ var app = angular.module('main', ['ngTable']).controller('DemoCtrl', function($scope, $http, $filter, ngTableParams) {
2
+ $http.get('matrix.json').success(function(data, status, headers, config){
3
+ $scope.tableParams = new ngTableParams({
4
+ page: 1, // show first page
5
+ count: data.length // count per page
6
+ }, {
7
+ counts: [],
8
+ groupBy: 'suite',
9
+ filter: {
10
+ scenario: '' // initial filter
11
+ },
12
+ total: data.length,
13
+ getData: function($defer, params) {
14
+ var filteredData = params.filter() ?
15
+ $filter('filter')(data, params.filter()) :
16
+ data;
17
+ var orderedData = params.sorting() ?
18
+ $filter('orderBy')(filteredData, params.orderBy()) :
19
+ data;
20
+
21
+ params.total(orderedData.length);
22
+ $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
23
+ }
24
+ });
25
+ });
26
+ })
@@ -2,8 +2,8 @@
2
2
  <head>
3
3
  <meta charset="UTF-8"/>
4
4
  <link data-require="bootstrap-css@*" data-semver="3.0.0" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/>
5
- <link href="assets/pygments/<%= options[:code_style] %>.css" rel="stylesheet" type="text/css">
6
- <link href="assets/style.css" rel="stylesheet" type="text/css">
5
+ <link href="../assets/pygments/<%= options[:code_style] %>.css" rel="stylesheet" type="text/css">
6
+ <link href="../assets/style.css" rel="stylesheet" type="text/css">
7
7
  </head>
8
8
  <body>
9
9
  <div class="panel panel-<%= bootstrap_color(@challenge.status_color) %>">
@@ -0,0 +1,6 @@
1
+ <%- Polytrix.implementors.each do |implementor| -%>
2
+ <%= implementor.name %>:
3
+ <%- @challenges.select{|c| c.implementor == implementor}.each do |challenge| -%>
4
+ - [<%= challenge.source? ? 'x' : ' ' %>] <%= challenge.name %>
5
+ <% end %>
6
+ <%- end -%>
@@ -0,0 +1 @@
1
+ template 'templates/todo.md', 'todo.md'
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash -e
2
- bundle exec polytrix report code2doc java --destination=docs/code2doc/java
3
- bundle exec polytrix report code2doc python --destination=docs/code2doc/python
4
- bundle exec polytrix report code2doc ruby --destination=docs/code2doc/ruby
2
+ bundle exec polytrix generate code2doc java --destination=docs/code2doc/java
3
+ bundle exec polytrix generate code2doc python --destination=docs/code2doc/python
4
+ bundle exec polytrix generate code2doc ruby --destination=docs/code2doc/ruby
@@ -0,0 +1,7 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Polytrix.validate 'Bootstraps java and ruby, but not python', suite: 'CLI', scenario: 'bootstrap' do |challenge|
4
+ expect(challenge.result.stdout).to include('-----> Bootstrapping java')
5
+ expect(challenge.result.stdout).to include('-----> Bootstrapping ruby')
6
+ expect(challenge.result.stdout).to_not include('-----> Bootstrapping python')
7
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Polytrix.validate 'Expected output for show', suite: 'Reports', scenario: 'show' do |challenge|
4
+ expected_output = <<-eos
5
+ katas-hello_world-ruby: Fully Verified (2 of 2)
6
+ Test suite: Katas
7
+ Test scenario: hello world
8
+ Implementor: ruby
9
+ Source: sdks/ruby/challenges/hello_world.rb
10
+ Execution result:
11
+ Exit Status: 0
12
+ Stdout:
13
+ Hello, world!
14
+ Stderr:
15
+ Validations:
16
+ Hello world validator: ✓ Passed
17
+ default validator: ✓ Passed
18
+ Data from spies:
19
+ eos
20
+ cleaned_up = challenge.result.stdout.gsub(/\e\[(\d+)(;\d+)*m/, '').gsub("\r\n", "\n")
21
+ expect(cleaned_up).to include(expected_output)
22
+ end
metadata CHANGED
@@ -1,265 +1,308 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polytrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Max Lincoln
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-10-21 00:00:00.000000000 Z
12
+ date: 2014-11-18 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: thor
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - "~>"
19
+ - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0.19'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - "~>"
27
+ - - ~>
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0.19'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: logging
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - "~>"
35
+ - - ~>
32
36
  - !ruby/object:Gem::Version
33
37
  version: '1.8'
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - "~>"
43
+ - - ~>
39
44
  - !ruby/object:Gem::Version
40
45
  version: '1.8'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: mixlib-shellout
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - "~>"
51
+ - - ~>
46
52
  - !ruby/object:Gem::Version
47
53
  version: '1.3'
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - "~>"
59
+ - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: '1.3'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: buff-shell_out
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - "~>"
67
+ - - ~>
60
68
  - !ruby/object:Gem::Version
61
69
  version: '0.1'
62
70
  type: :runtime
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - "~>"
75
+ - - ~>
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0.1'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: middleware
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - "~>"
83
+ - - ~>
74
84
  - !ruby/object:Gem::Version
75
85
  version: '0.1'
76
86
  type: :runtime
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - "~>"
91
+ - - ~>
81
92
  - !ruby/object:Gem::Version
82
93
  version: '0.1'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: rspec-expectations
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - "~>"
99
+ - - ~>
88
100
  - !ruby/object:Gem::Version
89
101
  version: '3.0'
90
102
  type: :runtime
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - "~>"
107
+ - - ~>
95
108
  - !ruby/object:Gem::Version
96
109
  version: '3.0'
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: hashie
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - "~>"
115
+ - - ~>
102
116
  - !ruby/object:Gem::Version
103
117
  version: '3.0'
104
118
  type: :runtime
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - "~>"
123
+ - - ~>
109
124
  - !ruby/object:Gem::Version
110
125
  version: '3.0'
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: padrino-helpers
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
- - - "~>"
131
+ - - ~>
116
132
  - !ruby/object:Gem::Version
117
133
  version: '0.12'
118
134
  type: :runtime
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
- - - "~>"
139
+ - - ~>
123
140
  - !ruby/object:Gem::Version
124
141
  version: '0.12'
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: erubis
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
- - - "~>"
147
+ - - ~>
130
148
  - !ruby/object:Gem::Version
131
149
  version: '2.7'
132
150
  type: :runtime
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
- - - "~>"
155
+ - - ~>
137
156
  - !ruby/object:Gem::Version
138
157
  version: '2.7'
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: cause
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - "~>"
163
+ - - ~>
144
164
  - !ruby/object:Gem::Version
145
165
  version: '0.1'
146
166
  type: :runtime
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
149
170
  requirements:
150
- - - "~>"
171
+ - - ~>
151
172
  - !ruby/object:Gem::Version
152
173
  version: '0.1'
153
174
  - !ruby/object:Gem::Dependency
154
175
  name: rouge
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
- - - "~>"
179
+ - - ~>
158
180
  - !ruby/object:Gem::Version
159
181
  version: '1.7'
160
182
  type: :runtime
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
163
186
  requirements:
164
- - - "~>"
187
+ - - ~>
165
188
  - !ruby/object:Gem::Version
166
189
  version: '1.7'
167
190
  - !ruby/object:Gem::Dependency
168
191
  name: rspec
169
192
  requirement: !ruby/object:Gem::Requirement
193
+ none: false
170
194
  requirements:
171
- - - "~>"
195
+ - - ~>
172
196
  - !ruby/object:Gem::Version
173
197
  version: '3.0'
174
198
  type: :development
175
199
  prerelease: false
176
200
  version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
177
202
  requirements:
178
- - - "~>"
203
+ - - ~>
179
204
  - !ruby/object:Gem::Version
180
205
  version: '3.0'
181
206
  - !ruby/object:Gem::Dependency
182
207
  name: bundler
183
208
  requirement: !ruby/object:Gem::Requirement
209
+ none: false
184
210
  requirements:
185
- - - "~>"
211
+ - - ~>
186
212
  - !ruby/object:Gem::Version
187
213
  version: '1.5'
188
214
  type: :development
189
215
  prerelease: false
190
216
  version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
191
218
  requirements:
192
- - - "~>"
219
+ - - ~>
193
220
  - !ruby/object:Gem::Version
194
221
  version: '1.5'
195
222
  - !ruby/object:Gem::Dependency
196
223
  name: rake
197
224
  requirement: !ruby/object:Gem::Requirement
225
+ none: false
198
226
  requirements:
199
- - - ">="
227
+ - - ! '>='
200
228
  - !ruby/object:Gem::Version
201
229
  version: '0'
202
230
  type: :development
203
231
  prerelease: false
204
232
  version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
205
234
  requirements:
206
- - - ">="
235
+ - - ! '>='
207
236
  - !ruby/object:Gem::Version
208
237
  version: '0'
209
238
  - !ruby/object:Gem::Dependency
210
239
  name: aruba
211
240
  requirement: !ruby/object:Gem::Requirement
241
+ none: false
212
242
  requirements:
213
- - - "~>"
243
+ - - ~>
214
244
  - !ruby/object:Gem::Version
215
245
  version: '0.5'
216
246
  type: :development
217
247
  prerelease: false
218
248
  version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
219
250
  requirements:
220
- - - "~>"
251
+ - - ~>
221
252
  - !ruby/object:Gem::Version
222
253
  version: '0.5'
223
254
  - !ruby/object:Gem::Dependency
224
255
  name: rubocop
225
256
  requirement: !ruby/object:Gem::Requirement
257
+ none: false
226
258
  requirements:
227
- - - "~>"
259
+ - - ~>
228
260
  - !ruby/object:Gem::Version
229
261
  version: '0.18'
262
+ - - <=
263
+ - !ruby/object:Gem::Version
264
+ version: '0.27'
230
265
  type: :development
231
266
  prerelease: false
232
267
  version_requirements: !ruby/object:Gem::Requirement
268
+ none: false
233
269
  requirements:
234
- - - "~>"
270
+ - - ~>
235
271
  - !ruby/object:Gem::Version
236
272
  version: '0.18'
273
+ - - <=
274
+ - !ruby/object:Gem::Version
275
+ version: '0.27'
237
276
  - !ruby/object:Gem::Dependency
238
277
  name: rubocop-rspec
239
278
  requirement: !ruby/object:Gem::Requirement
279
+ none: false
240
280
  requirements:
241
- - - "~>"
281
+ - - ~>
242
282
  - !ruby/object:Gem::Version
243
283
  version: '1.2'
244
284
  type: :development
245
285
  prerelease: false
246
286
  version_requirements: !ruby/object:Gem::Requirement
287
+ none: false
247
288
  requirements:
248
- - - "~>"
289
+ - - ~>
249
290
  - !ruby/object:Gem::Version
250
291
  version: '1.2'
251
292
  - !ruby/object:Gem::Dependency
252
293
  name: fabrication
253
294
  requirement: !ruby/object:Gem::Requirement
295
+ none: false
254
296
  requirements:
255
- - - "~>"
297
+ - - ~>
256
298
  - !ruby/object:Gem::Version
257
299
  version: '2.11'
258
300
  type: :development
259
301
  prerelease: false
260
302
  version_requirements: !ruby/object:Gem::Requirement
303
+ none: false
261
304
  requirements:
262
- - - "~>"
305
+ - - ~>
263
306
  - !ruby/object:Gem::Version
264
307
  version: '2.11'
265
308
  description: A polyglot test runner for sample code
@@ -270,12 +313,13 @@ executables:
270
313
  extensions: []
271
314
  extra_rdoc_files: []
272
315
  files:
273
- - ".gitignore"
274
- - ".groc.json"
275
- - ".rspec"
276
- - ".rubocop-todo.yml"
277
- - ".rubocop.yml"
278
- - ".travis.yml"
316
+ - .gitignore
317
+ - .gitmodules
318
+ - .groc.json
319
+ - .rspec
320
+ - .rubocop-todo.yml
321
+ - .rubocop.yml
322
+ - .travis.yml
279
323
  - Gemfile
280
324
  - README.md
281
325
  - Rakefile
@@ -306,10 +350,11 @@ files:
306
350
  - lib/polytrix/color.rb
307
351
  - lib/polytrix/command.rb
308
352
  - lib/polytrix/command/action.rb
353
+ - lib/polytrix/command/generate.rb
354
+ - lib/polytrix/command/generators/code2doc.rb
355
+ - lib/polytrix/command/generators/dashboard.rb
356
+ - lib/polytrix/command/generators/documentation.rb
309
357
  - lib/polytrix/command/list.rb
310
- - lib/polytrix/command/report.rb
311
- - lib/polytrix/command/reports/code2doc.rb
312
- - lib/polytrix/command/reports/dashboard.rb
313
358
  - lib/polytrix/command/show.rb
314
359
  - lib/polytrix/command/test.rb
315
360
  - lib/polytrix/configuration.rb
@@ -343,7 +388,6 @@ files:
343
388
  - lib/polytrix/validator_registry.rb
344
389
  - lib/polytrix/version.rb
345
390
  - polytrix.gemspec
346
- - polytrix.rb
347
391
  - polytrix.yml
348
392
  - resources/assets/pygments/autumn.css
349
393
  - resources/assets/pygments/borland.css
@@ -367,8 +411,11 @@ files:
367
411
  - resources/assets/pygments/zenburn.css
368
412
  - resources/assets/style.css
369
413
  - resources/code_sample.tt
370
- - resources/templates/dashboard/files/dashboard.html.tt
371
- - resources/templates/dashboard/templates/_test_report.html.tt
414
+ - resources/generators/dashboard/files/dashboard.html.tt
415
+ - resources/generators/dashboard/files/dashboard.js
416
+ - resources/generators/dashboard/templates/_test_report.html.tt
417
+ - resources/generators/todo/templates/todo.md.tt
418
+ - resources/generators/todo/todo_template.rb
372
419
  - samples/.gitignore
373
420
  - samples/_markdown.md
374
421
  - samples/bootstrap.sh
@@ -381,9 +428,7 @@ files:
381
428
  - samples/docs/samples/code2doc/python/katas-quine-python.md
382
429
  - samples/docs/samples/code2doc/ruby/katas-hello_world-ruby.md
383
430
  - samples/exec.sh
384
- - samples/polytrix.rb
385
431
  - samples/polytrix.yml
386
- - samples/polytrix_cli.sh
387
432
  - samples/scripts/bootstrap
388
433
  - samples/sdks/java/.gitignore
389
434
  - samples/sdks/java/build.gradle
@@ -425,29 +470,38 @@ files:
425
470
  - spec/polytrix_spec.rb
426
471
  - spec/spec_helper.rb
427
472
  - spec/thor_spy.rb
473
+ - tests/polytrix/bootstrap_validations.rb
474
+ - tests/polytrix/show_validations.rb
428
475
  homepage: ''
429
476
  licenses:
430
477
  - MIT
431
- metadata: {}
432
478
  post_install_message:
433
479
  rdoc_options: []
434
480
  require_paths:
435
481
  - lib
436
482
  required_ruby_version: !ruby/object:Gem::Requirement
483
+ none: false
437
484
  requirements:
438
- - - ">="
485
+ - - ! '>='
439
486
  - !ruby/object:Gem::Version
440
487
  version: '0'
488
+ segments:
489
+ - 0
490
+ hash: 1316121986628249594
441
491
  required_rubygems_version: !ruby/object:Gem::Requirement
492
+ none: false
442
493
  requirements:
443
- - - ">="
494
+ - - ! '>='
444
495
  - !ruby/object:Gem::Version
445
496
  version: '0'
497
+ segments:
498
+ - 0
499
+ hash: 1316121986628249594
446
500
  requirements: []
447
501
  rubyforge_project:
448
- rubygems_version: 2.2.0
502
+ rubygems_version: 1.8.23.2
449
503
  signing_key:
450
- specification_version: 4
504
+ specification_version: 3
451
505
  summary: A polyglot test runner for sample code
452
506
  test_files:
453
507
  - features/bootstrapping.feature
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 1e1a7bfe5588d1217cd43593060f0ca6d2ffc5ef
4
- data.tar.gz: fdb98734b7873355e92d8c591c18d0f073686af0
5
- SHA512:
6
- metadata.gz: bd36979202c65e3dc9bf98b417b31abf3b57c2faa5e01cacde82a0852ac58ca9034722f43fa7194e5549ceda53b361b879c016816864caf24feee7e3ef88e9b2
7
- data.tar.gz: 81c8f8705e16e86eea973f2ef8bbc0e9dec3f0b2cb3fd50668e97452d75c7c5b73477f252dcc679e63ed9b003dc6baa9d978fbfd94f1b65ba40af6fb0e6b9c81
@@ -1,17 +0,0 @@
1
- module Polytrix
2
- module Command
3
- class Report < Thor
4
- namespace :report
5
-
6
- autoload :Dashboard, 'polytrix/command/reports/dashboard'
7
- register Dashboard, 'dashboard', 'dashboard', 'Create a report dashboard'
8
- tasks['dashboard'].options = Dashboard.class_options
9
-
10
- autoload :Code2Doc, 'polytrix/command/reports/code2doc'
11
- register Code2Doc, 'code2doc', 'code2doc [INSTANCE|REGEXP|all]', 'Generates documenation from sample code for one or more scenarios'
12
- tasks['code2doc'].options = Code2Doc.class_options
13
-
14
- # FIXME: Help shows unwanted usage, e.g. "polytrix polytrix:command:report:code2_doc"
15
- end
16
- end
17
- end
@@ -1 +0,0 @@
1
- Polytrix.configuration.default_doc_template = 'doc-src/_markdown.md'
@@ -1,15 +0,0 @@
1
- require 'polytrix'
2
-
3
- Polytrix.validate 'Hello world validator', suite: 'Katas', scenario: 'hello world' do |challenge|
4
- expect(challenge.result.stdout).to eq "Hello, world!\n"
5
- end
6
-
7
- Polytrix.validate 'Quine output matches source code', suite: 'Katas', scenario: 'quine' do |challenge|
8
- expect(challenge.result.stdout).to eq(challenge.source)
9
- end
10
-
11
- Polytrix.validate 'default validator' do |challenge|
12
- expect(challenge.result.exitstatus).to eq(0)
13
- expect(challenge.result.stderr).to be_empty
14
- expect(challenge.result.stdout).to end_with "\n"
15
- end
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env bash -e
2
- bundle exec polytrix bootstrap
3
- bundle exec polytrix exec sdks/ruby/challenges/*.rb --code2doc --target-dir=docs/ruby/
4
- # bundle exec polytrix test
5
- bundle exec polytrix report summary
6
- bundle exec polytrix report summary --format=markdown
7
- bundle exec polytrix report summary --format=yaml