intercept 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e56f4f1b02dc729c6fd52202cb2b66815dcb9c4d69ae0506c8c47d31f9b68b6f
4
- data.tar.gz: 7074c0a9068a95c5a3e8fdd7a21bffcac609f4022e04b2d24376c797bbef9742
3
+ metadata.gz: 0d2f2814a4f63bdb2c0ee135547bd804aa32cb8cf7770850eb2f37d8af3a7dbe
4
+ data.tar.gz: e89c860c4bd74276d40e7424a3ea103d8a6577a2174c3180a63a3fa724ca131e
5
5
  SHA512:
6
- metadata.gz: 32c8330a345f09525f72f3302adee6fa15ac8d93fbf37a07e4a3adec06a9d782a17bbd3fec3a9e4a049e3e908c9f5ab73b336de0bd109ae4369bce724f69d411
7
- data.tar.gz: ba6ff84415a592f27b46d786a9292fc3a33d9d4232f6fc7078b8e474dd22067d2ffe38c60256b1958d175cd7bdca07fc0e0869efcad875e45b8589ea525945d6
6
+ metadata.gz: 537ecdbab92598bd4fe189228f87d9c5292dcf2e9b109ae7d565df8163e0333e7cf20c12e922601558694b06032688da17f8c46cd1cca2743479e298c375424f
7
+ data.tar.gz: c9ac638c4391ced33252dda5e65329aeb8e337b08fb1f052c6431dc307ef0c8e05209479f0dafbb5564c643f89b539504b475ecbbe4ae32d28405fb45734dafa
data/.gitignore CHANGED
@@ -10,4 +10,5 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  .idea
13
- *.gem
13
+ *.gem
14
+ .byebug_history
@@ -0,0 +1,27 @@
1
+ module Intercept
2
+ module Decorator
3
+ class AddSuffix
4
+ attr_reader :suffix
5
+
6
+ def initialize(suffix)
7
+ @suffix = suffix
8
+ end
9
+
10
+ def decorate(value)
11
+ return value unless String === value
12
+
13
+ "#{value}#{suffix.call}"
14
+ end
15
+
16
+ private
17
+
18
+ def parse_suffix(suffix)
19
+ if suffix.respond_to?(:call)
20
+ suffix
21
+ else
22
+ raise '@param suffix must respond to #call'
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Intercept
4
+ class DecoratorBuilder
5
+ def self.from_hash(decorator)
6
+ return unless decorator
7
+ decorator_class = get_class(decorator[:name])
8
+ decorator_class.new(decorator[:args])
9
+ end
10
+
11
+ def self.get_class(symbol)
12
+ Object.const_get "Intercept::Decorator::#{symbol.to_s.split('_').map{ |w| w.capitalize }.join}"
13
+ end
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module Intercept
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
@@ -4,6 +4,8 @@ require 'intercept/strategy_builder'
4
4
  require 'intercept/strategy/replace'
5
5
  require 'intercept/strategy/mapper'
6
6
  require 'intercept/strategy/white_list'
7
+ require 'intercept/decorator_builder'
8
+ require 'intercept/decorator/add_suffix'
7
9
 
8
10
  module Intercept
9
11
  # Base class of the intercept module.
@@ -19,7 +21,7 @@ module Intercept
19
21
  @decorator_map = decorator_map
20
22
 
21
23
  if registration_method != 'intercept' && registration_method != :intercept
22
- define_singleton_method(registration_method) { |message| delivering_message(message) }
24
+ define_singleton_method(registration_method) { |message| intercept(message) }
23
25
  end
24
26
  end
25
27
 
@@ -11,6 +11,14 @@ class InterceptBuilder
11
11
  end
12
12
  end
13
13
 
14
+ description[:decoration].each do |unit|
15
+ decorator = Intercept::DecoratorBuilder.from_hash(unit[:decorator])
16
+
17
+ unit[:fields].each do |field|
18
+ decorator_map[field] = decorator
19
+ end
20
+ end
21
+
14
22
  Intercept::Worker.new(callback, interceptor_map, decorator_map)
15
23
  end
16
24
  end
@@ -1,15 +1,16 @@
1
1
  RSpec.describe Intercept do
2
2
  class TestMessage
3
- attr_accessor :to, :bcc
3
+ attr_accessor :to, :bcc, :subject
4
4
 
5
- def initialize(to, bcc)
6
- @to = to; @bcc = bcc
5
+ def initialize(to, bcc, subject)
6
+ @to = to; @bcc = bcc; @subject = subject
7
7
  end
8
8
  end
9
9
 
10
10
  let(:white_list) { Proc.new { [Regexp.new('^\\S+@me.in$'), Regexp.new('^\\S+@me.com$')] } }
11
11
  let(:mapper) { Proc.new { { Regexp.new('^\\S+.g.p@you.com$') => 'g.p@you.in' } } }
12
12
  let(:replace) { Proc.new { %w(g.p@me.in k.@me.in) } }
13
+ let(:suffix) { Proc.new { '_testing' } }
13
14
 
14
15
  let(:interceptor_description) {
15
16
  {
@@ -41,7 +42,15 @@ RSpec.describe Intercept do
41
42
  }
42
43
  }
43
44
  ],
44
- decoration: []
45
+ decoration: [
46
+ {
47
+ fields: [:subject],
48
+ decorator: {
49
+ name: :add_suffix,
50
+ args: suffix
51
+ }
52
+ }
53
+ ]
45
54
  }
46
55
  }
47
56
 
@@ -58,23 +67,29 @@ RSpec.describe Intercept do
58
67
  end
59
68
 
60
69
  it 'when white_list is enough' do
61
- message = TestMessage.new(%w(a@a.a a@me.in b@b.b a@me.com), %w(a@a.a a@me.in b@b.b a@me.com))
62
- interceptor.intercept(message)
70
+ message = TestMessage.new(%w(a@a.a a@me.in b@b.b a@me.com), %w(a@a.a a@me.in b@b.b a@me.com), 'some_subject')
71
+ interceptor.delivering_message(message)
63
72
  expect(message.to).to eq(%w(a@me.in a@me.com))
64
73
  expect(message.bcc).to eq(%w(a@me.in a@me.com))
65
74
  end
66
75
 
67
76
  it 'when mapper is enough' do
68
- message = TestMessage.new(%w(a@a.a 1.g.p@you.in b@b.b 1.g.p@you.com), %w(a@a.a 1.g.p@you.in b@b.b 1.g.p@you.com))
69
- interceptor.intercept(message)
77
+ message = TestMessage.new(%w(a@a.a 1.g.p@you.in b@b.b 1.g.p@you.com), %w(a@a.a 1.g.p@you.in b@b.b 1.g.p@you.com), 'some_subject')
78
+ interceptor.delivering_message(message)
70
79
  expect(message.to).to eq(%w(g.p@you.in))
71
80
  expect(message.bcc).to eq(%w(g.p@you.in))
72
81
  end
73
82
 
74
83
  it 'when fallback is needed' do
75
- message = TestMessage.new(%w(a@a.a 1.a.p@you.in b@b.b 1.a.p@you.com), %w(a@a.a 1.a.p@you.in b@b.b 1.a.p@you.com))
76
- interceptor.intercept(message)
84
+ message = TestMessage.new(%w(a@a.a 1.a.p@you.in b@b.b 1.a.p@you.com), %w(a@a.a 1.a.p@you.in b@b.b 1.a.p@you.com), 'some_subject')
85
+ interceptor.delivering_message(message)
77
86
  expect(message.to).to eq(%w(g.p@me.in k.@me.in))
78
87
  expect(message.bcc).to eq([])
79
88
  end
89
+
90
+ it 'when add_suffix decorator is used' do
91
+ message = TestMessage.new(%w(a@a.a a@me.in b@b.b a@me.com), %w(a@a.a a@me.in b@b.b a@me.com), 'some_subject')
92
+ interceptor.delivering_message(message)
93
+ expect(message.subject).to eq('some_subject_testing')
94
+ end
80
95
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: intercept
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gemin Patel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-22 00:00:00.000000000 Z
11
+ date: 2018-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,6 +72,8 @@ files:
72
72
  - bin/setup
73
73
  - intercept.gemspec
74
74
  - lib/intercept.rb
75
+ - lib/intercept/decorator/add_suffix.rb
76
+ - lib/intercept/decorator_builder.rb
75
77
  - lib/intercept/strategy/mapper.rb
76
78
  - lib/intercept/strategy/replace.rb
77
79
  - lib/intercept/strategy/white_list.rb
@@ -101,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
103
  version: '0'
102
104
  requirements: []
103
105
  rubyforge_project:
104
- rubygems_version: 2.7.7
106
+ rubygems_version: 2.7.8
105
107
  signing_key:
106
108
  specification_version: 4
107
109
  summary: Intercept any ruby object