lalka 0.6.0 → 0.7.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: 803656007eaa3ce1fa9bf0590906f978c296d51f
4
- data.tar.gz: 1e3808e62ec73431dac71b77a020ab6dcda74b43
3
+ metadata.gz: f052e0cce98cefd5a400f81e00280c0670c244dc
4
+ data.tar.gz: e29c8e0b3d7ae4720d91ea5fd061719ce0c43997
5
5
  SHA512:
6
- metadata.gz: ce6d3be7b9c1ad1fd49b43801896bb7f44aeb0e6b472c7386ce4463cdbc6327795ac85478071760268cf97ddaf4b5208f939dc4002f4cdb6799cfdd93c70e041
7
- data.tar.gz: 8bb5196fc4a04021a499104d2bd2bc1083da6aebe0d09bb1301aee0ca3251927bffae52d067d7f2ff7070277070944d39e8523c46a16ff3c689326530bc24eb2
6
+ metadata.gz: e2c4d41777640d33f50a82fdac121d0ca1460e243946ea687ffb66b53d0750b723b16bf475afa4cb647e3e8942dd21ca8c90dc38d124f6855d5aa155c64cf54a
7
+ data.tar.gz: 52c6004164ae271f1c7e5f6bfaa22e80d9538ad6c9988b3c943a4dc4a004296462d5077b91caef47b6cb0dc828d338c2fad680284ebce220329a00ff10ab2973
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.1
4
+ - 2.3.3
5
5
  before_install: gem install bundler -v 1.13.6
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # Lalka
2
+ [![Build Status](https://travis-ci.org/v-shmyhlo/lalka.svg?branch=master)](https://travis-ci.org/v-shmyhlo/lalka)
2
3
 
3
4
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/lalka`. To experiment with that code, run `bin/console` for an interactive prompt.
4
5
 
@@ -1,42 +1,41 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'lalka/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "lalka"
8
+ spec.name = 'lalka'
8
9
  spec.version = Lalka::VERSION
9
- spec.authors = ["Vlad Shmyhlo"]
10
- spec.email = ["aion.stu@gmail.com"]
10
+ spec.authors = ['Vlad Shmyhlo']
11
+ spec.email = ['aion.stu@gmail.com']
11
12
 
12
- spec.summary = "Task monad"
13
- spec.description = "Task monad"
14
- spec.homepage = "https://github.com/v-shmyhlo/lalka"
15
- spec.license = "MIT"
13
+ spec.summary = 'Task monad'
14
+ spec.description = 'Task monad'
15
+ spec.homepage = 'https://github.com/v-shmyhlo/lalka'
16
+ spec.license = 'MIT'
16
17
 
17
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
19
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
20
  if spec.respond_to?(:metadata)
20
21
  # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
22
  else
22
- raise "RubyGems 2.0 or newer is required to protect against " \
23
- "public gem pushes."
23
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
24
+ 'public gem pushes.'
24
25
  end
25
26
 
26
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
28
  f.match(%r{^(test|spec|features)/})
28
29
  end
29
- spec.bindir = "exe"
30
+ spec.bindir = 'exe'
30
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
- spec.require_paths = ["lib"]
32
+ spec.require_paths = ['lib']
32
33
 
33
- spec.add_dependency "concurrent-ruby"
34
- spec.add_dependency "concurrent-ruby-ext"
35
34
  spec.add_dependency 'dry-monads'
36
35
 
37
- spec.add_development_dependency "bundler", "~> 1.13"
38
- spec.add_development_dependency "rake", "~> 10.0"
39
- spec.add_development_dependency "rspec", "~> 3.0"
40
- spec.add_development_dependency "rubocop"
41
- spec.add_development_dependency "pry"
36
+ spec.add_development_dependency 'bundler', '~> 1.13'
37
+ spec.add_development_dependency 'rake', '~> 10.0'
38
+ spec.add_development_dependency 'rspec', '~> 3.0'
39
+ spec.add_development_dependency 'rubocop'
40
+ spec.add_development_dependency 'pry'
42
41
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
- require 'lalka/version'
3
2
  require 'dry-monads'
4
- require 'concurrent'
3
+
4
+ require 'lalka/version'
5
5
 
6
6
  module Lalka
7
7
  M = Dry::Monads
@@ -27,11 +27,6 @@ module Lalka
27
27
  end
28
28
  end
29
29
 
30
- def id(internal)
31
- internal.on_success { |v| v }
32
- internal.on_error { |e| e }
33
- end
34
-
35
30
  alias of resolve
36
31
  end
37
32
 
@@ -46,7 +41,8 @@ module Lalka
46
41
  if block_given?
47
42
  yield internal
48
43
  else
49
- Task.id(internal)
44
+ internal.on_success { |v| v }
45
+ internal.on_error { |e| e }
50
46
  end
51
47
 
52
48
  internal.call(&@computation)
@@ -104,41 +100,56 @@ module Lalka
104
100
 
105
101
  def ap(other_task)
106
102
  Task.new do |t|
107
- atom = Concurrent::Atom.new(M.Right(fn: M.None(), arg: M.None()))
103
+ mutex = Mutex.new
104
+ completed = false
105
+ either = M.Right([M.None(), M.None()])
108
106
 
109
- atom.add_observer do |_, _, either|
110
- if either.right?
111
- value = either.value
107
+ complete_task = lambda do |&block|
108
+ mutex.synchronize do
109
+ return if completed
112
110
 
113
- value[:fn].bind { |fn| value[:arg].fmap(fn) }.fmap do |result|
114
- t.resolve(result)
115
- atom.delete_observers
116
- end
117
- else
118
- error = either.value
111
+ either = block.call(either)
119
112
 
120
- t.reject(error)
121
- atom.delete_observers
113
+ if either.right?
114
+ (e_fn, e_arg) = either.value
115
+
116
+ e_fn.bind { |fn| e_arg.fmap(fn) }.fmap do |value|
117
+ t.resolve(value)
118
+ completed = true
119
+ end
120
+ else
121
+ error = either.value
122
+ t.reject(error)
123
+ completed = true
124
+ end
122
125
  end
123
126
  end
124
127
 
125
128
  fork do |this|
126
129
  this.on_success do |fn|
127
- atom.swap(fn) { |either, fn| either.bind { |struct| M.Right(struct.merge(fn: M.Some(fn))) } }
130
+ complete_task.call do |either|
131
+ either.bind { |_, e_arg| M.Right([M.Some(fn), e_arg]) }
132
+ end
128
133
  end
129
134
 
130
135
  this.on_error do |error|
131
- atom.swap(error) { |either, error| either.bind { M.Left(error) } }
136
+ complete_task.call do |either|
137
+ either.bind { M.Left(error) }
138
+ end
132
139
  end
133
140
  end
134
141
 
135
142
  other_task.fork do |other|
136
143
  other.on_success do |arg|
137
- atom.swap(arg) { |either, arg| either.bind { |struct| M.Right(struct.merge(arg: M.Some(arg))) } }
144
+ complete_task.call do |either|
145
+ either.bind { |e_fn, _| M.Right([e_fn, M.Some(arg)]) }
146
+ end
138
147
  end
139
148
 
140
149
  other.on_error do |error|
141
- atom.swap(error) { |either, error| either.bind { M.Left(error) } }
150
+ complete_task.call do |either|
151
+ either.bind { M.Left(error) }
152
+ end
142
153
  end
143
154
  end
144
155
  end
@@ -219,7 +230,7 @@ module Lalka
219
230
  result =
220
231
  if @on_error.nil?
221
232
  ArgumentError.new('missing on_error block')
222
- else
233
+ else
223
234
  @on_error.call(error)
224
235
  end
225
236
 
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Lalka
3
- VERSION = '0.6.0'
3
+ VERSION = '0.7.0'
4
4
  end
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lalka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Shmyhlo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-21 00:00:00.000000000 Z
11
+ date: 2016-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: concurrent-ruby
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: concurrent-ruby-ext
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
13
  - !ruby/object:Gem::Dependency
42
14
  name: dry-monads
43
15
  requirement: !ruby/object:Gem::Requirement