calyx 0.16.1 → 0.17.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +5 -6
- data/README.md +47 -49
- data/docs/404.html +24 -0
- data/docs/CNAME +1 -0
- data/docs/_config.yml +25 -0
- data/docs/_layouts/default.html +16 -0
- data/docs/_posts/2017-09-14-welcome-to-jekyll.markdown +25 -0
- data/docs/about.md +18 -0
- data/docs/assets/calyx-docs.css +6103 -0
- data/docs/calyx-docs.scss +1 -0
- data/docs/index.html +12 -0
- data/docs/package-lock.json +1536 -0
- data/docs/package.json +15 -0
- data/lib/calyx.rb +2 -0
- data/lib/calyx/grammar.rb +20 -8
- data/lib/calyx/options.rb +36 -5
- data/lib/calyx/result.rb +38 -0
- data/lib/calyx/version.rb +1 -1
- metadata +14 -2
data/docs/package.json
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"name": "calyx-docs",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"main": "index.html",
|
5
|
+
"scripts": {
|
6
|
+
"build": "node-sass --include-path node_modules/bulma calyx-docs.scss assets/calyx-docs.css",
|
7
|
+
"help": "node-sass --help"
|
8
|
+
},
|
9
|
+
"author": "Mark Rickerby <me@maetl.net>",
|
10
|
+
"license": "MIT",
|
11
|
+
"devDependencies": {
|
12
|
+
"bulma": "^0.5.2",
|
13
|
+
"node-sass": "^4.5.3"
|
14
|
+
}
|
15
|
+
}
|
data/lib/calyx.rb
CHANGED
data/lib/calyx/grammar.rb
CHANGED
@@ -138,23 +138,35 @@ module Calyx
|
|
138
138
|
# @param [Hash] rules_map
|
139
139
|
# @return [String]
|
140
140
|
def generate(*args)
|
141
|
-
|
142
|
-
|
143
|
-
@registry.evaluate(start_symbol, rules_map).flatten.reject do |obj|
|
144
|
-
obj.is_a?(Symbol)
|
145
|
-
end.join
|
141
|
+
result = generate_result(*args)
|
142
|
+
result.text
|
146
143
|
end
|
147
144
|
|
148
145
|
# Produces a syntax tree of nested list nodes as an output of the grammar.
|
149
146
|
#
|
147
|
+
# @deprecated Please use {#generate_result} instead.
|
148
|
+
def evaluate(*args)
|
149
|
+
warn <<~DEPRECATION
|
150
|
+
[DEPRECATION] `evaluate` is deprecated and will be removed in 1.0.
|
151
|
+
Please use #generate_result instead.
|
152
|
+
See https://github.com/maetl/calyx/issues/23 for more details.
|
153
|
+
DEPRECATION
|
154
|
+
|
155
|
+
result = generate_result(*args)
|
156
|
+
result.tree
|
157
|
+
end
|
158
|
+
|
159
|
+
# Produces a generated result from evaluating the grammar.
|
160
|
+
#
|
161
|
+
# @see Calyx::Result
|
150
162
|
# @overload
|
151
163
|
# @param [Symbol] start_symbol
|
152
164
|
# @param [Hash] rules_map
|
153
|
-
# @return [
|
154
|
-
def
|
165
|
+
# @return [Calyx::Result]
|
166
|
+
def generate_result(*args)
|
155
167
|
start_symbol, rules_map = map_default_args(*args)
|
156
168
|
|
157
|
-
@registry.evaluate(start_symbol, rules_map)
|
169
|
+
Result.new(@registry.evaluate(start_symbol, rules_map))
|
158
170
|
end
|
159
171
|
|
160
172
|
private
|
data/lib/calyx/options.rb
CHANGED
@@ -1,13 +1,25 @@
|
|
1
1
|
module Calyx
|
2
|
+
# Provides access to configuration options while evaluating a grammar.
|
2
3
|
class Options
|
4
|
+
# These options are used by default if not explicitly provided during
|
5
|
+
# initialization of the grammar.
|
3
6
|
DEFAULTS = {
|
4
7
|
strict: true
|
5
8
|
}
|
6
9
|
|
7
|
-
|
8
|
-
|
10
|
+
# Constructs a new options instance, merging the passed in options with the
|
11
|
+
# defaults.
|
12
|
+
#
|
13
|
+
# @params [Hash, Calyx::Options] options
|
14
|
+
def initialize(options={})
|
15
|
+
@options = DEFAULTS.merge(options)
|
9
16
|
end
|
10
17
|
|
18
|
+
# Returns the internal random number generator instance. If a seed or random
|
19
|
+
# instance is not passed-in directly, a new instance of `Random` is
|
20
|
+
# initialized by default.
|
21
|
+
#
|
22
|
+
# @return [Random]
|
11
23
|
def rng
|
12
24
|
unless @options[:rng]
|
13
25
|
@options[:rng] = if @options[:seed]
|
@@ -20,20 +32,39 @@ module Calyx
|
|
20
32
|
@options[:rng]
|
21
33
|
end
|
22
34
|
|
35
|
+
# Returns the next pseudo-random number in the sequence defined by the
|
36
|
+
# internal random number generator state.
|
37
|
+
#
|
38
|
+
# The value returned is a floating point number between 0.0 and 1.0,
|
39
|
+
# including 0.0 and excluding 1.0.
|
40
|
+
#
|
41
|
+
# @return [Float]
|
23
42
|
def rand
|
24
43
|
rng.rand
|
25
44
|
end
|
26
45
|
|
46
|
+
# True if the strict mode option is enabled. This option defines whether or
|
47
|
+
# not to raise an error on missing rules. When set to false, missing rules
|
48
|
+
# are skipped over when the production is concatenated.
|
49
|
+
#
|
50
|
+
# @return [TrueClass, FalseClass]
|
27
51
|
def strict?
|
28
52
|
@options[:strict]
|
29
53
|
end
|
30
54
|
|
31
|
-
|
32
|
-
|
55
|
+
# Merges two instances together and returns a new instance.
|
56
|
+
#
|
57
|
+
# @params [Calyx::Options]
|
58
|
+
# @return [Calyx::Options]
|
59
|
+
def merge(options)
|
60
|
+
Options.new(@options.merge(options.to_h))
|
33
61
|
end
|
34
62
|
|
63
|
+
# Serializes instance data to a hash.
|
64
|
+
#
|
65
|
+
# @return [Hash]
|
35
66
|
def to_h
|
36
|
-
@options
|
67
|
+
@options.dup
|
37
68
|
end
|
38
69
|
end
|
39
70
|
end
|
data/lib/calyx/result.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Calyx
|
2
|
+
# Value object representing a generated grammar result.
|
3
|
+
class Result
|
4
|
+
def initialize(expression)
|
5
|
+
@expression = expression.freeze
|
6
|
+
end
|
7
|
+
|
8
|
+
# The syntax tree of nested nodes representing the production rules which
|
9
|
+
# generated this result.
|
10
|
+
#
|
11
|
+
# @return [Array]
|
12
|
+
def tree
|
13
|
+
@expression
|
14
|
+
end
|
15
|
+
|
16
|
+
alias_method :to_exp, :tree
|
17
|
+
|
18
|
+
# The generated text string produced by the grammar.
|
19
|
+
#
|
20
|
+
# @return [String]
|
21
|
+
def text
|
22
|
+
@expression.flatten.reject do |obj|
|
23
|
+
obj.is_a?(Symbol)
|
24
|
+
end.join
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :to_s, :text
|
28
|
+
|
29
|
+
# A symbol produced by converting the generated text string where possible.
|
30
|
+
#
|
31
|
+
# @return [Symbol]
|
32
|
+
def symbol
|
33
|
+
text.to_sym
|
34
|
+
end
|
35
|
+
|
36
|
+
alias_method :to_sym, :symbol
|
37
|
+
end
|
38
|
+
end
|
data/lib/calyx/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calyx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Rickerby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,6 +68,17 @@ files:
|
|
68
68
|
- README.md
|
69
69
|
- SYNTAX.md
|
70
70
|
- calyx.gemspec
|
71
|
+
- docs/404.html
|
72
|
+
- docs/CNAME
|
73
|
+
- docs/_config.yml
|
74
|
+
- docs/_layouts/default.html
|
75
|
+
- docs/_posts/2017-09-14-welcome-to-jekyll.markdown
|
76
|
+
- docs/about.md
|
77
|
+
- docs/assets/calyx-docs.css
|
78
|
+
- docs/calyx-docs.scss
|
79
|
+
- docs/index.html
|
80
|
+
- docs/package-lock.json
|
81
|
+
- docs/package.json
|
71
82
|
- examples/any_gradient.rb
|
72
83
|
- examples/faker.rb
|
73
84
|
- examples/faker.yml
|
@@ -87,6 +98,7 @@ files:
|
|
87
98
|
- lib/calyx/production/unique.rb
|
88
99
|
- lib/calyx/production/weighted_choices.rb
|
89
100
|
- lib/calyx/registry.rb
|
101
|
+
- lib/calyx/result.rb
|
90
102
|
- lib/calyx/rule.rb
|
91
103
|
- lib/calyx/version.rb
|
92
104
|
homepage: https://github.com/maetl/calyx
|