rfunk 1.0.0 → 1.1.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: 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