msgr 0.14.1.1.b112 → 0.14.1.1.b124

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MTg4NDhmODcwZWU2MzEzOTQ1ODllNzg5ODdiNGFjODJiOGZmMmZiMQ==
5
- data.tar.gz: !binary |-
6
- NDUwNjY3NDU5ZWQ1ZjM1ZjdkYTE0N2YwYjg4YTRjZmFhOTYyOTEzOA==
2
+ SHA1:
3
+ metadata.gz: ecda8758c7878ecf3d464b1fcd382205499bd10a
4
+ data.tar.gz: d9ad4ae2f6c2615aeb58643a6d138a7a5f54658f
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- N2M3OGEyMWUwNTA5MGQyN2Q1MjkzMWRiNWIwYmVhZjIzNzk3ZmE5MGIwZGU4
10
- YmQ4OTM2MGMxZjFkZmE0ZTlmNTdiNmQ4MzE5NmU1ZDgwNDdlNWEyZGU2N2U2
11
- YjUwYjViZTg1MjIyOTdjY2M4Mjk5OThjN2I0MzNjZTVlMWRkYjc=
12
- data.tar.gz: !binary |-
13
- MjY0OWNlMGQ0N2U3MjdmMWZmYWI1YTI2NGM0ZGQ0MjlhODA3ZDkyZWE3ZDNj
14
- M2NjM2VmYmUzNGVmMTFjZjA1NDhjNmMzNzZiMGE5ZTJhNjBkOGFiNDZlNmI3
15
- OGNhYmNiY2U1Nzk4ZTg0NDg4NDNmYjk0YmMxYTVlZTAxOGNjMzc=
6
+ metadata.gz: 1b90ebb2242b8168535e73f26605de36549c0191a8c0018167c9944d3da6ff38a503298d956142000822001602369680fbd002d7b9c3471b2ca5d0c22a539814
7
+ data.tar.gz: 7703cc56be933682a2986c4a2cbfcee45c77b049eda474fc0e8f9e17994f37e3509e8639bf6bf993b8ecca2837f4d32f8dea88514b8f3d2a2b1dbeb48b3343f7
data/.travis.yml CHANGED
@@ -1,26 +1,21 @@
1
+ dist: trusty
1
2
  sudo: false
2
3
  language: ruby
3
4
  bundler_args: "--without development"
4
5
  services:
5
6
  - rabbitmq
6
7
  rvm:
7
- - '2.3.1'
8
- - '2.2.5'
8
+ - '2.4.1'
9
+ - '2.3.3'
10
+ - '2.2.7'
9
11
  - '2.1.10'
10
12
  gemfile:
13
+ - gemfiles/Gemfile.rails-5-0
11
14
  - gemfiles/Gemfile.rails-4-2
12
- - gemfiles/Gemfile.rails-4-1
13
- - gemfiles/Gemfile.rails-4-0
14
- env:
15
- - BUNNY_VERSION="~> 2.0"
16
- - BUNNY_VERSION="~> 1.5"
17
- - BUNNY_VERSION="~> 1.4.0"
18
15
  matrix:
19
16
  exclude:
20
- - rvm: '2.3.1'
21
- gemfile: gemfiles/Gemfile.rails-4-0
22
- - rvm: '2.2.5'
23
- gemfile: gemfiles/Gemfile.rails-4-0
17
+ - rvm: '2.1.10'
18
+ gemfile: gemfiles/Gemfile.rails-5-0
24
19
  script:
25
20
  - bundle exec rake spec:msgr
26
21
  - bundle exec rake spec:integration
@@ -32,4 +27,4 @@ deploy:
32
27
  on:
33
28
  branch: master
34
29
  repo: jgraichen/msgr
35
- rvm: 2.3.1
30
+ rvm: 2.3.3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## master
4
+
5
+ * Add new configuration option `:raise_exceptions` that can be used to enable exceptions being raised from consumers. Mostly useful for testing consumers. Defaults to `false`.
6
+
3
7
  ## 0.14.0
4
8
 
5
9
  * Add experimental test pool (`Msgr::TestPool`)
data/Gemfile CHANGED
@@ -3,31 +3,23 @@ source 'https://rubygems.org'
3
3
  # Development gems
4
4
  #
5
5
  gem 'rake'
6
- gem 'rspec'
7
- gem 'rspec-message-within', '>= 1.1.1'
6
+ gem 'rspec', '~> 3.0'
8
7
  gem 'fuubar'
9
8
  gem 'coveralls'
10
9
 
11
10
  # Doc
12
11
  group :development do
13
- gem 'yard', '~> 0.8.6'
12
+ gem 'yard', '~> 0.9.8'
14
13
  gem 'listen'
15
14
  gem 'guard-yard'
16
15
  gem 'guard-rspec'
17
- gem 'redcarpet', platform: :ruby
16
+ gem 'redcarpet'
18
17
  end
19
18
 
20
19
  group :rails do
21
- gem 'rails', '>= 3.2', '< 5'
20
+ gem 'rails', '>= 3.2'
22
21
  gem 'rspec-rails'
23
- gem 'sqlite3', platform: :ruby
24
- gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
25
- end
26
-
27
- platform :rbx do
28
- gem 'rubysl'
29
- gem 'rubinius-coverage'
30
- gem 'racc'
22
+ gem 'sqlite3'
31
23
  end
32
24
 
33
25
  # Specify your gem's dependencies in acfs.gemspec
data/README.md CHANGED
@@ -11,9 +11,7 @@ You know it and you like it. Using Rails you can just declare your routes and
11
11
  create a controller. That's all you need to process requests.
12
12
 
13
13
  With *Msgr* you can do the same for asynchronous AMQP messaging. Just define
14
- your routes, create your consumer and watch you app processing messages.
15
-
16
- *Note: Msgr is still under heavy development.*
14
+ your routes, create your consumer and watch your app processing messages.
17
15
 
18
16
  ## Installation
19
17
 
@@ -98,6 +96,50 @@ common: &common
98
96
  And call inside each worker `Msgr.start` - e.g. in an after-fork block
99
97
 
100
98
 
99
+ ## Testing
100
+
101
+ ### Recommended configuration
102
+
103
+ ```yaml
104
+ test:
105
+ <<: *common
106
+ pool_class: Msgr::TestPool
107
+ raise_exceptions: true
108
+ ```
109
+
110
+ The `Msgr::TestPool` pool implementation executes all consumers synchronously.
111
+ By enabling the `raise_exceptions` configuration flag, we can ensure that exceptions raised in a consumer will not be swallowed by dispatcher (which it usually does in order to retry consuming the message).
112
+
113
+ ### RSpec example
114
+
115
+ In your `spec_helper.rb`:
116
+
117
+ ```ruby
118
+ config.after(:each) do
119
+ # Flush the consumer queue
120
+ Msgr.client.stop delete: true
121
+ Msgr::TestPool.reset
122
+ end
123
+ ```
124
+
125
+ In a test:
126
+
127
+ ```ruby
128
+ before { Msgr.client.start }
129
+
130
+ it 'executes the consumer' do
131
+ # Publish an event on our queue
132
+ Msgr.publish 'payload', to: 'msgr.queue.my_queue'
133
+
134
+ # Let the TestPool handle exactly one event
135
+ Msgr::TestPool.run count: 1
136
+
137
+ # And finally, assert that something happened
138
+ expect(actual).to eq expected
139
+ end
140
+ ```
141
+
142
+
101
143
  ## Contributing
102
144
 
103
145
  1. Fork it
data/Rakefile CHANGED
@@ -19,13 +19,13 @@ namespace :spec do
19
19
 
20
20
  desc 'Run all unit specs.'
21
21
  RSpec::Core::RakeTask.new(:msgr) do |t|
22
- t.ruby_opts="#{ENV['CI'] ? '' : '-w -W2'} -Ispec/support -rsetup -Ispec/msgr"
22
+ t.ruby_opts = '-Ispec/support -rsetup -Ispec/msgr'
23
23
  t.pattern = 'spec/msgr/**/*_spec.rb'
24
24
  end
25
25
 
26
26
  desc 'Run all integration specs.'
27
27
  RSpec::Core::RakeTask.new(:integration) do |t|
28
- t.ruby_opts="#{ENV['CI'] ? '' : '-w -W2'} -Ispec/support -rsetup -Ispec/integration"
28
+ t.ruby_opts = '-Ispec/support -rsetup -Ispec/integration'
29
29
  t.pattern = 'spec/integration/**/*_spec.rb'
30
30
  end
31
31
  end
@@ -4,4 +4,4 @@ source 'https://rubygems.org'
4
4
  self.instance_eval Bundler.read_file 'Gemfile'
5
5
 
6
6
  gem 'activesupport', '~> 4.0.0'
7
- gem 'bunny', ENV['BUNNY_VERSION']
7
+ gem 'bunny', ENV['BUNNY_VERSION'] if ENV['BUNNY_VERSION']
@@ -4,4 +4,4 @@ source 'https://rubygems.org'
4
4
  self.instance_eval Bundler.read_file 'Gemfile'
5
5
 
6
6
  gem 'activesupport', '~> 4.1.0'
7
- gem 'bunny', ENV['BUNNY_VERSION']
7
+ gem 'bunny', ENV['BUNNY_VERSION'] if ENV['BUNNY_VERSION']
@@ -4,4 +4,4 @@ source 'https://rubygems.org'
4
4
  self.instance_eval Bundler.read_file 'Gemfile'
5
5
 
6
6
  gem 'activesupport', '~> 4.2.0'
7
- gem 'bunny', ENV['BUNNY_VERSION']
7
+ gem 'bunny', ENV['BUNNY_VERSION'] if ENV['BUNNY_VERSION']
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Load root Gemfile
4
+ self.instance_eval Bundler.read_file 'Gemfile'
5
+
6
+ gem 'activesupport', '~> 5.0.0'
7
+ gem 'bunny', ENV['BUNNY_VERSION'] if ENV['BUNNY_VERSION']
@@ -7,13 +7,14 @@ module Msgr
7
7
  class Dispatcher
8
8
  include Logging
9
9
 
10
- attr_reader :pool
10
+ attr_reader :config, :pool
11
11
 
12
12
  def initialize(config)
13
13
  config[:pool_class] ||= 'Msgr::Dispatcher::NullPool'
14
14
 
15
15
  log(:debug) { "Initialize new dispatcher (#{config[:pool_class]}: #{config})..." }
16
16
 
17
+ @config = config
17
18
  @pool = config[:pool_class].constantize.new config
18
19
  end
19
20
 
@@ -39,6 +40,8 @@ module Msgr
39
40
  "Dispatcher error: #{error.class.name}: #{error}\n" +
40
41
  error.backtrace.join("\n")
41
42
  end
43
+
44
+ raise error if config[:raise_exceptions]
42
45
  ensure
43
46
  if defined?(ActiveRecord) && ActiveRecord::Base.connection_pool.active_connection?
44
47
  log(:debug) { 'Release used AR connection for dispatcher thread.' }
data/lib/msgr/railtie.rb CHANGED
@@ -61,6 +61,15 @@ module Msgr
61
61
  raise ArgumentError, "Invalid value for rabbitmq config checkcredentials: \"#{cfg[:checkcredentials]}\""
62
62
  end
63
63
 
64
+ case cfg[:raise_exceptions]
65
+ when true, 'true', 'enabled'
66
+ cfg[:raise_exceptions] = true
67
+ when false, 'false', 'disabled', nil
68
+ cfg[:raise_exceptions] = false
69
+ else
70
+ raise ArgumentError, "Invalid value for rabbitmq config raise_exceptions: \"#{cfg[:raise_exceptions]}\""
71
+ end
72
+
64
73
  cfg[:routing_file] ||= Rails.root.join('config/msgr.rb').to_s
65
74
  cfg
66
75
  end
@@ -1,5 +1,5 @@
1
1
  # Set up gems listed in the Gemfile.
2
2
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
3
3
 
4
- require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
4
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5
5
  $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__)
@@ -6,8 +6,15 @@ class DispatcherTestConsumer < Msgr::Consumer
6
6
  end
7
7
  end
8
8
 
9
+ class DispatcherRaiseConsumer < Msgr::Consumer
10
+ def index
11
+ raise ArgumentError, 'Not happy with the payload'
12
+ end
13
+ end
14
+
9
15
  describe Msgr::Dispatcher do
10
- let(:dispatcher) { described_class.new max: 1 }
16
+ let(:dispatcher) { described_class.new config }
17
+ let(:config) { { max: 1 } }
11
18
  let(:consumer) { 'DispatcherTestConsumer' }
12
19
  let(:route) do
13
20
  double(:route).tap do |t|
@@ -22,30 +29,45 @@ describe Msgr::Dispatcher do
22
29
  end
23
30
  let(:delivery_info) do
24
31
  double(:delivery_info).tap do |ti|
25
- allow(ti).to receive(:delivery_tag).and_return { 3 }
32
+ allow(ti).to receive(:delivery_tag).and_return(3)
26
33
  end
27
34
  end
28
35
  let(:payload) { {} }
29
36
  let(:metadata) do
30
37
  double(:metadata).tap do |metadata|
31
- allow(metadata).to receive(:content_type).and_return { 'text/plain' }
38
+ allow(metadata).to receive(:content_type).and_return('text/plain')
32
39
  end
33
40
  end
34
41
  let(:message) { Msgr::Message.new connection, delivery_info, metadata, payload, route }
35
42
  let(:action) { -> { dispatcher.call message }}
36
43
 
37
- before do
38
- expect_any_instance_of(::Msgr::Dispatcher::NullPool).to receive(:post).and_return { |m, &block| block.call m}
39
- expect_any_instance_of(DispatcherTestConsumer).to receive(:index)
40
- end
41
-
42
44
  it 'should consume message' do
45
+ expect_any_instance_of(DispatcherTestConsumer).to receive(:index)
43
46
  dispatcher.call message
44
47
  end
45
48
 
46
- context 'with not acknowlged message' do
49
+ context 'with not acknowledged message' do
47
50
  before { dispatcher.call message }
48
51
  subject { message }
49
52
  it { should be_acked }
50
53
  end
54
+
55
+ describe 'exception swallowing' do
56
+ let(:consumer) { 'DispatcherRaiseConsumer' }
57
+ before do
58
+ allow(message).to receive(:nack)
59
+ end
60
+
61
+ it 'should swallow exceptions by default' do
62
+ expect { dispatcher.call(message) }.not_to raise_error
63
+ end
64
+
65
+ context 'with raise_exceptions configuration option and a synchronous pool' do
66
+ let(:config) { super().merge(raise_exceptions: true) }
67
+
68
+ it 'should raise the exception' do
69
+ expect { dispatcher.call(message) }.to raise_error(ArgumentError)
70
+ end
71
+ end
72
+ end
51
73
  end
@@ -35,30 +35,57 @@ describe Msgr::Railtie do
35
35
 
36
36
  it { should raise_error 'Invalid value for rabbitmq config checkcredentials: "unvalid"'}
37
37
  end
38
+
39
+ context 'with invalid raise_exceptions value' do
40
+ let(:settings) { {"test" => { uri: 'franz', raise_exceptions: 'unvalid'}} }
41
+
42
+ it { should raise_error 'Invalid value for rabbitmq config raise_exceptions: "unvalid"'}
43
+ end
38
44
  end
39
45
 
40
46
  context 'without set routes file' do
41
47
  let(:settings) { {"test" => { uri: 'test'}} }
42
48
 
43
- its([:routing_file]) { should eq Rails.root.join('config/msgr.rb').to_s }
49
+ context '[:routing_file]' do
50
+ subject { super()[:routing_file] }
51
+ it { should eq Rails.root.join('config/msgr.rb').to_s }
52
+ end
44
53
  end
45
54
 
46
55
  context 'with set routes file' do
47
56
  let(:settings) { {"test" => { uri: 'test', 'routing_file' => 'my fancy file' }} }
48
57
 
49
- its([:routing_file]) { should eq 'my fancy file' }
58
+ context '[:routing_file]' do
59
+ subject { super()[:routing_file] }
60
+ it { should eq 'my fancy file' }
61
+ end
50
62
  end
51
63
 
52
64
  context 'with uri as symbol' do
53
65
  let(:settings) { {"test" => { uri: "hans"}}}
54
66
 
55
- its([:uri]) { should eq 'hans' }
67
+ context '[:uri]' do
68
+ subject { super()[:uri] }
69
+ it { should eq 'hans' }
70
+ end
56
71
  end
57
72
 
58
73
  context 'with uri as string' do
59
74
  let(:settings) { {"test" => { 'uri' => "hans"}}}
60
75
 
61
- its([:uri]) { should eq 'hans' }
76
+ context '[:uri]' do
77
+ subject { super()[:uri] }
78
+ it { should eq 'hans' }
79
+ end
80
+ end
81
+
82
+ context 'without raise_exceptions config' do
83
+ let(:settings) { {"test" => { 'uri' => 'hans'}, "development" => { 'uri' => 'hans_dev'}}}
84
+
85
+ describe '[:raise_exceptions]' do
86
+ subject { super()[:raise_exceptions] }
87
+ it { should eq false }
88
+ end
62
89
  end
63
90
  end
64
91
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe TestController do
3
+ describe TestController, type: :request do
4
4
  it 'should send messages on :index' do
5
5
  get '/'
6
6
  end
@@ -13,7 +13,6 @@ ENV['RAILS_ENV'] ||= 'test'
13
13
  ENV['RAILS_GROUPS'] = ENV['RAILS_GROUPS'] ? "rails,#{ENV['RAILS_GROUPS']}" : 'rails'
14
14
  require File.expand_path('../dummy/config/environment', __FILE__)
15
15
  require 'rspec/rails'
16
- require 'rspec/autorun'
17
16
 
18
17
  # Requires supporting ruby files with custom matchers and macros, etc,
19
18
  # in spec/support/ and its subdirectories.
@@ -7,7 +7,9 @@ describe Msgr::Routes do
7
7
  let(:block) { Proc.new{} }
8
8
 
9
9
  it 'should evaluate given block within instance context' do
10
- expect(routes).to receive(:instance_eval).with { |p| p == block }
10
+ expect(routes).to receive(:instance_eval) do |&p|
11
+ expect(p).to be block
12
+ end
11
13
 
12
14
  routes.configure &block
13
15
  end
@@ -32,7 +34,7 @@ describe Msgr::Routes do
32
34
  let(:each) { routes.each }
33
35
 
34
36
  it 'should iterate over configured routes' do
35
- expect(each).to have(2).items
37
+ expect(each.size).to eq 2
36
38
 
37
39
  expect(each.map(&:keys)).to eq [%w(abc.#), %w(edf.#)]
38
40
  expect(each.map(&:consumer)).to eq %w(TestConsumer TestConsumer)
@@ -70,7 +72,6 @@ describe Msgr::Routes do
70
72
 
71
73
  it 'should add second binding to first route' do
72
74
  subject.call
73
- expect(routes.routes.first.keys).to have(2).items
74
75
  expect(routes.routes.first.keys).to eq %w(routing.key another.routing.key)
75
76
  end
76
77
  end
@@ -98,7 +99,7 @@ describe Msgr::Routes do
98
99
  it 'should clear old routes before reloading' do
99
100
  routes.route 'abc', to: 'abc#test'
100
101
  routes.reload
101
- expect(routes.each).to have(0).items
102
+ expect(routes.each.size).to eq 0
102
103
  end
103
104
  end
104
105
 
@@ -8,8 +8,6 @@ Coveralls.wear! do
8
8
  add_filter 'spec'
9
9
  end
10
10
 
11
- require 'rspec/autorun'
12
- require 'rspec/message/within'
13
11
  require 'msgr'
14
12
 
15
13
  Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |f| require f }
metadata CHANGED
@@ -1,86 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: msgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1.1.b112
4
+ version: 0.14.1.1.b124
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Graichen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-12 00:00:00.000000000 Z
11
+ date: 2017-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bunny
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.4'
34
- - - <
34
+ - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '3.0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ! '>='
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
43
  version: '1.4'
44
- - - <
44
+ - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '3.0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: multi_json
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ! '>='
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ! '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: bundler
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: '1.3'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '1.3'
75
- description: ! 'Msgr: Rails-like Messaging Framework'
75
+ description: 'Msgr: Rails-like Messaging Framework'
76
76
  email:
77
77
  - jg@altimos.de
78
78
  executables: []
79
79
  extensions: []
80
80
  extra_rdoc_files: []
81
81
  files:
82
- - .gitignore
83
- - .travis.yml
82
+ - ".gitignore"
83
+ - ".travis.yml"
84
84
  - CHANGELOG.md
85
85
  - Gemfile
86
86
  - Guardfile
@@ -90,6 +90,7 @@ files:
90
90
  - gemfiles/Gemfile.rails-4-0
91
91
  - gemfiles/Gemfile.rails-4-1
92
92
  - gemfiles/Gemfile.rails-4-2
93
+ - gemfiles/Gemfile.rails-5-0
93
94
  - lib/msgr.rb
94
95
  - lib/msgr/binding.rb
95
96
  - lib/msgr/client.rb
@@ -173,20 +174,20 @@ require_paths:
173
174
  - lib
174
175
  required_ruby_version: !ruby/object:Gem::Requirement
175
176
  requirements:
176
- - - ! '>='
177
+ - - ">="
177
178
  - !ruby/object:Gem::Version
178
179
  version: '0'
179
180
  required_rubygems_version: !ruby/object:Gem::Requirement
180
181
  requirements:
181
- - - ! '>'
182
+ - - ">"
182
183
  - !ruby/object:Gem::Version
183
184
  version: 1.3.1
184
185
  requirements: []
185
186
  rubyforge_project:
186
- rubygems_version: 2.4.5
187
+ rubygems_version: 2.4.8
187
188
  signing_key:
188
189
  specification_version: 4
189
- summary: ! 'Msgr: Rails-like Messaging Framework'
190
+ summary: 'Msgr: Rails-like Messaging Framework'
190
191
  test_files:
191
192
  - spec/fixtures/msgr-routes-test-1.rb
192
193
  - spec/integration/dummy/README.rdoc