hitsuji 0.2.1 → 0.2.2
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/lib/hitsuji.rb +7 -76
- data/lib/subsystem.rb +0 -3
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b084cd337a2aa754de2f5f8b0448964e30e1d352b7a59b7172f5817f89a7caf1
|
4
|
+
data.tar.gz: e8498e02136c8b754d37c96826bd84bb8f96da8fa7e17005f1af2eed34bbd66a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce02e589408a6d7845a15d8aa11f231ed9d14056d369dd39dbbbc95286c393e73a1d3b218560e764edfe21b4d5d327b4040a1f36e71734fcca13c83082628e36
|
7
|
+
data.tar.gz: '09061782dc349c041754b64ed05d1cfaf2fad6badbcc34a9f2befcfa5c1cf13997cd3d39a6a0c74c54f42e1589d822142f5f04c15395c2d9d8cc0e2f0e737d53'
|
data/lib/hitsuji.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'transfer.rb'
|
2
2
|
require_relative 'subsystem.rb'
|
3
|
+
require_relative 'control.rb'
|
3
4
|
|
4
5
|
# The Hitsuji class is the interface to this module, and it contains
|
5
6
|
# all the functions you need. Examples using this class can be found in the
|
@@ -101,7 +102,8 @@ class Hitsuji
|
|
101
102
|
# my_system.bind(my_item, my_item2, my_linker) # binds items + linker
|
102
103
|
def bind(*obj)
|
103
104
|
@struct.concat obj
|
104
|
-
update @struct
|
105
|
+
Control.update @struct
|
106
|
+
@metadata[:date_edited] = `date`
|
105
107
|
end
|
106
108
|
|
107
109
|
# Exports the current state of the system to a file. This process *does not*
|
@@ -138,7 +140,7 @@ class Hitsuji
|
|
138
140
|
# my_system.import('oldfile.hitsuji') # imports 'oldfile.txt'
|
139
141
|
def import(directory)
|
140
142
|
@struct, @metadata = Transfer.import(directory)
|
141
|
-
update @struct
|
143
|
+
Control.update @struct
|
142
144
|
end
|
143
145
|
|
144
146
|
# Finds a bound object in the system by name, and returns the object if it
|
@@ -154,7 +156,7 @@ class Hitsuji
|
|
154
156
|
# my_system.import('oldfile.hitsuji') # imports 'oldfile.txt'
|
155
157
|
# my_item = my_system.find(:foo) # finds an item
|
156
158
|
def find(query)
|
157
|
-
get(query, @struct, nil, false)
|
159
|
+
Control.get(query, @struct, nil, false)
|
158
160
|
end
|
159
161
|
|
160
162
|
# Finds a bound object in the system by name, edits the object if it exists,
|
@@ -171,7 +173,7 @@ class Hitsuji
|
|
171
173
|
# my_system.import('oldfile.hitsuji') # imports 'oldfile.txt'
|
172
174
|
# my_item = my_system.edit(:foo, 'bar') # changes an item
|
173
175
|
def edit(query, value)
|
174
|
-
get(query, @struct, value, false)
|
176
|
+
Control.get(query, @struct, value, false)
|
175
177
|
end
|
176
178
|
|
177
179
|
# Finds a bound object in the system by name, removes it if it exists, and
|
@@ -187,77 +189,6 @@ class Hitsuji
|
|
187
189
|
# my_system.import('oldfile.hitsuji') # imports 'oldfile.txt'
|
188
190
|
# my_item = my_system.remove(:foo) # removes an item
|
189
191
|
def remove(query)
|
190
|
-
get(query, @struct, nil, true)
|
192
|
+
Control.get(query, @struct, nil, true)
|
191
193
|
end
|
192
|
-
|
193
|
-
#--
|
194
|
-
# BEGINNING OF FUCKED UP FUNCTIONS
|
195
|
-
#++
|
196
|
-
|
197
|
-
# Updates state of system to monitor name usageand dependencies on operations.
|
198
|
-
# This is run every time Hitsuji.bind or Hitsuji.import is run.
|
199
|
-
#
|
200
|
-
# ==== Attributes
|
201
|
-
#
|
202
|
-
# * +obj+ - the object to update (usually @struct)
|
203
|
-
#
|
204
|
-
# ==== Example
|
205
|
-
#
|
206
|
-
# class MyHitsuji < Hitsuji # creates dependent class
|
207
|
-
# def linker_update # my new special function!
|
208
|
-
# @struct.each do |i|
|
209
|
-
# update(@struct) if i.class == Linker # uses update function
|
210
|
-
# end
|
211
|
-
# end
|
212
|
-
# end
|
213
|
-
def update(obj)
|
214
|
-
names = []
|
215
|
-
obj.each do |i|
|
216
|
-
throw 'err' unless i.name.nil? || !names.include?(i.name)
|
217
|
-
names << update(i.value) if i.class == Linker
|
218
|
-
end
|
219
|
-
|
220
|
-
@metadata[:date_edited] = `date`
|
221
|
-
names
|
222
|
-
end
|
223
|
-
|
224
|
-
# Gets value of item from @struct and returns it. It can perform additional
|
225
|
-
# operations such as editing and removal.
|
226
|
-
#
|
227
|
-
# ==== Attributes
|
228
|
-
#
|
229
|
-
# * +query+ - the name of the object to perform the actions on
|
230
|
-
# * +obj+ - the object to search in (usually @struct)
|
231
|
-
# * +edit+ - the edit to make to the object (nil if not)
|
232
|
-
# * +remove+ - whether to remove the object (false if not)
|
233
|
-
#
|
234
|
-
# ==== Example
|
235
|
-
#
|
236
|
-
# class MyHitsuji < Hitsuji # creates dependent class
|
237
|
-
# def remove_from_linkers(query) # my new special function!
|
238
|
-
# @struct.each do |i|
|
239
|
-
# if i.class == Linker
|
240
|
-
# get(query, @struct, nil, true) # uses get function
|
241
|
-
# end
|
242
|
-
# end
|
243
|
-
# end
|
244
|
-
# end
|
245
|
-
def get(query, obj, edit, remove)
|
246
|
-
answer = nil
|
247
|
-
obj.each do |i|
|
248
|
-
if i.name == query
|
249
|
-
answer = i
|
250
|
-
if edit
|
251
|
-
i.value = edit
|
252
|
-
elsif remove
|
253
|
-
i.name = nil
|
254
|
-
end
|
255
|
-
elsif i.class == Linker
|
256
|
-
answer = view(query, i.value, edit, remove)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
answer
|
260
|
-
end
|
261
|
-
|
262
|
-
private :update, :get
|
263
194
|
end
|
data/lib/subsystem.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
# Item is bound, a seperate method must be used to read and change it. Examples
|
4
4
|
# of its use can be seen in the documentation for the Hitsuji.item method.
|
5
5
|
class Item
|
6
|
-
# @private
|
7
6
|
def initialize(name, value)
|
8
7
|
@name = name
|
9
8
|
@value = value
|
@@ -19,7 +18,6 @@ end
|
|
19
18
|
# Examples of its use can be seen in the documentation for the Hitsuji.linker
|
20
19
|
# method.
|
21
20
|
class Linker
|
22
|
-
# @private
|
23
21
|
def initialize(name, value)
|
24
22
|
@name = name
|
25
23
|
@value = value
|
@@ -37,7 +35,6 @@ end
|
|
37
35
|
# between Items and Operations. Examples of its use can be seen in the
|
38
36
|
# documentation for the Hitsuji.operation method.
|
39
37
|
class Operation
|
40
|
-
# @private
|
41
38
|
def initialize(name, input, block)
|
42
39
|
@name = name
|
43
40
|
@input = input
|
metadata
CHANGED
@@ -1,20 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hitsuji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Quail
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |-
|
14
|
-
Hitsuji is a library that
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
Hitsuji is a library that implements a tree data structure,
|
15
|
+
where each node is represented by a value, points to other values, or performs
|
16
|
+
a function on some values. When the tree is updated, the inputs to the
|
17
|
+
functions will change, hence changing the outputs, eventually propagating the
|
18
|
+
update through the entire tree. Data structures can also be exported to disk,
|
19
|
+
allowing for wide applications of this software, e.g. handling big data,
|
20
|
+
managing content, etc.
|
18
21
|
email: josh@madbean.com
|
19
22
|
executables:
|
20
23
|
- hitsuji
|
@@ -31,7 +34,7 @@ licenses:
|
|
31
34
|
metadata:
|
32
35
|
source_code_uri: https://github.com/realtable/hitsuji
|
33
36
|
bug_tracker_uri: https://github.com/realtable/hitsuji/issues
|
34
|
-
documentation_uri: https://www.rubydoc.info/gems/hitsuji/0.2.
|
37
|
+
documentation_uri: https://www.rubydoc.info/gems/hitsuji/0.2.2
|
35
38
|
post_install_message:
|
36
39
|
rdoc_options: []
|
37
40
|
require_paths:
|
@@ -47,9 +50,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
50
|
- !ruby/object:Gem::Version
|
48
51
|
version: '0'
|
49
52
|
requirements: []
|
50
|
-
|
51
|
-
rubygems_version: 2.7.7
|
53
|
+
rubygems_version: 3.0.2
|
52
54
|
signing_key:
|
53
55
|
specification_version: 4
|
54
|
-
summary: A utility for
|
56
|
+
summary: A utility in Ruby for tree data structures with functions.
|
55
57
|
test_files: []
|