class ServiceScan
This class loads ruby files and initializes the services specified inside of them
Attributes
base_dirs[R]
Public Class Methods
new(base_dirs = ["services"])
click to toggle source
# File lib/didit/service_scan.rb, line 9 def initialize(base_dirs = ["services"]) @base_dirs = base_dirs end
Public Instance Methods
run!()
click to toggle source
# File lib/didit/service_scan.rb, line 13 def run! perform_initial_scan inject_single inject_lists post_construct_triggers end
Private Instance Methods
add_attr_reader(service_instance, id, injectable)
click to toggle source
Add a reader method to a service_instance
# File lib/didit/service_scan.rb, line 96 def add_attr_reader(service_instance, id, injectable) metaclass = class << service_instance; self; end metaclass.send(:define_method, id) do injectable end end
get_multi_injects(service)
click to toggle source
Return a list of multiple injects for a service
# File lib/didit/service_scan.rb, line 84 def get_multi_injects(service) puts service.inspect if not service[:requires] or service[:requires].empty? [] else service[:requires].find_all { |req| req[:type] == "multiple" } end end
get_single_inject(service)
click to toggle source
Return a list of single injects for a service
# File lib/didit/service_scan.rb, line 73 def get_single_inject(service) if not service[:requires] or service[:requires].empty? [] else service[:requires].find_all { |req| req[:type] == "one" } end end
inject_lists()
click to toggle source
Find injectables for the inject_list methods that have been specified
# File lib/didit/service_scan.rb, line 40 def inject_lists Didit::SERVICES.each do |(key, service)| get_multi_injects(service).each do |needs| puts ".. service #{service[:identifier]} requires #{needs[:id]}" instances_list = Didit::services_with_base(needs[:id]) puts "INSTANCES: #{instances_list.inspect}" service_instance = service[:class_instance] add_attr_reader(service_instance, needs[:var_name], instances_list) end end end
inject_single()
click to toggle source
Find injectable that is to be bound to inject
# File lib/didit/service_scan.rb, line 58 def inject_single Didit::SERVICES.each do |(key, service)| get_single_inject(service).each do |needs| puts ".. service #{service[:identifier]} requires #{needs[:id]}" injected_instance = Didit::service(needs[:id]) service_instance = service[:class_instance] add_attr_reader(service_instance, needs[:id].to_sym, injected_instance) end end end
perform_initial_scan()
click to toggle source
Scan the specified folders and load them
# File lib/didit/service_scan.rb, line 107 def perform_initial_scan root_folder = Dir.pwd puts "From: #{root_folder}" @base_dirs.each do |dir| puts "Scanning #{dir}" Dir.chdir(dir) Dir.glob("**/*.rb") do |file| load "./#{file}" end Dir.chdir(root_folder) end end
post_construct_triggers()
click to toggle source
Run the post construct methods
# File lib/didit/service_scan.rb, line 26 def post_construct_triggers Didit::SERVICES.each do |(key, service)| if service[:post_config] then service[:post_config].each do |method_name| service[:class_instance].method(method_name).call end end end end