delorean_lang 0.1.03 → 0.1.04

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,14 +15,6 @@ module Delorean
15
15
  end
16
16
 
17
17
  def add(name, version, engine)
18
- @engines[ [name, version] ] = engine
19
- end
20
-
21
- def import(name, version)
22
- engine = get(name, version)
23
-
24
- return engine if engine
25
-
26
18
  if names.member? name
27
19
  n, v = @engines.keys.detect {|n, v| n == name}
28
20
 
@@ -30,7 +22,21 @@ module Delorean
30
22
  "Collides with imported version #{v}."
31
23
  end
32
24
 
33
- add(name, version, get_engine(name, version))
25
+ @engines[ [name, version] ] = engine
26
+ end
27
+
28
+ def add_imports(engine)
29
+ # Given an engine, make sure that all of its imports are added
30
+ # to the script container. This makes sure we don't have
31
+ # version conflict among different scripts.
32
+ engine.imports.each { |name, ev|
33
+ get(name, ev[1]) || add(name, ev[1], ev[0])
34
+ }
35
+ end
36
+
37
+ def import(name, version)
38
+ get(name, version) ||
39
+ add(name, version, get_engine(name, version))
34
40
  end
35
41
 
36
42
  def get_engine(name, version)
@@ -36,22 +36,23 @@ module Delorean
36
36
  name == module_name
37
37
 
38
38
  begin
39
- @imports[name] = sset.import(name, version)
39
+ @imports[name] = [sset.import(name, version), version]
40
40
  rescue => exc
41
41
  err(ImportError, exc.to_s)
42
42
  end
43
43
 
44
- @pm.const_set("#{MOD}#{name}", @imports[name].pm)
44
+ @pm.const_set("#{MOD}#{name}", @imports[name][0].pm)
45
45
  end
46
46
 
47
47
  def gen_import(name, version)
48
- @imports.merge!(@imports[name].imports)
48
+ @imports.merge!(@imports[name][0].imports)
49
49
 
50
- @m.const_set("#{MOD}#{name}", @imports[name].m)
50
+ @m.const_set("#{MOD}#{name}", @imports[name][0].m)
51
51
  end
52
52
 
53
53
  def get_import_engine(name)
54
- @imports[name] || err(ParseError, "#{name} not imported")
54
+ err(ParseError, "#{name} not imported") unless @imports[name]
55
+ @imports[name][0]
55
56
  end
56
57
 
57
58
  def is_node_defined(name)
@@ -1,3 +1,3 @@
1
1
  module Delorean
2
- VERSION = "0.1.03"
2
+ VERSION = "0.1.04"
3
3
  end
@@ -733,5 +733,29 @@ describe "Delorean" do
733
733
  end
734
734
  end
735
735
 
736
+ it "should disallow multiple versions of same script (2)" do
737
+ sset.merge({
738
+ ["BBB", "0001"] =>
739
+ defn("import AAA 0001",
740
+ ),
741
+ ["CCC", "0001"] =>
742
+ defn("import AAA 0001",
743
+ "import BBB 0001",
744
+ ),
745
+ ["AAA", "0002"] =>
746
+ defn("A:",
747
+ ),
748
+ ["CCC", "0002"] =>
749
+ defn("import AAA 0002",
750
+ "import BBB 0001",
751
+ ),
752
+ })
753
+ begin
754
+ sset.get_engine("CCC", "0002")
755
+ rescue Delorean::ImportError => exc
756
+ exc.line.should == 2
757
+ end
758
+ end
759
+
736
760
  end
737
761
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delorean_lang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.03
4
+ version: 0.1.04
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-24 00:00:00.000000000 Z
12
+ date: 2013-08-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: treetop