receptacle 0.2.0 → 0.3.0

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: 55b12e62420e5bd820d909846002084c473572d8
4
- data.tar.gz: 60385bc42c56b0770b22e7703232686fcc6a150f
3
+ metadata.gz: de42650ef4891b4f5cadb6a0ca4c357a8499b338
4
+ data.tar.gz: 9b266f6ed5637ae89aee2e5c9053ab0963015ca7
5
5
  SHA512:
6
- metadata.gz: 24ea362cfb9be687030b24877c04895f5901bb29534ed6a7d86c611d2c41c901fb62d9e56563beed50e098a44726abcfb23b2231c904cb770e14b5c030af1688
7
- data.tar.gz: 5532b99a99c6d49ca06c4f4e423ff2f9a4b75a092fe1775590a6b812967b0c7d056de0bbae5e0bc7a4270b8c9f1c53c66b10e69506a8eecf846bb88e77cac458
6
+ metadata.gz: 239ef17fba657fc3ccf5a87b01f840f8d6de7646bbee4daa3ca8e284c97137b7c348b7bc0069cd1e970df19062ccb13ff91b6922a02c6a763b434393b90e6187
7
+ data.tar.gz: d49b157c7427025e36aaf55ed1d0cbe878a6463723654b1de000c0272dfc72ecccaa61323b9907414a9b1811ee8ef9bfaa91c4dba345c6a2548440e0786112a4
data/.travis.yml CHANGED
@@ -9,27 +9,28 @@ rvm:
9
9
  jdk:
10
10
  - oraclejdk8
11
11
  env:
12
- - "JRUBY_OPTS='--dev'"
13
- - "JRUBY_OPTS='-Xcompile.invokedynamic=true'"
12
+ - "JRUBY_OPTS='--dev --debug'"
13
+ - "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
14
14
  matrix:
15
15
  exclude:
16
16
  - rvm: 2.1.10
17
17
  jdk: oraclejdk8
18
- env: "JRUBY_OPTS='-Xcompile.invokedynamic=true'"
18
+ env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
19
19
  - rvm: 2.2.6
20
20
  jdk: oraclejdk8
21
- env: "JRUBY_OPTS='-Xcompile.invokedynamic=true'"
21
+ env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
22
22
  - rvm: 2.3.3
23
23
  jdk: oraclejdk8
24
- env: "JRUBY_OPTS='-Xcompile.invokedynamic=true'"
24
+ env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
25
25
  - rvm: 2.4.0
26
26
  jdk: oraclejdk8
27
- env: "JRUBY_OPTS='-Xcompile.invokedynamic=true'"
27
+ env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
28
28
  allow_failures:
29
29
  - rvm: jruby-9.1.7.0
30
30
  jdk: oraclejdk8
31
- env: "JRUBY_OPTS='-Xcompile.invokedynamic=true'"
32
-
31
+ env: "JRUBY_OPTS='-Xcompile.invokedynamic=true --debug'"
33
32
  before_install:
34
33
  - gem update --system
35
34
  - gem install bundler -v 1.14.3
35
+ before_script:
36
+ - bundle exec danger
data/CHANGELOG.md CHANGED
@@ -4,20 +4,26 @@ Changelog
4
4
  master
5
5
  ---
6
6
 
7
+ 0.3.0
8
+ ---
9
+
10
+ * add danger
11
+ * also support higher arity methods (== method with more than one argument)
12
+
7
13
  0.2.0
8
14
  ---
9
15
 
10
- - update documentation
11
- - enable ruby 2.1+
16
+ * update documentation
17
+ * enable ruby 2.1+
12
18
 
13
19
  0.1.1
14
20
  ---
15
21
 
16
- - add changelog, update copyright
17
- - add test helper method `ensure_method_delegators` to make rspec stubs/mocks work as expected
22
+ * add changelog, update copyright
23
+ * add test helper method `ensure_method_delegators` to make rspec stubs/mocks work as expected
18
24
 
19
25
  0.1.0
20
26
  ---
21
27
 
22
- - initial release
28
+ * initial release
23
29
 
data/Dangerfile ADDED
@@ -0,0 +1,26 @@
1
+ # --------------------------------------------------------------------------------------------------------------------
2
+ # Has any changes happened inside the actual library code?
3
+ # --------------------------------------------------------------------------------------------------------------------
4
+ has_app_changes = !git.modified_files.grep(/lib/).empty?
5
+ has_test_changes = !git.modified_files.grep(/test/).empty?
6
+ is_version_bump = git.modified_files.sort == ["CHANGELOG.md", "lib/receptacle/version.rb"].sort
7
+
8
+ if has_app_changes && !has_test_changes && !is_version_bump
9
+ warn("Tests were not updated. That's OK if you're refactoring existing code.", sticky: false)
10
+ end
11
+
12
+ if !git.modified_files.include?("CHANGELOG.md") && has_app_changes
13
+ fail("Please include a CHANGELOG entry. \nYou can find it at [CHANGELOG.md](https://github.com/andreaseger/receptacle/blob/master/CHANGELOG.md).")
14
+ message "Note, we hard-wrap at 80 chars and use 2 spaces after the last line."
15
+ end
16
+
17
+ # Make it more obvious that a PR is a work in progress and shouldn't be merged yet
18
+ warn("PR is classed as Work in Progress") if github.pr_title.include? "WIP"
19
+
20
+ # Warn when there is a big PR
21
+ warn("Big PR") if git.lines_of_code > 500
22
+
23
+ commit_lint.check warn: :all, disable: [:subject_cap]
24
+
25
+ # rubocop
26
+ rubocop.lint "*"
data/Gemfile CHANGED
@@ -2,3 +2,9 @@
2
2
  source 'https://rubygems.org'
3
3
 
4
4
  gemspec
5
+
6
+ group :development, :test do
7
+ gem 'danger'
8
+ gem 'danger-commit_lint'
9
+ gem 'danger-rubocop'
10
+ end
data/Guardfile CHANGED
@@ -19,7 +19,8 @@ group :red_green_refactor, halt_on_fail: true do
19
19
  guard :minitest do
20
20
  # with Minitest::Unit
21
21
  watch(%r{^test/(.*)\/?test_(.*)\.rb$})
22
- watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
22
+ # watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
23
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { 'test' }
23
24
  watch(%r{^test/test_helper\.rb$}) { 'test' }
24
25
  watch(%r{^test/fixture\.rb$}) { 'test' }
25
26
  end
@@ -13,6 +13,8 @@ module Receptacle
13
13
  attr_reader :before_method_name
14
14
  # @return [Symbol] name of the after action method
15
15
  attr_reader :after_method_name
16
+ # @return [Integer] arity of strategy method according to https://ruby-doc.org/core-2.3.3/Method.html#method-i-arity
17
+ attr_reader :arity
16
18
 
17
19
  def initialize(method_name:, strategy:, before_wrappers:, after_wrappers:)
18
20
  @strategy = strategy
@@ -24,6 +26,7 @@ module Receptacle
24
26
  @wrappers = before_wrappers | after_wrappers
25
27
  @skip_before_wrappers = before_wrappers.empty?
26
28
  @skip_after_wrappers = after_wrappers.empty?
29
+ @arity = strategy.new.method(method_name).arity
27
30
  end
28
31
 
29
32
  # @return [Boolean] true if no before wrappers need to be applied for this method
@@ -26,6 +26,8 @@ module Receptacle
26
26
  method_cache = __build_method_call_cache(method_name)
27
27
  if method_cache.wrappers.nil? || method_cache.wrappers.empty?
28
28
  __define_shortcut_method(method_cache)
29
+ elsif method_cache.arity.abs > 1
30
+ __define_full_method_high_arity(method_cache)
29
31
  else
30
32
  __define_full_method(method_cache)
31
33
  end
@@ -57,7 +59,7 @@ module Receptacle
57
59
  end
58
60
  end
59
61
 
60
- # build method to mediate method calls to strategy with full wrapper support
62
+ # build method to mediate method calls of arity 1 to strategy with full wrapper support
61
63
  # @param method_cache [MethodCache] method_cache of the method to be build
62
64
  # @return [void]
63
65
  def __define_full_method(method_cache)
@@ -68,31 +70,49 @@ module Receptacle
68
70
  end
69
71
  end
70
72
 
73
+ # build method to mediate method calls of higher arity to strategy with full wrapper support
74
+ # @param method_cache [MethodCache] method_cache of the method to be build
75
+ # @return [void]
76
+ def __define_full_method_high_arity(method_cache)
77
+ define_singleton_method(method_cache.method_name) do |*args, &inner_block|
78
+ __run_wrappers(method_cache, args, true) do |*call_args|
79
+ method_cache.strategy.new.public_send(method_cache.method_name, *call_args, &inner_block)
80
+ end
81
+ end
82
+ end
83
+
71
84
  # runtime method to call before and after wrapper in correct order
72
85
  # @param method_cache [MethodCache] method_cache for the current method
73
86
  # @param input_args input parameter of the repository method call
87
+ # @param high_arity [Boolean] if are intended for a higher arity method
74
88
  # @return strategy method return value after all wrappers where applied
75
- def __run_wrappers(method_cache, input_args)
89
+ def __run_wrappers(method_cache, input_args, high_arity = false)
76
90
  wrappers = method_cache.wrappers.map(&:new)
77
- args = if method_cache.skip_before_wrappers?
78
- input_args
79
- else
80
- __run_before_wrappers(wrappers, method_cache.before_method_name, input_args)
81
- end
82
- ret = yield(args)
91
+ args =
92
+ if method_cache.skip_before_wrappers?
93
+ input_args
94
+ else
95
+ __run_before_wrappers(wrappers, method_cache.before_method_name, input_args, high_arity)
96
+ end
97
+ ret = high_arity ? yield(*args) : yield(args)
83
98
  return ret if method_cache.skip_after_wrappers?
84
- __run_after_wrappers(wrappers, method_cache.after_method_name, args, ret)
99
+ __run_after_wrappers(wrappers, method_cache.after_method_name, args, ret, high_arity)
85
100
  end
86
101
 
87
102
  # runtime method to execute all before wrappers
88
103
  # @param wrappers [Array] all wrapper instances to be executed
89
104
  # @param method_name [Symbol] name of method to be executed on wrappers
90
105
  # @param args input args of the repository method
106
+ # @param high_arity [Boolean] if are intended for a higher arity method
91
107
  # @return processed method args by before wrappers
92
- def __run_before_wrappers(wrappers, method_name, args)
108
+ def __run_before_wrappers(wrappers, method_name, args, high_arity = false)
93
109
  wrappers.each do |wrapper|
94
110
  next unless wrapper.respond_to?(method_name)
95
- args = wrapper.public_send(method_name, args)
111
+ args = if high_arity
112
+ wrapper.public_send(method_name, *args)
113
+ else
114
+ wrapper.public_send(method_name, args)
115
+ end
96
116
  end
97
117
  args
98
118
  end
@@ -102,11 +122,16 @@ module Receptacle
102
122
  # @param method_name [Symbol] name of method to be executed on wrappers
103
123
  # @param args input args to the strategy method (after processing in before wrappers)
104
124
  # @param return_value return value of strategy method
125
+ # @param high_arity [Boolean] if are intended for a higher arity method
105
126
  # @return processed return value by all after wrappers
106
- def __run_after_wrappers(wrappers, method_name, args, return_value)
127
+ def __run_after_wrappers(wrappers, method_name, args, return_value, high_arity = false)
107
128
  wrappers.reverse_each do |wrapper|
108
129
  next unless wrapper.respond_to?(method_name)
109
- return_value = wrapper.public_send(method_name, return_value, args)
130
+ return_value = if high_arity
131
+ wrapper.public_send(method_name, return_value, *args)
132
+ else
133
+ wrapper.public_send(method_name, return_value, args)
134
+ end
110
135
  end
111
136
  return_value
112
137
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Receptacle
3
- VERSION = "0.2.0".freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: receptacle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Eger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-08 00:00:00.000000000 Z
11
+ date: 2017-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -177,6 +177,7 @@ files:
177
177
  - ".travis.yml"
178
178
  - CHANGELOG.md
179
179
  - CODE_OF_CONDUCT.md
180
+ - Dangerfile
180
181
  - Gemfile
181
182
  - Guardfile
182
183
  - LICENSE.txt