rfunk 1.0.0 → 1.1.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: d842be09b09aa3bd5fef713471aea24b9072965d
4
- data.tar.gz: 53415832787bb21820efb40e8280dd550e0843a3
3
+ metadata.gz: b86ea072b8641826aaa1c6ae805f908dfd5e5020
4
+ data.tar.gz: 14d4524321d24ab95b17cea3d0644c4bdaca7f4d
5
5
  SHA512:
6
- metadata.gz: 6952bb646f377abcf5731c686385165e4b602ea9af3a7a352757dd343991ea927750022be1379765bfbe9e0d97ff171f48f2b0d5592a0917ee2f0628c2beaaa1
7
- data.tar.gz: 40ffc430e2e6710a26fb6f88dcc15b7c3b2a38ae252cdd4862019fd244028a5cd23a5e742705bb7982261ebe4703f3ffdf7273c1118624b6f7cf84aa5b69ad6b
6
+ metadata.gz: 00d216f4079806989219261e8bfea826a0edafe373a3f8a5fa4296473eece58ab37b83b90304152a86a74d29f75c13290e3d09b680f4334334751fb3e457149c
7
+ data.tar.gz: de6abb927459d4c379a9b146e77f0cb5c5d6d03ef41a2c4e59e7480a264ec7f72fd47f298bea9572593ce7afacbe8670c92187060e9da7201cf8baf3ca6f5632
@@ -17,22 +17,22 @@ module RFunk
17
17
  end
18
18
 
19
19
  def with_defaults
20
- attributes.each { |key, attribute|
20
+ attributes.each do |key, attribute|
21
21
  value = attribute.options[:default]
22
22
  set_variable(attribute, key, value) if value
23
- }
23
+ end
24
24
  end
25
25
 
26
26
  def with_attributes(options)
27
- options.each { |key, value|
27
+ options.each do |key, value|
28
28
  RFunk::ErrorChecking.new.raise_not_found(key, attributes)
29
29
  set_variable(attributes[key], key, value)
30
- }
30
+ end
31
31
  end
32
32
 
33
33
  def set_variable(attribute, key, value)
34
34
  RFunk::ErrorChecking.new.raise_expected_attribute_type(key, value, attribute.type)
35
- self.instance_variable_set(variable_name(key), value)
35
+ instance_variable_set(variable_name(key), value)
36
36
  end
37
37
 
38
38
  def variable_name(name)
@@ -6,16 +6,22 @@ module RFunk
6
6
  type: type,
7
7
  options: options)
8
8
 
9
- define_method(name) { |value = nil|
9
+ create_method(name, type)
10
+ end
11
+
12
+ private
13
+
14
+ def create_method(name, type)
15
+ define_method(name) do |value = nil|
10
16
  if value
11
17
  RFunk::ErrorChecking.new.raise_expected_attribute_type(name, value, type)
12
18
  RFunk::Immutable.new.create(instance: self,
13
19
  variable_name: variable_name(name),
14
20
  value: value)
15
21
  else
16
- RFunk::Option(self.instance_variable_get(variable_name(name)))
22
+ RFunk::Option(instance_variable_get(variable_name(name)))
17
23
  end
18
- }
24
+ end
19
25
  end
20
26
  end
21
27
  end
@@ -1,4 +1,3 @@
1
1
  module RFunk
2
- class AttributeType < Struct.new(:name, :type, :options)
3
- end
2
+ AttributeType = Struct.new(:name, :type, :options)
4
3
  end
@@ -1,7 +1,7 @@
1
1
  module RFunk
2
2
  class ErrorChecking
3
3
  def raise_condition_error(type, value)
4
- raise type, 'The condition was not met!' unless value
4
+ fail type, 'The condition was not met!' unless value
5
5
  end
6
6
 
7
7
  def raise_expected_return_type(name, value, type)
@@ -17,16 +17,15 @@ module RFunk
17
17
  end
18
18
 
19
19
  def raise_not_found(key, attributes)
20
- unless attributes.key?(key)
21
- message = "Attribute with name '#{key}' does not exist. The only available attributes are '#{attributes.keys}'"
22
- raise RFunk::NotFoundError, message
23
- end
20
+ return if attributes.key?(key)
21
+ message = "Attribute with name '#{key}' does not exist. The only available attributes are '#{attributes.keys}'"
22
+ fail RFunk::NotFoundError, message
24
23
  end
25
24
 
26
25
  def raise_immutable(options, variable)
27
- keys = options.keys.select { |k| variable.has_key?(k) }
26
+ keys = options.keys.select { |k| variable.key?(k) }
28
27
  message = "Could not set variables '#{keys}', because variables are immutable."
29
- raise RFunk::ImmutableError, message if keys.any?
28
+ fail RFunk::ImmutableError, message if keys.any?
30
29
  end
31
30
 
32
31
  private
@@ -52,9 +51,8 @@ module RFunk
52
51
  end
53
52
 
54
53
  def raise_type(name, value, type, message)
55
- unless value.is_a?(type)
56
- raise TypeError, "Expected a type of '#{type}' for #{message} '#{name}'"
57
- end
54
+ return if value.is_a?(type)
55
+ fail TypeError, "Expected a type of '#{type}' for #{message} '#{name}'"
58
56
  end
59
57
  end
60
58
  end
@@ -26,7 +26,7 @@ module RFunk
26
26
  if yield
27
27
  true
28
28
  else
29
- raise RFunk::AssertionError
29
+ fail RFunk::AssertionError
30
30
  end
31
31
  end
32
32
 
@@ -43,25 +43,11 @@ module RFunk
43
43
  end
44
44
 
45
45
  def execute(*args)
46
- validate_parameter_types *args
46
+ validate_parameter_types(*args)
47
47
  return_value = instance_exec(*args, &block)
48
48
 
49
49
  if body_block
50
- if pre_block
51
- instance_eval(&pre_block).tap { |r|
52
- error_checking.raise_condition_error(RFunk::PreConditionError, r)
53
- }
54
- end
55
-
56
- RFunk::Option(instance_eval(&body_block)).tap { |body|
57
- if post_block
58
- instance_eval(&post_block).tap { |post|
59
- error_checking.raise_condition_error(RFunk::PostConditionError, post)
60
- }
61
- end
62
-
63
- validate_return_type(body)
64
- }
50
+ execute_body_block
65
51
  else
66
52
  validate_return_type(return_value)
67
53
  RFunk::Option(return_value)
@@ -77,6 +63,20 @@ module RFunk
77
63
  attr_reader :block, :pre_block, :post_block, :body_block, :function_definition
78
64
  attr_accessor :variables
79
65
 
66
+ def execute_body_block
67
+ execute_block pre_block, RFunk::PreConditionError
68
+
69
+ RFunk::Option(instance_eval(&body_block)).tap do |body|
70
+ execute_block post_block, RFunk::PostConditionError
71
+ validate_return_type(body)
72
+ end
73
+ end
74
+
75
+ def execute_block(block, error)
76
+ return unless block
77
+ instance_eval(&block).tap { |r| error_checking.raise_condition_error(error, r) }
78
+ end
79
+
80
80
  def error_checking
81
81
  RFunk::Lazy(-> { RFunk::ErrorChecking.new }).value
82
82
  end
@@ -89,10 +89,10 @@ module RFunk
89
89
 
90
90
  def validate_parameter_types(*args)
91
91
  values = args.zip(type_annotation.parameters)
92
- values.each_with_index { |v, i|
92
+ values.each_with_index do |v, i|
93
93
  tuple = RFunk::Tuple(*v)
94
94
  error_checking.raise_expected_parameter_type(i + 1, tuple.value(0), tuple.value(1))
95
- }
95
+ end
96
96
  end
97
97
 
98
98
  def function_name
@@ -5,15 +5,12 @@ module RFunk
5
5
  variable_name = options.fetch(:variable_name)
6
6
  value = options.fetch(:value)
7
7
 
8
- instance.class.new.tap { |object|
9
- instance.instance_variables.select { |v| v != variable_name }.each { |v|
10
- previous_value = instance.instance_variable_get(v)
11
- object.instance_variable_set(v, previous_value)
12
- }
8
+ instance.class.new.tap do |object|
9
+ create_instance_variables(instance, object, variable_name)
13
10
 
14
11
  object.instance_variable_set(variable_name, value)
15
12
  object.deep_freeze if should_deep_freeze?(value)
16
- }
13
+ end
17
14
  end
18
15
 
19
16
  private
@@ -21,5 +18,12 @@ module RFunk
21
18
  def should_deep_freeze?(value)
22
19
  ['Hamster'].none? { |m| value.class.to_s.include?(m) }
23
20
  end
21
+
22
+ def create_instance_variables(instance, object, variable_name)
23
+ instance.instance_variables.select { |v| v != variable_name }.each do |v|
24
+ previous_value = instance.instance_variable_get(v)
25
+ object.instance_variable_set(v, previous_value)
26
+ end
27
+ end
24
28
  end
25
29
  end
@@ -7,10 +7,20 @@ module RFunk
7
7
  split = option.split('->')
8
8
  parameters = split.select { |v| v.count == 2 }
9
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
10
+ @parameters = create_parameters(parameters)
11
+ @return = create_return(split)
12
+ end
13
+
14
+ private
15
+
16
+ def create_parameters(parameters)
17
+ parameters.flat_map { |v| v[0].split(',').map { |p| Object.const_get(p.strip) } }
18
+ end
19
+
20
+ def create_return(split)
21
+ RFunk::Option(split.map do |v|
22
+ v.count == 2 ? Object.const_get(v[1].strip) : Object.const_get(v[0].strip)
23
+ end.first).value
14
24
  end
15
25
  end
16
26
  end
@@ -33,7 +33,7 @@ module RFunk
33
33
  private
34
34
 
35
35
  def lambda?(value)
36
- value.respond_to?(:lambda?) and value.lambda?
36
+ value.respond_to?(:lambda?) && value.lambda?
37
37
  end
38
38
 
39
39
  def either_with_lambda(lambda)
@@ -10,7 +10,7 @@ module RFunk
10
10
  RFunk::Option(other)
11
11
  end
12
12
 
13
- def method_missing(method, *arguments, &block)
13
+ def method_missing(_method, *_arguments, &_block)
14
14
  self
15
15
  end
16
16
 
@@ -32,11 +32,7 @@ module RFunk
32
32
  [other, value]
33
33
  end
34
34
 
35
- [:to_str, :to_ary, :to_hash].each { |k|
36
- define_method(k) {
37
- value
38
- }
39
- }
35
+ [:to_str, :to_ary, :to_hash].each { |k| define_method(k) { value } }
40
36
 
41
37
  def_delegators :@value, :to_s, :inspect, :respond_to?, :class
42
38
 
data/lib/rfunk/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RFunk
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
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: 1.0.0
4
+ version: 1.1.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: 2015-07-04 00:00:00.000000000 Z
11
+ date: 2015-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ice_nine
@@ -30,42 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.0
33
+ version: 0.9.1
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.8.0
40
+ version: 0.9.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: concurrent-ruby-ext
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.8.0
47
+ version: 0.9.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.0
54
+ version: 0.9.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: hamster
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.0
61
+ version: 2.0.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.0
68
+ version: 2.0.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,28 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 3.7.0
103
+ version: 3.7.1
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 3.7.0
110
+ version: 3.7.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.34.2
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.34.2
111
125
  description: See https://github.com/alexfalkowski/rfunk/blob/master/README.md
112
126
  email:
113
127
  - alexrfalkowski@gmail.com
@@ -159,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
173
  version: '0'
160
174
  requirements: []
161
175
  rubyforge_project:
162
- rubygems_version: 2.4.6
176
+ rubygems_version: 2.4.5.1
163
177
  signing_key:
164
178
  specification_version: 4
165
179
  summary: Functional Programming in Ruby