rubyverse 0.0.1

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.
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ --tag copyright:Copyright
2
+ --tag license:License
3
+ -
4
+ HISTORY.txt
data/HISTORY.txt ADDED
@@ -0,0 +1,3 @@
1
+ 2014-04-13 Version 0.0.1
2
+
3
+ First release.
data/lib/rubyverse.rb ADDED
@@ -0,0 +1,93 @@
1
+ # Parallel Ruby universes ("Rubyverses") - A proposed interface for
2
+ # parallel, "semi-private" method or method-and-data spaces via
3
+ # "closely associated" objects.
4
+ #
5
+ # Example:
6
+ #
7
+ # require 'rubyverse'
8
+ #
9
+ # class Number_Assistant
10
+ # def initialize (original); @original = original; end
11
+ # def my_method; "Number assistant for #{@original}"; end
12
+ # def rubyverse_original; @original; end
13
+ # end
14
+ #
15
+ # class String_Assistant
16
+ # def initialize (original); @original = original; end
17
+ # def my_method; "String assistant for #{@original}"; end
18
+ # def rubyverse_original; @original; end
19
+ # end
20
+ #
21
+ # class Assisted
22
+ # def rubyverse_new (object)
23
+ # case object
24
+ # when Numeric then Number_Assistant.new(object)
25
+ # when String then String_Assistant.new(object)
26
+ # else self
27
+ # end
28
+ # end
29
+ #
30
+ # def my_method; "Default assistant"; end
31
+ # end
32
+ #
33
+ # object = Assisted.new # An object implementing #rubyverse_new
34
+ # 10.in_rubyverse(object).my_method # "Number assistant for 10"
35
+ # "hi".in_rubyverse(object).my_method # "String assistant for hi"
36
+ # nil.in_rubyverse(object).my_method # "Default assistant"
37
+ #
38
+ # The Rubyverse module is only for documentation purposes.
39
+ # The Object class is extended with supporting methods.
40
+ #
41
+ # A Rubyverse object is responsible for allocating appropriate parallel
42
+ # objects for its Rubyverse.
43
+ #
44
+ # @author Brian Katzung (briank@kappacs.com), Kappa Computer Solutions, LLC
45
+ # @license Public Domain
46
+ # @version 0.0.1
47
+ module Rubyverse
48
+
49
+ VERSION = "0.0.1"
50
+
51
+ # Return a parallel object in this Rubyverse corresponding to the
52
+ # given original object.
53
+ #
54
+ # It is invoked by Object#in_rubyverse(rubyverse) upon the first
55
+ # reference to each Rubyverse for each original object.
56
+ #
57
+ # It is recommended that parallel objects be initialized with the
58
+ # original object and that they override #rubyverse_original to
59
+ # return it.
60
+ #
61
+ # @param original The original object.
62
+ def rubyverse_new (original); original; end
63
+
64
+ end
65
+
66
+ # Extends the Object class to support Rubyverses.
67
+ class Object
68
+
69
+ # Return the map of Rubyverses to parallel objects.
70
+ #
71
+ # @param create [Boolean] Whether to create the map if it doesn't exist.
72
+ # @return [Hash]
73
+ def rubyverse_map (create = true)
74
+ if create then @rubyverse_map ||= {}
75
+ else @rubyverse_map
76
+ end
77
+ end
78
+
79
+ # Return ourselves, the original Rubyverse object.
80
+ #
81
+ # Parallel object classes should override this method.
82
+ def rubyverse_original; self; end
83
+
84
+ # Return this object's parallel object in another Rubyverse.
85
+ #
86
+ # @param rubyverse [Rubyverse] The desired Rubyverse.
87
+ def in_rubyverse (rubyverse)
88
+ rubyverse_map[rubyverse] ||= rubyverse.rubyverse_new self
89
+ end
90
+
91
+ end
92
+
93
+ # END
data/rubyverse.gemspec ADDED
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "rubyverse"
3
+ s.version = "0.0.1"
4
+ s.date = "2014-04-13"
5
+ s.authors = ["Brian Katzung"]
6
+ s.email = ["briank@kappacs.com"]
7
+ s.homepage = "http://rubygems.org/gems/rubyverse"
8
+ s.summary = "Semi-private method spaces in parallel Rubyverses"
9
+ s.description = "Parallel Ruby universes (\"Rubyverses\") - a proposed interface for parallel, \"semi-private\" method or method-and-data spaces via \"closely associated\" objects."
10
+ s.license = "Public Domain"
11
+
12
+ s.files = Dir.glob("lib/**/*") +
13
+ %w{rubyverse.gemspec HISTORY.txt .yardopts}
14
+ s.test_files = Dir.glob("test/**/*.rb")
15
+ s.require_path = 'lib'
16
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyverse
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Brian Katzung
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2014-04-13 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Parallel Ruby universes ("Rubyverses") - a proposed interface for parallel, "semi-private" method or method-and-data spaces via "closely associated" objects.
22
+ email:
23
+ - briank@kappacs.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/rubyverse.rb
32
+ - rubyverse.gemspec
33
+ - HISTORY.txt
34
+ - .yardopts
35
+ has_rdoc: true
36
+ homepage: http://rubygems.org/gems/rubyverse
37
+ licenses:
38
+ - Public Domain
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ requirements: []
61
+
62
+ rubyforge_project:
63
+ rubygems_version: 1.3.7
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: Semi-private method spaces in parallel Rubyverses
67
+ test_files: []
68
+