Module: Sting::StingOperations

Included in:
Sting, Sting
Defined in:
lib/sting/sting_operations.rb

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &blk) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/sting/sting_operations.rb', line 32

def method_missing(name, *args, &blk)
  name = name.to_s
  return settings[name] if has_key? name

  suffix = nil

  if name.end_with?('=', '!', '?')
    suffix = name[-1]
    name = name[0..-2]
  end

  case suffix
  when "="
    settings[name] = args.first

  when "?"
    !!settings[name]

  when "!"
    if has_key? name
      return settings[name]
    else
      raise ArgumentError, "Key '#{name}' does not exist"
    end

  else
    nil

  end

end

Instance Method Details

#<<(source) ⇒ Object Also known as: push



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sting/sting_operations.rb', line 9

def <<(source)
  if source.is_a? Hash
    content = source.collect{ |k,v| [k.to_s, v] }.to_h

  elsif source.include? '*'
    Dir["#{source}"].sort.each { |file| push file }

  elsif File.directory? source
    Dir["#{source}/*.yml"].sort.each { |file| push file }

  else
    source = "#{source}.yml" unless source =~ /\.ya?ml$/
    content = ExtendedYAML.load source
  end

  settings.merge! content if content
end

#[](*keys) ⇒ Object



28
29
30
# File 'lib/sting/sting_operations.rb', line 28

def [](*keys)
  settings.dig(*keys.map(&:to_s))
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


73
74
75
# File 'lib/sting/sting_operations.rb', line 73

def has_key?(key)
  settings.has_key? key.to_s
end

#initialize(source = nil) ⇒ Object



5
6
7
# File 'lib/sting/sting_operations.rb', line 5

def initialize(source = nil)
  self << source if source
end

#reset!Object



69
70
71
# File 'lib/sting/sting_operations.rb', line 69

def reset!
  @settings = nil
end

#settingsObject Also known as: to_h



64
65
66
# File 'lib/sting/sting_operations.rb', line 64

def settings
  @settings ||= {}
end