WhiteCloth 0.0.2 → 0.0.4
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/Gemfile +4 -0
- data/Gemfile.lock +4 -0
- data/HISTORY +25 -4
- data/Rakefile +5 -1
- data/VERSION +1 -1
- data/{FluxTuna.gemspec → WhiteCloth.gemspec} +25 -6
- data/lib/data_structures.rb +25 -0
- data/lib/data_structures/standard_node.rb +64 -0
- data/lib/data_structures/standard_tree.rb +99 -0
- data/lib/data_structures/white_node.rb +201 -0
- data/lib/helpers/tree_builder.rb +43 -0
- data/{test/dir_walk/create_witness_test.rb → lib/helpers/uuid.rb} +14 -18
- data/lib/projections.rb +28 -0
- data/lib/projections/project_dir.rb +51 -0
- data/lib/projections/project_file.rb +0 -0
- data/test/data/data_test.rb +1 -1
- data/test/data_structures/basic_tree_test.rb +122 -0
- data/test/data_structures/standard_tree_test.rb +118 -0
- data/test/data_structures/uuid_test.rb +56 -0
- data/test/projections/project_file_test.rb +77 -0
- metadata +68 -34
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -16,6 +16,7 @@ GEM
|
|
16
16
|
bundler (~> 1.0.0)
|
17
17
|
git (>= 1.2.5)
|
18
18
|
rake
|
19
|
+
log4r (1.1.9)
|
19
20
|
minitest (2.1.0)
|
20
21
|
rake (0.8.7)
|
21
22
|
rcov (0.9.9)
|
@@ -32,6 +33,7 @@ GEM
|
|
32
33
|
sexp_processor (~> 3.0)
|
33
34
|
ruby_parser (2.0.6)
|
34
35
|
sexp_processor (~> 3.0)
|
36
|
+
rubytree (0.8.1)
|
35
37
|
sexp_processor (3.0.5)
|
36
38
|
uuidtools (2.1.2)
|
37
39
|
vclog (1.8.1)
|
@@ -51,11 +53,13 @@ DEPENDENCIES
|
|
51
53
|
gibberish
|
52
54
|
hiredis (~> 0.3.1)
|
53
55
|
jeweler (~> 1.6.0)
|
56
|
+
log4r (~> 1.1.9)
|
54
57
|
minitest
|
55
58
|
rcov
|
56
59
|
redis (~> 2.2.0)
|
57
60
|
reek (~> 1.2.8)
|
58
61
|
riot
|
62
|
+
rubytree (~> 0.8.1)
|
59
63
|
uuidtools
|
60
64
|
vclog
|
61
65
|
yard (~> 0.6.0)
|
data/HISTORY
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
RELEASE HISTORY
|
2
2
|
|
3
|
+
v0.0.2 / 2011-05-16
|
4
|
+
|
5
|
+
Regenerate gemspec for version 0.0.2 (David Love david@homeunix.org.uk)
|
6
|
+
|
7
|
+
Changes:
|
8
|
+
|
9
|
+
* 2 Patch Enhancements
|
10
|
+
|
11
|
+
* Update the HISTORY
|
12
|
+
* Update the gemspec with the correct project information
|
13
|
+
|
14
|
+
* 2 General Enhancements
|
15
|
+
|
16
|
+
* Version bump to 0.0.2
|
17
|
+
* Regenerate gemspec for version 0.0.1
|
18
|
+
|
19
|
+
|
3
20
|
v0.0.1 / 2011-05-16
|
4
21
|
|
5
22
|
Regenerate gemspec for version 0.0.1 (David Love david@homeunix.org.uk)
|
@@ -17,17 +34,21 @@ Changes:
|
|
17
34
|
* Initial commit to WhiteCloth.
|
18
35
|
|
19
36
|
|
20
|
-
HEAD / 2011-05-
|
37
|
+
HEAD / 2011-05-18
|
21
38
|
|
22
39
|
Current Development (David Love)
|
23
40
|
|
24
41
|
Changes:
|
25
42
|
|
26
|
-
*
|
43
|
+
* 5 Patch Enhancements
|
27
44
|
|
28
|
-
*
|
45
|
+
* Added foundations for the Standard Tree, including tests.
|
46
|
+
* Add a next function to UUIDTools::UUID to allow the generation of sequential UUID's
|
47
|
+
* Added basic sanity tests for the Gibberish library
|
48
|
+
* Update HISTORY file after tagging a version
|
49
|
+
* Remove FluxTuna from the testing namespace
|
29
50
|
|
30
51
|
* 1 General Enhancements
|
31
52
|
|
32
|
-
* Regenerate gemspec for version 0.0.
|
53
|
+
* Regenerate gemspec for version 0.0.2
|
33
54
|
|
data/Rakefile
CHANGED
@@ -68,7 +68,11 @@ task :test do
|
|
68
68
|
|
69
69
|
"test/data/data_test.rb",
|
70
70
|
|
71
|
-
"test/
|
71
|
+
"test/data_structures/uuid_test.rb",
|
72
|
+
"test/data_structures/basic_tree_test.rb",
|
73
|
+
"test/data_structures/standard_tree_test.rb",
|
74
|
+
|
75
|
+
"test/projections/project_file_test.rb"]
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
@@ -4,12 +4,12 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = %q{WhiteCloth}
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David Love"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-17}
|
13
13
|
s.default_executable = %q{whitecloth}
|
14
14
|
s.description = %q{See: http://research.homeunix.org.uk}
|
15
15
|
s.email = %q{david@homeunix.org.uk}
|
@@ -28,9 +28,19 @@ Gem::Specification.new do |s|
|
|
28
28
|
"README.rdoc",
|
29
29
|
"Rakefile",
|
30
30
|
"VERSION",
|
31
|
+
"WhiteCloth.gemspec",
|
31
32
|
"bin/whitecloth",
|
32
33
|
"lib/LICENSE",
|
33
34
|
"lib/WhiteCloth.rb",
|
35
|
+
"lib/data_structures.rb",
|
36
|
+
"lib/data_structures/standard_node.rb",
|
37
|
+
"lib/data_structures/standard_tree.rb",
|
38
|
+
"lib/data_structures/white_node.rb",
|
39
|
+
"lib/helpers/tree_builder.rb",
|
40
|
+
"lib/helpers/uuid.rb",
|
41
|
+
"lib/projections.rb",
|
42
|
+
"lib/projections/project_dir.rb",
|
43
|
+
"lib/projections/project_file.rb",
|
34
44
|
"lib/whitecloth/cli.rb",
|
35
45
|
"lib/whitecloth/cli/base.rb",
|
36
46
|
"lib/whitecloth/cli/commands.rb",
|
@@ -51,10 +61,13 @@ Gem::Specification.new do |s|
|
|
51
61
|
"test/data/bayeux/Welcome.byx",
|
52
62
|
"test/data/bayeux/Welcome.yaml",
|
53
63
|
"test/data/data_test.rb",
|
54
|
-
"test/
|
55
|
-
"test/
|
64
|
+
"test/data_structures/basic_tree_test.rb",
|
65
|
+
"test/data_structures/standard_tree_test.rb",
|
66
|
+
"test/data_structures/uuid_test.rb",
|
67
|
+
"test/init_test.rb",
|
68
|
+
"test/projections/project_file_test.rb"
|
56
69
|
]
|
57
|
-
s.homepage = %q{http://github.com/dlove24/
|
70
|
+
s.homepage = %q{http://github.com/dlove24/WhiteCloth}
|
58
71
|
s.licenses = ["ISC"]
|
59
72
|
s.require_paths = ["lib"]
|
60
73
|
s.rubygems_version = %q{1.6.2}
|
@@ -65,6 +78,8 @@ Gem::Specification.new do |s|
|
|
65
78
|
|
66
79
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
67
80
|
s.add_runtime_dependency(%q<algorithms>, [">= 0"])
|
81
|
+
s.add_runtime_dependency(%q<rubytree>, ["~> 0.8.1"])
|
82
|
+
s.add_runtime_dependency(%q<log4r>, ["~> 1.1.9"])
|
68
83
|
s.add_runtime_dependency(%q<uuidtools>, [">= 0"])
|
69
84
|
s.add_runtime_dependency(%q<hiredis>, ["~> 0.3.1"])
|
70
85
|
s.add_runtime_dependency(%q<em-synchrony>, [">= 0"])
|
@@ -82,6 +97,8 @@ Gem::Specification.new do |s|
|
|
82
97
|
s.add_development_dependency(%q<reek>, ["~> 1.2.8"])
|
83
98
|
else
|
84
99
|
s.add_dependency(%q<algorithms>, [">= 0"])
|
100
|
+
s.add_dependency(%q<rubytree>, ["~> 0.8.1"])
|
101
|
+
s.add_dependency(%q<log4r>, ["~> 1.1.9"])
|
85
102
|
s.add_dependency(%q<uuidtools>, [">= 0"])
|
86
103
|
s.add_dependency(%q<hiredis>, ["~> 0.3.1"])
|
87
104
|
s.add_dependency(%q<em-synchrony>, [">= 0"])
|
@@ -100,6 +117,8 @@ Gem::Specification.new do |s|
|
|
100
117
|
end
|
101
118
|
else
|
102
119
|
s.add_dependency(%q<algorithms>, [">= 0"])
|
120
|
+
s.add_dependency(%q<rubytree>, ["~> 0.8.1"])
|
121
|
+
s.add_dependency(%q<log4r>, ["~> 1.1.9"])
|
103
122
|
s.add_dependency(%q<uuidtools>, [">= 0"])
|
104
123
|
s.add_dependency(%q<hiredis>, ["~> 0.3.1"])
|
105
124
|
s.add_dependency(%q<em-synchrony>, [">= 0"])
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (c) 2011 David Love
|
2
|
+
#
|
3
|
+
# Permission to use, copy, modify, and/or distribute this software for
|
4
|
+
# any purpose with or without fee is hereby granted, provided that the
|
5
|
+
# above copyright notice and this permission notice appear in all copies.
|
6
|
+
#
|
7
|
+
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
10
|
+
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
12
|
+
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
13
|
+
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
14
|
+
#
|
15
|
+
|
16
|
+
# @author David Love
|
17
|
+
|
18
|
+
# Namespace for all the valid data structures used by {WhiteCloth} mutations
|
19
|
+
# and projections
|
20
|
+
module WhiteCloth::DataStructures
|
21
|
+
|
22
|
+
# Load the known data structures
|
23
|
+
require "data_structures/standard_tree"
|
24
|
+
require "data_structures/standard_node"
|
25
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Copyright (c) 2010-2011 David Love
|
2
|
+
#
|
3
|
+
# Permission to use, copy, modify, and/or distribute this software for
|
4
|
+
# any purpose with or without fee is hereby granted, provided that the
|
5
|
+
# above copyright notice and this permission notice appear in all copies.
|
6
|
+
#
|
7
|
+
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
10
|
+
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
12
|
+
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
13
|
+
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
14
|
+
#
|
15
|
+
|
16
|
+
# @author David Love
|
17
|
+
|
18
|
+
module WhiteCloth::DataStructures
|
19
|
+
|
20
|
+
# Load the base tree data structure
|
21
|
+
require "tree"
|
22
|
+
|
23
|
+
class StandardNode < Tree::TreeNode
|
24
|
+
|
25
|
+
###
|
26
|
+
### Constructors
|
27
|
+
###
|
28
|
+
|
29
|
+
def initialize(node_id, content)
|
30
|
+
super(node_id, content)
|
31
|
+
end
|
32
|
+
|
33
|
+
###
|
34
|
+
### Operators
|
35
|
+
###
|
36
|
+
|
37
|
+
# Add a new child node to the current node.
|
38
|
+
def << (child_node)
|
39
|
+
self.add(child_node)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Look for the designated block within tree starting at the current node.
|
43
|
+
def [] (block_name)
|
44
|
+
|
45
|
+
# We need to work out which node has the right content. Since
|
46
|
+
# the nodes are effectively unordered, we have to look (potentially)
|
47
|
+
# at every node
|
48
|
+
self.each{|child|
|
49
|
+
if child.content === block_name then
|
50
|
+
return child
|
51
|
+
end
|
52
|
+
}
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
###
|
57
|
+
### Accessors
|
58
|
+
###
|
59
|
+
|
60
|
+
# State that +id+ is an alias for the node name.
|
61
|
+
alias :id :name
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# Copyright (c) 2010-2011 David Love
|
2
|
+
#
|
3
|
+
# Permission to use, copy, modify, and/or distribute this software for
|
4
|
+
# any purpose with or without fee is hereby granted, provided that the
|
5
|
+
# above copyright notice and this permission notice appear in all copies.
|
6
|
+
#
|
7
|
+
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
10
|
+
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
12
|
+
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
13
|
+
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
14
|
+
#
|
15
|
+
|
16
|
+
# @author David Love
|
17
|
+
|
18
|
+
module WhiteCloth::DataStructures
|
19
|
+
|
20
|
+
# The {StandardTree} is, as the name implies, the basic data structure for a realm.
|
21
|
+
# All mutations operate over a {StandardTree}, and all projections to and from the
|
22
|
+
# void create or imply a {StandardTree} as a result.
|
23
|
+
class StandardTree
|
24
|
+
|
25
|
+
###
|
26
|
+
### Constructors
|
27
|
+
###
|
28
|
+
|
29
|
+
# Default constructor. Create a new tree, with a single node at the root.
|
30
|
+
def initialize(root_id = nil)
|
31
|
+
# Create the root id from supplied +root_id+, or a random one if the
|
32
|
+
# +root_id+ is missing
|
33
|
+
unless root_id.nil?
|
34
|
+
begin
|
35
|
+
@root_id = UUIDTools::UUID.parse(root_id)
|
36
|
+
rescue
|
37
|
+
@root_id = UUIDTools::UUID.random_create
|
38
|
+
end
|
39
|
+
else
|
40
|
+
@root_id = UUIDTools::UUID.random_create
|
41
|
+
end
|
42
|
+
@next_id = @root_id.next
|
43
|
+
|
44
|
+
# Create the root node for the tree
|
45
|
+
@nodes = StandardNode.new(@root_id.to_s, nil)
|
46
|
+
end
|
47
|
+
|
48
|
+
###
|
49
|
+
### Operators
|
50
|
+
###
|
51
|
+
|
52
|
+
# Adds the specified nodes to the tree. The +node_list+ is a block, which is taken
|
53
|
+
# to be a hash of node names/node identities and the contents to add to the identified
|
54
|
+
# nodes.
|
55
|
+
def << (node_list)
|
56
|
+
Hash[*node_list.flatten].each{|parent, contents|
|
57
|
+
add_child(parent, contents)
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
# Look for the designated block within tree starting at the current node.
|
62
|
+
def [] (block_name)
|
63
|
+
return @nodes[block_name]
|
64
|
+
end
|
65
|
+
|
66
|
+
###
|
67
|
+
### Helper functions
|
68
|
+
###
|
69
|
+
|
70
|
+
# Adds a new node to the tree, below the +parent+ node and with the specified
|
71
|
+
# +contents+.
|
72
|
+
def add_child(parent, contents)
|
73
|
+
|
74
|
+
# Find the parent node
|
75
|
+
if parent.nil? then
|
76
|
+
# Add to the root node
|
77
|
+
@nodes << StandardNode.new(@next_id.to_s, contents)
|
78
|
+
else
|
79
|
+
# Add to the relevant node
|
80
|
+
@nodes[parent] << StandardNode.new(@next_id.to_s, contents)
|
81
|
+
end
|
82
|
+
|
83
|
+
# Increment the node index
|
84
|
+
@next_id = @next_id.next
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
###
|
89
|
+
### Query functions
|
90
|
+
###
|
91
|
+
|
92
|
+
# Is the tree 'empty' (i.e. it has only the root node)?
|
93
|
+
def empty?
|
94
|
+
return !@nodes.has_children?
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
@@ -0,0 +1,201 @@
|
|
1
|
+
class ParaBlock
|
2
|
+
|
3
|
+
# Default contructor
|
4
|
+
def initialize(type, content = "", target = nil)
|
5
|
+
@orig_type = type
|
6
|
+
@type = normalise_type(type)
|
7
|
+
|
8
|
+
@content = content
|
9
|
+
@target = target
|
10
|
+
end
|
11
|
+
|
12
|
+
###
|
13
|
+
### Accessors
|
14
|
+
###
|
15
|
+
|
16
|
+
def type=(type)
|
17
|
+
@type = normalise_type(type)
|
18
|
+
end
|
19
|
+
def type
|
20
|
+
@type
|
21
|
+
end
|
22
|
+
|
23
|
+
def content=(content)
|
24
|
+
@content = content
|
25
|
+
end
|
26
|
+
def content
|
27
|
+
@content
|
28
|
+
end
|
29
|
+
|
30
|
+
def target=(target)
|
31
|
+
@target = target
|
32
|
+
end
|
33
|
+
def target
|
34
|
+
@target
|
35
|
+
end
|
36
|
+
|
37
|
+
###
|
38
|
+
### Convenience functions
|
39
|
+
###
|
40
|
+
|
41
|
+
def <<(value)
|
42
|
+
@content << value
|
43
|
+
end
|
44
|
+
|
45
|
+
def empty?
|
46
|
+
return (@content.empty? or (/\S/ !~ @content))
|
47
|
+
end
|
48
|
+
|
49
|
+
def clear
|
50
|
+
@content.clear
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns the length of the type and target, as they were
|
54
|
+
# written out _in the original document_. For the current
|
55
|
+
# type length, see type_length
|
56
|
+
def orig_type_length
|
57
|
+
@orig_type.to_s.length + @target.to_s.length + 1
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the length of the type and target, as they would
|
61
|
+
# be written out (including the separator), e.g as
|
62
|
+
# 'figure:L3'.length
|
63
|
+
def type_length
|
64
|
+
@type.to_s.length + @target.to_s.length + 1
|
65
|
+
end
|
66
|
+
|
67
|
+
# Take the current contents as a block
|
68
|
+
# type, and reset the content
|
69
|
+
def content_to_type!
|
70
|
+
|
71
|
+
unless @content =~ /\s+/ then
|
72
|
+
header = @content.split(':')
|
73
|
+
|
74
|
+
if header[0].nil? then
|
75
|
+
|
76
|
+
# If we can't work out the type, set everything
|
77
|
+
# to null
|
78
|
+
@type = :none
|
79
|
+
@target = nil
|
80
|
+
|
81
|
+
else
|
82
|
+
|
83
|
+
# Attempt to coerce the content to a type
|
84
|
+
block_type = header[0].to_sym
|
85
|
+
unless block_type.nil? then
|
86
|
+
@orig_type = block_type
|
87
|
+
@type = normalise_type(block_type)
|
88
|
+
else
|
89
|
+
@orig_type = :none
|
90
|
+
@type = :none
|
91
|
+
end
|
92
|
+
|
93
|
+
@target = header[1]
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
else
|
98
|
+
@type = :none
|
99
|
+
end
|
100
|
+
|
101
|
+
@content.clear
|
102
|
+
end
|
103
|
+
|
104
|
+
###
|
105
|
+
### Helper functions
|
106
|
+
###
|
107
|
+
|
108
|
+
# Do type mapping if needed, otherwise
|
109
|
+
# pass on the contents as the type
|
110
|
+
def normalise_type(type)
|
111
|
+
case type
|
112
|
+
when :e
|
113
|
+
return :emph
|
114
|
+
when :s
|
115
|
+
return :strong
|
116
|
+
when :quote
|
117
|
+
return :block_quote
|
118
|
+
else
|
119
|
+
return type
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
###
|
124
|
+
### Type conversions
|
125
|
+
###
|
126
|
+
|
127
|
+
def self.from_s(string)
|
128
|
+
|
129
|
+
unless string =~ /\s+/ then
|
130
|
+
header = string.split(':')
|
131
|
+
|
132
|
+
if header[0].nil? then
|
133
|
+
|
134
|
+
# If we can't work out the type, set everything
|
135
|
+
# to null
|
136
|
+
type = :none
|
137
|
+
target = nil
|
138
|
+
|
139
|
+
else
|
140
|
+
|
141
|
+
# Attempt to coerce the content to a type
|
142
|
+
block_type = header[0].to_sym
|
143
|
+
unless block_type.nil? then
|
144
|
+
type = block_type
|
145
|
+
else
|
146
|
+
type = :none
|
147
|
+
end
|
148
|
+
|
149
|
+
target = header[1]
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
else
|
154
|
+
type = :none
|
155
|
+
end
|
156
|
+
|
157
|
+
return ParaBlock.new(type, "", target)
|
158
|
+
end
|
159
|
+
|
160
|
+
def to_s
|
161
|
+
@content.to_s
|
162
|
+
end
|
163
|
+
|
164
|
+
def to_debug_s
|
165
|
+
return "block type: #{type}, content: #{content}"
|
166
|
+
end
|
167
|
+
|
168
|
+
def to_sym
|
169
|
+
@content.to_sym
|
170
|
+
end
|
171
|
+
|
172
|
+
def to_json(*a)
|
173
|
+
begin
|
174
|
+
require 'json'
|
175
|
+
|
176
|
+
json_hash = {
|
177
|
+
"type" => @name,
|
178
|
+
"content" => @content,
|
179
|
+
"target" => @target,
|
180
|
+
JSON.create_id => self.class.name
|
181
|
+
}
|
182
|
+
|
183
|
+
return json_hash.to_json
|
184
|
+
|
185
|
+
rescue LoadError
|
186
|
+
warn "The JSON gem couldn't be loaded, and so the JSON representation could not be generated"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def self.json_create(json_hash)
|
191
|
+
begin
|
192
|
+
require 'json'
|
193
|
+
|
194
|
+
block = new(json_hash["type"], json_hash["content"], json_hash["target"])
|
195
|
+
return block
|
196
|
+
|
197
|
+
rescue LoadError
|
198
|
+
warn "The JSON gem couldn't be loaded, and so the JSON representation could not be generated"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|