pludoni-spec 0.0.2

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: 02177e74bd70cb01ca222cbb2ba5354e5e2a52d1
4
+ data.tar.gz: d37f3b1dd85e3f8d54d378311aa59f4d3d23c037
5
+ SHA512:
6
+ metadata.gz: 04babc1a7d7abc06c330886d660e83873e7232ac7a1db661be6f14b77e52646992992729de57b488a8d34da98affbe3b91ed111faca8fcc200663e11af767002
7
+ data.tar.gz: cb1c59273ba96ab7c974f6c15916006e4f23d063aecfaee65450f80272ded6ca4ea27aaf339f9012de22c5e0c66d7707f4b33033a693890a1a514917393651b5
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pludoni-railsbase.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Stefan Wienert
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,96 @@
1
+ # Pludoni Spec helper
2
+
3
+ Add this line to your application's Gemfile:
4
+
5
+ ```ruby
6
+ group :development, :test do
7
+ gem 'pludoni-spec'
8
+ end
9
+ ```
10
+
11
+ And then your spec-helper:
12
+
13
+ ```ruby
14
+ ENV["RAILS_ENV"] ||= 'test'
15
+ require "pludoni/coverage"
16
+ require File.expand_path("../../config/environment", __FILE__)
17
+ require 'rspec/rails'
18
+ require "pludoni/spec-helper"
19
+
20
+ RSpec.configure do |config|
21
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
22
+ config.infer_base_class_for_anonymous_controllers = false
23
+ config.order = "random"
24
+ config.use_transactional_fixtures = true
25
+ end
26
+ ```
27
+
28
+
29
+
30
+ ## On-Demand Modules:
31
+
32
+ ```ruby
33
+ # requires and configures Database Cleaner for rspec
34
+ require 'pludoni/database-cleaner'
35
+
36
+ # requires and configures VCR (not part of gems dependencies!)
37
+ require 'pludoni/vcr'
38
+
39
+ # instead of Database Cleaner: patches Active Record thread
40
+ require 'pludoni/thread-patch'
41
+ ```
42
+
43
+
44
+ ```ruby
45
+ describe MyMailerSpec do
46
+ include MailHelper
47
+ specify do
48
+ # in this scenario, all outgoing deliveries (ActionMailer::Base.deliveries)
49
+ # will be checked for missing translations
50
+
51
+ # some methods:
52
+ mail # last ActionMailer::Base.deliveries
53
+ mails # alias for ActionMailer::Base.delivieries
54
+ end
55
+ end
56
+ ```
57
+
58
+ ```ruby
59
+ describe MyController do
60
+ include TranslationHelper # will include render_views!!
61
+ specify do
62
+ # will check views if containing Missing Translations
63
+ end
64
+ end
65
+ ```
66
+
67
+ ## spec tags:
68
+
69
+ ```ruby
70
+ # TimeCop freeze time, ensures returning to system date
71
+ it 'Some example', freeze_time: '2013-10-10 12:12' do
72
+ Time.now.should be constant
73
+ end
74
+
75
+ #enables caching for controller action spec
76
+ it 'Some example', caching: true do
77
+ end
78
+
79
+ it 'Timeout', timeout: 10 do
80
+ fail 'this scenario if takes longer than 10s'
81
+ end
82
+
83
+ ```
84
+
85
+ * All js:true feature specs will make an screenshot to public/error.jpg if failed.
86
+ * ActionMailer::Base.deliveries.clear will be called before each run
87
+ * rspec ``be_valid`` matcher, which shows errors on invalid
88
+ * Poltergeist as default JS Driver
89
+ * all Feature specs have new methods:
90
+
91
+ ```ruby
92
+ screenshot # fullscreen screenshot to public/screenshot.jpg
93
+ screenshot '1' #screenshot to public/1.jpg
94
+
95
+ skip_confirm(page) # will overwrite JS confirm method, so delete confirmations will work
96
+ ```
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,18 @@
1
+
2
+ RSpec::Matchers.define :be_valid do
3
+ match do |actual|
4
+ actual.valid?
5
+ end
6
+
7
+ failure_message_for_should do |actual|
8
+ "expected that #{actual} would be valid (errors: #{actual.errors.full_messages})"
9
+ end
10
+
11
+ failure_message_for_should_not do |actual|
12
+ "expected that #{actual} would not be valid"
13
+ end
14
+
15
+ description do
16
+ "be valid"
17
+ end
18
+ end
@@ -0,0 +1,54 @@
1
+
2
+ RSpec.configure do |config|
3
+ config.after :each, js: true do |example|
4
+ ex = defined?(example.example) ? example.example : example # rspec 2.14...
5
+ exception = ex.exception
6
+ if exception.present? and ex.metadata[:type] == :feature and ex.metadata[:js]
7
+ if defined? screenshot
8
+ puts "made screenshot to /error.jpg (#{exception.inspect})"
9
+ screenshot "error"
10
+ end
11
+ end
12
+ end
13
+ end
14
+ require 'capybara/rails'
15
+ require 'capybara/rspec'
16
+ require 'capybara/poltergeist'
17
+ Capybara.register_driver :poltergeist do |app|
18
+ Capybara::Poltergeist::Driver.new(app, timeout: 300, js_errors: false)
19
+ end
20
+ Capybara.javascript_driver = :poltergeist
21
+
22
+ module PoltergeistHelper
23
+ # render screenshot of current page to /screenshot.jpg
24
+ def screenshot(name="screenshot")
25
+ if defined? page.driver.save_screenshot
26
+ page.driver.save_screenshot "public/#{name}.jpg", full: true
27
+ else
28
+ page.driver.render(Rails.root.join("public/#{name}.jpg").to_s,full: true)
29
+ end
30
+ end
31
+
32
+ def simple_t(lab)
33
+ I18n.t("simple_form.labels.defaults.#{lab}")
34
+ end
35
+
36
+ # 404 Fehlern vorbeugen -> Wir haben paperclip tmp in usage, also werden
37
+ # hochgeladene Logos nicht angezeigt
38
+ # -> 404 -> Test Failure
39
+ def stub_logo!(object,method=:logo)
40
+ logo = Object.new
41
+ def logo.url(*whatever) "" end
42
+ def logo.method_missing(name,*args) true end
43
+ object.any_instance.stub method => logo, :"#{method}_file_name" => "foo.png"
44
+ end
45
+
46
+ # skip any confirm: "Really delete?"
47
+ def skip_confirm(page)
48
+ page.evaluate_script('window.confirm = function() { return true; }')
49
+ end
50
+ end
51
+
52
+ RSpec.configure do |config|
53
+ config.include PoltergeistHelper, type: :feature
54
+ end
@@ -0,0 +1,21 @@
1
+ if `whoami`["jenkins"]
2
+ require 'simplecov'
3
+ # require 'simplecov-rcov-text'
4
+ # class SimpleCov::Formatter::MergedFormatter
5
+ # def format(result)
6
+ # SimpleCov::Formatter::HTMLFormatter.new.format(result)
7
+ # SimpleCov::Formatter::RcovTextFormatter.new.format(result)
8
+ # end
9
+ # end
10
+ # # SimpleCov.add_filter 'app/models/crawler/dresdende/'
11
+ # # SimpleCov.add_filter 'app/models/drupalapi/'
12
+ # SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
13
+ SimpleCov.start 'rails' do
14
+ add_filter do |source_file|
15
+ source_file.lines.count < 10
16
+ end
17
+ add_group "Long files" do |src_file|
18
+ src_file.lines.count > 150
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ require 'database_cleaner'
2
+
3
+ RSpec.configure do |config|
4
+ config.use_transactional_fixtures = false
5
+ config.before(:suite) do
6
+ DatabaseCleaner.clean_with(:truncation)
7
+ end
8
+
9
+ config.before(:each) do |example|
10
+ ex = defined?(example.example) ? example.example : example
11
+ DatabaseCleaner.strategy = ex.metadata[:js] ? :deletion : :transaction
12
+ DatabaseCleaner.start
13
+ end
14
+ config.after :each do |example|
15
+ DatabaseCleaner.clean
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+
2
+ # include into mail-sending scenarios
3
+ module MailHelper
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ after(:each) do
7
+ ActionMailer::Base.deliveries.each do |mail|
8
+ if mail.body.to_s[/translation missing: (.*)"/]
9
+ fail "There are missing translations: #{$1}"
10
+ end
11
+ if (mail.body.parts.first.to_s[/translation missing: (.*)"/] rescue false)
12
+ fail "There are missing translations: #{$1}"
13
+ end
14
+ end
15
+ end
16
+
17
+ def mail
18
+ ActionMailer::Base.deliveries.last
19
+ end
20
+ def mails
21
+ ActionMailer::Base.deliveries
22
+ end
23
+ let(:multi_part_body) { mail.body.parts.first.to_s }
24
+ end
25
+
26
+ end
@@ -0,0 +1,81 @@
1
+ require "pludoni/capybara"
2
+ RSpec.configure do |c|
3
+ c.treat_symbols_as_metadata_keys_with_true_values = true
4
+ end
5
+ require "timecop"
6
+ require 'i18n/missing_translations'
7
+ # require 'rspec/retry'
8
+ at_exit { I18n.missing_translations.dump }
9
+ Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
10
+
11
+ ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
12
+
13
+
14
+ RSpec.configure do |config|
15
+ config.infer_base_class_for_anonymous_controllers = false
16
+ config.tty = true
17
+ config.before do
18
+ ActionMailer::Base.deliveries.clear
19
+ end
20
+
21
+ # Freeze Time using Timecop
22
+ # freeze_time: "2012-09-01 12:12:12"
23
+ config.around(:each) do |example|
24
+ ex = defined?(example.example) ? example.example : example # rspec 2.14...
25
+ if time = ex.metadata[:freeze_time]
26
+ begin
27
+ Timecop.freeze(Time.parse(time)) do
28
+ example.run
29
+ end
30
+ ensure
31
+ Timecop.return
32
+ end
33
+ else
34
+ example.run
35
+ end
36
+ end
37
+
38
+ # Skip = pending all examples
39
+ config.around(:each, :skip => true) do |example|
40
+ example.metadata[:pending] = true
41
+ example.metadata[:execution_result][:pending_message] = "Skipped #{example.to_s}"
42
+ end
43
+
44
+ # Activate ActionController Caching
45
+ # caching: true
46
+ config.around(:each, :caching => true) do |example|
47
+ caching, ActionController::Base.perform_caching = ActionController::Base.perform_caching, true
48
+ store, ActionController::Base.cache_store = ActionController::Base.cache_store, :memory_store
49
+ silence_warnings { Object.const_set "RAILS_CACHE", ActionController::Base.cache_store }
50
+ example.run
51
+ silence_warnings { Object.const_set "RAILS_CACHE", store }
52
+ ActionController::Base.cache_store = store
53
+ ActionController::Base.perform_caching = caching
54
+ end
55
+
56
+ config.around(:each, :timeout) do |example|
57
+ if example.metadata[:timeout]
58
+ time = 10 unless time.kind_of?(Numeric)
59
+ Timeout.timeout(time) do
60
+ example.run
61
+ end
62
+ else
63
+ example.run
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+
70
+ silence_warnings do
71
+ require "bcrypt"
72
+ BCrypt::Engine::DEFAULT_COST = BCrypt::Engine::MIN_COST
73
+ end
74
+
75
+ require "pludoni/mail_helper"
76
+ require "pludoni/be_valid"
77
+ require "pludoni/translation_helper"
78
+
79
+
80
+
81
+
@@ -0,0 +1 @@
1
+ require "pry-rails"
@@ -0,0 +1,6 @@
1
+ # monkeypatch -> Transactions fuer Features
2
+ ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
3
+ def current_connection_id
4
+ Thread.main.object_id
5
+ end
6
+ end
@@ -0,0 +1,21 @@
1
+
2
+ # include into controller-scenarios to check for missing translations
3
+ module TranslationHelper
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ render_views
7
+ after :each do
8
+ begin
9
+ if defined? response and response
10
+ if response.body
11
+ if response.body.to_s[/translation missing: (.*)"/]
12
+ fail "There are missing translations #{$1}"
13
+ end
14
+ end
15
+ end
16
+ rescue
17
+ end
18
+ end
19
+ end
20
+ end
21
+
@@ -0,0 +1,8 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
5
+ c.hook_into :webmock # or :fakeweb
6
+ c.ignore_localhost = true
7
+ c.allow_http_connections_when_no_cassette = true
8
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "pludoni-spec"
7
+ spec.version = "0.0.2"
8
+ spec.authors = ["Stefan Wienert"]
9
+ spec.email = ["stefan.wienert@pludoni.de"]
10
+ spec.description = %q{Alles was man so braucht zum testen}
11
+ spec.summary = %q{Alles was man so braucht zum testen}
12
+ spec.homepage = ""
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "poltergeist"
21
+ spec.add_runtime_dependency "simplecov"
22
+ spec.add_runtime_dependency 'timecop'
23
+ # spec.add_runtime_dependency "guard-rspec"
24
+ spec.add_runtime_dependency "capybara"
25
+ spec.add_runtime_dependency "poltergeist"
26
+ # spec.add_runtime_dependency "rb-inotify"
27
+ spec.add_runtime_dependency "pry-rails"
28
+ # spec.add_runtime_dependency "rspec-retry"
29
+ spec.add_runtime_dependency "database_cleaner"
30
+ spec.add_runtime_dependency "i18n-missing_translations"
31
+ spec.add_runtime_dependency 'action_mailer_cache_delivery'
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.3"
34
+ spec.add_development_dependency "rake"
35
+ end
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pludoni-spec
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Wienert
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: poltergeist
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: simplecov
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: timecop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: capybara
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: poltergeist
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: database_cleaner
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: i18n-missing_translations
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: action_mailer_cache_delivery
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: bundler
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '1.3'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '1.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rake
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: Alles was man so braucht zum testen
168
+ email:
169
+ - stefan.wienert@pludoni.de
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - .gitignore
175
+ - Gemfile
176
+ - LICENSE.txt
177
+ - README.md
178
+ - Rakefile
179
+ - lib/pludoni/be_valid.rb
180
+ - lib/pludoni/capybara.rb
181
+ - lib/pludoni/coverage.rb
182
+ - lib/pludoni/database-cleaner.rb
183
+ - lib/pludoni/mail_helper.rb
184
+ - lib/pludoni/spec-helper.rb
185
+ - lib/pludoni/spec.rb
186
+ - lib/pludoni/thread-patch.rb
187
+ - lib/pludoni/translation_helper.rb
188
+ - lib/pludoni/vcr.rb
189
+ - pludoni-spec.gemspec
190
+ homepage: ''
191
+ licenses:
192
+ - MIT
193
+ metadata: {}
194
+ post_install_message:
195
+ rdoc_options: []
196
+ require_paths:
197
+ - lib
198
+ required_ruby_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - '>='
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ required_rubygems_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - '>='
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ requirements: []
209
+ rubyforge_project:
210
+ rubygems_version: 2.1.11
211
+ signing_key:
212
+ specification_version: 4
213
+ summary: Alles was man so braucht zum testen
214
+ test_files: []