unionvalue 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 +4 -4
- data/README.md +4 -0
- data/VERSION +1 -1
- data/lib/unionvalue.rb +13 -0
- data/unionvalue.gemspec +63 -0
- metadata +17 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c74e36d002b159e6820aa04cec2fea19245d7d9a
|
4
|
+
data.tar.gz: 402d42ca34e3d88da7ff3d2e7edb8e22c7ac0a8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d227eff5583e98814201b847e22e3ccea8aecb278bf8fb011b18e56e03dc49ec637dbfed37ede287da496dcc71e1c0a884092ad7258e5ca6d3ad284e9c5eb15
|
7
|
+
data.tar.gz: febca1ed3a6343a16af36aae92e59cc116ee429a1aba1f427af8000264ad9ac8ef3e328caed6ea19b76667725067ffd28dbc34f9511bee2284f06fc9b2515f79
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# unionvalue
|
2
2
|
|
3
3
|
Allows easy creation of immutable union values, a.k.a. sum-types.
|
4
|
+
|
5
|
+
You can think of them as enums (enumerated types) that can also contain other data.
|
4
6
|
|
5
7
|
Example:
|
6
8
|
|
@@ -11,6 +13,8 @@ APICallResult.timeout.is_success? #=> false
|
|
11
13
|
APICallResult.success(12345).data #=> 12345
|
12
14
|
```
|
13
15
|
|
16
|
+
Normal classes with attributes act as 'product' types. In other words, their number of possible values are the product of the number of possible values of all their attributes. Sum-types are instead just the sum of their attributes values. In other words, they can have this attributes OR this other attribute, but not both.
|
17
|
+
|
14
18
|
Read more about sum-types here: https://en.wikipedia.org/wiki/Sum_type
|
15
19
|
|
16
20
|
## Copyright
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
data/lib/unionvalue.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
class UnionValue
|
2
4
|
def self.new(*values, &block)
|
3
5
|
|
@@ -32,6 +34,17 @@ class UnionValue
|
|
32
34
|
"#<#{self.class.name} #{self.type}:#{self.data}>"
|
33
35
|
end
|
34
36
|
|
37
|
+
def to_json(*a)
|
38
|
+
{
|
39
|
+
"json_class" => self.class.name,
|
40
|
+
"data" => {"type" => type, "data" => data }
|
41
|
+
}.to_json(*a)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.json_create(o)
|
45
|
+
self.send(o['data']['type'], o['data']['data'])
|
46
|
+
end
|
47
|
+
|
35
48
|
class_eval &block if block
|
36
49
|
end
|
37
50
|
end
|
data/unionvalue.gemspec
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: unionvalue 1.1.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "unionvalue"
|
9
|
+
s.version = "1.1.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
13
|
+
s.authors = ["Axis Sivitz"]
|
14
|
+
s.date = "2015-05-01"
|
15
|
+
s.description = "Allows easy creation of immutable union values, a.k.a. sum-types.\n\nExample: \nAPICallResult = UnionValue.new(:success, :failure, :timeout)\nAPICallResult.failure.is_failure? #=> true\nAPICallResult.timeout.is_success? #=> false\nAPICallResult.success(12345).data #=> 12345\n"
|
16
|
+
s.email = "aosivitz@gmail.com"
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE.txt",
|
19
|
+
"README.md"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"LICENSE.txt",
|
26
|
+
"README.md",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"lib/unionvalue.rb",
|
30
|
+
"spec/spec_helper.rb",
|
31
|
+
"spec/unionvalue_spec.rb",
|
32
|
+
"unionvalue.gemspec"
|
33
|
+
]
|
34
|
+
s.homepage = "http://github.com/asivitz/unionvalue"
|
35
|
+
s.licenses = ["MIT"]
|
36
|
+
s.rubygems_version = "2.2.0"
|
37
|
+
s.summary = "Immutable union values"
|
38
|
+
|
39
|
+
if s.respond_to? :specification_version then
|
40
|
+
s.specification_version = 4
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
44
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
45
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
46
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
|
47
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.11.0"])
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
50
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
51
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
52
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
53
|
+
s.add_dependency(%q<rspec>, ["~> 2.11.0"])
|
54
|
+
end
|
55
|
+
else
|
56
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
57
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
58
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
59
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
60
|
+
s.add_dependency(%q<rspec>, ["~> 2.11.0"])
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unionvalue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Axis Sivitz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '3.12'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.12'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: jeweler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.0.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.0.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 2.11.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 2.11.0
|
83
83
|
description: "Allows easy creation of immutable union values, a.k.a. sum-types.\n\nExample:
|
@@ -91,7 +91,7 @@ extra_rdoc_files:
|
|
91
91
|
- LICENSE.txt
|
92
92
|
- README.md
|
93
93
|
files:
|
94
|
-
- .document
|
94
|
+
- ".document"
|
95
95
|
- Gemfile
|
96
96
|
- Gemfile.lock
|
97
97
|
- LICENSE.txt
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- lib/unionvalue.rb
|
102
102
|
- spec/spec_helper.rb
|
103
103
|
- spec/unionvalue_spec.rb
|
104
|
+
- unionvalue.gemspec
|
104
105
|
homepage: http://github.com/asivitz/unionvalue
|
105
106
|
licenses:
|
106
107
|
- MIT
|
@@ -111,17 +112,17 @@ require_paths:
|
|
111
112
|
- lib
|
112
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
113
114
|
requirements:
|
114
|
-
- -
|
115
|
+
- - ">="
|
115
116
|
- !ruby/object:Gem::Version
|
116
117
|
version: '0'
|
117
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
119
|
requirements:
|
119
|
-
- -
|
120
|
+
- - ">="
|
120
121
|
- !ruby/object:Gem::Version
|
121
122
|
version: '0'
|
122
123
|
requirements: []
|
123
124
|
rubyforge_project:
|
124
|
-
rubygems_version: 2.0
|
125
|
+
rubygems_version: 2.2.0
|
125
126
|
signing_key:
|
126
127
|
specification_version: 4
|
127
128
|
summary: Immutable union values
|