geo_pattern 1.3.2 → 1.4.0
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/.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
|