rfunk 0.10.0 → 1.0.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: 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: