jace 0.0.2 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e48246a546ecbb574464b1e411d4d72c30369eda539c121309d02c9f6d47978e
4
- data.tar.gz: 42b96e64f9a04f1e4b0d6eb3430044890ea18b48648bde0c9189be07867c2630
3
+ metadata.gz: a538f92589b4feb4a08d1f8521f93c34979c1e5e80b14edb7aaeeec6c05e66a0
4
+ data.tar.gz: 1de3fa76bdbf09d5488cec3e09ec4a6074377c2134ccd3311591057bd45e1903
5
5
  SHA512:
6
- metadata.gz: 70c38cdaaa607c953d94ce21ad5acead8692e33a383d01d2cb5301fa7ace4dfb7e48c9cd4ec5179c1f1a008277379107374d48931dd604ba9589398ac4973312
7
- data.tar.gz: 70785d17966a037cabf6f8f092b23df4215b129265de4fd57f141511bd926596ff1fd9e31340db464d6d0a7e95ba283ff7ef12c3fd4b6fbd0fa5e7006f30fb6f
6
+ metadata.gz: 3b6d12aa27caa2ee4db4ef93404b40aea0b1d5cf5a581ab309f588b79a5390aaa1baa1ea399bd9fe8b771ee2bc354f7dc5b53456e5bdf2f1a06092a4c881e913
7
+ data.tar.gz: a6a260fefb1cae9ed26d8643961456dd1a7d90186bfddf92aaaa0af86b71c0b21a1edbd8e717fd947f55037f32a1abbd413af9814c1a716eb81afea526ab5f25
data/.circleci/config.yml CHANGED
@@ -1,6 +1,11 @@
1
1
  version: 2
2
+ workflows:
3
+ version: 2
4
+ test:
5
+ jobs:
6
+ - build-and-release
2
7
  jobs:
3
- build:
8
+ test:
4
9
  docker:
5
10
  - image: darthjee/circleci_ruby_gems:0.5.2
6
11
  environment:
@@ -34,3 +39,22 @@ jobs:
34
39
  - run:
35
40
  name: Check unit tests
36
41
  command: check_specs
42
+ build-and-release:
43
+ docker:
44
+ - image: darthjee/circleci_ruby_gems:0.5.2
45
+ environment:
46
+ PROJECT: jace
47
+ steps:
48
+ - checkout
49
+ - run:
50
+ name: Signin
51
+ command: scripts/build.sh signin
52
+ - run:
53
+ name: Degub
54
+ command: cat ~/.gem/credentials
55
+ - run:
56
+ name: Build Gem
57
+ command: scripts/build.sh build
58
+ - run:
59
+ name: Push Gem
60
+ command: scripts/build.sh push
data/.rubocop.yml CHANGED
@@ -39,6 +39,7 @@ RSpec/NestedGroups:
39
39
  RSpec/InstanceVariable:
40
40
  Exclude:
41
41
  - 'spec/lib/jace/executer_spec.rb'
42
+ - 'spec/lib/jace/dispatcher_spec.rb'
42
43
 
43
44
  Naming/MemoizedInstanceVariableName:
44
45
  Exclude:
data/README.md CHANGED
@@ -11,7 +11,7 @@ Sinclair
11
11
 
12
12
  Yard Documentation
13
13
  -------------------
14
- [https://www.rubydoc.info/gems/jace/0.0.2](https://www.rubydoc.info/gems/jace/0.0.2)
14
+ [https://www.rubydoc.info/gems/jace/0.0.3](https://www.rubydoc.info/gems/jace/0.0.3)
15
15
 
16
16
  Installation
17
17
  ---------------
@@ -1,2 +1,3 @@
1
1
  ignore:
2
2
  - lib/jace/version.rb
3
+ - lib/jace.rb
data/config/yardstick.yml CHANGED
@@ -1,4 +1,4 @@
1
- threshold: 90
1
+ threshold: 84.6
2
2
  require_exact_threshold: false
3
3
  rules:
4
4
  ApiTag::Presence:
data/lib/jace.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  # @api public
4
4
  # @author darthjee
5
5
  module Jace
6
- autoload :VERSION, 'jace/version'
7
- autoload :Executer, 'jace/executer'
6
+ autoload :VERSION, 'jace/version'
7
+ autoload :Executer, 'jace/executer'
8
+ autoload :Dispatcher, 'jace/dispatcher'
8
9
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jace
4
+ # @api public
5
+ # @author Darthjee
6
+ #
7
+ # Class responsible for dispatching the call of events
8
+ class Dispatcher
9
+ # @param before [Symbol,Proc,Array] all the methods / proc
10
+ # to be executed before block call
11
+ # @param after [Symbol,Proc,Array] all the methods / proc
12
+ # to be executed after block call
13
+ def initialize(before: [], after: [])
14
+ @before = [before].flatten.compact
15
+ @after = [after].flatten.compact
16
+ end
17
+
18
+ # Dispatch the event call on a context
19
+ #
20
+ # @param context [Object] Object where the procs / methods
21
+ # will be called on
22
+ # @block [Proc] bloc to be performed between befores and afters
23
+ #
24
+ # @return [Object] result of block call
25
+ def dispatch(context, &block)
26
+ Executer.call(
27
+ before: before,
28
+ after: after,
29
+ context: context,
30
+ &block
31
+ )
32
+ end
33
+
34
+ private
35
+
36
+ attr_reader :before, :after
37
+ end
38
+ end
data/lib/jace/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jace
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.3'
5
5
  end
data/scripts/build.sh ADDED
@@ -0,0 +1,47 @@
1
+ #!/bin/bash
2
+
3
+ function version() {
4
+ echo $(cat lib/$PROJECT/version.rb | grep VERSION | sed -e "s/.*'\\(.*\\)'.*/\\1/g")
5
+ }
6
+
7
+ function isTagged() {
8
+ VERSION=$(version)
9
+ TAG=$(git tag | tail -n 1)
10
+
11
+ if [ $VERSION = $TAG ]; then
12
+ return 0
13
+ else
14
+ return 1
15
+ fi
16
+ }
17
+
18
+ ACTION=$1
19
+
20
+ case $ACTION in
21
+ "signin")
22
+ mkdir ~/.gem
23
+ echo "---" > ~/.gem/credentials
24
+ echo ":rubygems_api_key: $RUBY_GEMS_API_KEY" >> ~/.gem/credentials
25
+ chmod 600 ~/.gem/credentials
26
+ ;;
27
+ "build")
28
+ if $(isTagged); then
29
+ rake build
30
+ else
31
+ echo version did not change
32
+ fi
33
+ ;;
34
+ "push")
35
+ if $(isTagged); then
36
+ VERSION=$(version)
37
+ gem push "pkg/$PROJECT-$VERSION.gem"
38
+ else
39
+ echo version did not change
40
+ fi
41
+ ;;
42
+ *)
43
+ echo Usage:
44
+ echo "$0 build # builds gem"
45
+ echo "$0 push # pushes gem"
46
+ ;;
47
+ esac
@@ -0,0 +1,157 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Jace::Dispatcher do
6
+ subject(:dispatcher) do
7
+ described_class.new(
8
+ before: before,
9
+ after: after
10
+ )
11
+ end
12
+
13
+ let(:before) { nil }
14
+ let(:after) { nil }
15
+ let(:person) { Person.new }
16
+
17
+ describe '#dispatch' do
18
+ context 'without before or after' do
19
+ let(:result) do
20
+ described_class.new.dispatch(person) { 10 }
21
+ end
22
+
23
+ it 'returns re result of block call' do
24
+ expect(result).to eq(10)
25
+ end
26
+
27
+ it 'executes in current context ignoring given context' do
28
+ expect(described_class.new.dispatch(person) { self })
29
+ .to eq(self)
30
+ end
31
+ end
32
+
33
+ context 'with before option' do
34
+ context 'with symbol' do
35
+ let(:before) { :init_age }
36
+
37
+ let(:result) do
38
+ dispatcher.dispatch(person) { person.age }
39
+ end
40
+
41
+ it 'returns result after running before code' do
42
+ expect(result).to eq(1)
43
+ end
44
+
45
+ it 'changes state of context object' do
46
+ expect { result }.to change(person, :age)
47
+ .from(nil).to(1)
48
+ end
49
+ end
50
+
51
+ context 'with block' do
52
+ let(:block) { proc { @age = 10 } }
53
+ let(:before) { block }
54
+
55
+ let(:result) do
56
+ dispatcher.dispatch(person) { person.age }
57
+ end
58
+
59
+ it 'returns result after running before code' do
60
+ expect(result).to eq(10)
61
+ end
62
+
63
+ it 'changes state of context object' do
64
+ expect { result }.to change(person, :age)
65
+ .from(nil).to(10)
66
+ end
67
+ end
68
+
69
+ context 'with array' do
70
+ let(:block) { proc { @brothers = @age ? 2 : 10 } }
71
+ let(:before) { [:init_age, block] }
72
+
73
+ let(:result) do
74
+ dispatcher.dispatch(person) do
75
+ person.age + person.brothers
76
+ end
77
+ end
78
+
79
+ it 'returns result after running all before code' do
80
+ expect(result).to eq(3)
81
+ end
82
+
83
+ it 'changes state of context object by block call' do
84
+ expect { result }.to change(person, :brothers)
85
+ .from(0).to(2)
86
+ end
87
+
88
+ it 'changes state of context object by method call' do
89
+ expect { result }.to change(person, :age)
90
+ .from(nil).to(1)
91
+ end
92
+ end
93
+ end
94
+
95
+ context 'with after option' do
96
+ context 'with symbol' do
97
+ let(:after) { :init_age }
98
+
99
+ let(:result) do
100
+ dispatcher.dispatch(person) { person.age }
101
+ end
102
+
103
+ it 'returns result before running after code' do
104
+ expect(result).to be_nil
105
+ end
106
+
107
+ it 'changes state of context object' do
108
+ expect { result }.to change(person, :age)
109
+ .from(nil).to(1)
110
+ end
111
+ end
112
+
113
+ context 'with block' do
114
+ let(:block) { proc { @age = 10 } }
115
+ let(:after) { block }
116
+
117
+ let(:result) do
118
+ dispatcher.dispatch(person) { person.age }
119
+ end
120
+
121
+ it 'returns result before running after code' do
122
+ expect(result).to be_nil
123
+ end
124
+
125
+ it 'changes state of context object' do
126
+ expect { result }.to change(person, :age)
127
+ .from(nil).to(10)
128
+ end
129
+ end
130
+
131
+ context 'with array' do
132
+ let(:block) { proc { @brothers = @age ? 2 : 10 } }
133
+ let(:after) { [:init_age, block] }
134
+
135
+ let(:result) do
136
+ dispatcher.dispatch(person) do
137
+ person.age.to_i + person.brothers
138
+ end
139
+ end
140
+
141
+ it 'returns result before running all after code' do
142
+ expect(result).to eq(0)
143
+ end
144
+
145
+ it 'changes state of context object by block call' do
146
+ expect { result }.to change(person, :brothers)
147
+ .from(0).to(2)
148
+ end
149
+
150
+ it 'changes state of context object by method call' do
151
+ expect { result }.to change(person, :age)
152
+ .from(nil).to(1)
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - DarthJee
@@ -259,10 +259,13 @@ files:
259
259
  - jace.gemspec
260
260
  - jace.jpg
261
261
  - lib/jace.rb
262
+ - lib/jace/dispatcher.rb
262
263
  - lib/jace/executer.rb
263
264
  - lib/jace/version.rb
265
+ - scripts/build.sh
264
266
  - spec/integration/readme/.keep
265
267
  - spec/integration/yard/.keep
268
+ - spec/lib/jace/dispatcher_spec.rb
266
269
  - spec/lib/jace/executer_spec.rb
267
270
  - spec/spec_helper.rb
268
271
  - spec/support/models/.keep