dsl_companion 0.1.1 → 0.1.2
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/Rakefile +1 -1
- data/dsl_companion.gemspec +8 -8
- data/lib/dsl_companion/features/basic.rb +11 -13
- data/lib/dsl_companion/interpreter.rb +5 -4
- data/lib/dsl_companion/meta_helper.rb +35 -29
- data/lib/dsl_companion/version.rb +1 -1
- data/spec/interpreter_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86c270416e190f0d2abad7baf7edd7797b3c80dd
|
4
|
+
data.tar.gz: 240f9b639fd103970119f2a838d152041eb25bcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4fabd2022cd6018231feedfdaec4987752ec57f80df34d568d3fc323e9124781971a14af62cbec56446c601af1a45d0dc1626dde13dc98e1572808af1aadfff
|
7
|
+
data.tar.gz: f0bccac6aabdd6db860d798319824efa3e0c7083a7c81a19381fae4f23c741fb40050ce6177a21925679a17e74e92d3ef05d1a281459386178da460c202b175e
|
data/Rakefile
CHANGED
@@ -1 +1 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
data/dsl_companion.gemspec
CHANGED
@@ -4,21 +4,21 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'dsl_companion/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'dsl_companion'
|
8
8
|
spec.version = DSLCompanion::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Laurent B.']
|
10
|
+
spec.email = ['lbnetid+gh@gmail.com']
|
11
11
|
spec.summary = %q{Provides a customizable interpreter to run your own internal DSLs.}
|
12
12
|
spec.description = %q{The goal of this gem is to provide a versatile DSL interpreter.}
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
13
|
+
spec.homepage = 'https://github.com/lbriais/dsl_companion'
|
14
|
+
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_development_dependency
|
22
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
22
|
+
spec.add_development_dependency 'rake'
|
23
23
|
spec.add_development_dependency 'rspec'
|
24
24
|
end
|
@@ -3,14 +3,14 @@ module DSLCompanion
|
|
3
3
|
|
4
4
|
module Basic
|
5
5
|
|
6
|
-
include MetaHelper
|
6
|
+
include DSLCompanion::MetaHelper
|
7
7
|
|
8
8
|
# If any method named define_<something>(*args) is in the DSL, then it provides an alternate
|
9
9
|
# generic syntax of define(:something, *args)
|
10
10
|
# @param [Object[]] args
|
11
11
|
# @param [Proc] block
|
12
12
|
# @return [Anything returned by the method]
|
13
|
-
def define
|
13
|
+
def define(*args, &block)
|
14
14
|
extra = args.shift
|
15
15
|
method_name = "define_#{extra}"
|
16
16
|
if respond_to? method_name.to_sym
|
@@ -23,25 +23,25 @@ module DSLCompanion
|
|
23
23
|
def execute_within_context(context=@context, &block)
|
24
24
|
# Execute the block if any
|
25
25
|
if block_given?
|
26
|
-
last_saved_context = @
|
27
|
-
@
|
26
|
+
last_saved_context = @current_context
|
27
|
+
@current_context = context
|
28
28
|
begin
|
29
|
-
logger "Switching to context: #{@
|
30
|
-
|
31
|
-
@
|
29
|
+
logger "Switching to context: #{@current_context} (from #{last_saved_context})"
|
30
|
+
MetaHelper.inject_variable @current_context, :interpreter, @interpreter
|
31
|
+
@current_context.instance_eval(&block)
|
32
32
|
ensure
|
33
|
-
@
|
34
|
-
logger "Back to context: #{@
|
33
|
+
@current_context = last_saved_context
|
34
|
+
logger "Back to context: #{@current_context}"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
def interpreter?
|
40
|
-
self.is_a?
|
40
|
+
self.is_a? DSLCompanion::Interpreter
|
41
41
|
end
|
42
42
|
|
43
43
|
def interpreter
|
44
|
-
self
|
44
|
+
self if interpreter?
|
45
45
|
end
|
46
46
|
|
47
47
|
def logger(msg, level=:info)
|
@@ -52,8 +52,6 @@ module DSLCompanion
|
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
55
|
end
|
58
56
|
|
59
57
|
end
|
@@ -5,17 +5,18 @@ module DSLCompanion
|
|
5
5
|
include DSLCompanion::Features::Basic
|
6
6
|
|
7
7
|
attr_writer :logger
|
8
|
+
attr_reader :current_context
|
8
9
|
|
9
10
|
DEFAULT_EXEC_MODE=:lazy
|
10
11
|
|
11
12
|
def initialize(exec_mode=DEFAULT_EXEC_MODE)
|
12
13
|
@interpreter = self
|
13
14
|
self.exec_mode = exec_mode
|
15
|
+
@current_context = self
|
14
16
|
end
|
15
17
|
|
16
18
|
|
17
|
-
def run
|
18
|
-
@context = self
|
19
|
+
def run(file=nil, &block)
|
19
20
|
if file.nil?
|
20
21
|
self.instance_eval &block
|
21
22
|
else
|
@@ -28,7 +29,7 @@ module DSLCompanion
|
|
28
29
|
@source_code_file = nil
|
29
30
|
end
|
30
31
|
|
31
|
-
def self.run
|
32
|
+
def self.run(file=nil, exec_mode=DEFAULT_EXEC_MODE, &block)
|
32
33
|
new(exec_mode).run file, &block
|
33
34
|
end
|
34
35
|
|
@@ -42,7 +43,7 @@ module DSLCompanion
|
|
42
43
|
@exec_mode = :lazy
|
43
44
|
return @exec_mode
|
44
45
|
end
|
45
|
-
raise
|
46
|
+
raise 'DSL Interpreter: Invalid execution mode !'
|
46
47
|
end
|
47
48
|
attr_reader :exec_mode
|
48
49
|
|
@@ -1,38 +1,44 @@
|
|
1
|
-
module
|
1
|
+
module DSLCompanion
|
2
|
+
module MetaHelper
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
def metaclass
|
5
|
+
class << self
|
6
|
+
self
|
7
|
+
end
|
6
8
|
end
|
7
|
-
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def meta_eval(&block)
|
11
|
+
metaclass.instance_eval &block
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
# Adds method to metaclass
|
15
|
+
def meta_def( name, &block )
|
16
|
+
meta_eval { define_method name, &block }
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
# Defines an instance method within a class
|
20
|
+
def class_def( name, &block )
|
21
|
+
class_eval { define_method name, &block }
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
injected_accessor = name.to_s.to_sym
|
26
|
-
injected_instance_variable = "@#{injected_accessor}"
|
27
|
-
already_defined = self.instance_variable_defined? injected_instance_variable
|
28
|
-
logger("DSL Interpreter overriding existing variable '#{injected_instance_variable}'", :warn) if already_defined
|
29
|
-
self.instance_variable_set injected_instance_variable, value
|
30
|
-
|
31
|
-
# Defines the method that returns the instance variable and inject into the interpreter's context
|
32
|
-
meta_def "#{injected_accessor}" do
|
33
|
-
self.instance_variable_get injected_instance_variable
|
24
|
+
def inject_variable(name, value)
|
25
|
+
MetaHelper.inject_variable self, name, value
|
34
26
|
end
|
35
27
|
|
36
|
-
|
28
|
+
def self.inject_variable(target, name, value)
|
29
|
+
# Inject instance variable in the target context
|
30
|
+
injected_accessor = name.to_s.to_sym
|
31
|
+
injected_instance_variable = "@#{injected_accessor}"
|
32
|
+
already_defined = target.instance_variable_defined? injected_instance_variable
|
33
|
+
logger("DSL Interpreter overriding existing variable '#{injected_instance_variable}'", :warn) if already_defined
|
34
|
+
target.extend MetaHelper
|
35
|
+
target.instance_variable_set injected_instance_variable, value
|
36
|
+
|
37
|
+
# Defines the method that returns the instance variable and inject into the interpreter's context
|
38
|
+
target.meta_def "#{injected_accessor}" do
|
39
|
+
target.instance_variable_get injected_instance_variable
|
40
|
+
end
|
41
|
+
end
|
37
42
|
|
38
|
-
end
|
43
|
+
end
|
44
|
+
end
|
data/spec/interpreter_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe DSLCompanion::Interpreter do
|
|
37
37
|
it 'should give the same result for define_<something>(*args) and define(:something, *args)' do
|
38
38
|
|
39
39
|
module ExtraFeatureModule
|
40
|
-
def define_stuff
|
40
|
+
def define_stuff(stuff_name, value)
|
41
41
|
interpreter.inject_variable stuff_name, value
|
42
42
|
end
|
43
43
|
end
|
@@ -62,7 +62,7 @@ describe DSLCompanion::Interpreter do
|
|
62
62
|
it 'should be able to inject new variables in interpreter' do
|
63
63
|
|
64
64
|
module ExtraFeatureModule
|
65
|
-
def define_stuff
|
65
|
+
def define_stuff(stuff_name, value)
|
66
66
|
interpreter.inject_variable stuff_name, value
|
67
67
|
end
|
68
68
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -9,7 +9,7 @@ require 'dsl_companion'
|
|
9
9
|
|
10
10
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
11
11
|
# in spec/support/ and its subdirectories.
|
12
|
-
Dir[File.expand_path(
|
12
|
+
Dir[File.expand_path('../../spec/support/**/*.rb', __FILE__)].each { |f| require f }
|
13
13
|
|
14
14
|
RSpec.configure do |config|
|
15
15
|
# ## Mock Framework
|
@@ -25,7 +25,7 @@ RSpec.configure do |config|
|
|
25
25
|
# order dependency and want to debug it, you can fix the order by providing
|
26
26
|
# the seed, which is printed after each run.
|
27
27
|
# --seed 1234
|
28
|
-
config.order =
|
28
|
+
config.order = 'random'
|
29
29
|
|
30
30
|
config.color = true
|
31
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dsl_companion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Laurent B.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -74,7 +74,7 @@ files:
|
|
74
74
|
- lib/dsl_companion/version.rb
|
75
75
|
- spec/interpreter_spec.rb
|
76
76
|
- spec/spec_helper.rb
|
77
|
-
homepage:
|
77
|
+
homepage: https://github.com/lbriais/dsl_companion
|
78
78
|
licenses:
|
79
79
|
- MIT
|
80
80
|
metadata: {}
|