class App::Config::JSON
Constants
- DEFAULT_DECODE
- DEFAULT_ENCODE
- DEFAULT_MASK
- DEFAULT_SUFFIX
Public Class Methods
new( **opts )
click to toggle source
Calls superclass method
App::Config::Base::new
# File lib/app/config/json.rb, line 20 def initialize( **opts ) super() reload( **opts ) end
Public Instance Methods
load( section )
click to toggle source
load configuration.
# File lib/app/config/json.rb, line 43 def load( section ) raise ArgumentError, "'#{ section }' is not String." unless String === section self[section].clear load_overlay( section + DEFAULT_SUFFIX ) end
load_overlay( filename )
click to toggle source
load configuration.
# File lib/app/config/json.rb, line 51 def load_overlay( filename ) @paths.each do |path| begin dirname = ::File.expand_path( path ) if ::Dir.exist?( dirname ) ::Dir.glob( "#{ dirname }/#{ filename }" ) do |pathname| text = ::File.open( pathname ).read rescue raise( ArgumentError, "could not load #{ pathname }" ) json = ::ERB.new( text ).result rescue raise( ArgumentError, "could not parse by ERB: #{ pathname }" ) hash = ::JSON.load( json, **@decode ) self.deeply_merge!( hash ) end end rescue => e STDERR.puts e.message end end end
reload( root: nil, path: nil, encode: nil, decode: nil )
click to toggle source
bulk load configuration in search paths.
# File lib/app/config/json.rb, line 26 def reload( root: nil, path: nil, encode: nil, decode: nil ) clear @root = root || Dir.pwd @paths = ( path || DEFAULT_PATH ).gsub('$ROOT', @root).split(':') @paths = @paths.map{|it| !it.nil? && !it.empty? ? it : nil}.compact @paths << "." if @paths.empty? @vardir = @paths.last Dir.mkdir( @vardir ) unless ::Dir.exist?( @vardir ) @encode = DEFAULT_ENCODE.merge( encode || {} ) @decode = DEFAULT_DECODE.merge( decode || {} ) load_overlay( DEFAULT_MASK ) end
reset( section )
click to toggle source
remove and load configuration.
# File lib/app/config/json.rb, line 80 def reset( section ) raise ArgumentError, "'#{ section }' is not String." unless String === section pathname = savepathname(section) ::FileUtils.remove( pathname ) if ::File.exist?( pathname ) load( section ) end
save( section )
click to toggle source
save configuration.
# File lib/app/config/json.rb, line 70 def save( section ) raise ArgumentError, "'#{ section }' is not String." unless String === section pathname = savepathname(section) hash = { section => self[section] }.deeply_stringify_keys ::File.open( pathname, "w" ) do |file| file.puts( ::JSON.pretty_generate( hash, **@encode ) ) end end
savepathname( section )
click to toggle source
# File lib/app/config/json.rb, line 88 def savepathname( section ) ::File.join( @vardir, section + DEFAULT_SUFFIX ) end