instance 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cee2d02baf52220acdc856e29882e4f010ba2738
4
+ data.tar.gz: 431b52894e0f05ed07f01a659a32dfee9afd46d5
5
+ SHA512:
6
+ metadata.gz: 6db8dc0db1016e250ef002411b651027c934e627baf1feb292e1846c412897b35b975cad3de8a993a7f7c8b746dfa132d45d5e409c1e267e525851f02c86c35e
7
+ data.tar.gz: 36957724377899c20c5e5e604444b8e3da459522fea4c9154ec1781c89174354912e653a9a8848d3e464431c899e841b6b8ba188c284796cbae199ca3f379a49
data/.index ADDED
@@ -0,0 +1,62 @@
1
+ ---
2
+ revision: 2013
3
+ type: ruby
4
+ sources:
5
+ - index/
6
+ authors:
7
+ - name: Thomas Sawyer
8
+ email: transfire@gmail.com
9
+ organizations: []
10
+ requirements:
11
+ - groups:
12
+ - test
13
+ development: true
14
+ name: qed
15
+ - groups:
16
+ - test
17
+ development: true
18
+ name: ae
19
+ - groups:
20
+ - test
21
+ development: true
22
+ name: simplecov
23
+ conflicts: []
24
+ alternatives: []
25
+ resources:
26
+ - type: home
27
+ uri: http://rubyworks.github.com/instance
28
+ label: Homepage
29
+ - type: code
30
+ uri: http://github.com/rubyworks/instance
31
+ label: Source Code
32
+ - type: bugs
33
+ uri: http://github.com/rubyworks/instance/issues
34
+ label: Issue Tracker
35
+ - type: docs
36
+ uri: http://rubydoc.info/gems/instance
37
+ label: Documentation
38
+ - type: mail
39
+ uri: http://groups.google.com/group/facets-universal
40
+ label: Mailing List
41
+ repositories:
42
+ - name: upstream
43
+ scm: git
44
+ uri: git@github.com:rubyworks/instance.git
45
+ categories: []
46
+ copyrights:
47
+ - holder: Rubyworks
48
+ year: '2014'
49
+ license: BSD-2-Clause
50
+ customs: []
51
+ paths:
52
+ load:
53
+ - lib
54
+ name: instance
55
+ title: Instance
56
+ summary: Object Instance API
57
+ created: '2014-01-31'
58
+ description: |-
59
+ Instance is a spin-off of Ruby Facets. It provides a simple convenient API
60
+ for accessing an object's state.
61
+ version: 0.1.0
62
+ date: '2014-02-01'
@@ -0,0 +1,10 @@
1
+ # RELEASE HISTORY
2
+
3
+ ## 0.1.0 | 2014-02-01
4
+
5
+ This is the initial release of Instance, a class spun-off from
6
+ Ruby Facets.
7
+
8
+ Changes:
9
+
10
+ * Happy Release Day!
@@ -0,0 +1,23 @@
1
+ BSD-2-Clause License (http://spdx.org/licenses/BSD-2-Clause)
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are
4
+ permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of
7
+ conditions and the following disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list
10
+ of conditions and the following disclaimer in the documentation and/or other materials
11
+ provided with the distribution.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESS OR IMPLIED
14
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
15
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
16
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
17
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
18
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
19
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
20
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
21
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
+
23
+
@@ -0,0 +1,58 @@
1
+ # Instance
2
+
3
+ ## What Is It?
4
+
5
+ Instance is a *convenient* and *safe* API for accessing and manipulating
6
+ an object's state.
7
+
8
+ ## How Does It Work
9
+
10
+ Instance adds a method to all objects called `#instance`. It returns
11
+ an `Instance` delegator that provides the full interface to the
12
+ object's instance state.
13
+
14
+ Of course, without implementing this in C, directly in the Ruby source,
15
+ we are left to depend on the current provisions Ruby has for accessing
16
+ the state of an object. So there are some limitations here. However,
17
+ we implement the Ruby code in such a way as to minimize the downsides
18
+ by caching all the method definitions the Instance class will utilize.
19
+
20
+ ## Usage
21
+
22
+ Let's use a very simple example class with which to demonstrate usage.
23
+
24
+ ```ruby
25
+ class Song
26
+ attr_accessor :title
27
+ attr_accessor :author
28
+ attr_accessor :length
29
+
30
+ def initialize(title, author, length)
31
+ @title = title
32
+ @author = author
33
+ @length = length
34
+ end
35
+ end
36
+ ```
37
+
38
+ ```ruby
39
+ song = Song.new("Paranoid", "Black Sabbath", 1970)
40
+
41
+ song.instance.variables #=> [:@author, :@title, :@length]
42
+
43
+ song.instance.get(:name) #=> "Black Sabbath"
44
+
45
+ song.instance[:name] #=> "Black Sabbath"
46
+ ```
47
+
48
+ For more a more complete set of usage examples see the QED documentation.
49
+
50
+
51
+ ## Copyrights
52
+
53
+ Copyright 2014 Rubyworks
54
+
55
+ BSD-2-Clause License
56
+
57
+ See LICENSE.txt file for license details.
58
+
@@ -0,0 +1 @@
1
+ require 'ae'
@@ -0,0 +1,149 @@
1
+ # Instance
2
+
3
+ First thing we need to do, of course, is load the library.
4
+
5
+ require 'instance'
6
+
7
+ Now we can create an example class with which to work.
8
+
9
+ class ::Friend
10
+ attr_accessor :name, :age, :phone
11
+
12
+ def initialize(name, age, phone)
13
+ @name, @age, @phone = name, age, phone
14
+ end
15
+ end
16
+
17
+ And now demonstrate the available API.
18
+
19
+ ## Instance#variables
20
+
21
+ f1 = Friend.new("John", 30, "555-1212")
22
+ f1.instance.variables.assert == [:@name, :@age, :@phone]
23
+
24
+ ## Instance#names
25
+
26
+ f1 = Friend.new("John", 30, "555-1212")
27
+ f1.instance.names.assert == ["name", "age", "phone"]
28
+
29
+ ## Instance#keys
30
+
31
+ f1 = Friend.new("John", 30, "555-1212")
32
+ f1.instance.keys.assert == [:name, :age, :phone]
33
+
34
+ ## Instance#values
35
+
36
+ f1 = Friend.new("John", 30, "555-1212")
37
+ f1.instance.values.assert == ["John", 30, "555-1212"]
38
+
39
+ ## Instance#size
40
+
41
+ The `#size` method reports how many instance variables are defined.
42
+
43
+ f = Friend.new("John", 30, "555-1212")
44
+ f.instance.size.assert == 3
45
+
46
+ This method is primarily of use to the Enumerable mixin.
47
+
48
+ ## Instance#variable_defined?
49
+
50
+ f = Friend.new("John", 30, "555-1212")
51
+ f.instance.assert.variable_defined?(:@name)
52
+ f.instance.assert.variable_defined?(:name)
53
+
54
+ ## Instance#update and #assign
55
+
56
+ f1 = Friend.new("John", 30, "555-1212")
57
+ f1.name.assert == 'John'
58
+
59
+ f1.instance.update(:name=>'Jerry')
60
+ f1.name.assert == 'Jerry'
61
+
62
+ f1.instance.assign(:name=>'John')
63
+ f1.name.assert == 'John'
64
+
65
+ ## Instance#to_h
66
+
67
+ We can convert the object's state, i.e. it's instance variable names and values
68
+ into a Hash very easily with the `#to_h` method.
69
+
70
+ f1 = Friend.new("John", 30, "555-1212")
71
+ f1.instance.to_h.assert == {:name=>"John", :age=>30, :phone=>"555-1212"}
72
+
73
+ Notice that the `@` has beenn removed from the instance variable names. If we
74
+ want the `@` to stay simply pass `true` to the `#to_h` method.
75
+
76
+ f1 = Friend.new("John", 30, "555-1212")
77
+ f1.instance.to_h(true).assert == {:@name=>"John", :@age=>30, :@phone=>"555-1212"}
78
+
79
+ ## Instance#class
80
+
81
+ f = Friend.new("John", 30, "555-1212")
82
+ f.instance.class.assert == ::Friend
83
+
84
+ ## Instance#id
85
+
86
+ f = Friend.new("John", 30, "555-1212")
87
+ f.instance.id == f.object_id
88
+
89
+ ## Instance#of?
90
+
91
+ f = Friend.new("John", 30, "555-1212")
92
+ f.instance.assert.of?(::Friend)
93
+
94
+ ## Instance#get and #set
95
+
96
+ f = Friend.new("John", 30, "555-1212")
97
+ f.instance.get(:name).assert == "John"
98
+ f.instance.set(:name, "Bill")
99
+ f.name.assert == "Bill"
100
+
101
+ ## Instance#remove
102
+
103
+ f = Friend.new("John", 30, "555-1212")
104
+ f.instance.remove(:name)
105
+ f.instance.refute.variable_defined?(:@name)
106
+
107
+ ## Instance#method
108
+
109
+ The Instance class provides a `method` method for getting a Method object for
110
+ any of the target object's methods by name.
111
+
112
+ f1 = Friend.new("John", 30, "555-1212")
113
+ m = f1.instance.method(:name)
114
+ m.assert.is_a?(::Method)
115
+
116
+ This can seem a little confusing because Ruby's `instance_method` method actually
117
+ returns an `UnboundMethod` object. Unfortunately Ruby's use of the term `instance_method`
118
+ is a complete misnomer. It should be something like `method_definition` instead.
119
+ The actual *instance method* is the object's method.
120
+
121
+ ## Instance#methods
122
+
123
+ f = Friend.new("John", 30, "555-1212")
124
+ f.instance.methods
125
+ f.instance.methods(:private)
126
+ f.instance.methods(:protected)
127
+ f.instance.methods(:public)
128
+ f.instance.methods(:public, :private)
129
+
130
+ ## Instance#eval and #exec
131
+
132
+ f = Friend.new("John", 30, "555-1212")
133
+ f.instance.eval("@name").assert == "John"
134
+ f.instance.exec{ @name }.assert == "John"
135
+
136
+ ## Instance#send
137
+
138
+ Sending a message to an object as if within the object itself and thus by-passing
139
+ method visibility is somehting that should only be done as an act of *metaprogramming*.
140
+ Hence it makes sense for it to be done via the `instance` interface.
141
+
142
+ f = Friend.new("John", 30, "555-1212")
143
+ f.send(:name).assert == "John"
144
+
145
+ ## Instance#delegate
146
+
147
+ f = Friend.new("John", 30, "555-1212")
148
+ f.instance.delegate.assert == f
149
+
@@ -0,0 +1,8 @@
1
+ QED.configure 'coverage' do
2
+ require 'simplecov'
3
+ SimpleCov.command_name 'QED'
4
+ SimpleCov.start do
5
+ coverage_dir 'log/coverage'
6
+ end
7
+ end
8
+
@@ -0,0 +1,303 @@
1
+ # Instance class is a delgator for any object which provides
2
+ # an elegant and protected interface to an object's state, i.e.
3
+ # its *instance*.
4
+ #
5
+ # Examples
6
+ #
7
+ # class Friend
8
+ # attr_accessor :name, :age, :phone
9
+ # def initialize(name, age, phone)
10
+ # @name, @age, @phone = name, age, phone
11
+ # end
12
+ # end
13
+ #
14
+ # f1 = Friend.new("John", 30, "555-1212")
15
+ # f1.instance
16
+ #
17
+ # f1.instance.update({:name=>'Jerry'})
18
+ # f1.instance
19
+ #
20
+ # TODO: Should we add `is_a?` and `kind_of?` too?
21
+
22
+ class Instance
23
+ include Enumerable
24
+
25
+ # Store Object methods so they cannot be overriden by the delegate class.
26
+ METHODS = {}
27
+
28
+ def self.freeze_method(name)
29
+ METHODS[name.to_sym] = Object.instance_method(name)
30
+ end
31
+
32
+ freeze_method :object_id
33
+ freeze_method :class
34
+ freeze_method :instance_of?
35
+ freeze_method :method
36
+ freeze_method :methods
37
+ freeze_method :public_methods
38
+ freeze_method :protected_methods
39
+ freeze_method :private_methods
40
+ freeze_method :instance_eval
41
+ freeze_method :instance_exec
42
+ freeze_method :instance_variables
43
+ freeze_method :instance_variable_get
44
+ freeze_method :instance_variable_set
45
+ freeze_method :instance_variable_defined?
46
+ freeze_method :remove_instance_variable
47
+ freeze_method :send
48
+
49
+ #module Kernel
50
+ # # Returns an instance of Instance for +self+,
51
+ # # which allows convenient access to an object's
52
+ # # internals.
53
+ # def instance
54
+ # Instance.instance(self)
55
+ # end
56
+ #end
57
+
58
+ # Instance cache acts as a global cache for instances of Instance.
59
+ @cache = {}
60
+
61
+ # Instance is multiton. Use this method instead of #new to get a
62
+ # cached instance.
63
+ def self.instance(delegate)
64
+ @cache[delegate] ||= Instance.new(delegate)
65
+ end
66
+
67
+ # Initialize new Instance instance.
68
+ def initialize(delegate)
69
+ @delegate = delegate
70
+ end
71
+
72
+ # The delegated object.
73
+ def delegate
74
+ @delegate
75
+ end
76
+
77
+ # Iterate over instance variables.
78
+ def each
79
+ variables.each do |name|
80
+ yield(name[1..-1].to_sym, get(name))
81
+ end
82
+ end
83
+
84
+ # Number of instance variables.
85
+ def size
86
+ variables.size
87
+ end
88
+
89
+ # Get instance variables with values as a hash.
90
+ #
91
+ # Examples
92
+ #
93
+ # class X
94
+ # def initialize(a,b)
95
+ # @a, @b = a, b
96
+ # end
97
+ # end
98
+ #
99
+ # x = X.new(1,2)
100
+ #
101
+ # x.instance.to_h #=> { :a=>1, :b=>2 }
102
+ #
103
+ # Returns [Hash].
104
+ def to_h(at=false)
105
+ h = {}
106
+ if at
107
+ variables.each do |name|
108
+ h[name] = get(name)
109
+ end
110
+ else
111
+ each do |key, value|
112
+ h[key] = value
113
+ end
114
+ end
115
+ h
116
+ end
117
+
118
+ # TODO: Not sure if this should be used.
119
+ alias_method :to_hash, :to_h
120
+
121
+ #
122
+ def get(name)
123
+ name = atize(name)
124
+ #@delegate.instance_variable_get(name)
125
+ METHODS[:instance_variable_get].bind(@delegate).call(name)
126
+ end
127
+ alias :[] :get
128
+
129
+ #
130
+ def set(name, value)
131
+ name = atize(name)
132
+ #@delegate.instance_variable_set(name,value)
133
+ METHODS[:instance_variable_set].bind(@delegate).call(name,value)
134
+ end
135
+ alias :[]= :set
136
+
137
+ #
138
+ def <<(pair)
139
+ name, value = *pair
140
+ name = atize(name)
141
+ set(name, value)
142
+ end
143
+
144
+ # Remove instance variable.
145
+ def remove(name)
146
+ name = atize(name)
147
+ METHODS[:remove_instance_variable].bind(@delegate).call(name)
148
+ end
149
+
150
+ # Set instance variables given a +hash+.
151
+ #
152
+ # instance.update('@a'=>1, '@b'=>2)
153
+ # @a #=> 1
154
+ # @b #=> 2
155
+ #
156
+ # Also, +@+ sign is not neccessary.
157
+ #
158
+ # instance.update(:a=>1, :b=>2)
159
+ # @a #=> 1
160
+ # @b #=> 2
161
+ #
162
+ def update(hash)
163
+ hash.each do |pair|
164
+ self << pair
165
+ end
166
+ end
167
+
168
+ # A hold-over from the the old #instance_assign method.
169
+ alias_method :assign, :update
170
+
171
+ # Same as #instance_variables.
172
+ def variables
173
+ #@delegate.instance_variables
174
+ METHODS[:instance_variables].bind(@delegate).call
175
+ end
176
+
177
+ # Instance vairable names as symbols.
178
+ #
179
+ # Returns [Array<Symbols>].
180
+ def keys
181
+ variables.collect do |name|
182
+ name[1..-1].to_sym
183
+ end
184
+ end
185
+
186
+ # Instance variable names as strings.
187
+ #
188
+ # Returns [Array<String>].
189
+ def names
190
+ variables.collect do |name|
191
+ name[1..-1]
192
+ end
193
+ end
194
+
195
+ # Instance variable values.
196
+ #
197
+ # Returns [Array<Object>].
198
+ def values
199
+ variables.collect do |name|
200
+ get(name)
201
+ end
202
+ end
203
+
204
+ # Instance evaluation.
205
+ def eval(*a,&b)
206
+ #@delegate.instance_eval(*a,&b)
207
+ METHODS[:instance_eval].bind(@delegate).call(*a,&b)
208
+ end
209
+
210
+ # Instance execution.
211
+ def exec(*a,&b)
212
+ #@delegate.instance_exec(*a,&b)
213
+ METHODS[:instance_exec].bind(@delegate).call(*a,&b)
214
+ end
215
+
216
+ # Get method. Usage of this might seem strange because Ruby's own
217
+ # `instance_method` method is a misnomer. It should be something
218
+ # like `definition` or `method_definition`. In Ruby the acutal
219
+ # "instance" method is accessed via the unadorned `method` method.
220
+ #
221
+ # Returns [Method].
222
+ def method(name)
223
+ #@delegate.instance_exec(*a,&b)
224
+ METHODS[:method].bind(@delegate).call(name)
225
+ end
226
+
227
+ # Returns list of method names.
228
+ #
229
+ # Returns [Array<Symbol>].
230
+ def methods(*selection)
231
+ list = []
232
+
233
+ if selection.empty?
234
+ list.concat METHODS[:methods].bind(@delegate).call
235
+ end
236
+
237
+ selection.each do |s|
238
+ case s
239
+ when :public
240
+ list.concat METHODS[:public_methods].bind(@delegate).call
241
+ when :protected
242
+ list.concat METHODS[:protected_methods].bind(@delegate).call
243
+ when :private
244
+ list.concat METHODS[:private_methods].bind(@delegate).call
245
+ end
246
+ end
247
+
248
+ return list
249
+ end
250
+
251
+ # Is the object an instance of a given class?
252
+ #
253
+ # Returns [Boolean]
254
+ def of?(a_class)
255
+ #@delegate.instance_of?(aclass)
256
+ METHODS[:instance_of?].bind(@delegate).call(a_class)
257
+ end
258
+
259
+ #
260
+ def variable_defined?(name)
261
+ name = atize(name)
262
+ #@delegate.variable_defined?(name)
263
+ METHODS[:instance_variable_defined?].bind(@delegate).call(name)
264
+ end
265
+
266
+ # Get object's instance id.
267
+ #
268
+ # Returns [Integer]
269
+ def id
270
+ #@delegate.variable_defined?(name)
271
+ METHODS[:object_id].bind(@delegate).call
272
+ end
273
+
274
+ # Get object's instance id.
275
+ #
276
+ # Returns [Class]
277
+ def class
278
+ #@delegate.variable_defined?(name)
279
+ METHODS[:class].bind(@delegate).call
280
+ end
281
+
282
+ # Send message to instance.
283
+ def send(*a, &b)
284
+ METHODS[:send].bind(@delegate).call(*a, &b)
285
+ end
286
+
287
+ private
288
+
289
+ def atize(name)
290
+ name.to_s !~ /^@/ ? "@#{name}" : name
291
+ end
292
+
293
+ end
294
+
295
+
296
+ class BasicObject
297
+ # Returns an instance of Instance for `self`, which allows convenient
298
+ # access to an object's internals.
299
+ def instance
300
+ ::Instance.instance(self)
301
+ end
302
+ end
303
+
@@ -0,0 +1,62 @@
1
+ ---
2
+ revision: 2013
3
+ type: ruby
4
+ sources:
5
+ - index/
6
+ authors:
7
+ - name: Thomas Sawyer
8
+ email: transfire@gmail.com
9
+ organizations: []
10
+ requirements:
11
+ - groups:
12
+ - test
13
+ development: true
14
+ name: qed
15
+ - groups:
16
+ - test
17
+ development: true
18
+ name: ae
19
+ - groups:
20
+ - test
21
+ development: true
22
+ name: simplecov
23
+ conflicts: []
24
+ alternatives: []
25
+ resources:
26
+ - type: home
27
+ uri: http://rubyworks.github.com/instance
28
+ label: Homepage
29
+ - type: code
30
+ uri: http://github.com/rubyworks/instance
31
+ label: Source Code
32
+ - type: bugs
33
+ uri: http://github.com/rubyworks/instance/issues
34
+ label: Issue Tracker
35
+ - type: docs
36
+ uri: http://rubydoc.info/gems/instance
37
+ label: Documentation
38
+ - type: mail
39
+ uri: http://groups.google.com/group/facets-universal
40
+ label: Mailing List
41
+ repositories:
42
+ - name: upstream
43
+ scm: git
44
+ uri: git@github.com:rubyworks/instance.git
45
+ categories: []
46
+ copyrights:
47
+ - holder: Rubyworks
48
+ year: '2014'
49
+ license: BSD-2-Clause
50
+ customs: []
51
+ paths:
52
+ load:
53
+ - lib
54
+ name: instance
55
+ title: Instance
56
+ summary: Object Instance API
57
+ created: '2014-01-31'
58
+ description: |-
59
+ Instance is a spin-off of Ruby Facets. It provides a simple convenient API
60
+ for accessing an object's state.
61
+ version: 0.1.0
62
+ date: '2014-02-01'
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: instance
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Sawyer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: qed
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ae
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
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: |-
56
+ Instance is a spin-off of Ruby Facets. It provides a simple convenient API
57
+ for accessing an object's state.
58
+ email:
59
+ - transfire@gmail.com
60
+ executables: []
61
+ extensions: []
62
+ extra_rdoc_files:
63
+ - LICENSE.txt
64
+ - README.md
65
+ - HISTORY.md
66
+ files:
67
+ - .index
68
+ - etc/qed.rb
69
+ - lib/instance.rb
70
+ - lib/instance.yml
71
+ - demo/applique/env.rb
72
+ - demo/instance.md
73
+ - README.md
74
+ - HISTORY.md
75
+ - LICENSE.txt
76
+ homepage: http://rubyworks.github.com/instance
77
+ licenses:
78
+ - BSD-2-Clause
79
+ metadata: {}
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 2.0.3
97
+ signing_key:
98
+ specification_version: 4
99
+ summary: Object Instance API
100
+ test_files: []
101
+ has_rdoc: