easyop 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +41 -0
- data/README.md +1089 -0
- data/lib/easyop/configuration.rb +31 -0
- data/lib/easyop/ctx.rb +187 -0
- data/lib/easyop/flow.rb +94 -0
- data/lib/easyop/flow_builder.rb +80 -0
- data/lib/easyop/hooks.rb +108 -0
- data/lib/easyop/operation.rb +115 -0
- data/lib/easyop/plugins/async.rb +98 -0
- data/lib/easyop/plugins/base.rb +27 -0
- data/lib/easyop/plugins/instrumentation.rb +74 -0
- data/lib/easyop/plugins/recording.rb +115 -0
- data/lib/easyop/plugins/transactional.rb +69 -0
- data/lib/easyop/rescuable.rb +68 -0
- data/lib/easyop/schema.rb +168 -0
- data/lib/easyop/skip.rb +22 -0
- data/lib/easyop/version.rb +3 -0
- data/lib/easyop.rb +41 -0
- metadata +94 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: e1949724cfdf1045f5b0ab6f013187b395f3baaf96b357a6367c894b251ce1e2
|
|
4
|
+
data.tar.gz: d22d453c480ce21caf923195c36f984135e488454bdb939131cc0e896088017d
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: b956452863277b0218420ee73ca45eb9e28b449441ac2bc4458dcb5880cb95630ff5a5395ced570c50df1e2f98523b782dc5f39befc574834d13d739daf917be
|
|
7
|
+
data.tar.gz: 700f88243a8ba2a3add1c394c97ffc2d3e09e5a10ca157a1c4fcd5256fefc327bc04480ee5ddda8c329d3ff787acfb0321b33b219ca9ba78cc858b8c7ab4ea67
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] — 2026-04-01
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
#### Core
|
|
15
|
+
- `Easyop::Operation` — core mixin; include in any Ruby class to get `call`, `call!`, `ctx`, hooks, rescue, and schema DSL
|
|
16
|
+
- `Easyop::Ctx` — shared context object that doubles as the result; supports `success?`, `failure?`, `fail!`, `called!`, `rollback!`, chainable `on_success`/`on_failure` callbacks, and Ruby 3+ pattern matching via `deconstruct_keys`
|
|
17
|
+
- `Easyop::Ctx::Failure` — exception raised by `call!` and propagated through flows; carries the failed `ctx`
|
|
18
|
+
- `Easyop::Hooks` — `before`, `after`, and `around` hook DSL; inheritable, no ActiveSupport dependency
|
|
19
|
+
- `Easyop::Rescuable` — `rescue_from ExceptionClass` DSL with block and `with: :method` shorthand; supports inheritance
|
|
20
|
+
- `Easyop::Schema` — optional typed `params` / `result` declarations (`required`, `optional`); aliased as `inputs`/`outputs`; type shorthands (`:integer`, `:string`, `:boolean`, `:float`, `:symbol`, `:array`, `:hash`) and custom class matching
|
|
21
|
+
- `Easyop::Skip` — `skip_if` DSL for conditional step execution inside flows
|
|
22
|
+
- `Easyop::Flow` — sequential operation chain with shared `ctx`; automatic rollback in reverse order on failure; supports lambda guards as inline steps and nested flows
|
|
23
|
+
- `Easyop::FlowBuilder` — fluent builder returned by `FlowClass.prepare`; supports `bind_with`, `on(success:, fail:)`, and direct `.call`
|
|
24
|
+
|
|
25
|
+
#### Plugins
|
|
26
|
+
- `Easyop::Plugins::Base` — abstract base class for custom plugins; defines the `self.install(operation_class, **options)` contract
|
|
27
|
+
- `plugin` DSL on `Operation::ClassMethods` — installs a plugin via `plugin PluginClass, **options`; inheritable by subclasses
|
|
28
|
+
- `Easyop::Plugins::Instrumentation` — emits `"easyop.operation.call"` events via `ActiveSupport::Notifications`; opt-in log subscriber via `attach_log_subscriber`
|
|
29
|
+
- `Easyop::Plugins::Recording` — persists every execution to an `OperationLog` ActiveRecord model; configurable `recording_model`; per-class opt-out with `recording false`; scrubs sensitive keys from persisted attrs
|
|
30
|
+
- `Easyop::Plugins::Async` — adds `.call_async` to any operation; serialises ActiveRecord objects as `{__ar_class:, __ar_id:}` and deserialises in the background job; lazy `Job` class creation avoids requiring ActiveJob at load time
|
|
31
|
+
- `Easyop::Plugins::Transactional` — wraps the full `before → call → after` lifecycle in an ActiveRecord (or Sequel) transaction; per-class opt-out with `transactional false`; inheritance-aware
|
|
32
|
+
|
|
33
|
+
#### Tooling
|
|
34
|
+
- `Easyop.configure` block — global configuration (`strict_types`, `recording_model`, `instrumentation_event_name`)
|
|
35
|
+
- `llms/overview.md` and `llms/usage.md` — LLM context files for AI-assisted development
|
|
36
|
+
- `claude-plugin/` — Claude Code skill with references and usage examples
|
|
37
|
+
- `examples/easyop_test_app/` — full Rails 8 blog application demonstrating all features in real-world code
|
|
38
|
+
- `examples/usage.rb` — 13 runnable plain-Ruby examples
|
|
39
|
+
|
|
40
|
+
[Unreleased]: https://github.com/pniemczyk/easyop/compare/v0.1.0...HEAD
|
|
41
|
+
[0.1.0]: https://github.com/pniemczyk/easyop/releases/tag/v0.1.0
|