fp_rb 0.2.0 → 0.3.0

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
- SHA1:
3
- metadata.gz: 1be61e229ee71c120b653342672b6caf5b7efac3
4
- data.tar.gz: 4410e0e74838669916f26085919896b8cf2ac5bb
2
+ SHA256:
3
+ metadata.gz: 0a74cc786c3b1ce450992bdb9fd824bb127f1660c8bbb8116a99890e22b6541d
4
+ data.tar.gz: 6d9b06377b8e699bd0fcfd3c22ef76dd939da7a43a57f0a64e5b6e58117b7ea2
5
5
  SHA512:
6
- metadata.gz: c43c2abb14e1a55ad11fbbb47430282c0b9b5c06f7df7c8220fcf76dc9c61c5d147e1745e6519824f7b93e21b667fcc20d8f557b705903ebddd9757ac49bb710
7
- data.tar.gz: 053fc2cdc5eccf3639573bfded0f267da5355d3e211abdf1712e4c290860889197cf9ca84f1892d09cbb45a6501a040277b258fc8dcb5e2c55bb513426dd1d9c
6
+ metadata.gz: 6c54beba7da377c1824a3b527738be68d8946c6fcedaab03506c18179dd390177c3af95d2c0524fc1c79d2c6f6046e4b31a6eaf3d46c3fdd887974d7bceda448
7
+ data.tar.gz: 557656ab550f5ce1532df460a1d4c48f3fce28b846fa8359f34a493fe6f1e97a136255e6da6be2d16e12e637c1262a61fce7d25cd47878a55384d122df92d007
data/lib/fn_reader.rb ADDED
@@ -0,0 +1,24 @@
1
+ class Module
2
+ # Stripped down version of ActiveSupport's mattr_reader (don't want Rails dependencies)
3
+ def fn_reader(*syms)
4
+ syms.each do |sym|
5
+ raise StandardError.new("invalid attribute name: #{sym}") unless /\A[_A-Za-z]\w*\z/.match
6
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
7
+ @@#{sym} = nil unless defined? @@#{sym}
8
+
9
+ def self.#{sym}
10
+ @@#{sym}
11
+ end
12
+ EOS
13
+
14
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
15
+ def #{sym}
16
+ @@#{sym}
17
+ end
18
+ EOS
19
+
20
+ sym_default_value = default
21
+ class_variable_set("@@#{sym}", sym_default_value) unless sym_default_value.nil?
22
+ end
23
+ end
24
+ end
data/lib/fp_rb.rb CHANGED
@@ -1,14 +1,10 @@
1
1
  require "fp_rb/version"
2
2
 
3
- require 'fp_rb/operator'
4
- require 'fp_rb/maybe'
5
- require 'fp_rb/result'
6
-
7
3
  class Module
8
4
  # stolen from Rails mattr_accessor
9
- def def_fn(*syms, instance_reader: true, instance_accessor: true, default: nil)
5
+ def fn_reader(*syms)
10
6
  syms.each do |sym|
11
- raise NameError.new("invalid attribute name: #{sym}") unless (sym =~ /\A[_A-Za-z]\w*\z/)
7
+ raise StandardError.new("invalid attribute name: #{sym}") unless (sym =~ /\A[_A-Za-z]\w*\z/)
12
8
  class_eval(<<-EOS, __FILE__, __LINE__ + 1)
13
9
  @@#{sym} = nil unless defined? @@#{sym}
14
10
  def self.#{sym}
@@ -16,23 +12,18 @@ class Module
16
12
  end
17
13
  EOS
18
14
 
19
- if instance_reader && instance_accessor
20
- class_eval(<<-EOS, __FILE__, __LINE__ + 1)
15
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
21
16
  def #{sym}
22
17
  @@#{sym}
23
18
  end
24
19
  EOS
25
- end
26
-
27
- sym_default_value = (block_given? && default.nil?) ? yield : default
28
- class_variable_set("@@#{sym}", sym_default_value) unless sym_default_value.nil?
29
20
  end
30
21
  end
31
22
  end
32
23
 
33
24
  module FpRb
34
- def_fn :and_then
25
+ fn_reader :and_then
35
26
 
36
- @@and_then = ->f, a { a.and_then(f) }.curry
37
- @@map = ->f, a { a.map(f) }.curry
27
+ @@and_then = -> f, a { a.and_then(f) }.curry
28
+ @@map = -> f, a { a.map(f) }.curry
38
29
  end
data/lib/fp_rb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module FpRb
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fp_rb
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
  - Martin Chabot
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-09 00:00:00.000000000 Z
11
+ date: 2019-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: superators19
@@ -84,10 +84,8 @@ files:
84
84
  - bin/console
85
85
  - bin/setup
86
86
  - fp_rb.gemspec
87
+ - lib/fn_reader.rb
87
88
  - lib/fp_rb.rb
88
- - lib/fp_rb/maybe.rb
89
- - lib/fp_rb/operator.rb
90
- - lib/fp_rb/result.rb
91
89
  - lib/fp_rb/version.rb
92
90
  homepage: ''
93
91
  licenses:
@@ -108,8 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
106
  - !ruby/object:Gem::Version
109
107
  version: '0'
110
108
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.2.2
109
+ rubygems_version: 3.0.1
113
110
  signing_key:
114
111
  specification_version: 4
115
112
  summary: Collection of utilities for programming in a more functional way
data/lib/fp_rb/maybe.rb DELETED
@@ -1,35 +0,0 @@
1
- module FpRb
2
- class Maybe
3
- def initialize(value)
4
- @value = value
5
- end
6
-
7
- def with_default(default)
8
- @value.nil? ? default : @value
9
- end
10
-
11
- def map(&block)
12
- if @value.nil?
13
- Maybe.new(block.(@value))
14
- else
15
- self
16
- end
17
- end
18
-
19
- def present?
20
- !! @value.nil?
21
- end
22
-
23
- def blank?
24
- !! @value.nil?
25
- end
26
-
27
- def to_result(error)
28
- if @value
29
- Result.ok(value)
30
- else
31
- Result.err(error)
32
- end
33
- end
34
- end
35
- end
@@ -1,13 +0,0 @@
1
- require 'superators19'
2
-
3
- class Proc
4
- superator ">>~" do |fn|
5
- -> a { fn.(self.(a)) }
6
- end
7
- end
8
-
9
- class Object
10
- superator ">>+" do |fn|
11
- fn.(self)
12
- end
13
- end
data/lib/fp_rb/result.rb DELETED
@@ -1,87 +0,0 @@
1
- module FpRb
2
- class Result
3
- def initialize(value: nil, error: nil)
4
- raise "error or value must not be nil" if value.nil? && error.nil?
5
- raise "error and value cannot be set at the same time. \n Error #{error}, Value #{value}" if ! value.nil? && ! error.nil?
6
- @value = value
7
- @error = error
8
- end
9
-
10
- def with_default(default)
11
- if @value.nil?
12
- default
13
- else
14
- @value
15
- end
16
- end
17
-
18
- def map(&block)
19
- if @error
20
- self
21
- else
22
- Result.ok(block.(@value))
23
- end
24
- end
25
-
26
- def and_then(&block)
27
- if @error.nil?
28
- block.(@value)
29
- else
30
- self
31
- end
32
- end
33
-
34
- def success?
35
- !! @value
36
- end
37
-
38
- def error
39
- @error
40
- end
41
-
42
- def self.err(msg)
43
- Result.new(error: Error.new(msg, Kernel.caller))
44
- end
45
-
46
- def self.ok(value)
47
- Result.new(value: value)
48
- end
49
-
50
- def self.rescue(error_msg = nil, &block)
51
- begin
52
- Result.ok(block.())
53
- rescue StandardError => e
54
- Result.new(error: Error.new(e.inspect, e.backtrace))
55
- end
56
- end
57
-
58
- def map_error(&block)
59
- if @error
60
- Result.new(error: block.(@error))
61
- else
62
- self
63
- end
64
- end
65
-
66
- class Error
67
- attr_accessor :msg, :backtrace
68
-
69
- def initialize(msg, backtrace)
70
- @msg = msg
71
- @backtrace = backtrace
72
- end
73
-
74
- def msg
75
- @msg
76
- end
77
-
78
- def details
79
- <<EOF
80
- ERROR = #{@msg}
81
- Backtrace:
82
- #{@backtrace.join("\n")}
83
- EOF
84
- end
85
- end
86
- end
87
- end