summaryrefslogtreecommitdiffstats
path: root/tinyusb/test/vendor/ceedling/lib/ceedling/plugin_builder.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tinyusb/test/vendor/ceedling/lib/ceedling/plugin_builder.rb')
-rwxr-xr-xtinyusb/test/vendor/ceedling/lib/ceedling/plugin_builder.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/tinyusb/test/vendor/ceedling/lib/ceedling/plugin_builder.rb b/tinyusb/test/vendor/ceedling/lib/ceedling/plugin_builder.rb
new file mode 100755
index 00000000..1269141f
--- /dev/null
+++ b/tinyusb/test/vendor/ceedling/lib/ceedling/plugin_builder.rb
@@ -0,0 +1,53 @@
+require 'ceedling/plugin'
+
+class PluginBuilder
+
+ attr_accessor :plugin_objects
+
+ def construct_plugin(plugin_name, object_map_yaml, system_objects)
+ # @streaminator.stdout_puts("Constructing plugin #{plugin_name}...", Verbosity::OBNOXIOUS)
+ object_map = {}
+ @plugin_objects = {}
+ @system_objects = system_objects
+
+ if object_map_yaml
+ @object_map = YAML.load(object_map_yaml)
+ @object_map.each_key do |obj|
+ construct_object(obj)
+ end
+ else
+ raise "Invalid object map for plugin #{plugin_name}!"
+ end
+
+ return @plugin_objects
+ end
+
+ private
+
+ def camelize(underscored_name)
+ return underscored_name.gsub(/(_|^)([a-z0-9])/) {$2.upcase}
+ end
+
+ def construct_object(obj)
+ if @plugin_objects[obj].nil?
+ if @object_map[obj] && @object_map[obj]['compose']
+ @object_map[obj]['compose'].each do |dep|
+ construct_object(dep)
+ end
+ end
+ build_object(obj)
+ end
+ end
+
+ def build_object(new_object)
+ if @plugin_objects[new_object.to_sym].nil?
+ # @streaminator.stdout_puts("Building plugin object #{new_object}", Verbosity::OBNOXIOUS)
+ require new_object
+ class_name = camelize(new_object)
+ new_instance = eval("#{class_name}.new(@system_objects, class_name.to_s)")
+ new_instance.plugin_objects = @plugin_objects
+ @plugin_objects[new_object.to_sym] = new_instance
+ end
+ end
+
+end \ No newline at end of file