drama_queen 0.1.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.
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+ require 'drama_queen'
3
+
4
+
5
+ describe DramaQueen do
6
+ subject do
7
+ described_class
8
+ end
9
+
10
+ let(:exchange) { double 'DramaQueen::Exchange' }
11
+
12
+ describe '.exchanges' do
13
+ it 'is created as an empty Array' do
14
+ expect(subject.exchanges).to be_an_instance_of Array
15
+ end
16
+ end
17
+
18
+ describe '.exchange_for' do
19
+ before do
20
+ allow(subject).to receive(:exchanges) { [exchange] }
21
+ end
22
+
23
+ context 'does not route' do
24
+ before { allow(exchange).to receive(:routing_key) { 'another key' } }
25
+ specify { expect(subject.exchange_for 'test_key').to eq nil }
26
+ end
27
+
28
+ context 'does route' do
29
+ before { allow(exchange).to receive(:routing_key) { 'test_key' } }
30
+ specify { expect(subject.exchange_for 'test_key').to eq exchange }
31
+ end
32
+ end
33
+
34
+ describe '.routes_to?' do
35
+ before do
36
+ allow(subject).to receive(:exchanges) { [exchange] }
37
+ end
38
+
39
+ context 'does not route' do
40
+ before do
41
+ allow(subject).to receive(:exchange_for).
42
+ with('test_key') { false }
43
+ end
44
+
45
+ specify { expect(subject.routes_to? 'test_key').to eq false }
46
+ end
47
+
48
+ context 'does route' do
49
+ before do
50
+ allow(subject).to receive(:exchange_for).
51
+ with('test_key') { true }
52
+ end
53
+
54
+ specify { expect(subject.routes_to? 'test_key').to eq true }
55
+ end
56
+ end
57
+ end
data/test.rb ADDED
@@ -0,0 +1,163 @@
1
+ =begin
2
+ require './lib/drama_queen/producer'
3
+ require './lib/drama_queen/consumer'
4
+
5
+ class A
6
+ include DramaQueen::Consumer
7
+
8
+ def initialize
9
+ subscribe 'root.*.children', :call_me
10
+ end
11
+
12
+ def call_me(*args)
13
+ puts "A got called with args: #{args}"
14
+ end
15
+ end
16
+
17
+ class B
18
+ include DramaQueen::Producer
19
+
20
+ def do_stuff
21
+ publish 'root.parent', 1, 2, 3
22
+ end
23
+ end
24
+
25
+ class C
26
+ include DramaQueen::Producer
27
+
28
+ def do_stuff
29
+ publish 'root.parent.children', 1, 2, 3
30
+ end
31
+ end
32
+
33
+
34
+ a = A.new
35
+ b = B.new
36
+ c = C.new
37
+
38
+ puts 'B...'
39
+ b.do_stuff
40
+ puts 'C...'
41
+ c.do_stuff
42
+ =end
43
+
44
+ =begin
45
+ require './lib/drama_queen/producer'
46
+
47
+ class A
48
+ include DramaQueen::Producer
49
+
50
+ def do_stuff
51
+ criteria = -> { true }
52
+ publish criteria, "I'm doing the stuff111111111"
53
+ end
54
+ end
55
+
56
+
57
+ require './lib/drama_queen/consumer'
58
+
59
+ class B
60
+ include DramaQueen::Consumer
61
+
62
+ def initialize
63
+ criteria = -> { true }
64
+ subscribe criteria, :call_me
65
+ end
66
+
67
+ def call_me(msg)
68
+ puts msg
69
+ end
70
+ end
71
+
72
+ a = A.new
73
+ b = B.new
74
+
75
+ a.do_stuff
76
+ =end
77
+
78
+
79
+ def routes? first, second
80
+ first_minus_second = first - second
81
+ second_minus_first = second - first
82
+ puts "first: #{first}"
83
+ puts "second: #{second}"
84
+ puts "first minus second: #{first - second}"
85
+ puts "second minus first: #{second - first}"
86
+ puts "first size: #{first.size}"
87
+ puts "second size: #{second.size}"
88
+
89
+ puts 'first loop'
90
+ first.each_cons(second.size) { |e| p e }
91
+ puts 'second loop'
92
+ second.each_cons(first.size) { |e| p e }
93
+
94
+ if first == second
95
+ true
96
+ elsif (first_minus_second).uniq == %w[*] && first.size == second.size
97
+ true
98
+ elsif first_minus_second.all? { |e| e =~ Regexp.new(second_minus_first.join('.'))}
99
+ true
100
+ =begin
101
+ elsif (second_minus_first).size == (first_minus_second).size &&
102
+ first.size == second.size &&
103
+ first_minus_second =~ second_minus_first
104
+ true
105
+ =end
106
+ else
107
+ false
108
+ end
109
+ end
110
+
111
+ a = %w[root parent child]
112
+ b = %w[root * child]
113
+ c = %w[root parent meow]
114
+ d = %w[root parent *]
115
+ e = %w[root * child *]
116
+ f = %w[root parent child thing]
117
+
118
+ puts '-' * 40
119
+ puts '-' * 40
120
+ puts 'A' * 40
121
+ puts "a should route to a: #{routes? a, a}"
122
+ puts '-' * 40
123
+
124
+ puts "a should route to b: #{routes? a, b}"
125
+ puts '-' * 40
126
+
127
+ puts "a should NOT route to c: #{routes? a, c}"
128
+ puts '-' * 40
129
+
130
+ puts "a should route to d: #{routes? a, d}"
131
+ puts '-' * 40
132
+
133
+ puts "a should NOT route to e: #{routes? a, e}"
134
+ puts '-' * 40
135
+
136
+ puts "a should NOT route to f: #{routes? a, f}"
137
+ puts '-' * 40
138
+
139
+ =begin
140
+ puts '-' * 40
141
+ puts '-' * 40
142
+ puts 'B' * 40
143
+ puts "b should route to a: #{routes? b, a}"
144
+ puts '-' * 40
145
+
146
+ puts "b should route to b: #{routes? b, b}"
147
+ puts '-' * 40
148
+
149
+ puts "b should NOT route to c: #{routes? b, c}"
150
+ puts '-' * 40
151
+
152
+ puts "b should route to d: #{routes? b, d}"
153
+ puts '-' * 40
154
+
155
+ puts "b should NOT route to e: #{routes? b, e}"
156
+ puts '-' * 40
157
+
158
+ puts "b should NOT route to f: #{routes? b, f}"
159
+ puts '-' * 40
160
+
161
+ puts "c should NOT route to a: #{routes? c, a}"
162
+ puts '-' * 40
163
+ =end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: drama_queen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Steve Loveless
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
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: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0.beta1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0.beta1
55
+ description: |-
56
+ A simple, non-threaded, local-object pub-sub/observer
57
+ with the ability to pub-sub on topics. Topics can be any Ruby object.
58
+ email: steve.loveless@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - .rspec
65
+ - .travis.yml
66
+ - Gemfile
67
+ - History.md
68
+ - LICENSE.txt
69
+ - README.md
70
+ - Rakefile
71
+ - drama_queen.gemspec
72
+ - lib/drama_queen.rb
73
+ - lib/drama_queen/consumer.rb
74
+ - lib/drama_queen/exchange.rb
75
+ - lib/drama_queen/producer.rb
76
+ - lib/drama_queen/version.rb
77
+ - spec/acceptance/drama_city_spec.rb
78
+ - spec/spec_helper.rb
79
+ - spec/unit/drama_queen/consumer_spec.rb
80
+ - spec/unit/drama_queen/exchange_spec.rb
81
+ - spec/unit/drama_queen/producer_spec.rb
82
+ - spec/unit/drama_queen_spec.rb
83
+ - test.rb
84
+ homepage: https://githb.com/turboladen/drama_queen
85
+ licenses:
86
+ - MIT
87
+ metadata: {}
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 2.1.9
105
+ signing_key:
106
+ specification_version: 4
107
+ summary: A simple, non-threaded, local-object pub-sub/observer with the ability to
108
+ pub-sub on topics. Topics can be any Ruby object.
109
+ test_files:
110
+ - spec/acceptance/drama_city_spec.rb
111
+ - spec/spec_helper.rb
112
+ - spec/unit/drama_queen/consumer_spec.rb
113
+ - spec/unit/drama_queen/exchange_spec.rb
114
+ - spec/unit/drama_queen/producer_spec.rb
115
+ - spec/unit/drama_queen_spec.rb
116
+ has_rdoc: