stitcher 0.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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/README.md +107 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/docs/matome.md +57 -0
- data/docs/stitcher.md +208 -0
- data/docs/type.md +212 -0
- data/docs/typed.md +15 -0
- data/example/core_ex.rb +23 -0
- data/example/register.rb +33 -0
- data/example/simple.rb +66 -0
- data/example/type.rb +24 -0
- data/lib/stitcher.rb +40 -0
- data/lib/stitcher/accessor.rb +21 -0
- data/lib/stitcher/concepts.rb +6 -0
- data/lib/stitcher/core.rb +31 -0
- data/lib/stitcher/core_ext.rb +7 -0
- data/lib/stitcher/define_method.rb +52 -0
- data/lib/stitcher/operators.rb +37 -0
- data/lib/stitcher/register.rb +31 -0
- data/lib/stitcher/require.rb +27 -0
- data/lib/stitcher/stitch.rb +22 -0
- data/lib/stitcher/type.rb +107 -0
- data/lib/stitcher/type/core_ext.rb +11 -0
- data/lib/stitcher/variadic_argument.rb +12 -0
- data/lib/stitcher/version.rb +3 -0
- data/stitcher.gemspec +25 -0
- metadata +117 -0
@@ -0,0 +1,107 @@
|
|
1
|
+
module Stitcher
|
2
|
+
module TypeOperators
|
3
|
+
def | other
|
4
|
+
Stitcher.type_or self, other
|
5
|
+
end
|
6
|
+
|
7
|
+
def & other
|
8
|
+
Stitcher.type_and self, other
|
9
|
+
end
|
10
|
+
|
11
|
+
def !
|
12
|
+
Stitcher.type_not self
|
13
|
+
end
|
14
|
+
|
15
|
+
def +@
|
16
|
+
Stitcher.type_plus_at self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
module Stitcher module Refinements
|
23
|
+
module Type
|
24
|
+
refine Object do
|
25
|
+
def type
|
26
|
+
stitcher_type
|
27
|
+
end
|
28
|
+
|
29
|
+
def stitcher_type
|
30
|
+
Stitcher::Type.new self.class == Class ? self : self.class
|
31
|
+
end
|
32
|
+
|
33
|
+
def classtype
|
34
|
+
self.class == Class ? self : self.class
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
refine Class do
|
39
|
+
include TypeOperators
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end end
|
43
|
+
|
44
|
+
|
45
|
+
using Stitcher::Refinements::Type
|
46
|
+
|
47
|
+
|
48
|
+
module Stitcher
|
49
|
+
class Type
|
50
|
+
include TypeOperators
|
51
|
+
|
52
|
+
def initialize klass = nil, &block
|
53
|
+
@comp = block
|
54
|
+
@comp = lambda do |other, op|
|
55
|
+
# change operator "<" to ">".
|
56
|
+
return other.comp(klass, op.to_s.tr("<>", "><")) if other.class == Type
|
57
|
+
return self.comp(other, :==) if op.to_sym == :===
|
58
|
+
klass.__send__ op, other.classtype
|
59
|
+
end unless block_given?
|
60
|
+
end
|
61
|
+
|
62
|
+
def comp other, op
|
63
|
+
!!@comp.(other, op)
|
64
|
+
end
|
65
|
+
|
66
|
+
[:==, :!=, :>=, :<=, :>, :<, :===].each do |op|
|
67
|
+
define_method(op) do |other|
|
68
|
+
comp other, op
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def type
|
73
|
+
self
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def type_or a, b
|
78
|
+
Type.new do |other, op|
|
79
|
+
(a.type.__send__ op, other.type) || (b.type.__send__ op, other.type)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
module_function :type_or
|
83
|
+
|
84
|
+
|
85
|
+
def type_and a, b
|
86
|
+
Type.new do |other, op|
|
87
|
+
(a.type.__send__ op, other.type) && (b.type.__send__ op, other.type)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
module_function :type_and
|
91
|
+
|
92
|
+
def type_not a
|
93
|
+
Type.new do |other, op|
|
94
|
+
!(a.type.__send__ op, other.type)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
module_function :type_not
|
98
|
+
|
99
|
+
def type_plus_at a
|
100
|
+
Type.new do |other, op|
|
101
|
+
next a.type >= other if op.to_sym == :===
|
102
|
+
a.type.__send__ op, other.type
|
103
|
+
end
|
104
|
+
end
|
105
|
+
module_function :type_plus_at
|
106
|
+
end
|
107
|
+
|
data/stitcher.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'stitcher/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "stitcher"
|
8
|
+
spec.version = Stitcher::VERSION
|
9
|
+
spec.authors = ["manga_osyo"]
|
10
|
+
spec.email = ["manga.osyo@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Typed Programing}
|
13
|
+
spec.description = %q{Typed Programing}
|
14
|
+
spec.homepage = "https://github.com/osyo-manga/gem-stitcher"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency "rspec"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stitcher
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- manga_osyo
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Typed Programing
|
56
|
+
email:
|
57
|
+
- manga.osyo@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".rspec"
|
64
|
+
- ".travis.yml"
|
65
|
+
- Gemfile
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- bin/console
|
69
|
+
- bin/setup
|
70
|
+
- docs/matome.md
|
71
|
+
- docs/stitcher.md
|
72
|
+
- docs/type.md
|
73
|
+
- docs/typed.md
|
74
|
+
- example/core_ex.rb
|
75
|
+
- example/register.rb
|
76
|
+
- example/simple.rb
|
77
|
+
- example/type.rb
|
78
|
+
- lib/stitcher.rb
|
79
|
+
- lib/stitcher/accessor.rb
|
80
|
+
- lib/stitcher/concepts.rb
|
81
|
+
- lib/stitcher/core.rb
|
82
|
+
- lib/stitcher/core_ext.rb
|
83
|
+
- lib/stitcher/define_method.rb
|
84
|
+
- lib/stitcher/operators.rb
|
85
|
+
- lib/stitcher/register.rb
|
86
|
+
- lib/stitcher/require.rb
|
87
|
+
- lib/stitcher/stitch.rb
|
88
|
+
- lib/stitcher/type.rb
|
89
|
+
- lib/stitcher/type/core_ext.rb
|
90
|
+
- lib/stitcher/variadic_argument.rb
|
91
|
+
- lib/stitcher/version.rb
|
92
|
+
- stitcher.gemspec
|
93
|
+
homepage: https://github.com/osyo-manga/gem-stitcher
|
94
|
+
licenses:
|
95
|
+
- MIT
|
96
|
+
metadata: {}
|
97
|
+
post_install_message:
|
98
|
+
rdoc_options: []
|
99
|
+
require_paths:
|
100
|
+
- lib
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
requirements: []
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.4.5.1
|
114
|
+
signing_key:
|
115
|
+
specification_version: 4
|
116
|
+
summary: Typed Programing
|
117
|
+
test_files: []
|