promiscuous 0.7.2 → 0.7.3

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,22 @@
1
+ module Promiscuous::Common::Lint::Base
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ attr_accessor :options
6
+ end
7
+
8
+ def initialize(options)
9
+ self.options = options
10
+ end
11
+
12
+ def lint
13
+ end
14
+
15
+ module ClassMethods
16
+ def use_option(attr)
17
+ define_method(attr) do
18
+ self.options[attr]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module Promiscuous::Common::Lint
2
+ autoload :Base, 'promiscuous/common/lint/base'
3
+ end
@@ -1,7 +1,4 @@
1
1
  module Promiscuous::Common
2
2
  autoload :Options, 'promiscuous/common/options'
3
-
4
- def self.lint(*args)
5
- Lint.lint(*args)
6
- end
3
+ autoload :Lint, 'promiscuous/common/lint'
7
4
  end
@@ -4,7 +4,7 @@ module Promiscuous::Publisher::Lint::AMQP
4
4
  def lint
5
5
  super
6
6
 
7
- pub_to = publisher_instance.to
7
+ pub_to = publisher.to
8
8
  if pub_to != to
9
9
  raise "#{publisher} publishes #{klass} to #{pub_to} instead of #{to}"
10
10
  end
@@ -1,22 +1,5 @@
1
1
  class Promiscuous::Publisher::Lint::Base
2
- attr_accessor :options
3
-
4
- def initialize(options)
5
- self.options = options
6
- end
7
-
8
- def publisher_instance
9
- @publisher_instance ||= publisher.new({})
10
- end
11
-
12
- def lint
13
- end
14
-
15
- def self.use_option(attr)
16
- define_method(attr) do
17
- self.options[attr]
18
- end
19
- end
2
+ include Promiscuous::Common::Lint::Base
20
3
 
21
4
  use_option(:publisher)
22
5
  end
@@ -1,4 +1,4 @@
1
- module Promiscuous::Publisher::Lint::ClassBind
1
+ module Promiscuous::Publisher::Lint::Class
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  def lint
@@ -11,4 +11,3 @@ module Promiscuous::Publisher::Lint::ClassBind
11
11
 
12
12
  included { use_option :klass }
13
13
  end
14
-
@@ -1,6 +1,6 @@
1
1
  module Promiscuous::Publisher::Lint
2
2
  autoload :Base, 'promiscuous/publisher/lint/base'
3
- autoload :ClassBind, 'promiscuous/publisher/lint/class_bind'
3
+ autoload :Class, 'promiscuous/publisher/lint/class'
4
4
  autoload :Attributes, 'promiscuous/publisher/lint/attributes'
5
5
  autoload :Polymorphic, 'promiscuous/publisher/lint/polymorphic'
6
6
  autoload :AMQP, 'promiscuous/publisher/lint/amqp'
@@ -17,8 +17,8 @@ module Promiscuous::Publisher::Lint
17
17
  classes.each do |klass, to|
18
18
  pub = get_publisher(klass)
19
19
 
20
- lint = Class.new(Base)
21
- lint.__send__(:include, ClassBind) if pub.include?(Promiscuous::Publisher::ClassBind)
20
+ lint = ::Class.new(Base)
21
+ lint.__send__(:include, Class) if pub.include?(Promiscuous::Publisher::Class)
22
22
  lint.__send__(:include, Attributes) if pub.include?(Promiscuous::Publisher::Attributes)
23
23
  lint.__send__(:include, Polymorphic) if pub.include?(Promiscuous::Publisher::Polymorphic)
24
24
  lint.__send__(:include, AMQP) if pub.include?(Promiscuous::Publisher::AMQP)
@@ -6,9 +6,10 @@ class Promiscuous::Publisher::Mock
6
6
  self.attributes = self.attributes + options[:attributes]
7
7
  end
8
8
  else
9
- class_attribute :attributes, :to
9
+ class_attribute :to, :attributes, :klass
10
10
 
11
11
  self.to = options[:to]
12
+ self.klass = options[:class]
12
13
  self.attributes = options[:attributes].to_a
13
14
 
14
15
  attr_accessor :id, :new_record
@@ -17,7 +18,13 @@ class Promiscuous::Publisher::Mock
17
18
  end
18
19
 
19
20
  def self.class_name
20
- name.split('::').last
21
+ if self.klass
22
+ self.klass
23
+ elsif name
24
+ class_name = "#{name.split('::').last}"
25
+ class_name = $1 if class_name =~ /^(.+)Publisher$/
26
+ class_name
27
+ end
21
28
  end
22
29
 
23
30
  def initialize
@@ -0,0 +1,21 @@
1
+ module Promiscuous::Subscriber::Lint::AMQP
2
+ extend ActiveSupport::Concern
3
+
4
+ def publisher
5
+ Promiscuous::Publisher::Mock.descendants.
6
+ select { |pub| pub.superclass == Promiscuous::Publisher::Mock }.
7
+ select { |pub| pub.to == from }.
8
+ tap { |pubs| raise "#{from} has multiple publishers: #{pubs}" if pubs.size > 1 }.
9
+ first
10
+ end
11
+
12
+ def lint
13
+ super
14
+
15
+ if check_publisher
16
+ raise "No publisher found for #{publisher}" if publisher.nil?
17
+ end
18
+ end
19
+
20
+ included { use_option :from }
21
+ end
@@ -0,0 +1,19 @@
1
+ module Promiscuous::Subscriber::Lint::Attributes
2
+ extend ActiveSupport::Concern
3
+
4
+ def lint
5
+ super
6
+
7
+ instance = subscriber.klass.new
8
+ subscriber.attributes.each do |attr|
9
+ instance.respond_to?("#{attr}=") or instance.__send__("#{attr}=")
10
+ end
11
+
12
+ if check_publisher
13
+ missing_attributes = subscriber.attributes - publisher.attributes
14
+ if missing_attributes.present?
15
+ raise "#{publisher} subscribes to non published attributes: #{missing_attributes.join(", ")}"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ class Promiscuous::Subscriber::Lint::Base
2
+ include Promiscuous::Common::Lint::Base
3
+
4
+ class_attribute :check_publisher
5
+ self.check_publisher = Promiscuous::Publisher::Mock.descendants.present?
6
+
7
+ use_option(:subscriber)
8
+ end
@@ -0,0 +1,13 @@
1
+ module Promiscuous::Subscriber::Lint::Class
2
+ extend ActiveSupport::Concern
3
+
4
+ def lint
5
+ super
6
+
7
+ if klass && subscriber.klass != klass
8
+ raise "Subscriber #{subscriber} does not replicate #{klass}"
9
+ end
10
+ end
11
+
12
+ included { use_option :klass }
13
+ end
@@ -0,0 +1,41 @@
1
+ module Promiscuous::Subscriber::Lint::Polymorphic
2
+ extend ActiveSupport::Concern
3
+
4
+ def parent_publisher
5
+ publisher
6
+ @parent_publisher
7
+ end
8
+
9
+ def publisher
10
+ @parent_publisher = super
11
+ if @parent_publisher
12
+ ([parent_publisher] + parent_publisher.descendants).
13
+ select { |pub| pub.class_name == subscriber.from_type }.
14
+ first
15
+ end
16
+ end
17
+
18
+ def lint
19
+ super
20
+
21
+ if check_publisher
22
+ subscriber_types = subscriber.descendants.map &:from_type
23
+ publisher_types = publisher.descendants.map &:class_name
24
+ missing_types = publisher_types - subscriber_types
25
+ if missing_types.present?
26
+ raise "#{publisher} misses some child types: #{missing_types.join(", ")}"
27
+ end
28
+ end
29
+
30
+ unless skip_polymorphic
31
+ subscriber.descendants.each do |pub|
32
+ self.class.new(options.merge(:publisher => pub,
33
+ :skip_polymorphic => true)).lint
34
+ end
35
+ end
36
+ end
37
+
38
+ included do
39
+ use_option :skip_polymorphic
40
+ end
41
+ end
@@ -0,0 +1,22 @@
1
+ module Promiscuous::Subscriber::Lint
2
+ autoload :Base, 'promiscuous/subscriber/lint/base'
3
+ autoload :Class, 'promiscuous/subscriber/lint/class'
4
+ autoload :Attributes, 'promiscuous/subscriber/lint/attributes'
5
+ autoload :Polymorphic, 'promiscuous/subscriber/lint/polymorphic'
6
+ autoload :AMQP, 'promiscuous/subscriber/lint/amqp'
7
+
8
+ def self.lint(binding_classes)
9
+ binding_classes.each do |from, klass|
10
+ sub = Promiscuous::Subscriber::AMQP.subscribers[from]
11
+ raise "#{from} has no subscriber" if sub.nil?
12
+
13
+ lint = ::Class.new(Base)
14
+ lint.__send__(:include, Class) if sub.include?(Promiscuous::Subscriber::Class)
15
+ lint.__send__(:include, Attributes) if sub.include?(Promiscuous::Subscriber::Attributes)
16
+ lint.__send__(:include, Polymorphic) if sub.include?(Promiscuous::Subscriber::Polymorphic)
17
+ lint.__send__(:include, AMQP) if sub.include?(Promiscuous::Subscriber::AMQP)
18
+ lint.new(:klass => klass, :subscriber => sub, :from => from).lint
19
+ end
20
+ true
21
+ end
22
+ end
@@ -6,11 +6,16 @@ module Promiscuous::Subscriber
6
6
  autoload :Class, 'promiscuous/subscriber/class'
7
7
  autoload :Envelope, 'promiscuous/subscriber/envelope'
8
8
  autoload :Error, 'promiscuous/subscriber/error'
9
+ autoload :Lint, 'promiscuous/subscriber/lint'
9
10
  autoload :Model, 'promiscuous/subscriber/model'
10
11
  autoload :Mongoid, 'promiscuous/subscriber/mongoid'
11
12
  autoload :Polymorphic, 'promiscuous/subscriber/polymorphic'
12
13
  autoload :Upsert, 'promiscuous/subscriber/upsert'
13
14
 
15
+ def self.lint(*args)
16
+ Lint.lint(*args)
17
+ end
18
+
14
19
  def self.get_subscriber_from(payload)
15
20
  sub = AMQP.subscriber_from(payload)
16
21
  if sub && defined?(Polymorphic) && sub.include?(Polymorphic)
@@ -1,3 +1,3 @@
1
1
  module Promiscuous
2
- VERSION = '0.7.2'
2
+ VERSION = '0.7.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: promiscuous
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -122,8 +122,8 @@ files:
122
122
  - lib/promiscuous/publisher/attributes.rb
123
123
  - lib/promiscuous/publisher/class.rb
124
124
  - lib/promiscuous/publisher/mongoid.rb
125
- - lib/promiscuous/publisher/lint/class_bind.rb
126
125
  - lib/promiscuous/publisher/lint/attributes.rb
126
+ - lib/promiscuous/publisher/lint/class.rb
127
127
  - lib/promiscuous/publisher/lint/amqp.rb
128
128
  - lib/promiscuous/publisher/lint/base.rb
129
129
  - lib/promiscuous/publisher/lint/polymorphic.rb
@@ -139,10 +139,16 @@ files:
139
139
  - lib/promiscuous/amqp/rubyamqp.rb
140
140
  - lib/promiscuous/amqp/bunny.rb
141
141
  - lib/promiscuous/publisher.rb
142
+ - lib/promiscuous/subscriber/lint.rb
142
143
  - lib/promiscuous/subscriber/attributes.rb
143
144
  - lib/promiscuous/subscriber/class.rb
144
145
  - lib/promiscuous/subscriber/mongoid.rb
145
146
  - lib/promiscuous/subscriber/error.rb
147
+ - lib/promiscuous/subscriber/lint/attributes.rb
148
+ - lib/promiscuous/subscriber/lint/class.rb
149
+ - lib/promiscuous/subscriber/lint/amqp.rb
150
+ - lib/promiscuous/subscriber/lint/base.rb
151
+ - lib/promiscuous/subscriber/lint/polymorphic.rb
146
152
  - lib/promiscuous/subscriber/mongoid/embedded.rb
147
153
  - lib/promiscuous/subscriber/active_record.rb
148
154
  - lib/promiscuous/subscriber/upsert.rb
@@ -151,7 +157,9 @@ files:
151
157
  - lib/promiscuous/subscriber/amqp.rb
152
158
  - lib/promiscuous/subscriber/base.rb
153
159
  - lib/promiscuous/subscriber/polymorphic.rb
160
+ - lib/promiscuous/common/lint.rb
154
161
  - lib/promiscuous/common/options.rb
162
+ - lib/promiscuous/common/lint/base.rb
155
163
  - lib/promiscuous/worker.rb
156
164
  - lib/promiscuous/railtie/replicate.rake
157
165
  - lib/promiscuous/railtie.rb