cauterize 0.0.1.pre1 → 0.0.1.pre5
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/.gitignore +5 -0
- data/.rspec +1 -1
- data/Gemfile +1 -1
- data/README.md +0 -2
- data/Rakefile +19 -3
- data/bin/cauterize +14 -6
- data/example/Cauterize +22 -10
- data/example/build.sh +15 -2
- data/lib/cauterize/base_type.rb +2 -5
- data/lib/cauterize/builders.rb +1 -3
- data/lib/cauterize/builders/c/buildable.rb +3 -2
- data/lib/cauterize/builders/c/builtin.rb +46 -0
- data/lib/cauterize/builders/c/enumeration.rb +23 -2
- data/lib/cauterize/builders/c/fixed_array.rb +16 -7
- data/lib/cauterize/builders/c/group.rb +32 -3
- data/lib/cauterize/builders/c/scalar.rb +5 -0
- data/lib/cauterize/builders/c/variable_array.rb +1 -1
- data/lib/cauterize/builders/cs/buildable.rb +59 -0
- data/lib/cauterize/builders/cs/builtin.rb +23 -0
- data/lib/cauterize/builders/cs/composite.rb +21 -0
- data/lib/cauterize/builders/cs/csarray.rb +32 -0
- data/lib/cauterize/builders/cs/enumeration.rb +21 -0
- data/lib/cauterize/builders/cs/fixed_array.rb +25 -0
- data/lib/cauterize/builders/cs/group.rb +33 -0
- data/lib/cauterize/builders/cs/scalar.rb +10 -0
- data/lib/cauterize/builders/cs/variable_array.rb +34 -0
- data/lib/cauterize/builtin.rb +52 -0
- data/lib/cauterize/c_builder.rb +15 -1
- data/lib/cauterize/cauterize.rb +44 -13
- data/lib/cauterize/composite.rb +3 -3
- data/lib/cauterize/cs_builder.rb +53 -0
- data/lib/cauterize/enumeration.rb +20 -3
- data/lib/cauterize/fixed_array.rb +3 -3
- data/lib/cauterize/formatter.rb +7 -3
- data/lib/cauterize/group.rb +5 -8
- data/lib/cauterize/scalar.rb +16 -7
- data/lib/cauterize/variable_array.rb +6 -6
- data/lib/cauterize/version.rb +1 -1
- data/spec/base_type_spec.rb +133 -125
- data/spec/builders/c/buildable_spec.rb +18 -18
- data/spec/builders/c/builtin_spec.rb +22 -0
- data/spec/builders/c/composite_spec.rb +37 -33
- data/spec/builders/c/enumeration_spec.rb +84 -21
- data/spec/builders/c/fixed_array_spec.rb +6 -6
- data/spec/builders/c/group_spec.rb +97 -90
- data/spec/builders/c/scalar_spec.rb +24 -6
- data/spec/builders/c/variable_array_spec.rb +37 -37
- data/spec/builders/cs/buildable_spec.rb +8 -0
- data/spec/builders/cs/composite_spec.rb +32 -0
- data/spec/builders/cs/enumeration_spec.rb +33 -0
- data/spec/builders/cs/fixed_array_spec.rb +40 -0
- data/spec/builders/cs/group_spec.rb +56 -0
- data/spec/builders/cs/scalar_spec.rb +7 -0
- data/spec/builders/cs/variable_array_spec.rb +46 -0
- data/spec/builders_spec.rb +38 -38
- data/spec/builtin_spec.rb +46 -0
- data/spec/c_builder_spec.rb +116 -102
- data/spec/cauterize_spec.rb +8 -1
- data/spec/composite_spec.rb +52 -48
- data/spec/cs_builder_spec.rb +113 -0
- data/spec/enumeration_spec.rb +55 -16
- data/spec/fixed_array_spec.rb +7 -9
- data/spec/group_spec.rb +81 -76
- data/spec/scalar_spec.rb +20 -10
- data/spec/spec_helper.rb +103 -94
- data/spec/support/shared_examples_for_c_buildables.rb +68 -64
- data/spec/variable_array_spec.rb +12 -17
- data/{c → support/c}/src/cauterize.c +8 -7
- data/support/c/src/cauterize.h +59 -0
- data/{c → support/c}/src/cauterize_debug.h +0 -0
- data/support/c/src/cauterize_util.h +49 -0
- data/{c → support/c}/test/greatest.h +0 -0
- data/{c → support/c}/test/test.c +0 -0
- data/support/cs/src/CauterizeCompositeFormatter.cs +34 -0
- data/support/cs/src/CauterizeContainerFormatter.cs +18 -0
- data/support/cs/src/CauterizeEnumFormatter.cs +67 -0
- data/support/cs/src/CauterizeException.cs +15 -0
- data/support/cs/src/CauterizeFixedArrayFormatter.cs +39 -0
- data/support/cs/src/CauterizeFormatter.cs +40 -0
- data/support/cs/src/CauterizeGroupFormatter.cs +46 -0
- data/support/cs/src/CauterizePrimitiveFormatter.cs +33 -0
- data/support/cs/src/CauterizeTypeFormatterFactory.cs +39 -0
- data/support/cs/src/CauterizeTypes.cs +107 -0
- data/support/cs/src/CauterizeVariableArrayFormatter.cs +49 -0
- data/support/cs/src/ICauterizeTypeFormatter.cs +12 -0
- data/support/cs/src/OrderAttribute.cs +50 -0
- data/support/cs/src/PrimitiveSupport.cs +134 -0
- data/support/cs/src/SerializedRepresentationAttribute.cs +24 -0
- data/support/cs/test/CauterizeCompositeFormatterTest.cs +59 -0
- data/support/cs/test/CauterizeEnumFormatterTest.cs +110 -0
- data/support/cs/test/CauterizeFixedArrayFormatterTest.cs +91 -0
- data/support/cs/test/CauterizeFormatterTest.cs +40 -0
- data/support/cs/test/CauterizeGroupFormatterTest.cs +147 -0
- data/support/cs/test/CauterizeIntegrationTest.cs +129 -0
- data/support/cs/test/CauterizePrimitiveFormatterTest.cs +98 -0
- data/support/cs/test/CauterizeTypeFormatterFactoryTest.cs +73 -0
- data/support/cs/test/CauterizeVariableArrayFormatterTest.cs +130 -0
- data/support/cs/test/OrderAttributeTest.cs +39 -0
- data/support/cs/test/SerializedRepresentationAttributeTest.cs +39 -0
- metadata +68 -10
- data/c/src/cauterize.h +0 -46
- data/c/src/cauterize_util.h +0 -7
@@ -6,6 +6,11 @@ module Cauterize
|
|
6
6
|
@blueprint.name.to_s
|
7
7
|
end
|
8
8
|
|
9
|
+
def typedef_decl(formatter)
|
10
|
+
tn_bldr = Builders.get(:c, @blueprint.type_name)
|
11
|
+
formatter << "typedef #{tn_bldr.render} #{render};"
|
12
|
+
end
|
13
|
+
|
9
14
|
def declare(formatter, sym)
|
10
15
|
formatter << "#{render} #{sym};"
|
11
16
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Cauterize
|
2
|
+
module Builders
|
3
|
+
module CS
|
4
|
+
# sym - symbol - the lexical symbol associated with the generated entity
|
5
|
+
# sig - signature - the C signature associated with the entity
|
6
|
+
# proto - prototype - the C prototype associated with the entity
|
7
|
+
# defn - definition - the C definition associated with the entity
|
8
|
+
REQUIRED_METHODS = [
|
9
|
+
]
|
10
|
+
|
11
|
+
class BuildableException < Exception; end
|
12
|
+
|
13
|
+
class Buildable
|
14
|
+
def initialize(blueprint)
|
15
|
+
@blueprint = blueprint
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :orig_method_missing, :method_missing
|
19
|
+
|
20
|
+
def method_missing(sym, *args)
|
21
|
+
sym_required = REQUIRED_METHODS.include?(sym)
|
22
|
+
|
23
|
+
if sym_required
|
24
|
+
raise BuildableException.new("Classes deriving Buildable must implement the method #{sym}.")
|
25
|
+
else
|
26
|
+
orig_method_missing(sym, *args)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Things below here are tested in shared_examples_for_c_buildables #
|
31
|
+
####################################################################
|
32
|
+
|
33
|
+
# Methods that are pretty much the same for everyone.
|
34
|
+
# WFIXME what do I do with these???
|
35
|
+
# def packer_sym; "Pack_#{@blueprint.name}" end
|
36
|
+
# def packer_sig; "CAUTERIZE_STATUS_T #{packer_sym}(struct Cauterize * dst, #{render} * src)" end
|
37
|
+
# def packer_proto(formatter)
|
38
|
+
# formatter << packer_sig + ";"
|
39
|
+
# end
|
40
|
+
|
41
|
+
# def unpacker_sym; "Unpack_#{@blueprint.name}" end
|
42
|
+
# def unpacker_sig; "CAUTERIZE_STATUS_T #{unpacker_sym}(struct Cauterize * src, #{render} * dst)" end
|
43
|
+
# def unpacker_proto(formatter)
|
44
|
+
# formatter << unpacker_sig + ";"
|
45
|
+
# end
|
46
|
+
|
47
|
+
# These are only different in a few type varieties.
|
48
|
+
def render
|
49
|
+
@blueprint.name.to_s.camel
|
50
|
+
end
|
51
|
+
def declare(formatter, sym)
|
52
|
+
formatter << "public #{render} #{sym.to_s.camel} { get; set; }"
|
53
|
+
end
|
54
|
+
def class_defn(formatter); nil end
|
55
|
+
def enum_defn(formatter); nil end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Cauterize::Builders::CS
|
2
|
+
class BuiltIn < Buildable
|
3
|
+
@@CS_TYPE_MAPPING = {
|
4
|
+
1 => {signed: "SByte", unsigned: "Byte"},
|
5
|
+
2 => {signed: "Int16", unsigned: "UInt16"},
|
6
|
+
4 => {signed: "Int32", unsigned: "UInt32"},
|
7
|
+
8 => {signed: "Int64", unsigned: "UInt64"},
|
8
|
+
}
|
9
|
+
|
10
|
+
def render
|
11
|
+
render_cstype
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def render_cstype
|
17
|
+
s_key = @blueprint.is_signed ? :signed : :unsigned
|
18
|
+
@@CS_TYPE_MAPPING[@blueprint.byte_length][s_key]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Cauterize::Builders.register(:cs, Cauterize::BuiltIn, Cauterize::Builders::CS::BuiltIn)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Cauterize::Builders::CS
|
2
|
+
class Composite < Buildable
|
3
|
+
|
4
|
+
def render_parent
|
5
|
+
"CauterizeComposite"
|
6
|
+
end
|
7
|
+
|
8
|
+
def class_defn(formatter)
|
9
|
+
formatter << "public class #{render} : #{render_parent}"
|
10
|
+
formatter.braces do
|
11
|
+
@blueprint.fields.values.each_with_index do |field, i|
|
12
|
+
formatter << "[Order(#{i})]"
|
13
|
+
Cauterize::Builders.get(:cs, field.type).declare(formatter, field.name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
formatter.blank_line
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Cauterize::Builders.register(:cs, Cauterize::Composite, Cauterize::Builders::CS::Composite)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Cauterize::Builders::CS
|
2
|
+
class CSArray < Buildable
|
3
|
+
def class_defn(formatter)
|
4
|
+
formatter << "public class #{render} : #{render_parent}"
|
5
|
+
formatter.braces do
|
6
|
+
extra_array_declarations(formatter)
|
7
|
+
formatter.blank_line
|
8
|
+
formatter << simple_constructor_line
|
9
|
+
formatter.braces do
|
10
|
+
formatter << "Allocate(#{size});"
|
11
|
+
end
|
12
|
+
formatter.blank_line
|
13
|
+
formatter << "public #{render}(#{ty_bldr.render}[] data)"
|
14
|
+
formatter.braces do
|
15
|
+
formatter << "Allocate(data);"
|
16
|
+
end
|
17
|
+
formatter.blank_line
|
18
|
+
size_defn(formatter)
|
19
|
+
end
|
20
|
+
formatter.blank_line
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def extra_array_declarations(formatter)
|
26
|
+
end
|
27
|
+
|
28
|
+
def ty_bldr
|
29
|
+
@ty_bldr ||= Cauterize::Builders.get(:cs, @blueprint.array_type)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Cauterize
|
2
|
+
module Builders
|
3
|
+
module CS
|
4
|
+
class Enumeration < Buildable
|
5
|
+
def enum_defn(formatter)
|
6
|
+
rep_builder = Builders.get(:cs, @blueprint.representation)
|
7
|
+
formatter << "[SerializedRepresentation(typeof(#{rep_builder.render}))]"
|
8
|
+
formatter << "public enum #{render}"
|
9
|
+
formatter.braces do
|
10
|
+
@blueprint.values.values.each do |v|
|
11
|
+
formatter << "#{v.name.to_s.camel} = #{v.value},"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
formatter.append(";")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Cauterize::Builders.register(:cs, Cauterize::Enumeration, Cauterize::Builders::CS::Enumeration)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Cauterize::Builders::CS
|
2
|
+
class FixedArray < CSArray
|
3
|
+
|
4
|
+
def render_parent
|
5
|
+
"CauterizeFixedArrayTyped<#{ty_bldr.render}>"
|
6
|
+
end
|
7
|
+
|
8
|
+
def simple_constructor_line
|
9
|
+
"public #{render}()"
|
10
|
+
end
|
11
|
+
|
12
|
+
def size_defn(formatter)
|
13
|
+
formatter << "protected override int Size"
|
14
|
+
formatter.braces do
|
15
|
+
formatter << "get { return #{size}; }"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def size
|
20
|
+
@blueprint.array_size
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Cauterize::Builders.register(:cs, Cauterize::FixedArray, Cauterize::Builders::CS::FixedArray)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cauterize::Builders::CS
|
2
|
+
class Group < Buildable
|
3
|
+
def initialize(blueprint)
|
4
|
+
super(blueprint)
|
5
|
+
@tag_enum = blueprint.tag_enum
|
6
|
+
end
|
7
|
+
|
8
|
+
def render_parent
|
9
|
+
"CauterizeGroup"
|
10
|
+
end
|
11
|
+
|
12
|
+
def class_defn(formatter)
|
13
|
+
formatter << "public class #{render} : #{render_parent}"
|
14
|
+
formatter.braces do
|
15
|
+
formatter << "[Order(0)]"
|
16
|
+
Cauterize::Builders.get(:cs, @tag_enum).declare(formatter, "Type")
|
17
|
+
formatter.blank_line
|
18
|
+
@blueprint.fields.values.each_with_index do |field, i|
|
19
|
+
b = Cauterize::Builders.get(:cs, field.type)
|
20
|
+
if b
|
21
|
+
formatter << "[Order(#{i+1})]"
|
22
|
+
b.declare(formatter, field.name)
|
23
|
+
else
|
24
|
+
formatter << "/* No data associated with '#{field.name}'. */"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
formatter.blank_line
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
Cauterize::Builders.register(:cs, Cauterize::Group, Cauterize::Builders::CS::Group)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Cauterize::Builders::CS
|
2
|
+
class VariableArray < CSArray
|
3
|
+
|
4
|
+
def render_parent
|
5
|
+
"CauterizeVariableArrayTyped<#{ty_bldr.render}>"
|
6
|
+
end
|
7
|
+
|
8
|
+
def simple_constructor_line
|
9
|
+
"public #{render}(int size)"
|
10
|
+
end
|
11
|
+
|
12
|
+
def size_defn(formatter)
|
13
|
+
formatter << "protected override int MaxSize"
|
14
|
+
formatter.braces do
|
15
|
+
formatter << "get { return #{size_type}.MaxValue; }"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def size
|
20
|
+
return "size"
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
def extra_array_declarations(formatter)
|
25
|
+
formatter << "public static Type SizeType = typeof(#{size_type});"
|
26
|
+
end
|
27
|
+
|
28
|
+
def size_type
|
29
|
+
Cauterize::Builders.get(:cs, @blueprint.size_type).render
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
Cauterize::Builders.register(:cs, Cauterize::VariableArray, Cauterize::Builders::CS::VariableArray)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Cauterize
|
2
|
+
module_function
|
3
|
+
|
4
|
+
BUILT_IN_TYPES = [
|
5
|
+
{ :name => :int8, :size => 1, :signed => true },
|
6
|
+
{ :name => :int16, :size => 2, :signed => true },
|
7
|
+
{ :name => :int32, :size => 4, :signed => true },
|
8
|
+
{ :name => :int64, :size => 8, :signed => true },
|
9
|
+
{ :name => :uint8, :size => 1, :signed => false },
|
10
|
+
{ :name => :uint16, :size => 2, :signed => false },
|
11
|
+
{ :name => :uint32, :size => 4, :signed => false },
|
12
|
+
{ :name => :uint64, :size => 8, :signed => false },
|
13
|
+
]
|
14
|
+
|
15
|
+
def builtins
|
16
|
+
@builtins ||= {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_builtins
|
20
|
+
BUILT_IN_TYPES.each do |b|
|
21
|
+
_b = BuiltIn.new(b[:name])
|
22
|
+
_b.byte_length(b[:size])
|
23
|
+
_b.is_signed(b[:signed])
|
24
|
+
builtins[b[:name]] = _b
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class BuiltIn < BaseType
|
29
|
+
def initialize(name)
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
33
|
+
def is_signed(signed = nil)
|
34
|
+
unless signed.nil?
|
35
|
+
@is_signed = signed
|
36
|
+
else
|
37
|
+
@is_signed
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def byte_length(len = nil)
|
42
|
+
unless len.nil?
|
43
|
+
@byte_length = len
|
44
|
+
else
|
45
|
+
@byte_length
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Create all the builtin types.
|
51
|
+
create_builtins
|
52
|
+
end
|
data/lib/cauterize/c_builder.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
1
3
|
module Cauterize
|
2
4
|
class CBuilder
|
3
5
|
attr_reader :h, :c
|
@@ -23,18 +25,30 @@ module Cauterize
|
|
23
25
|
f << "#define #{excluder}"
|
24
26
|
f.blank_line
|
25
27
|
f << %Q{#include <cauterize.h>}
|
26
|
-
f
|
28
|
+
f.blank_line
|
29
|
+
f << "#define GEN_VERSION (\"#{Cauterize.get_version}\")"
|
30
|
+
f << "#define GEN_DATE (\"#{DateTime.now.to_s}\")"
|
27
31
|
f.blank_line
|
28
32
|
|
29
33
|
instances = BaseType.all_instances
|
30
34
|
builders = instances.map {|i| Builders.get(:c, i)}
|
31
35
|
|
36
|
+
builders.each { |b| b.typedef_decl(f) }
|
32
37
|
builders.each { |b| b.enum_defn(f) }
|
33
38
|
builders.each { |b| b.struct_proto(f) }
|
34
39
|
builders.each { |b| b.struct_defn(f) }
|
40
|
+
|
41
|
+
f << "#ifdef __cplusplus"
|
42
|
+
f << "extern \"C\" {"
|
43
|
+
f << "#endif"
|
44
|
+
|
35
45
|
builders.each { |b| b.packer_proto(f) }
|
36
46
|
builders.each { |b| b.unpacker_proto(f) }
|
37
47
|
|
48
|
+
f << "#ifdef __cplusplus"
|
49
|
+
f << "}"
|
50
|
+
f << "#endif"
|
51
|
+
|
38
52
|
f.blank_line
|
39
53
|
f << "#endif /* #{excluder} */"
|
40
54
|
|
data/lib/cauterize/cauterize.rb
CHANGED
@@ -4,30 +4,61 @@ lib_path = File.dirname(__FILE__) + "/.."
|
|
4
4
|
require_all Dir[lib_path + "/**/*.rb"]
|
5
5
|
|
6
6
|
module Cauterize
|
7
|
-
# Genearte the C code corresponding to the generated configuration
|
8
|
-
def self.generate_c(target_dir, desc_file)
|
9
|
-
Object.new.extend(Cauterize).instance_exec do
|
10
|
-
# this magic allows us to emit useful exception messages when evaling the
|
11
|
-
# file. if your description file has errors, you'll be able to find them
|
12
|
-
# because of this magic.
|
13
|
-
p = Proc.new {}
|
14
|
-
eval(File.read(desc_file), p.binding, desc_file)
|
15
|
-
end
|
16
|
-
output_prefix = get_name || "generated_interface"
|
17
7
|
|
8
|
+
module_function
|
9
|
+
def generate(language, target_dir, desc_file)
|
10
|
+
parse_dsl(desc_file)
|
18
11
|
FileUtils.mkdir_p(target_dir)
|
12
|
+
output_prefix = get_name || "generated_interface"
|
13
|
+
builder = send "make_builder_#{language}".to_sym, target_dir, output_prefix
|
14
|
+
builder.build
|
15
|
+
end
|
16
|
+
|
17
|
+
# Generate the C code corresponding to the generated configuration
|
18
|
+
def make_builder_c(target_dir, output_prefix)
|
19
19
|
h_file = File.join(target_dir, "#{output_prefix}.h")
|
20
20
|
c_file = File.join(target_dir, "#{output_prefix}.c")
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
Cauterize::CBuilder.new(h_file, c_file, output_prefix)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Generate the CS code corresponding to the generated configuration
|
26
|
+
def make_builder_cs(target_dir, output_prefix)
|
27
|
+
cs_file = File.join(target_dir, "#{output_prefix}.cs")
|
28
|
+
|
29
|
+
Cauterize::CSBuilder.new(cs_file, output_prefix)
|
24
30
|
end
|
25
31
|
|
26
|
-
def
|
32
|
+
def get_name
|
27
33
|
@@description_name
|
28
34
|
end
|
29
35
|
|
36
|
+
def get_version
|
37
|
+
if defined? @@version
|
38
|
+
@@version
|
39
|
+
else
|
40
|
+
"UNDEFINED"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
30
44
|
def set_name(desc_name)
|
31
45
|
@@description_name = desc_name
|
32
46
|
end
|
47
|
+
|
48
|
+
def set_version(version)
|
49
|
+
@@version = version
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def self.parse_dsl(desc_file)
|
54
|
+
Object.new.extend(Cauterize).instance_exec do
|
55
|
+
# this magic allows us to emit useful exception messages when evaling the
|
56
|
+
# file. if your description file has errors, you'll be able to find them
|
57
|
+
# because of this magic.
|
58
|
+
p = Proc.new {}
|
59
|
+
eval(File.read(desc_file), p.binding, desc_file)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
33
64
|
end
|