# Class BSV::Script::Builder <a id="class-BSV-Script-Builder"></a>

**Inherits:** `Object`

Fluent builder for constructing scripts incrementally.

Provides a chainable API for building scripts from opcodes and data pushes, as
an alternative to the template constructors on {Script}.

**@example Build a custom script**
```ruby
script = BSV::Script::Script.builder
  .push_op(:OP_DUP)
  .push_op(:OP_HASH160)
  .push_data(pubkey_hash)
  .push_op(:OP_EQUALVERIFY)
  .push_op(:OP_CHECKSIG)
  .build
```

## Public Instance Methods
### `build()` <a id="method-i-build"></a> <a id="build-instance_method"></a>
Finalise and return the constructed {Script}.
- **@return** [Script] the built script

### `initialize()` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
- **@return** [Builder] a new instance of Builder

### `push_data(data)` <a id="method-i-push_data"></a> <a id="push_data-instance_method"></a>
Push raw binary data (automatically selects PUSHDATA encoding).
- **@param** `data` [String] binary data to push
- **@return** [self] for chaining

### `push_hex(hex)` <a id="method-i-push_hex"></a> <a id="push_hex-instance_method"></a>
Push hex-encoded data.
- **@param** `hex` [String] hex-encoded data to push
- **@return** [self] for chaining

### `push_op(opcode)` <a id="method-i-push_op"></a> <a id="push_op-instance_method"></a>
Push an opcode onto the script.
- **@param** `opcode` [Symbol, Integer] opcode name (e.g. +:OP_DUP+) or byte value
- **@return** [self] for chaining
