rfunk 0.10.0 → 1.0.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
2
  SHA1:
3
- metadata.gz: 62eadf99b770f0a7b858ec63d74bbf43a2e0fcd9
4
- data.tar.gz: 43c0275f0e81ab6802c9f7acf4b37d6c05254800
3
+ metadata.gz: d842be09b09aa3bd5fef713471aea24b9072965d
4
+ data.tar.gz: 53415832787bb21820efb40e8280dd550e0843a3
5
5
  SHA512:
6
- metadata.gz: 7c8b2e6b5c23fee2d9359aa0a60e38ed798cab3992eb5708a569d90b8fc788c1a689ec490c5228bf835367b139ce60d67589d0927b1a03ae91d96b6a19f550f9
7
- data.tar.gz: b7b1866df97a5e3ba8b241dc1822460516a507ae007f139e8d31a759f93a1f91eeacb35fb443432a189037f183bef6d664042e7fe4d66ff839d2e9d76954c296
6
+ metadata.gz: 6952bb646f377abcf5731c686385165e4b602ea9af3a7a352757dd343991ea927750022be1379765bfbe9e0d97ff171f48f2b0d5592a0917ee2f0628c2beaaa1
7
+ data.tar.gz: 40ffc430e2e6710a26fb6f88dcc15b7c3b2a38ae252cdd4862019fd244028a5cd23a5e742705bb7982261ebe4703f3ffdf7273c1118624b6f7cf84aa5b69ad6b
@@ -13,7 +13,7 @@ module RFunk
13
13
  private
14
14
 
15
15
  def attributes
16
- AttributeVariable.new.attributes(self.class)
16
+ RFunk::AttributeVariable.new.attributes(self.class)
17
17
  end
18
18
 
19
19
  def with_defaults
@@ -25,13 +25,13 @@ module RFunk
25
25
 
26
26
  def with_attributes(options)
27
27
  options.each { |key, value|
28
- ErrorChecking.new.raise_not_found(key, attributes)
28
+ RFunk::ErrorChecking.new.raise_not_found(key, attributes)
29
29
  set_variable(attributes[key], key, value)
30
30
  }
31
31
  end
32
32
 
33
33
  def set_variable(attribute, key, value)
34
- ErrorChecking.new.raise_expected_attribute_type(key, value, attribute.type)
34
+ RFunk::ErrorChecking.new.raise_expected_attribute_type(key, value, attribute.type)
35
35
  self.instance_variable_set(variable_name(key), value)
36
36
  end
37
37
 
@@ -1,19 +1,19 @@
1
1
  module RFunk
2
2
  module AttributeDefinition
3
3
  def attribute(name, type, options = {})
4
- AttributeVariable.new.add(instance: self,
5
- name: name,
6
- type: type,
7
- options: options)
4
+ RFunk::AttributeVariable.new.add(instance: self,
5
+ name: name,
6
+ type: type,
7
+ options: options)
8
8
 
9
9
  define_method(name) { |value = nil|
10
10
  if value
11
- ErrorChecking.new.raise_expected_attribute_type(name, value, type)
12
- Immutable.new.create(instance: self,
13
- variable_name: variable_name(name),
14
- value: value)
11
+ RFunk::ErrorChecking.new.raise_expected_attribute_type(name, value, type)
12
+ RFunk::Immutable.new.create(instance: self,
13
+ variable_name: variable_name(name),
14
+ value: value)
15
15
  else
16
- Option(self.instance_variable_get(variable_name(name)))
16
+ RFunk::Option(self.instance_variable_get(variable_name(name)))
17
17
  end
18
18
  }
19
19
  end
@@ -2,7 +2,7 @@ module RFunk
2
2
  module AttributeFunction
3
3
  def fun(definition, &block)
4
4
  function_definition = function_definition(definition)
5
- lambda = -> (*args) { Function.new(self, function_definition, &block).execute(*args) }
5
+ lambda = -> (*args) { RFunk::Function.new(self, function_definition, &block).execute(*args) }
6
6
 
7
7
  define_method function_definition.value(0).value, &lambda
8
8
  end
@@ -14,10 +14,10 @@ module RFunk
14
14
  def function_definition(definition)
15
15
  case definition
16
16
  when Hash
17
- return_type = TypeAnnotation.new(definition.values.first.to_s)
18
- Tuple(definition.keys.first, return_type)
17
+ return_type = RFunk::TypeAnnotation.new(definition.values.first.to_s)
18
+ RFunk::Tuple(definition.keys.first, return_type)
19
19
  else
20
- Tuple(definition, None())
20
+ RFunk::Tuple(definition)
21
21
  end
22
22
  end
23
23
  end
@@ -7,7 +7,7 @@ module RFunk
7
7
  name = options.fetch(:name)
8
8
  attributes = attributes(instance)
9
9
 
10
- attributes[name] = AttributeType.new(name, options.fetch(:type), options.fetch(:options))
10
+ attributes[name] = RFunk::AttributeType.new(name, options.fetch(:type), options.fetch(:options))
11
11
  attributes(instance, attributes)
12
12
  end
13
13
 
@@ -26,16 +26,16 @@ module RFunk
26
26
  def raise_immutable(options, variable)
27
27
  keys = options.keys.select { |k| variable.has_key?(k) }
28
28
  message = "Could not set variables '#{keys}', because variables are immutable."
29
- raise ImmutableError, message if keys.any?
29
+ raise RFunk::ImmutableError, message if keys.any?
30
30
  end
31
31
 
32
32
  private
33
33
 
34
34
  def raise_return_type_with_message(name, value, type, message)
35
35
  case value
36
- when Some
36
+ when RFunk::Some
37
37
  expected_type?(name, value.value, type, message)
38
- when None
38
+ when RFunk::None
39
39
  else
40
40
  expected_type?(name, value, type, message)
41
41
  end
@@ -43,9 +43,9 @@ module RFunk
43
43
 
44
44
  def expected_type?(name, value, type, message)
45
45
  case type
46
- when Some
46
+ when RFunk::Some
47
47
  raise_type(name, value, type.value, message)
48
- when None
48
+ when RFunk::None
49
49
  else
50
50
  raise_type(name, value, type, message)
51
51
  end
@@ -18,7 +18,7 @@ module RFunk
18
18
  self.variables = variables.merge(options)
19
19
  end
20
20
  else
21
- Some(Some(variables)[options])
21
+ RFunk::Some(RFunk::Some(variables)[options])
22
22
  end
23
23
  end
24
24
 
@@ -26,7 +26,7 @@ module RFunk
26
26
  if yield
27
27
  true
28
28
  else
29
- raise AssertionError
29
+ raise RFunk::AssertionError
30
30
  end
31
31
  end
32
32
 
@@ -49,14 +49,14 @@ module RFunk
49
49
  if body_block
50
50
  if pre_block
51
51
  instance_eval(&pre_block).tap { |r|
52
- error_checking.raise_condition_error(PreConditionError, r)
52
+ error_checking.raise_condition_error(RFunk::PreConditionError, r)
53
53
  }
54
54
  end
55
55
 
56
- Option(instance_eval(&body_block)).tap { |body|
56
+ RFunk::Option(instance_eval(&body_block)).tap { |body|
57
57
  if post_block
58
58
  instance_eval(&post_block).tap { |post|
59
- error_checking.raise_condition_error(PostConditionError, post)
59
+ error_checking.raise_condition_error(RFunk::PostConditionError, post)
60
60
  }
61
61
  end
62
62
 
@@ -64,7 +64,7 @@ module RFunk
64
64
  }
65
65
  else
66
66
  validate_return_type(return_value)
67
- Option(return_value)
67
+ RFunk::Option(return_value)
68
68
  end
69
69
  end
70
70
 
@@ -78,7 +78,7 @@ module RFunk
78
78
  attr_accessor :variables
79
79
 
80
80
  def error_checking
81
- Lazy(-> { ErrorChecking.new }).value
81
+ RFunk::Lazy(-> { RFunk::ErrorChecking.new }).value
82
82
  end
83
83
 
84
84
  def validate_return_type(return_value)
@@ -90,7 +90,7 @@ module RFunk
90
90
  def validate_parameter_types(*args)
91
91
  values = args.zip(type_annotation.parameters)
92
92
  values.each_with_index { |v, i|
93
- tuple = Tuple(*v)
93
+ tuple = RFunk::Tuple(*v)
94
94
  error_checking.raise_expected_parameter_type(i + 1, tuple.value(0), tuple.value(1))
95
95
  }
96
96
  end
@@ -3,23 +3,14 @@ module RFunk
3
3
  attr_reader :parameters, :return
4
4
 
5
5
  def initialize(annotation)
6
- case Option(annotation)
7
- when Some
8
- @annotation = annotation.split('->')
9
- @parameters = if @annotation.count == 2
10
- @annotation[0].split(',').map { |p| Object.const_get(p.strip) }
11
- else
12
- []
13
- end
14
- @return = if @annotation.count == 2
15
- Object.const_get(@annotation[1].strip)
16
- else
17
- Object.const_get(@annotation[0].strip)
18
- end
19
- else
20
- @parameters = []
21
- @return = None()
22
- end
6
+ option = RFunk::Option(annotation)
7
+ split = option.split('->')
8
+ parameters = split.select { |v| v.count == 2 }
9
+
10
+ @parameters = parameters.flat_map { |v| v[0].split(',').map { |p| Object.const_get(p.strip) } }
11
+ @return = RFunk::Option(split.map { |v|
12
+ v.count == 2 ? Object.const_get(v[1].strip) : Object.const_get(v[0].strip)
13
+ }.first).value
23
14
  end
24
15
  end
25
16
  end
@@ -6,10 +6,10 @@ module RFunk
6
6
 
7
7
  def result
8
8
  case value
9
- when Some, None
9
+ when RFunk::Some, RFunk::None
10
10
  value
11
11
  else
12
- Option(value)
12
+ RFunk::Option(value)
13
13
  end
14
14
  end
15
15
 
@@ -9,11 +9,11 @@ module RFunk
9
9
  end
10
10
 
11
11
  def or(value)
12
- Failure(value)
12
+ RFunk::Failure(value)
13
13
  end
14
14
  end
15
15
 
16
16
  def Failure(value)
17
- Failure.new(value)
17
+ RFunk::Failure.new(value)
18
18
  end
19
19
  end
@@ -14,6 +14,6 @@ module RFunk
14
14
  end
15
15
 
16
16
  def Success(value)
17
- Success.new(value)
17
+ RFunk::Success.new(value)
18
18
  end
19
19
  end
data/lib/rfunk/lazy.rb CHANGED
@@ -8,7 +8,7 @@ module RFunk
8
8
 
9
9
  def value
10
10
  atomic.update { @value ||= lambda.call.tap { self.created = true } }
11
- Option(atomic.value)
11
+ RFunk::Option(atomic.value)
12
12
  end
13
13
 
14
14
  def created?
@@ -22,6 +22,6 @@ module RFunk
22
22
  end
23
23
 
24
24
  def Lazy(lambda)
25
- Lazy.new(lambda)
25
+ RFunk::Lazy.new(lambda)
26
26
  end
27
27
  end
@@ -1,13 +1,13 @@
1
1
  module RFunk
2
- class None < Option
2
+ class None < RFunk::Option
3
3
  include Singleton
4
4
 
5
5
  def value(default = None())
6
- Option(default)
6
+ RFunk::Option(default)
7
7
  end
8
8
 
9
9
  def or(other)
10
- Option(other)
10
+ RFunk::Option(other)
11
11
  end
12
12
 
13
13
  def method_missing(method, *arguments, &block)
@@ -38,6 +38,6 @@ module RFunk
38
38
  end
39
39
 
40
40
  def None(value = nil)
41
- Option(value)
41
+ RFunk::Option(value)
42
42
  end
43
43
  end
@@ -10,18 +10,18 @@ module RFunk
10
10
  end
11
11
 
12
12
  def Option(value)
13
- if [Some, None].map { |t| value.is_a?(t) }.any?
13
+ if [RFunk::Some, RFunk::None].map { |t| value.is_a?(t) }.any?
14
14
  value
15
15
  elsif nothing?(value)
16
- None.instance
16
+ RFunk::None.instance
17
17
  else
18
- Some.new(value)
18
+ RFunk::Some.new(value)
19
19
  end
20
20
  end
21
21
 
22
22
  private
23
23
 
24
24
  def nothing?(value)
25
- value.nil? || (value.respond_to?(:empty?) && value.empty?) || value == None.instance
25
+ value.nil? || (value.respond_to?(:empty?) && value.empty?) || value == RFunk::None.instance
26
26
  end
27
27
  end
@@ -6,7 +6,7 @@ module RFunk
6
6
  @value = value
7
7
  end
8
8
 
9
- def value(_ = None())
9
+ def value(_ = RFunk::None())
10
10
  @value
11
11
  end
12
12
 
@@ -15,7 +15,7 @@ module RFunk
15
15
  end
16
16
 
17
17
  def method_missing(method, *arguments, &block)
18
- Option(value.send(method, *arguments, &block))
18
+ RFunk::Option(value.send(method, *arguments, &block))
19
19
  end
20
20
 
21
21
  def ==(other)
@@ -48,6 +48,6 @@ module RFunk
48
48
  end
49
49
 
50
50
  def Some(value)
51
- Option(value)
51
+ RFunk::Option(value)
52
52
  end
53
53
  end
data/lib/rfunk/tuple.rb CHANGED
@@ -9,11 +9,9 @@ module RFunk
9
9
  index = args[0]
10
10
 
11
11
  if args.length == 1
12
- Option(values[index])
12
+ RFunk::Option(values[index])
13
13
  else
14
- self.class.new(values.dup.tap { |v|
15
- v[index] = Option(args[1])
16
- })
14
+ self.class.new(values.dup.tap { |v| v[index] = RFunk::Option(args[1]) })
17
15
  end
18
16
  end
19
17
 
@@ -23,6 +21,6 @@ module RFunk
23
21
  end
24
22
 
25
23
  def Tuple(*values)
26
- Tuple.new(values)
24
+ RFunk::Tuple.new(values)
27
25
  end
28
26
  end
data/lib/rfunk/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RFunk
2
- VERSION = '0.10.0'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/rfunk.rb CHANGED
@@ -26,5 +26,3 @@ require 'rfunk/either/either'
26
26
  require 'rfunk/either/failure'
27
27
  require 'rfunk/either/success'
28
28
  require 'rfunk/tuple'
29
-
30
- include RFunk
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfunk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Falkowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-18 00:00:00.000000000 Z
11
+ date: 2015-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ice_nine
@@ -30,70 +30,84 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.7.0
33
+ version: 0.8.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.7.0
40
+ version: 0.8.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby-ext
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.8.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: hamster
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: 0.4.3
61
+ version: 1.0.0
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: 0.4.3
68
+ version: 1.0.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: 10.3.2
75
+ version: 10.4.2
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 10.3.2
82
+ version: 10.4.2
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 2.14.1
89
+ version: 3.3.0
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 2.14.1
96
+ version: 3.3.0
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rspec-given
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 3.5.4
103
+ version: 3.7.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: 3.5.4
110
+ version: 3.7.0
97
111
  description: See https://github.com/alexfalkowski/rfunk/blob/master/README.md
98
112
  email:
99
113
  - alexrfalkowski@gmail.com
@@ -145,9 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
159
  version: '0'
146
160
  requirements: []
147
161
  rubyforge_project:
148
- rubygems_version: 2.2.2
162
+ rubygems_version: 2.4.6
149
163
  signing_key:
150
164
  specification_version: 4
151
165
  summary: Functional Programming in Ruby
152
166
  test_files: []
153
- has_rdoc: