Class: Alki::Assembly::Builder
- Inherits:
-
Object
- Object
- Alki::Assembly::Builder
- Defined in:
- lib/alki/assembly/builder.rb
Instance Attribute Summary collapse
-
#assembly_name ⇒ Object
readonly
Returns the value of attribute assembly_name.
-
#config_dir ⇒ Object
readonly
Returns the value of attribute config_dir.
-
#definition ⇒ Object
readonly
Returns the value of attribute definition.
Class Method Summary collapse
Instance Method Summary collapse
- #build(opts = {}, &blk) ⇒ Object
- #build_assembly(blk) ⇒ Object
- #build_class ⇒ Object
- #build_empty_assembly ⇒ Object
- #config_prefix ⇒ Object
- #dsl_opts ⇒ Object
-
#initialize ⇒ Builder
constructor
A new instance of Builder.
- #load_assembly_file ⇒ Object
- #register_config_directory ⇒ Object
- #set_assembly_name(name) ⇒ Object
- #setup_project_assembly(path) ⇒ Object
Constructor Details
#initialize ⇒ Builder
Returns a new instance of Builder.
9 10 11 12 13 14 15 |
# File 'lib/alki/assembly/builder.rb', line 9 def initialize @config_dir = nil @assembly_name = nil @definition = nil @load_mode = :direct @primary_config = 'assembly' end |
Instance Attribute Details
#assembly_name ⇒ Object (readonly)
Returns the value of attribute assembly_name.
17 18 19 |
# File 'lib/alki/assembly/builder.rb', line 17 def assembly_name @assembly_name end |
#config_dir ⇒ Object (readonly)
Returns the value of attribute config_dir.
17 18 19 |
# File 'lib/alki/assembly/builder.rb', line 17 def config_dir @config_dir end |
#definition ⇒ Object (readonly)
Returns the value of attribute definition.
17 18 19 |
# File 'lib/alki/assembly/builder.rb', line 17 def definition @definition end |
Class Method Details
.build(opts = {}, &blk) ⇒ Object
19 20 21 |
# File 'lib/alki/assembly/builder.rb', line 19 def self.build(opts={},&blk) new.build(opts,&blk) end |
Instance Method Details
#build(opts = {}, &blk) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/alki/assembly/builder.rb', line 23 def build(opts={},&blk) @load_mode = opts[:load_mode] if opts[:load_mode] build_assembly blk if blk @primary_config = opts[:primary_config] if opts[:primary_config] set_assembly_name opts[:name] if opts[:name] setup_project_assembly opts[:project_assembly] if opts[:project_assembly] if opts[:config_dir] context = if opts[:project_assembly] File.dirname opts[:project_assembly] else Dir.pwd end @config_dir = File. opts[:config_dir], context end register_config_directory if @config_dir if blk build_assembly blk else load_assembly_file end build_empty_assembly unless definition build_class end |
#build_assembly(blk) ⇒ Object
96 97 98 |
# File 'lib/alki/assembly/builder.rb', line 96 def build_assembly(blk) @definition = Alki::Dsl.build('alki/dsls/assembly', dsl_opts, &blk) end |
#build_class ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/alki/assembly/builder.rb', line 112 def build_class definition = @definition name = @assembly_name load_class = if @load_mode == :require ->{ name } else ->{ self } end Alki::ClassBuilder.build( prefix: '', name: @assembly_name, class_modules: [Alki::Assembly], type: :module, class_methods: { assembly_name: { body: ->{ name } }, definition: { body: ->{ Alki.load definition } }, load_class: { body: load_class } } ) end |
#build_empty_assembly ⇒ Object
92 93 94 |
# File 'lib/alki/assembly/builder.rb', line 92 def build_empty_assembly build_assembly ->{} end |
#config_prefix ⇒ Object
74 75 76 77 78 79 |
# File 'lib/alki/assembly/builder.rb', line 74 def config_prefix unless @assembly_name raise "Can't use config directory without a name" end File.join(@assembly_name,'assembly_config') end |
#dsl_opts ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/alki/assembly/builder.rb', line 100 def dsl_opts opts = {} if @assembly_name opts[:assembly_name] = @assembly_name if @config_dir opts[:config_dir] = @config_dir opts[:prefix] = config_prefix end end opts end |
#load_assembly_file ⇒ Object
85 86 87 88 89 90 |
# File 'lib/alki/assembly/builder.rb', line 85 def load_assembly_file if @config_dir @definition = File.join(config_prefix,@primary_config) true end end |
#register_config_directory ⇒ Object
81 82 83 |
# File 'lib/alki/assembly/builder.rb', line 81 def register_config_directory Alki::Loader.register @config_dir, builder: 'alki/dsls/assembly', name: config_prefix, **dsl_opts end |
#set_assembly_name(name) ⇒ Object
70 71 72 |
# File 'lib/alki/assembly/builder.rb', line 70 def set_assembly_name(name) @assembly_name = name end |
#setup_project_assembly(path) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/alki/assembly/builder.rb', line 47 def setup_project_assembly(path) root = Alki::Support.find_root(path) do |dir| File.exist?(File.join(dir,'config',"#{@primary_config}.rb")) || File.exist?(File.join(dir,'Gemfile')) || !Dir.glob(File.join(dir,'*.gemspec')).empty? end if root unless @assembly_name lib_dir = File.join(root,'lib') name = Alki::Support.path_name path, lib_dir unless name raise "Can't auto-detect name of assembly" end set_assembly_name name end unless @config_dir config_dir = File.join(root,'config') @config_dir = config_dir if File.exist? config_dir end end end |