Class: Raka

Inherits:
Object
  • Object
show all
Defined in:
lib/raka.rb

Overview

initialize raka

Constant Summary collapse

Pattern =
Pattern
P =
Pattern

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(env, options) ⇒ Raka

Returns a new instance of Raka.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/raka.rb', line 41

def initialize(env, options)
  @env = env
  defaults = {
    output_types: [:csv], input_types: nil,
    type_aliases: {},
    scopes: [],
    lang: ['lang/shell'],
    user_lang: []
  }
  @options = options = OpenStruct.new(defaults.merge(options))

  create_logger options.log_level || (ENV['LOG_LEVEL'] || Logger::INFO).to_i

  # if input_types given, obey it, otherwise use all output types as possible input types
  unless @options.input_types
    @options.input_types = @options.output_types # any output can be used as intermediate
  end
  # specify root of scopes in options, scopes will append to each root
  @scopes = options.scopes.empty? ? [] : [options.scopes]
  @options.lang.each { |path| load File::join(File::dirname(__FILE__), "raka/#{path}/impl.rb") }
  @options.user_lang.each { |path| load path.to_s + '.rb' }

  # These are where the dsl starts
  @options.output_types.each do |ext|
    define_token_creator(ext, @options.type_aliases[ext])
  end
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



13
14
15
# File 'lib/raka.rb', line 13

def logger
  @logger
end

Instance Method Details

#create_logger(level) ⇒ Object



15
16
17
18
19
20
21
# File 'lib/raka.rb', line 15

def create_logger(level)
  @env.define_singleton_method :logger do
    logger = Logger.new(STDOUT)
    logger.level = level
    logger
  end
end

#define_token_creator(ext, ext_alias = nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/raka.rb', line 23

def define_token_creator(ext, ext_alias = nil)
  # closures
  env = @env
  options = @options
  scopes = @scopes
  @env.define_singleton_method(ext_alias || ext) do |*args, **kw|
    # Here the compiler are bound with @options so that when we change @options
    # using methods like scope in Rakefile, the subsequent rules defined will honor
    # the new settings
    # clone to fix the scopes when defining rule
    inline_scope_pattern = !args.empty? ? args[0] : nil
    Token.new(
      DSLCompiler.new(env, options), Context.new(ext, scopes.clone),
      [], inline_scope_pattern, **kw
    )
  end
end

#scope(*names, &block) ⇒ Object



69
70
71
72
73
# File 'lib/raka.rb', line 69

def scope(*names, &block)
  @scopes.push(names)
  block.call
  @scopes.pop
end

#stem(path) ⇒ Object



75
76
77
# File 'lib/raka.rb', line 75

def stem(path)
  File.basename(path, File.extname(path))
end