sycamore 0.2.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +21 -1
- data/README.md +12 -4
- data/VERSION +1 -1
- data/lib/sycamore/tree.rb +9 -5
- data/sycamore.gemspec +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17dce2903bbad75bfd5c528662e0857d2505cf1f
|
4
|
+
data.tar.gz: b0314f85b8c211cc3fe324dfd304c14e07c96bcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 008f0f0f027983a40aed89c98af2726711ab7297af755f3894e7b82d8e7b5e84154dfa318add0d27aa51ca56f4d28e66767fca8e0acf6419064f861d20efa0fc
|
7
|
+
data.tar.gz: e4c7b8096a0aad94b6702747c1fd26e7efa09102ec10c3d14b63672f89bca237cb88d9119439a03c5d10eada7f42714d699bd00653fc62a637419edbd9cbb3fa
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,9 +4,26 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
This project adheres to [Semantic Versioning](http://semver.org/) and
|
5
5
|
[Keep a CHANGELOG](http://keepachangelog.com).
|
6
6
|
|
7
|
+
|
7
8
|
## [Unreleased]
|
8
9
|
|
10
|
+
|
11
|
+
|
12
|
+
## [0.2.1] - 2016-04-07
|
13
|
+
|
14
|
+
### Added
|
15
|
+
|
16
|
+
- assigning `nil` via `Tree#[]=` removes a child tree, similar to the assignment
|
17
|
+
of `Sycamore::Nothing`
|
18
|
+
|
19
|
+
### Fixed
|
20
|
+
|
21
|
+
- #2: Rubinius support
|
22
|
+
|
23
|
+
|
24
|
+
|
9
25
|
## [0.2.0] - 2016-04-05
|
26
|
+
|
10
27
|
### Added
|
11
28
|
|
12
29
|
- assigning `Sycamore::Nothing` via `Tree#[]=` removes a child tree
|
@@ -14,10 +31,13 @@ This project adheres to [Semantic Versioning](http://semver.org/) and
|
|
14
31
|
- `Tree#node!` as a more strict variant of `Tree#node`, which raises an error
|
15
32
|
when no node present
|
16
33
|
|
34
|
+
|
35
|
+
|
17
36
|
## 0.1.0 - 2016-03-28
|
18
37
|
|
19
38
|
Initial release
|
20
39
|
|
21
40
|
|
22
|
-
[Unreleased]: https://github.com/marcelotto/sycamore/compare/v0.2.
|
41
|
+
[Unreleased]: https://github.com/marcelotto/sycamore/compare/v0.2.1...HEAD
|
42
|
+
[0.2.1]: https://github.com/marcelotto/sycamore/compare/v0.2.0...v0.2.1
|
23
43
|
[0.2.0]: https://github.com/marcelotto/sycamore/compare/v0.1.0...v0.2.0
|
data/README.md
CHANGED
@@ -48,6 +48,7 @@ With Sycamore this is a thing of the past.
|
|
48
48
|
|
49
49
|
- MRI >= 2.1
|
50
50
|
- JRuby
|
51
|
+
- Rubinius
|
51
52
|
|
52
53
|
|
53
54
|
## Dependencies
|
@@ -449,17 +450,24 @@ tree[:foo] = []
|
|
449
450
|
tree[:foo] = {}
|
450
451
|
```
|
451
452
|
|
452
|
-
To remove a child tree entirely, you can assign `Nothing` to the parent node.
|
453
|
+
To remove a child tree entirely, you can assign `Nothing` or `nil` to the parent node.
|
453
454
|
|
454
455
|
```ruby
|
455
456
|
tree[:foo] = Nothing
|
457
|
+
tree[:foo] = nil
|
456
458
|
```
|
457
459
|
|
458
|
-
|
460
|
+
If you really want to overwrite the current child nodes with a single `nil` node, you have to do it in the following way.
|
459
461
|
|
460
462
|
```ruby
|
461
|
-
|
462
|
-
|
463
|
+
tree[:foo] = [nil]
|
464
|
+
```
|
465
|
+
|
466
|
+
Note that all of these values are interpreted consistently inside input tree structures on creation, addition, deletion etc., i.e. empty Enumerables become empty child trees, `Nothing` or `nil` are used as place holders for the explicit negation of a child and `[nil]` is used for a child trees with a single `nil` node.
|
467
|
+
|
468
|
+
```ruby
|
469
|
+
puts Tree[ a: { b: nil }, c: { d: []}, d: [nil] ]
|
470
|
+
>Tree[:a=>:b, :c=>{:d=>[]}, :d=>[nil]]
|
463
471
|
```
|
464
472
|
|
465
473
|
Beside the deletion of all elements with the already mentioned `clear` method, single or multiple nodes and entire tree structures can be removed with `delete` or the `>>` operator.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/sycamore/tree.rb
CHANGED
@@ -326,7 +326,7 @@ module Sycamore
|
|
326
326
|
end
|
327
327
|
|
328
328
|
private def delete_tree(tree)
|
329
|
-
tree.each
|
329
|
+
tree.each { |node, child| # using a {} block to circumvent this Rubinius issue: https://github.com/rubinius/rubinius-code/issues/7
|
330
330
|
raise InvalidNode, "#{node} is not a valid tree node" if node.is_a? Enumerable
|
331
331
|
next unless include? node
|
332
332
|
if Nothing.like?(child) or (child.respond_to?(:empty?) and child.empty?)
|
@@ -337,7 +337,7 @@ module Sycamore
|
|
337
337
|
delete_node(node) if this_child.empty?
|
338
338
|
end
|
339
339
|
end
|
340
|
-
|
340
|
+
}
|
341
341
|
|
342
342
|
self
|
343
343
|
end
|
@@ -380,8 +380,12 @@ module Sycamore
|
|
380
380
|
# Note that even if you assign a {Sycamore::Tree} directly the given tree
|
381
381
|
# will not become part of this tree by reference.
|
382
382
|
#
|
383
|
-
# An exception is the assignment of the {Nothing} tree: it will
|
384
|
-
# child tree at the given path entirely.
|
383
|
+
# An exception is the assignment of +nil+ or the {Nothing} tree: it will
|
384
|
+
# delete the child tree at the given path entirely. If you really want to
|
385
|
+
# overwrite the current child nodes with a single +nil+ node, you'll have to
|
386
|
+
# assign an array containing only +nil+.
|
387
|
+
#
|
388
|
+
# tree[:foo] = [nil]
|
385
389
|
#
|
386
390
|
# @overload []=(*path, node)
|
387
391
|
# Replaces the contents of the child at the given path with a single node.
|
@@ -422,7 +426,7 @@ module Sycamore
|
|
422
426
|
path, nodes_or_tree = args[0..-2], args[-1]
|
423
427
|
raise ArgumentError, 'wrong number of arguments (given 1, expected 2)' if path.empty?
|
424
428
|
|
425
|
-
if
|
429
|
+
if Nothing.like? nodes_or_tree
|
426
430
|
if path.size == 1
|
427
431
|
clear_child_of_node(path.first)
|
428
432
|
else
|
data/sycamore.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['marcelotto@gmx.de']
|
11
11
|
|
12
12
|
spec.summary = %q{An unordered tree data structure for Ruby.}
|
13
|
-
spec.description = %q{Sycamore is an
|
13
|
+
spec.description = %q{Sycamore is an unordered tree data structure.}
|
14
14
|
spec.homepage = 'https://github.com/marcelotto/sycamore'
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sycamore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcel Otto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,8 +108,7 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
-
description: Sycamore is an
|
112
|
-
immutable values solely based on Ruby Hashes.
|
111
|
+
description: Sycamore is an unordered tree data structure.
|
113
112
|
email:
|
114
113
|
- marcelotto@gmx.de
|
115
114
|
executables: []
|