geo_pattern 1.3.2 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +58 -0
- data/.simplecov +25 -0
- data/.travis.yml +12 -0
- data/Gemfile +3 -1
- data/README.md +125 -23
- data/Rakefile +72 -9
- data/fixtures/generated_patterns/chevrons.svg +1 -0
- data/fixtures/generated_patterns/concentric_circles.svg +1 -0
- data/fixtures/generated_patterns/diamonds.svg +1 -0
- data/fixtures/generated_patterns/diamonds_with_base_color.svg +1 -0
- data/fixtures/generated_patterns/diamonds_with_color.svg +1 -0
- data/fixtures/generated_patterns/hexagons.svg +1 -0
- data/fixtures/generated_patterns/mosaic_squares.svg +1 -0
- data/fixtures/generated_patterns/nested_squares.svg +1 -0
- data/fixtures/generated_patterns/octagons.svg +1 -0
- data/fixtures/generated_patterns/overlapping_circles.svg +1 -0
- data/fixtures/generated_patterns/overlapping_rings.svg +1 -0
- data/fixtures/generated_patterns/plaid.svg +1 -0
- data/fixtures/generated_patterns/plus_signs.svg +1 -0
- data/fixtures/generated_patterns/sine_waves.svg +1 -0
- data/fixtures/generated_patterns/squares.svg +1 -0
- data/fixtures/generated_patterns/tessellation.svg +1 -0
- data/fixtures/generated_patterns/triangles.svg +1 -0
- data/fixtures/generated_patterns/xes.svg +1 -0
- data/geo_pattern.gemspec +8 -2
- data/lib/geo_pattern.rb +42 -20
- data/lib/geo_pattern/background.rb +25 -0
- data/lib/geo_pattern/background_generators/solid_generator.rb +52 -0
- data/lib/geo_pattern/color.rb +25 -0
- data/lib/geo_pattern/color_generators/base_color_generator.rb +55 -0
- data/lib/geo_pattern/color_generators/simple_generator.rb +27 -0
- data/lib/geo_pattern/color_preset.rb +26 -0
- data/lib/geo_pattern/errors.rb +7 -0
- data/lib/geo_pattern/geo_pattern_task.rb +59 -0
- data/lib/geo_pattern/helpers.rb +47 -0
- data/lib/geo_pattern/pattern.rb +84 -0
- data/lib/geo_pattern/pattern_generator.rb +33 -82
- data/lib/geo_pattern/pattern_helpers.rb +31 -2
- data/lib/geo_pattern/pattern_preset.rb +23 -0
- data/lib/geo_pattern/pattern_sieve.rb +36 -0
- data/lib/geo_pattern/pattern_store.rb +63 -0
- data/lib/geo_pattern/pattern_validator.rb +27 -0
- data/lib/geo_pattern/rake_task.rb +109 -0
- data/lib/geo_pattern/roles/comparable_metadata.rb +35 -0
- data/lib/geo_pattern/roles/named_generator.rb +13 -0
- data/lib/geo_pattern/seed.rb +21 -0
- data/lib/geo_pattern/structure.rb +25 -0
- data/lib/geo_pattern/structure_generators/base_generator.rb +85 -0
- data/lib/geo_pattern/structure_generators/chevrons_generator.rb +55 -0
- data/lib/geo_pattern/structure_generators/concentric_circles_generator.rb +56 -0
- data/lib/geo_pattern/structure_generators/diamonds_generator.rb +66 -0
- data/lib/geo_pattern/structure_generators/hexagons_generator.rb +67 -0
- data/lib/geo_pattern/structure_generators/mosaic_squares_generator.rb +85 -0
- data/lib/geo_pattern/structure_generators/nested_squares_generator.rb +60 -0
- data/lib/geo_pattern/structure_generators/octagons_generator.rb +44 -0
- data/lib/geo_pattern/structure_generators/overlapping_circles_generator.rb +55 -0
- data/lib/geo_pattern/structure_generators/overlapping_rings_generator.rb +55 -0
- data/lib/geo_pattern/structure_generators/plaid_generator.rb +55 -0
- data/lib/geo_pattern/structure_generators/plus_signs_generator.rb +62 -0
- data/lib/geo_pattern/structure_generators/sine_waves_generator.rb +43 -0
- data/lib/geo_pattern/structure_generators/squares_generator.rb +36 -0
- data/lib/geo_pattern/structure_generators/tessellation_generator.rb +103 -0
- data/lib/geo_pattern/structure_generators/triangles_generator.rb +61 -0
- data/lib/geo_pattern/structure_generators/xes_generator.rb +67 -0
- data/lib/geo_pattern/svg_image.rb +101 -0
- data/lib/geo_pattern/version.rb +1 -1
- data/script/bootstrap +30 -0
- data/script/console +8 -0
- data/script/test +21 -0
- data/spec/background_generators/solid_generator_spec.rb +50 -0
- data/spec/background_spec.rb +25 -0
- data/spec/color_generators/base_color_generator_spec.rb +31 -0
- data/spec/color_generators/simple_generator_spec.rb +12 -0
- data/spec/color_preset_spec.rb +53 -0
- data/spec/color_spec.rb +15 -0
- data/spec/geo_pattern_spec.rb +95 -24
- data/spec/helpers_spec.rb +65 -0
- data/spec/pattern_preset_spec.rb +41 -0
- data/spec/pattern_sieve_spec.rb +66 -0
- data/spec/pattern_spec.rb +72 -0
- data/spec/pattern_store_spec.rb +47 -0
- data/spec/pattern_validator_spec.rb +28 -0
- data/spec/seed_spec.rb +14 -0
- data/spec/spec_helper.rb +1 -6
- data/spec/structure_generators/chevrons_generator_spec.rb +5 -0
- data/spec/structure_generators/concentric_circles_generator_spec.rb +5 -0
- data/spec/structure_generators/diamonds_generator_spec.rb +5 -0
- data/spec/structure_generators/hexagons_generator_spec.rb +5 -0
- data/spec/structure_generators/mosaic_squares_generator_spec.rb +5 -0
- data/spec/structure_generators/nested_squares_generator_spec.rb +5 -0
- data/spec/structure_generators/octagons_generator_spec.rb +5 -0
- data/spec/structure_generators/overlapping_circles_generator_spec.rb +5 -0
- data/spec/structure_generators/overlapping_rings_generator_spec.rb +5 -0
- data/spec/structure_generators/plaid_generator_spec.rb +5 -0
- data/spec/structure_generators/plus_signs_generator_spec.rb +5 -0
- data/spec/structure_generators/sine_waves_generator_spec.rb +5 -0
- data/spec/structure_generators/squares_generator_spec.rb +5 -0
- data/spec/structure_generators/tessellation_generator_spec.rb +5 -0
- data/spec/structure_generators/triangles_generator_spec.rb +5 -0
- data/spec/structure_generators/xes_generator_spec.rb +5 -0
- data/spec/structure_spec.rb +38 -0
- data/spec/support/helpers/fixtures.rb +12 -0
- data/spec/support/kernel.rb +40 -0
- data/spec/support/matchers/image.rb +17 -0
- data/spec/support/matchers/name.rb +15 -0
- data/spec/support/rspec.rb +1 -1
- data/spec/support/shared_examples/generator.rb +46 -0
- data/spec/support/shared_examples/pattern.rb +31 -0
- data/spec/support/shared_examples/pattern_name.rb +7 -0
- data/spec/support/shared_examples/structure.rb +48 -0
- data/spec/svg_spec.rb +3 -3
- metadata +141 -25
- data/lib/geo_pattern/pattern/base_pattern.rb +0 -47
- data/lib/geo_pattern/pattern/chevron_pattern.rb +0 -45
- data/lib/geo_pattern/pattern/concentric_circles_pattern.rb +0 -47
- data/lib/geo_pattern/pattern/diamond_pattern.rb +0 -56
- data/lib/geo_pattern/pattern/hexagon_pattern.rb +0 -57
- data/lib/geo_pattern/pattern/mosaic_squares_pattern.rb +0 -76
- data/lib/geo_pattern/pattern/nested_squares_pattern.rb +0 -51
- data/lib/geo_pattern/pattern/octagon_pattern.rb +0 -35
- data/lib/geo_pattern/pattern/overlapping_circles_pattern.rb +0 -46
- data/lib/geo_pattern/pattern/overlapping_rings_pattern.rb +0 -46
- data/lib/geo_pattern/pattern/plaid_pattern.rb +0 -49
- data/lib/geo_pattern/pattern/plus_sign_pattern.rb +0 -53
- data/lib/geo_pattern/pattern/sine_wave_pattern.rb +0 -36
- data/lib/geo_pattern/pattern/square_pattern.rb +0 -27
- data/lib/geo_pattern/pattern/tessellation_pattern.rb +0 -93
- data/lib/geo_pattern/pattern/triangle_pattern.rb +0 -51
- data/lib/geo_pattern/pattern/xes_pattern.rb +0 -58
- data/lib/geo_pattern/svg.rb +0 -77
- data/spec/support/helpers.rb +0 -34
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe PatternValidator do
|
4
|
+
subject(:validator) { PatternValidator.new(store) }
|
5
|
+
let(:store) { instance_double('GeoPattern::PatternStore') }
|
6
|
+
let(:patterns) { [] }
|
7
|
+
|
8
|
+
# Minimum valid object test
|
9
|
+
it { expect(validator).not_to be_nil }
|
10
|
+
|
11
|
+
describe '#validate' do
|
12
|
+
context 'when valid pattern is validated' do
|
13
|
+
before :each do
|
14
|
+
allow(store).to receive(:known?).with('pattern1').and_return(true)
|
15
|
+
end
|
16
|
+
|
17
|
+
it { expect { validator.validate(%w(pattern1)) }.not_to raise_error }
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when invalid pattern is validated' do
|
21
|
+
before :each do
|
22
|
+
allow(store).to receive(:known?).with('pattern1').and_return(false)
|
23
|
+
end
|
24
|
+
|
25
|
+
it { expect { validator.validate(%w(pattern1)) }.to raise_error InvalidPatternError }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/seed_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Seed do
|
4
|
+
subject(:seed) { Seed.new(input) }
|
5
|
+
let(:input) { 'string' }
|
6
|
+
|
7
|
+
it { expect(seed).not_to be_nil }
|
8
|
+
|
9
|
+
describe '#[]' do
|
10
|
+
context 'when use an integer' do
|
11
|
+
it { expect(seed[1]).to be_kind_of String }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,13 +11,8 @@ Bundler.require :default, :test, :development
|
|
11
11
|
|
12
12
|
require 'geo_pattern'
|
13
13
|
|
14
|
-
# Make some helpers available
|
15
|
-
include GeoPattern::Helpers
|
16
|
-
|
17
14
|
# Loading support files
|
18
|
-
|
19
|
-
require_files_matching_pattern ::File.expand_path('../support/*.rb', __FILE__)
|
20
|
-
require_files_matching_pattern ::File.expand_path('../shared_examples/*.rb', __FILE__)
|
15
|
+
GeoPattern::Helpers.require_files_matching_pattern ::File.expand_path('../support/**/*.rb', __FILE__)
|
21
16
|
|
22
17
|
# No need to add the namespace to every class tested
|
23
18
|
include GeoPattern
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Structure do
|
4
|
+
subject(:metadata) { described_class.new(image: svg_image, preset: preset, generator: generator, name: name) }
|
5
|
+
|
6
|
+
let(:svg_image) { instance_double('GeoPattern::SvgImage') }
|
7
|
+
let(:svg_image_content) { fixtures_path('generated_patterns/sine_waves.svg').read.chomp }
|
8
|
+
let(:preset) { instance_double('GeoPattern::PatternPreset') }
|
9
|
+
let(:generator) { stub_const('GeoPattern::StructureGenerators::ChevronGenerator', Class.new) }
|
10
|
+
|
11
|
+
let(:name) { :chevron }
|
12
|
+
let(:fill_color_dark) { '#222' }
|
13
|
+
let(:fill_color_light) { '#ddd' }
|
14
|
+
let(:stroke_color) { '#000' }
|
15
|
+
let(:stroke_opacity) { 0.02 }
|
16
|
+
let(:opacity_min) { 0.02 }
|
17
|
+
let(:opacity_max) { 0.15 }
|
18
|
+
|
19
|
+
it { is_expected.not_to be_nil }
|
20
|
+
|
21
|
+
before :each do
|
22
|
+
allow(preset).to receive(:fill_color_dark).and_return(fill_color_dark)
|
23
|
+
allow(preset).to receive(:fill_color_light).and_return(fill_color_light)
|
24
|
+
allow(preset).to receive(:stroke_color).and_return(stroke_color)
|
25
|
+
allow(preset).to receive(:stroke_opacity).and_return(stroke_opacity)
|
26
|
+
allow(preset).to receive(:opacity_min).and_return(opacity_min)
|
27
|
+
allow(preset).to receive(:opacity_max).and_return(opacity_max)
|
28
|
+
end
|
29
|
+
|
30
|
+
it_behaves_like 'a metadata argument', :name
|
31
|
+
it_behaves_like 'a metadata argument', :generator
|
32
|
+
it_behaves_like 'a forwarded metadata argument', :fill_color_dark
|
33
|
+
it_behaves_like 'a forwarded metadata argument', :fill_color_light
|
34
|
+
it_behaves_like 'a forwarded metadata argument', :stroke_color
|
35
|
+
it_behaves_like 'a forwarded metadata argument', :stroke_opacity
|
36
|
+
it_behaves_like 'a forwarded metadata argument', :opacity_min
|
37
|
+
it_behaves_like 'a forwarded metadata argument', :opacity_max
|
38
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SpecHelper
|
2
|
+
module Fixtures
|
3
|
+
def fixtures_path(name)
|
4
|
+
base_path = Pathname.new(File.expand_path('../../../../fixtures', __FILE__))
|
5
|
+
base_path + Pathname.new(name)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
RSpec.configure do |c|
|
11
|
+
c.include SpecHelper::Fixtures
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Kernel
|
2
|
+
# Captures the given stream and returns it:
|
3
|
+
#
|
4
|
+
# @param [String] stream
|
5
|
+
#
|
6
|
+
# The name of the stream to be captured
|
7
|
+
#
|
8
|
+
# @example Capture output
|
9
|
+
#
|
10
|
+
# stream = capture(:stdout) { puts 'notice' }
|
11
|
+
# stream # => "notice\n"
|
12
|
+
#
|
13
|
+
# stream = capture(:stderr) { warn 'error' }
|
14
|
+
# stream # => "error\n"
|
15
|
+
#
|
16
|
+
# @example Capture output for subprocesses
|
17
|
+
#
|
18
|
+
# stream = capture(:stdout) { system('echo notice') }
|
19
|
+
# stream # => "notice\n"
|
20
|
+
#
|
21
|
+
# stream = capture(:stderr) { system('echo error 1>&2') }
|
22
|
+
# stream # => "error\n"
|
23
|
+
def capture(stream)
|
24
|
+
stream = stream.to_s
|
25
|
+
captured_stream = Tempfile.new(stream)
|
26
|
+
stream_io = eval("$#{stream}")
|
27
|
+
origin_stream = stream_io.dup
|
28
|
+
stream_io.reopen(captured_stream)
|
29
|
+
|
30
|
+
yield
|
31
|
+
|
32
|
+
stream_io.rewind
|
33
|
+
return captured_stream.read
|
34
|
+
ensure
|
35
|
+
captured_stream.close
|
36
|
+
captured_stream.unlink
|
37
|
+
stream_io.reopen(origin_stream)
|
38
|
+
end
|
39
|
+
alias_method :silence, :capture
|
40
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rspec/expectations'
|
2
|
+
|
3
|
+
RSpec::Matchers.define :have_image_with_rgb_color do |*expected|
|
4
|
+
expected = format('rgb(%s, %s, %s)', *expected.flatten)
|
5
|
+
|
6
|
+
match do |actual|
|
7
|
+
actual.image.include? expected
|
8
|
+
end
|
9
|
+
|
10
|
+
failure_message_when_negated do |actual|
|
11
|
+
"expected that #{actual} includes color #{expected}"
|
12
|
+
end
|
13
|
+
|
14
|
+
failure_message do |actual|
|
15
|
+
"expected that #{actual} not includes color #{expected}"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rspec/expectations'
|
2
|
+
|
3
|
+
RSpec::Matchers.define :have_name do |expected|
|
4
|
+
match do |actual|
|
5
|
+
actual.name? expected
|
6
|
+
end
|
7
|
+
|
8
|
+
failure_message_when_negated do |actual|
|
9
|
+
"expected that #{actual} does not nave name \"#{expected}\""
|
10
|
+
end
|
11
|
+
|
12
|
+
failure_message do |actual|
|
13
|
+
"expected that #{actual} has name \"#{expected}\""
|
14
|
+
end
|
15
|
+
end
|
data/spec/support/rspec.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
RSpec.shared_examples 'a structure generator' do |name|
|
2
|
+
subject { described_class.new(seed, preset, svg_image) }
|
3
|
+
|
4
|
+
let(:seed) { instance_double('GeoPattern::Seed') }
|
5
|
+
let(:preset) { instance_double('GeoPattern::PatternPreset') }
|
6
|
+
let(:svg_image) { SvgImage.new }
|
7
|
+
let(:pattern) { instance_double('GeoPattern::Pattern') }
|
8
|
+
|
9
|
+
let(:name) { name }
|
10
|
+
|
11
|
+
let(:fill_color_dark) { '#222' }
|
12
|
+
let(:fill_color_light) { '#ddd' }
|
13
|
+
let(:stroke_color) { '#000' }
|
14
|
+
let(:stroke_opacity) { 0.02 }
|
15
|
+
let(:opacity_min) { 0.02 }
|
16
|
+
let(:opacity_max) { 0.15 }
|
17
|
+
|
18
|
+
before :each do
|
19
|
+
allow(preset).to receive(:fill_color_dark).and_return(fill_color_dark)
|
20
|
+
allow(preset).to receive(:fill_color_light).and_return(fill_color_light)
|
21
|
+
allow(preset).to receive(:stroke_color).and_return(stroke_color)
|
22
|
+
allow(preset).to receive(:stroke_opacity).and_return(stroke_opacity)
|
23
|
+
allow(preset).to receive(:opacity_min).and_return(opacity_min)
|
24
|
+
allow(preset).to receive(:opacity_max).and_return(opacity_max)
|
25
|
+
|
26
|
+
allow(seed).to receive(:to_i).and_return(1)
|
27
|
+
end
|
28
|
+
|
29
|
+
it { is_expected.not_to be_nil }
|
30
|
+
it { is_expected.to respond_to(:generate) }
|
31
|
+
|
32
|
+
it do
|
33
|
+
expect(pattern).to receive(:structure=).with(kind_of(Structure))
|
34
|
+
expect(pattern).to receive(:height=).with(kind_of(Numeric))
|
35
|
+
expect(pattern).to receive(:width=).with(kind_of(Numeric))
|
36
|
+
|
37
|
+
subject.generate(pattern)
|
38
|
+
end
|
39
|
+
|
40
|
+
it_behaves_like 'a named generator', name
|
41
|
+
end
|
42
|
+
|
43
|
+
RSpec.shared_examples 'a named generator' do |name|
|
44
|
+
it { is_expected.to have_name name }
|
45
|
+
it { is_expected.to have_name name.to_s }
|
46
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
RSpec.shared_examples 'a chosen pattern' do |name|
|
2
|
+
subject(:pattern) { GeoPattern.generate(input, patterns: name) }
|
3
|
+
|
4
|
+
let(:file_name) { "#{name}.svg" }
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
write_file file_name, pattern.to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
it { expect(pattern.structure).to be_name name }
|
11
|
+
it { check_binary_file_content(file_name, fixtures_path("generated_patterns/#{name}.svg")) }
|
12
|
+
end
|
13
|
+
|
14
|
+
RSpec.shared_examples 'an invalid pattern' do |chosen_pattern|
|
15
|
+
subject(:pattern) { GeoPattern.generate(input, patterns: chosen_pattern) }
|
16
|
+
|
17
|
+
it { expect { subject }.to raise_error InvalidPatternError }
|
18
|
+
end
|
19
|
+
|
20
|
+
RSpec.shared_examples 'an old style pattern' do |chosen_pattern, name|
|
21
|
+
subject(:pattern) { GeoPattern.generate(input, patterns: chosen_pattern) }
|
22
|
+
|
23
|
+
let(:file_name) { "#{name}.svg" }
|
24
|
+
|
25
|
+
before :each do
|
26
|
+
write_file file_name, pattern.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
it { expect(pattern.structure).to be_name name }
|
30
|
+
it { check_binary_file_content(file_name, fixtures_path("generated_patterns/#{name}.svg")) }
|
31
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
RSpec.shared_examples 'a known pattern name' do
|
2
|
+
it { silence(:stderr) { expect(pattern_store[pattern_name]).not_to be_nil } }
|
3
|
+
end
|
4
|
+
|
5
|
+
RSpec.shared_examples 'an unknown pattern name' do
|
6
|
+
it { silence(:stderr) { expect(pattern_store[pattern_name]).to be_nil } }
|
7
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
RSpec.shared_examples 'a metadata argument' do |argument|
|
2
|
+
describe "##{argument}" do
|
3
|
+
it { expect(metadata.public_send(argument)).to eq public_send(argument) }
|
4
|
+
end
|
5
|
+
|
6
|
+
describe "##{argument}?" do
|
7
|
+
context "when #{argument} is not defined" do
|
8
|
+
let(argument) { nil }
|
9
|
+
it { expect { metadata }.to raise_error ArgumentError, "Argument #{argument} is missing" }
|
10
|
+
end
|
11
|
+
|
12
|
+
context "when #{argument} is defined" do
|
13
|
+
context 'when argument is not given' do
|
14
|
+
it { is_expected.to public_send(:"be_#{argument}", nil) }
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'when argument is the same as the defined one' do
|
18
|
+
it { is_expected.to public_send(:"be_#{argument}", public_send(argument)) }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when argument is different from the defined one' do
|
22
|
+
it { is_expected.not_to public_send(:"be_#{argument}", 'blub') }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
RSpec.shared_examples 'a forwarded metadata argument' do |argument|
|
29
|
+
describe "##{argument}" do
|
30
|
+
it { expect(metadata.public_send(argument)).to eq public_send(argument) }
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "##{argument}?" do
|
34
|
+
context "when #{argument} is defined" do
|
35
|
+
context 'when argument is not given' do
|
36
|
+
it { is_expected.to public_send(:"be_#{argument}", nil) }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when argument is the same as the defined one' do
|
40
|
+
it { is_expected.to public_send(:"be_#{argument}", public_send(argument)) }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when argument is different from the defined one' do
|
44
|
+
it { is_expected.not_to public_send(:"be_#{argument}", 'blub') }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|