microevent 1.0.0 → 1.1.1

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
- SHA1:
3
- metadata.gz: d5c0e175d5a47fc6de82d73f5d6133b8fbfdbcb8
4
- data.tar.gz: 126873406a1970cf956d6de3755dd078c0e2a814
2
+ SHA256:
3
+ metadata.gz: 2fb5c4d651245d3f8658996389c8dc59fe8f4c5703fb09063203b85d9fb2aa0f
4
+ data.tar.gz: d0bf7f138bb2058562792f641f711b5bcbcfffbf7869c0480a1052d76b439201
5
5
  SHA512:
6
- metadata.gz: c212bf4db92b625537a8b4d5670050afb766237d93267ef0989b3a663442c594057d37db5ecdaef775d478011e471a71eeae455771611661fd9dfa0741f8cafb
7
- data.tar.gz: 8db662bbc7f8a8f4d69030f5ab167adcece813a009953623ecdd09040290114805acbfe060d6487beacf227e40d0bab98ed21fb972fd95d201546779bd692d86
6
+ metadata.gz: 87adc99974e72f9f463a388e32e2fec5335e0d73e19aebd7a6fda37c849596f24505b5c4a209ce33ab72b6178cc735b51a03afcc593f8eaa03d85f4d9f078e16
7
+ data.tar.gz: 60e378d3135c886cd54abd0257a46a89b13204ce73f5aaf215259160bbf9a9a5bae5aae8d5d960f34a7e8197b331a53b5cae3f3e24f8e79701b013d124c76292
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## CHANGELOG
2
+
3
+ ### 1.1.1
4
+
5
+ - 2022 re-release: Update Gemspec and CI
6
+
7
+ ### 1.1.0
8
+
9
+ * Only check if event store hash should be created on #bind, not on #unbind and #trigger
10
+
11
+
12
+ ### 1.0.2
13
+
14
+ * Dupping event array before triggering for better thread safety
15
+
16
+
17
+ ### 1.0.1
18
+
19
+ * Fix wrong gem uploded to rubygems
20
+
21
+
1
22
  ### 1.0.0
2
23
 
3
24
  * Release
data/Gemfile CHANGED
@@ -1,3 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ gem "minitest"
6
+ gem "rake"
7
+ gem "irb"
data/Gemfile.lock CHANGED
@@ -1,14 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- microevent (1.0.0)
4
+ microevent (1.1.0)
5
+ added (~> 1.0.1)
6
+ thread_safe (~> 0.3.5)
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
11
+ added (1.0.1)
12
+ minitest (5.5.1)
13
+ thread_safe (0.3.5)
14
+ thread_safe (0.3.5-java)
9
15
 
10
16
  PLATFORMS
17
+ java
11
18
  ruby
12
19
 
13
20
  DEPENDENCIES
14
21
  microevent!
22
+ minitest
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # MicroEvent.rb [![[travis]](https://travis-ci.org/janlelis/microevent.rb.png)](https://travis-ci.org/janlelis/microevent.rb)
1
+ # MicroEvent.rb [![[version]](https://badge.fury.io/rb/microevent.svg)](https://badge.fury.io/rb/microevent) [![[CI]](https://github.com/janlelis/microevent.rb/workflows/Test/badge.svg)](https://github.com/janlelis/microevent.rb/actions?query=workflow%3ATest)
2
2
 
3
3
  MicroEvent.rb is a event emitter library which provides the observer pattern to Ruby objects. It is inspired by [MicroEvent.js](https://github.com/jeromeetienne/microevent.js), implemented in less than [20 lines of Ruby](https://github.com/janlelis/microevent.rb/blob/master/lib/microevent.rb).
4
4
 
@@ -46,8 +46,20 @@ end
46
46
  Klass.trigger :slot # => Go
47
47
  ```
48
48
 
49
- You will find more examples in the [tests](https://github.com/janlelis/microevent.rb/blob/master/spec/microevent_test.rb).
49
+ You will find more examples in the [tests](https://github.com/janlelis/microevent.rb/blob/master/spec/microevent_spec.rb).
50
+
51
+ ## Alternative Variants
52
+
53
+ * [threadsafe](https://github.com/janlelis/microevent.rb/tree/threadsafe) - Thread safe version
54
+ * [added](https://github.com/janlelis/microevent.rb/tree/added) - Thread safe version based on [added](https://github.com/janlelis/added) hook
55
+ * [min](https://github.com/janlelis/microevent.rb/tree/min) - 275 bytes version
56
+
57
+
58
+ ## Projects Using MicroEvent.rb
59
+
60
+ * [micrologger](https://github.com/janlelis/micrologger)
61
+
50
62
 
51
63
  ## MIT License
52
64
 
53
- Ruby version by [Jan Lelis](http://janlelis.com). Inspired by [MicroEvent.js](https://github.com/jeromeetienne/microevent.js) by Jerome Etienne.
65
+ Ruby version by [Jan Lelis](https://janlelis.com). Inspired by [MicroEvent.js](https://github.com/jeromeetienne/microevent.js) by Jerome Etienne.
data/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ # # #
2
+ # Get gemspec info
3
+
4
+ gemspec_file = Dir["*.gemspec"].first
5
+ gemspec = eval File.read(gemspec_file), binding, gemspec_file
6
+ info = "#{gemspec.name} | #{gemspec.version} | " \
7
+ "#{gemspec.runtime_dependencies.size} dependencies | " \
8
+ "#{gemspec.files.size} files"
9
+
10
+ # # #
11
+ # Gem build and install task
12
+
13
+ desc info
14
+ task :gem do
15
+ puts info + "\n\n"
16
+ print " "; sh "gem build #{gemspec_file}"
17
+ FileUtils.mkdir_p "pkg"
18
+ FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", "pkg"
19
+ puts; sh %{gem install --no-document pkg/#{gemspec.name}-#{gemspec.version}.gem}
20
+ end
21
+
22
+ # # #
23
+ # Start an IRB session with the gem loaded
24
+
25
+ desc "#{gemspec.name} | IRB"
26
+ task :irb do
27
+ sh "irb -I ./lib -r #{gemspec.name.gsub '-','/'}"
28
+ end
29
+
30
+ # # #
31
+ # Run specs
32
+
33
+ desc "#{gemspec.name} | Spec"
34
+ task :spec do
35
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
36
+ sh "for %f in (spec/\*.rb) do ruby spec/%f"
37
+ else
38
+ sh "for file in spec/*.rb; do ruby $file; done"
39
+ end
40
+ end
41
+ task default: :spec
data/lib/microevent.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module MicroEvent
2
- VERSION = "1.0.0".freeze
4
+ VERSION = "1.1.1"
3
5
 
4
6
  def bind(event, &fn)
5
7
  @_ ||= Hash.new{ |h,k| h[k] = [] }
@@ -7,12 +9,10 @@ module MicroEvent
7
9
  end
8
10
 
9
11
  def unbind(event, &fn)
10
- @_ ||= Hash.new{ |h,k| h[k] = [] }
11
- fn ? @_[event].delete(fn) : @_.delete(event) || []
12
+ fn ? @_ && @_[event].delete(fn) : @_ && @_.delete(event) || []
12
13
  end
13
14
 
14
15
  def trigger(event, *args)
15
- @_ ||= Hash.new{ |h,k| h[k] = [] }
16
- !@_[event].each{ |fn| instance_exec(*args, &fn) }.empty?
16
+ !!@_ && !@_[event].dup.each{ |fn| instance_exec(*args, &fn) }.empty?
17
17
  end
18
18
  end
data/microevent.gemspec CHANGED
@@ -6,14 +6,15 @@ Gem::Specification.new do |gem|
6
6
  gem.name = "microevent"
7
7
  gem.version = MicroEvent::VERSION
8
8
  gem.summary = 'MicroEvent.rb is a event emitter library which provides the observer pattern to Ruby objects.'
9
- gem.description = 'MicroEvent.rb is a event emitter library which provides the observer pattern to Ruby objects. It is inspired by[MicroEvent.js and implemented in less than 20 lines of Ruby.'
9
+ gem.description = 'MicroEvent.rb is a event emitter library which provides the observer pattern to Ruby objects. It is inspired by MicroEvent.js and implemented in less than 20 lines of Ruby.'
10
10
  gem.license = "MIT"
11
11
  gem.authors = ["Jan Lelis"]
12
- gem.email = "mail@janlelis.de"
12
+ gem.email = ["hi@ruby.consulting"]
13
13
  gem.homepage = "https://github.com/janlelis/microevent.rb"
14
14
 
15
15
  gem.files = Dir['{**/}{.*,*}'].select { |path| File.file?(path) }
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ['lib']
19
+ gem.metadata = { "rubygems_mfa_required" => "true" }
19
20
  end
@@ -139,14 +139,6 @@ describe MicroEvent do
139
139
  assert_equal [23], result
140
140
  end
141
141
 
142
- it "will do nothing if there is nothing to remove" do
143
- result = []
144
-
145
- object.unbind :slot
146
-
147
- assert_equal [], result
148
- end
149
-
150
142
  it "returns deleted callbacks" do
151
143
  fn = proc{}
152
144
  object.bind :slot, &fn
@@ -156,6 +148,14 @@ describe MicroEvent do
156
148
  end
157
149
 
158
150
  it "will return nil if nothing is removed" do
151
+ fn = proc{}
152
+ object.bind :another_slot, &fn
153
+ result = object.unbind :slot, &fn
154
+
155
+ assert_equal nil, result
156
+ end
157
+
158
+ it "will return nil if no callback is registered at all" do
159
159
  fn = proc{}
160
160
  result = object.unbind :slot, &fn
161
161
 
@@ -186,6 +186,14 @@ describe MicroEvent do
186
186
  end
187
187
 
188
188
  it 'will return emtpy array if no block is given and no callback deleted' do
189
+ fn = proc{}
190
+ object.bind :another_slot, &fn
191
+ result = object.unbind :slot
192
+
193
+ assert_equal [], result
194
+ end
195
+
196
+ it 'will return emtpy array if no block is given and no callback is registered at all' do
189
197
  result = object.unbind :slot
190
198
 
191
199
  assert_equal [], result
@@ -210,9 +218,40 @@ describe MicroEvent do
210
218
  end
211
219
 
212
220
  it "will return false if there is no callback listening" do
221
+ fn = proc{}
222
+ object.bind :other_slot, &fn
223
+ result = object.trigger :slot
224
+
225
+ assert_equal false, result
226
+ end
227
+
228
+ it "will return false if there is no callback at all registered" do
213
229
  result = object.trigger :slot
214
230
 
215
231
  assert_equal false, result
216
232
  end
217
233
  end
234
+
235
+ describe "thread safety" do
236
+ it "is thread safe when unbinding while triggering" do
237
+ mutex = Mutex.new
238
+ result = []
239
+
240
+ procs = (0...5000).map {
241
+ proc{ mutex.synchronize{ result << 42 } }
242
+ }
243
+ procs.each{ |proc|
244
+ object.bind :slot, &proc
245
+ }
246
+ thread = Thread.new do
247
+ procs.each{ |proc|
248
+ object.unbind :slot, &proc
249
+ }
250
+ end
251
+ object.trigger :slot
252
+ thread.join
253
+
254
+ assert_equal 5000, result.size
255
+ end
256
+ end
218
257
  end
metadata CHANGED
@@ -1,37 +1,39 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: microevent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Lelis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-12 00:00:00.000000000 Z
11
+ date: 2022-01-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: MicroEvent.rb is a event emitter library which provides the observer
14
- pattern to Ruby objects. It is inspired by[MicroEvent.js and implemented in less
14
+ pattern to Ruby objects. It is inspired by MicroEvent.js and implemented in less
15
15
  than 20 lines of Ruby.
16
- email: mail@janlelis.de
16
+ email:
17
+ - hi@ruby.consulting
17
18
  executables: []
18
19
  extensions: []
19
20
  extra_rdoc_files: []
20
21
  files:
21
22
  - ".gitignore"
22
- - ".travis.yml"
23
23
  - CHANGELOG.md
24
24
  - Gemfile
25
25
  - Gemfile.lock
26
26
  - MIT-LICENSE.txt
27
27
  - README.md
28
+ - Rakefile
28
29
  - lib/microevent.rb
29
30
  - microevent.gemspec
30
31
  - spec/microevent_spec.rb
31
32
  homepage: https://github.com/janlelis/microevent.rb
32
33
  licenses:
33
34
  - MIT
34
- metadata: {}
35
+ metadata:
36
+ rubygems_mfa_required: 'true'
35
37
  post_install_message:
36
38
  rdoc_options: []
37
39
  require_paths:
@@ -47,12 +49,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
49
  - !ruby/object:Gem::Version
48
50
  version: '0'
49
51
  requirements: []
50
- rubyforge_project:
51
- rubygems_version: 2.4.5
52
+ rubygems_version: 3.2.22
52
53
  signing_key:
53
54
  specification_version: 4
54
55
  summary: MicroEvent.rb is a event emitter library which provides the observer pattern
55
56
  to Ruby objects.
56
57
  test_files:
57
58
  - spec/microevent_spec.rb
58
- has_rdoc:
data/.travis.yml DELETED
@@ -1,17 +0,0 @@
1
- language: ruby
2
-
3
- script: ruby spec/*
4
-
5
- rvm:
6
- - 2.2.1
7
- - 2.2.0
8
- - 2.1.5
9
- - 2.1.4
10
- - 2.1.3
11
- - 2.1.2
12
- - 2.1.1
13
- - 2.1.0
14
- - 2.0.0
15
- - rbx-2
16
- - jruby-head
17
-