services 0.2.6 → 0.2.7

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
  SHA1:
3
- metadata.gz: 6f4299a00ac5d36b3ca4eb252b7d389a0b11b36f
4
- data.tar.gz: 1ddd50f90a9bbda3abea088edc727173ddba9c13
3
+ metadata.gz: dbbec960a41d81815da15861aa4e5abf3941cd46
4
+ data.tar.gz: 4e390c06247de93c8eb6e45050392566767a2903
5
5
  SHA512:
6
- metadata.gz: 848c4ee5ee12f5e5f0830716d49a16d4f9733620faf5be6dc1623d8ead6bfffbdbcb296d540f69ce1484efa9a83ab9ab504f388b8a9e56e7c5d15a8125ecba85
7
- data.tar.gz: a53a702dc0f76feffc578e28488f0d10857854f9d13beaecf2702a362be31ba77410b0c3ba52e2292e6cb9536db96cb9b76007d5d220eeaa4a2a81c403f26b51
6
+ metadata.gz: 998625c59ca525eb537f52d5317cff7d0ac8cb68f787bb1b46dbf16f33a00917eae854ee24e27763a13422e22b6b62a4e65bda26213e8a527f0d356a46e7adea
7
+ data.tar.gz: 73db3259b704dc5b18a3468561c634cfc84d71ffea2288df47523dd9eda51379ae498a96aa470751f2daffc85d5ee2dc5948d312888d10278aa9dfb9138832ec
data/Guardfile CHANGED
@@ -1,4 +1,4 @@
1
- guard 'rspec', cmd: 'bundle exec rspec', failed_mode: :none, all_after_pass: true, all_on_start: true do
1
+ guard 'rspec', cmd: 'bundle exec rspec' do
2
2
  # Specs
3
3
  watch(%r(^spec/.+_spec\.rb$))
4
4
  watch('spec/spec_helper.rb') { 'spec' }
@@ -2,7 +2,8 @@ module Services
2
2
  class Base
3
3
  module CallLogger
4
4
  def call(*args)
5
- log "START with args: #{args}"
5
+ log "START with args #{args}"
6
+ log "CALLED BY #{caller}"
6
7
  start = Time.now
7
8
  begin
8
9
  result = super
@@ -24,7 +25,7 @@ module Services
24
25
 
25
26
  def log_exception(e, cause = false)
26
27
  log "#{'caused by: ' if cause}#{e.class}: #{e.message}"
27
- if e.respond_to?(:cause) && !e.cause.nil?
28
+ if e.respond_to?(:cause) && e.cause
28
29
  e.backtrace.take(5).each do |line|
29
30
  log " #{line}"
30
31
  end
@@ -35,6 +36,13 @@ module Services
35
36
  end
36
37
  end
37
38
  end
39
+
40
+ def caller
41
+ caller_location = caller_locations(2, 1).first
42
+ caller_path = caller_location.path
43
+ caller_path = caller_path.sub(%r(\A#{Regexp.escape Rails.root.to_s}/), '') if defined?(Rails)
44
+ [caller_path, caller_location.lineno].join(':')
45
+ end
38
46
  end
39
47
  end
40
48
  end
@@ -1,3 +1,3 @@
1
1
  module Services
2
- VERSION = '0.2.6'
2
+ VERSION = '0.2.7'
3
3
  end
data/services.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |gem|
21
21
  gem.test_files = gem.files.grep(%r(^(test|spec|features)/))
22
22
  gem.require_paths = ['lib']
23
23
 
24
- gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'rake', '>= 0.9.0'
25
25
  gem.add_development_dependency 'guard-rspec', '~> 4.2'
26
26
  gem.add_development_dependency 'rspec', '~> 3.0'
27
27
  gem.add_development_dependency 'sidekiq', '~> 3.0'
@@ -170,9 +170,41 @@ describe Services::Base do
170
170
  end
171
171
  end
172
172
 
173
- context 'logging exceptions' do
173
+ context 'logging' do
174
+ it 'logs start with args and end with duration' do
175
+ service = EmptyService.new
176
+ logs = []
177
+ allow(service).to receive(:log) do |message, *|
178
+ logs << message
179
+ end
180
+ service.call 'foo', 'bar'
181
+ expect(logs.first).to eq('START with args ["foo", "bar"]')
182
+ expect(logs.last).to eq('END after 0.0 seconds')
183
+ end
184
+
185
+ it 'logs the caller' do
186
+ service_calling_service, called_service = ServiceCallingService.new, EmptyService.new
187
+ logs = []
188
+ allow(called_service).to receive(:log) do |message, *|
189
+ logs << message
190
+ end
191
+
192
+ # When Rails is not defined, the complete caller path should be logged
193
+ service_calling_service.call called_service
194
+ expect(logs).to include(/\ACALLED BY #{Regexp.escape(PROJECT_ROOT.join(SERVICES_PATH).to_s)}:\d+/)
195
+
196
+ # When Rails is defined, only the caller path relative to Rails.root is logged
197
+ class Rails
198
+ def self.root; PROJECT_ROOT; end
199
+ end
200
+ logs = []
201
+ service_calling_service.call called_service
202
+ expect(logs).to include(/\ACALLED BY #{Regexp.escape(SERVICES_PATH)}:\d+/)
203
+ Object.send :remove_const, :Rails
204
+ end
205
+
174
206
  if RUBY_VERSION > '2.1'
175
- it 'logs the exception cause(s) as well' do
207
+ it 'logs exceptions and exception causes' do
176
208
  service = NestedExceptionService.new
177
209
  logs = []
178
210
  allow(service).to receive(:log) do |message, *|
data/spec/spec_helper.rb CHANGED
@@ -2,10 +2,15 @@ require 'rspec'
2
2
  require 'tries'
3
3
  require 'redis'
4
4
  require 'sidekiq'
5
+
5
6
  require_relative '../lib/services'
6
- require_relative 'support/test_services'
7
7
  require_relative 'support/helpers'
8
8
 
9
+ SERVICES_PATH = File.join('support', 'test_services.rb')
10
+ require_relative SERVICES_PATH
11
+
12
+ PROJECT_ROOT = Pathname.new(File.expand_path('..', __FILE__))
13
+
9
14
  support_dir = Pathname.new(File.expand_path('../support', __FILE__))
10
15
  log_dir = support_dir.join('log')
11
16
 
@@ -35,18 +40,19 @@ RSpec.configure do |config|
35
40
  config.order = 'random'
36
41
 
37
42
  config.before :suite do
38
- # Start Redis
39
- redis_options = {
40
- daemonize: 'yes',
41
- port: redis_port,
42
- dir: support_dir,
43
- dbfilename: 'redis.rdb',
44
- logfile: log_dir.join('redis.log'),
45
- pidfile: redis_pidfile
46
- }
47
- redis = support_dir.join('redis-server')
48
- # TODO: Redis should be started here unless Rspec is executed by Travis CI
49
- system "#{redis} #{options_hash_to_string(redis_options)}"
43
+ unless ENV['TRAVIS']
44
+ # Start Redis
45
+ redis_options = {
46
+ daemonize: 'yes',
47
+ port: redis_port,
48
+ dir: support_dir,
49
+ dbfilename: 'redis.rdb',
50
+ logfile: log_dir.join('redis.log'),
51
+ pidfile: redis_pidfile
52
+ }
53
+ redis = support_dir.join('redis-server')
54
+ system "#{redis} #{options_hash_to_string(redis_options)}"
55
+ end
50
56
 
51
57
  # Start Sidekiq
52
58
  sidekiq_options = {
@@ -69,13 +75,14 @@ RSpec.configure do |config|
69
75
  sleep 1
70
76
  end
71
77
 
72
- # Stop Redis
73
- redis_cli = support_dir.join('redis-cli')
74
- # TODO: Redis should be stopped here unless Rspec is executed by Travis CI
75
- system "#{redis_cli} -p #{redis_port} shutdown"
76
- while File.exist?(redis_pidfile)
77
- puts 'Waiting for Redis to shut down...'
78
- sleep 1
78
+ unless ENV['TRAVIS']
79
+ # Stop Redis
80
+ redis_cli = support_dir.join('redis-cli')
81
+ system "#{redis_cli} -p #{redis_port} shutdown"
82
+ while File.exist?(redis_pidfile)
83
+ puts 'Waiting for Redis to shut down...'
84
+ sleep 1
85
+ end
79
86
  end
80
87
 
81
88
  # Truncate log files
@@ -47,12 +47,23 @@ module Services
47
47
  end
48
48
  end
49
49
 
50
+ class EmptyService < Services::Base
51
+ def call(*args)
52
+ end
53
+ end
54
+
50
55
  class ErrorService < Services::Base
51
56
  def call
52
57
  raise Error.new('I am a service error.')
53
58
  end
54
59
  end
55
60
 
61
+ class ServiceCallingService < Services::Base
62
+ def call(service)
63
+ service.call
64
+ end
65
+ end
66
+
56
67
  class UniqueService < Services::Base
57
68
  def call
58
69
  check_uniqueness!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: services
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Meurer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-12 00:00:00.000000000 Z
11
+ date: 2014-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.9.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.9.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: guard-rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  version: '0'
173
173
  requirements: []
174
174
  rubyforge_project:
175
- rubygems_version: 2.2.2
175
+ rubygems_version: 2.4.1
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: ''