rast 0.1.2.pre → 0.3.0.pre
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 +4 -4
- data/CHANGELOG.md +5 -2
- data/Gemfile +6 -0
- data/Gemfile.lock +25 -7
- data/README.md +13 -14
- data/examples/arithmetic_module.rb +8 -0
- data/examples/factory_example.rb +11 -0
- data/examples/phone.rb +6 -0
- data/lib/rast/rast_spec.rb +4 -2
- data/lib/rast/rules/rule_evaluator.rb +3 -1
- data/lib/rast/rules/rule_validator.rb +1 -1
- data/lib/rast/spec_dsl.rb +9 -3
- data/lib/rast.rb +8 -7
- data/rast.gemspec +2 -2
- metadata +6 -4
- data/Guardfile +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8391dc80e151d193090188d90cd08e7e596056275fad1d10fe24c47cc8a43cd9
|
4
|
+
data.tar.gz: abbc0bfc9e056de88bab998f3c5ebb36234650a884d650c2d96c00efd113ef9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37ab3933ed59e5d347faceeba789e59b6af71fcb7384a035db7b9a6d1c67371e507ad74c4f19ce5b04f77074ab5a887b2151da267b02e29a3e6519ee02ad1ec1
|
7
|
+
data.tar.gz: be8bfaf8cebaceb398e74d2902a29b3ac78c131445ac1850fc3b1c39dfbabd986c017e353fd3728b95df395493ef35ac77e02193acf4889435d43770b59eff4f
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
-
|
4
|
-
0.
|
3
|
+
|
4
|
+
- 0.3.0.pre - Support factory methods in execute block
|
5
|
+
- 0.2.0.pre - Support module subjects
|
6
|
+
- 0.1.2.pre - Fixed exclusions
|
7
|
+
- 0.1.1.pre - Pre release version compatible with Ruby 2.0.0-p247
|
data/Gemfile
CHANGED
@@ -5,6 +5,12 @@ source 'https://rubygems.org'
|
|
5
5
|
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
6
6
|
|
7
7
|
group :test do
|
8
|
+
gem 'factory_girl', '~> 4.7'
|
9
|
+
|
10
|
+
gem 'listen', '>= 3.0.8'
|
11
|
+
gem 'lumberjack', '~> 1.0', '>= 1.0.13'
|
12
|
+
gem 'rb-inotify', '~> 0.9.10'
|
13
|
+
|
8
14
|
gem 'guard-rspec', require: false
|
9
15
|
gem 'pry'
|
10
16
|
gem 'pry-nav'
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,17 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
+
activesupport (4.2.11.1)
|
5
|
+
i18n (~> 0.7)
|
6
|
+
minitest (~> 5.1)
|
7
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
8
|
+
tzinfo (~> 1.1)
|
4
9
|
coderay (1.1.2)
|
10
|
+
concurrent-ruby (1.1.6)
|
5
11
|
diff-lcs (1.3)
|
6
12
|
docile (1.1.5)
|
13
|
+
factory_girl (4.9.0)
|
14
|
+
activesupport (>= 3.0.0)
|
7
15
|
ffi (1.12.2)
|
8
16
|
formatador (0.2.5)
|
9
17
|
guard (2.16.2)
|
@@ -20,11 +28,14 @@ GEM
|
|
20
28
|
guard (~> 2.1)
|
21
29
|
guard-compat (~> 1.1)
|
22
30
|
rspec (>= 2.99.0, < 4.0)
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
i18n (0.9.5)
|
32
|
+
concurrent-ruby (~> 1.0)
|
33
|
+
listen (3.0.8)
|
34
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
35
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
36
|
+
lumberjack (1.0.13)
|
27
37
|
method_source (0.9.2)
|
38
|
+
minitest (5.12.0)
|
28
39
|
multi_json (1.14.1)
|
29
40
|
nenv (0.3.0)
|
30
41
|
notiffany (0.1.3)
|
@@ -36,8 +47,8 @@ GEM
|
|
36
47
|
pry-nav (0.3.0)
|
37
48
|
pry (>= 0.9.10, < 0.13.0)
|
38
49
|
rb-fsevent (0.10.3)
|
39
|
-
rb-inotify (0.10
|
40
|
-
ffi (
|
50
|
+
rb-inotify (0.9.10)
|
51
|
+
ffi (>= 0.5.0, < 2)
|
41
52
|
rspec (3.9.0)
|
42
53
|
rspec-core (~> 3.9.0)
|
43
54
|
rspec-expectations (~> 3.9.0)
|
@@ -58,16 +69,23 @@ GEM
|
|
58
69
|
simplecov-html (~> 0.8.0)
|
59
70
|
simplecov-html (0.8.0)
|
60
71
|
thor (1.0.1)
|
72
|
+
thread_safe (0.3.6)
|
73
|
+
tzinfo (1.2.7)
|
74
|
+
thread_safe (~> 0.1)
|
61
75
|
|
62
76
|
PLATFORMS
|
63
77
|
ruby
|
64
78
|
|
65
79
|
DEPENDENCIES
|
80
|
+
factory_girl (~> 4.7)
|
66
81
|
guard-rspec
|
82
|
+
listen (>= 3.0.8)
|
83
|
+
lumberjack (~> 1.0, >= 1.0.13)
|
67
84
|
pry
|
68
85
|
pry-nav
|
86
|
+
rb-inotify (~> 0.9.10)
|
69
87
|
rspec
|
70
88
|
simplecov (~> 0.8.2)
|
71
89
|
|
72
90
|
BUNDLED WITH
|
73
|
-
1.17.
|
91
|
+
1.17.3
|
data/README.md
CHANGED
@@ -3,23 +3,22 @@ RSpec All Scenario Testing
|
|
3
3
|
|
4
4
|
## Definition of terms
|
5
5
|
|
6
|
-
spec - as defined in the yaml file, the individual elements under `specs`
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
rule - set of outcome paired with rule clause.
|
15
|
-
exemption/exclusions - rule defining variable combinations to be excluded from the test.
|
16
|
-
|
17
|
-
outcome - the left portion of a rule e.g. `true: true&true`
|
18
|
-
|
19
|
-
clause - the right portion of a rule
|
6
|
+
`spec` - as defined in the yaml file, the individual elements under `specs`
|
7
|
+
`scenario` - a specific combination of tokens from vars, it can uniquely identify a fixture.
|
8
|
+
`fixture` - instance of a spec, containing a scenario, reference back to the spec, and the expected result for the given scenario.
|
9
|
+
`variables` - raw list of variables to be combined into multiple fixtures.
|
10
|
+
`rule` - set of outcome paired with rule clause.
|
11
|
+
`exemption/exclusions` - rule defining variable combinations to be excluded from the test.
|
12
|
+
`outcome` - the left portion of a rule e.g. `true: true&true`
|
13
|
+
`clause` - the right portion of a rule
|
20
14
|
|
21
15
|
|
22
16
|
##
|
23
17
|
|
24
18
|
When running the tests, the execution starts at the spec file, then invoking the
|
25
19
|
DSL. The DSL will then invoke the parameter generator to generate the scenarios.
|
20
|
+
|
21
|
+
## Adding new features
|
22
|
+
|
23
|
+
- Increment the .gemspec
|
24
|
+
- Modify the CHANGELOG.md
|
data/examples/phone.rb
ADDED
data/lib/rast/rast_spec.rb
CHANGED
@@ -20,7 +20,7 @@ class RastSpec
|
|
20
20
|
@pair[pair_config.keys.first.to_s] = pair_config.values.first.to_s
|
21
21
|
|
22
22
|
array = [@pair.to_a.first.reverse]
|
23
|
-
@pair_reversed = {
|
23
|
+
@pair_reversed = { array.first.to_s.to_sym => array.last }
|
24
24
|
self
|
25
25
|
end
|
26
26
|
|
@@ -28,7 +28,9 @@ class RastSpec
|
|
28
28
|
@converters = {}
|
29
29
|
|
30
30
|
@variables.keys.each_with_index do |key, index|
|
31
|
-
@variables[key].each
|
31
|
+
@variables[key].each do |element|
|
32
|
+
@converters[element.to_s] = converters[index]
|
33
|
+
end
|
32
34
|
end
|
33
35
|
|
34
36
|
self
|
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'rast/rules/operator'
|
4
4
|
require 'rast/rules/logic_helper'
|
5
5
|
require 'rast/converters/int_converter'
|
6
|
+
require 'rast/converters/float_converter'
|
6
7
|
require 'rast/converters/bool_converter'
|
7
8
|
require 'rast/converters/str_converter'
|
8
9
|
|
@@ -19,7 +20,7 @@ class RuleEvaluator
|
|
19
20
|
|
20
21
|
# the "false" part of the "false[1]"
|
21
22
|
RE_TOKEN_BODY = /^.+(?=\[)/.freeze
|
22
|
-
RE_TOKENS = /([!|)(&])|([a-zA-Z\s0-9]+\[\d\])/.freeze
|
23
|
+
RE_TOKENS = /([!|)(&])|([a-zA-Z\s0-9-]+\[\d\])/.freeze
|
23
24
|
|
24
25
|
def self.operator_from_symbol(symbol: nil)
|
25
26
|
OPERATORS.find { |operator| operator.symbol == symbol }
|
@@ -27,6 +28,7 @@ class RuleEvaluator
|
|
27
28
|
|
28
29
|
DEFAULT_CONVERT_HASH = {
|
29
30
|
Integer => IntConverter.new,
|
31
|
+
Float => FloatConverter.new,
|
30
32
|
TrueClass => BoolConverter.new,
|
31
33
|
FalseClass => BoolConverter.new,
|
32
34
|
String => StrConverter.new
|
@@ -32,7 +32,7 @@ class RuleValidator
|
|
32
32
|
matched_outputs = []
|
33
33
|
match_count = 0
|
34
34
|
|
35
|
-
rule_result.map { |result| result == 'true' }.each_with_index do |result, i|
|
35
|
+
rule_result.map { |result| result.to_s == 'true' }.each_with_index do |result, i|
|
36
36
|
next unless result
|
37
37
|
|
38
38
|
match_count += 1
|
data/lib/rast/spec_dsl.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'factory_girl'
|
3
4
|
require 'rast/parameter_generator'
|
4
5
|
|
5
6
|
# Main DSL. This is the entry point of the test when running a spec.
|
6
7
|
class SpecDSL
|
7
|
-
|
8
|
-
|
8
|
+
include FactoryGirl::Syntax::Methods
|
9
|
+
|
10
|
+
attr_accessor :subject, :rspec_methods, :execute_block,
|
11
|
+
:prepare_block, :transients, :outcomes, :fixtures
|
9
12
|
|
10
13
|
def initialize(subject: nil, fixtures: [], &block)
|
11
14
|
@subject = subject
|
@@ -46,7 +49,10 @@ class SpecDSL
|
|
46
49
|
def execute(&block)
|
47
50
|
@execute_block = block
|
48
51
|
|
49
|
-
@fixtures.sort_by!
|
52
|
+
@fixtures.sort_by! do |fixture|
|
53
|
+
fixture[:expected_outcome] + fixture[:scenario].to_s
|
54
|
+
end
|
55
|
+
|
50
56
|
generate_rspecs
|
51
57
|
end
|
52
58
|
|
data/lib/rast.rb
CHANGED
@@ -15,13 +15,14 @@ class Rast
|
|
15
15
|
# Arguments:
|
16
16
|
# language: (String)
|
17
17
|
|
18
|
-
|
19
|
-
|
20
18
|
alias global_spec spec
|
21
19
|
|
22
|
-
def initialize(
|
23
|
-
@
|
24
|
-
|
20
|
+
def initialize(rasted_subject, &block)
|
21
|
+
@subject = if rasted_subject.class == Module
|
22
|
+
Class.new { extend rasted_subject }
|
23
|
+
else
|
24
|
+
rasted_subject.new
|
25
|
+
end
|
25
26
|
|
26
27
|
spec_path = caller[2][/spec.*?\.rb/]
|
27
28
|
yaml_path = spec_path.gsub(/(\w+).rb/, 'rast/\\1.yml')
|
@@ -41,6 +42,6 @@ class Rast
|
|
41
42
|
end
|
42
43
|
|
43
44
|
# DSL Entry Point
|
44
|
-
def rast(
|
45
|
-
Rast.new(
|
45
|
+
def rast(rasted_subject, &block)
|
46
|
+
Rast.new(rasted_subject, &block)
|
46
47
|
end
|
data/rast.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'rast'
|
5
|
-
spec.version = '0.
|
5
|
+
spec.version = '0.3.0.pre'
|
6
6
|
spec.authors = ['Royce Remulla']
|
7
7
|
spec.email = ['royce.com@gmail.com']
|
8
8
|
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
15
15
|
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
16
16
|
# spec.metadata['homepage_uri'] = spec.homepage
|
17
17
|
# spec.metadata['source_code_uri'] = "TODO: Put your gem's public repo URL here."
|
18
|
-
spec.metadata['changelog_uri'] = 'https://github.com/roycetech/rast/CHANGELOG.md'
|
18
|
+
spec.metadata['changelog_uri'] = 'https://github.com/roycetech/rast/blob/feature/ruby-2.0.0-support/CHANGELOG.md'
|
19
19
|
|
20
20
|
spec.files = Dir.chdir(File.expand_path('.')) do
|
21
21
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rast
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Royce Remulla
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Extends RSpec functionality by using the catch-all-scenario testing (CAST)
|
14
14
|
principle.
|
@@ -24,9 +24,11 @@ files:
|
|
24
24
|
- CHANGELOG.md
|
25
25
|
- Gemfile
|
26
26
|
- Gemfile.lock
|
27
|
-
- Guardfile
|
28
27
|
- README.md
|
28
|
+
- examples/arithmetic_module.rb
|
29
|
+
- examples/factory_example.rb
|
29
30
|
- examples/logic_checker.rb
|
31
|
+
- examples/phone.rb
|
30
32
|
- examples/prime_number.rb
|
31
33
|
- examples/recruiter.rb
|
32
34
|
- examples/worker.rb
|
@@ -51,7 +53,7 @@ homepage: https://github.com/roycetech/rast
|
|
51
53
|
licenses:
|
52
54
|
- MIT
|
53
55
|
metadata:
|
54
|
-
changelog_uri: https://github.com/roycetech/rast/CHANGELOG.md
|
56
|
+
changelog_uri: https://github.com/roycetech/rast/blob/feature/ruby-2.0.0-support/CHANGELOG.md
|
55
57
|
post_install_message:
|
56
58
|
rdoc_options: []
|
57
59
|
require_paths:
|
data/Guardfile
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# A sample Guardfile
|
4
|
-
# More info at https://github.com/guard/guard#readme
|
5
|
-
|
6
|
-
## Uncomment and set this to only include directories you want to watch
|
7
|
-
# directories %w(app lib config test spec features) \
|
8
|
-
# .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
9
|
-
|
10
|
-
## Note: if you are using the `directories` clause above and you are not
|
11
|
-
## watching the project directory ('.'), then you will want to move
|
12
|
-
## the Guardfile to a watched dir and symlink it back, e.g.
|
13
|
-
#
|
14
|
-
# $ mkdir config
|
15
|
-
# $ mv Guardfile config/
|
16
|
-
# $ ln -s config/Guardfile .
|
17
|
-
#
|
18
|
-
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
19
|
-
|
20
|
-
# guard :rubocop do
|
21
|
-
# watch(%r{.+\.rb$})
|
22
|
-
# watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
|
23
|
-
# end
|
24
|
-
|
25
|
-
guard :rspec, cmd: 'bundle exec rspec -fd' do
|
26
|
-
require 'guard/rspec/dsl'
|
27
|
-
|
28
|
-
Guard::RSpec::Dsl.new(self)
|
29
|
-
|
30
|
-
watch(%r{^spec/.+_spec\.rb$})
|
31
|
-
# watch(%r{^spec\/.*?\/(.+_spec\.)yml$}) { |m| "#{m}.rb" }
|
32
|
-
watch(%r{^lib/(.+)\.rb$}) { |_m| 'spec/examples/prime_number_spec.rb' }
|
33
|
-
# watch(%r{^lib/(.+)\.rb$}) { |_m| 'spec/examples/logic_checker_spec.rb' }
|
34
|
-
# watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
35
|
-
watch('spec/spec_helper.rb') { 'spec' }
|
36
|
-
end
|