Module: Spurline::DSL::Tools::ClassMethods
- Defined in:
- lib/spurline/dsl/tools.rb
Constant Summary collapse
- IDEMPOTENCY_OPTION_KEYS =
%i[ idempotent idempotency_key idempotency_ttl idempotency_key_fn ].freeze
Instance Method Summary collapse
-
#idempotency_config ⇒ Object
Effective per-tool idempotency options from DSL config.
-
#permissions_config ⇒ Object
Effective permissions applied by Tools::Runner.
- #tool_config ⇒ Object
-
#tool_config_for(tool_name) ⇒ Object
Returns per-tool configuration for a specific tool.
-
#toolkits(*toolkit_names, **overrides) ⇒ Object
Include one or more toolkits by name.
- #tools(*tool_names, **tool_configs) ⇒ Object
Instance Method Details
#idempotency_config ⇒ Object
Effective per-tool idempotency options from DSL config.
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/spurline/dsl/tools.rb', line 66 def idempotency_config tool_config[:configs].each_with_object({}) do |(tool_name, config), result| next unless config.is_a?(Hash) = symbolize_hash(config).slice(*IDEMPOTENCY_OPTION_KEYS) next if .empty? result[tool_name.to_sym] = end end |
#permissions_config ⇒ Object
Effective permissions applied by Tools::Runner. Merge order: spur defaults -> agent inline config -> YAML overrides.
79 80 81 82 83 84 85 |
# File 'lib/spurline/dsl/tools.rb', line 79 def merged = {} (merged, ) (merged, ) (merged, ) merged end |
#tool_config ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/spurline/dsl/tools.rb', line 46 def tool_config own = @tool_config || { names: [], configs: {} } if superclass.respond_to?(:tool_config) inherited = superclass.tool_config { names: (inherited[:names] + own[:names]).uniq, configs: inherited[:configs].merge(own[:configs]), } else own end end |
#tool_config_for(tool_name) ⇒ Object
Returns per-tool configuration for a specific tool.
61 62 63 |
# File 'lib/spurline/dsl/tools.rb', line 61 def tool_config_for(tool_name) tool_config[:configs][tool_name.to_sym] || {} end |
#toolkits(*toolkit_names, **overrides) ⇒ Object
Include one or more toolkits by name. Toolkit expansion is deferred until tool_config is accessed, so toolkits can be registered after agent classes are defined (supports any boot order).
toolkits :git, :linear
toolkits :provisioning, provisioning: { scoped: true }
41 42 43 44 |
# File 'lib/spurline/dsl/tools.rb', line 41 def toolkits(*toolkit_names, **overrides) @pending_toolkits ||= [] @pending_toolkits << { names: toolkit_names.map(&:to_sym), overrides: overrides } end |
#tools(*tool_names, **tool_configs) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/spurline/dsl/tools.rb', line 24 def tools(*tool_names, **tool_configs) @tool_config ||= { names: [], configs: {} } tool_names.each { |name| @tool_config[:names] << name.to_sym } tool_configs.each do |name, config| @tool_config[:names] << name.to_sym existing = @tool_config[:configs][name.to_sym] @tool_config[:configs][name.to_sym] = existing ? existing.merge(config) : config end end |