tastytrade 0.2.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/.claude/commands/release-pr.md +108 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
- data/.github/ISSUE_TEMPLATE/roadmap_task.md +34 -0
- data/.github/dependabot.yml +11 -0
- data/.github/workflows/main.yml +75 -0
- data/.rspec +3 -0
- data/.rubocop.yml +101 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +100 -0
- data/CLAUDE.md +78 -0
- data/CODE_OF_CONDUCT.md +81 -0
- data/CONTRIBUTING.md +89 -0
- data/DISCLAIMER.md +54 -0
- data/LICENSE.txt +24 -0
- data/README.md +235 -0
- data/ROADMAP.md +157 -0
- data/Rakefile +17 -0
- data/SECURITY.md +48 -0
- data/docs/getting_started.md +48 -0
- data/docs/python_sdk_analysis.md +181 -0
- data/exe/tastytrade +8 -0
- data/lib/tastytrade/cli.rb +604 -0
- data/lib/tastytrade/cli_config.rb +79 -0
- data/lib/tastytrade/cli_helpers.rb +178 -0
- data/lib/tastytrade/client.rb +117 -0
- data/lib/tastytrade/keyring_store.rb +72 -0
- data/lib/tastytrade/models/account.rb +129 -0
- data/lib/tastytrade/models/account_balance.rb +75 -0
- data/lib/tastytrade/models/base.rb +47 -0
- data/lib/tastytrade/models/current_position.rb +155 -0
- data/lib/tastytrade/models/user.rb +23 -0
- data/lib/tastytrade/models.rb +7 -0
- data/lib/tastytrade/session.rb +164 -0
- data/lib/tastytrade/session_manager.rb +160 -0
- data/lib/tastytrade/version.rb +5 -0
- data/lib/tastytrade.rb +31 -0
- data/sig/tastytrade.rbs +4 -0
- data/spec/exe/tastytrade_spec.rb +104 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/tastytrade/cli_accounts_spec.rb +166 -0
- data/spec/tastytrade/cli_auth_spec.rb +216 -0
- data/spec/tastytrade/cli_config_spec.rb +180 -0
- data/spec/tastytrade/cli_helpers_spec.rb +248 -0
- data/spec/tastytrade/cli_interactive_spec.rb +54 -0
- data/spec/tastytrade/cli_logout_spec.rb +121 -0
- data/spec/tastytrade/cli_select_spec.rb +174 -0
- data/spec/tastytrade/cli_status_spec.rb +206 -0
- data/spec/tastytrade/client_spec.rb +210 -0
- data/spec/tastytrade/keyring_store_spec.rb +168 -0
- data/spec/tastytrade/models/account_balance_spec.rb +247 -0
- data/spec/tastytrade/models/account_spec.rb +206 -0
- data/spec/tastytrade/models/base_spec.rb +61 -0
- data/spec/tastytrade/models/current_position_spec.rb +444 -0
- data/spec/tastytrade/models/user_spec.rb +58 -0
- data/spec/tastytrade/session_manager_spec.rb +296 -0
- data/spec/tastytrade/session_spec.rb +392 -0
- data/spec/tastytrade_spec.rb +9 -0
- metadata +303 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b4642b3bfaeb7906f2733b1da34c2bafea177177fb6670f2271b50b720673236
|
4
|
+
data.tar.gz: d65a41b22c7eba317269b454e38188b1e19c504726771d140d72653aa7e7c617
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7dd6ac7a321ed6d7c6b9519f82988029f5e49515acfff9583d22bba99b2da2ab61666e9054ee232a71afdd3179bcc97c1765e071081722160251ef207340f2d2
|
7
|
+
data.tar.gz: 20b1acf6efba69d72bee9448c39825178701a0e4a20be5de813f1607860fa201b5ed68d2269b2d465fa085bc817d7ffa0ff7f7d89dd68849d197f18463841d51
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# release-pr
|
2
|
+
|
3
|
+
Create a release PR following Ruby gem best practices.
|
4
|
+
|
5
|
+
## Steps to Execute
|
6
|
+
|
7
|
+
1. **Determine Version Bump**
|
8
|
+
- Review the CHANGELOG.md "Unreleased" section
|
9
|
+
- Determine the appropriate version bump based on Semantic Versioning:
|
10
|
+
- MAJOR (x.0.0): Breaking changes
|
11
|
+
- MINOR (0.x.0): New features, backward compatible
|
12
|
+
- PATCH (0.0.x): Bug fixes only
|
13
|
+
- Ask the user to confirm the version if unclear
|
14
|
+
|
15
|
+
2. **Create Release Branch**
|
16
|
+
```bash
|
17
|
+
git checkout -b release/v<VERSION>
|
18
|
+
```
|
19
|
+
|
20
|
+
3. **Update Version**
|
21
|
+
- Edit `lib/tastytrade/version.rb` to bump the version number
|
22
|
+
|
23
|
+
4. **Update ROADMAP.md**
|
24
|
+
- Review the CHANGELOG.md "Unreleased" section for completed items
|
25
|
+
- Find corresponding items in ROADMAP.md and mark them as completed:
|
26
|
+
- Change `- [ ]` to `- [x]` for completed items
|
27
|
+
- Look for items in all phases, not just Phase 1
|
28
|
+
- If an item mentions a GitHub issue number, include "(closes #X)" after marking complete
|
29
|
+
|
30
|
+
5. **Update CHANGELOG.md**
|
31
|
+
- Move all entries from "Unreleased" to a new version section with today's date
|
32
|
+
- Format: `## [X.Y.Z] - YYYY-MM-DD`
|
33
|
+
- Create a new empty "Unreleased" section at the top with all subsections:
|
34
|
+
```markdown
|
35
|
+
## [Unreleased]
|
36
|
+
|
37
|
+
### Added
|
38
|
+
- Nothing yet
|
39
|
+
|
40
|
+
### Changed
|
41
|
+
- Nothing yet
|
42
|
+
|
43
|
+
### Deprecated
|
44
|
+
- Nothing yet
|
45
|
+
|
46
|
+
### Removed
|
47
|
+
- Nothing yet
|
48
|
+
|
49
|
+
### Fixed
|
50
|
+
- Nothing yet
|
51
|
+
|
52
|
+
### Security
|
53
|
+
- Nothing yet
|
54
|
+
```
|
55
|
+
|
56
|
+
6. **Commit Changes**
|
57
|
+
```bash
|
58
|
+
git add lib/tastytrade/version.rb CHANGELOG.md ROADMAP.md
|
59
|
+
git commit -m "Release v<VERSION>"
|
60
|
+
```
|
61
|
+
|
62
|
+
7. **Push Branch**
|
63
|
+
```bash
|
64
|
+
git push -u origin release/v<VERSION>
|
65
|
+
```
|
66
|
+
|
67
|
+
8. **Create Pull Request**
|
68
|
+
```bash
|
69
|
+
gh pr create --title "Release v<VERSION>" --body "## Release v<VERSION>
|
70
|
+
|
71
|
+
This PR prepares the release of version <VERSION>.
|
72
|
+
|
73
|
+
### Changes
|
74
|
+
- Bumped version to <VERSION>
|
75
|
+
- Updated CHANGELOG.md with release date
|
76
|
+
- Updated ROADMAP.md to mark completed items
|
77
|
+
|
78
|
+
### Release Checklist
|
79
|
+
- [ ] Version number is correct
|
80
|
+
- [ ] CHANGELOG.md is updated with all changes
|
81
|
+
- [ ] ROADMAP.md has completed items marked
|
82
|
+
- [ ] All tests pass
|
83
|
+
- [ ] RuboCop reports no offenses
|
84
|
+
|
85
|
+
### Post-Merge Steps
|
86
|
+
After merging this PR:
|
87
|
+
1. \`git checkout main && git pull\`
|
88
|
+
2. \`bundle exec rake release\`
|
89
|
+
|
90
|
+
Note: The rake release command will automatically create and push the git tag v<VERSION>"
|
91
|
+
```
|
92
|
+
|
93
|
+
## Important Notes
|
94
|
+
|
95
|
+
- Do NOT run `rake release` as part of the PR - this happens after merge
|
96
|
+
- Ensure all tests pass before creating the PR
|
97
|
+
- Run RuboCop to ensure code quality
|
98
|
+
- The version in the PR title and body should NOT include the 'v' prefix (e.g., "0.2.0" not "v0.2.0")
|
99
|
+
- The rake release command will automatically create the git tag with 'v' prefix (e.g., "v0.2.0")
|
100
|
+
- You need a RubyGems.org account to run rake release
|
101
|
+
|
102
|
+
## Example
|
103
|
+
|
104
|
+
For a minor version bump from 0.1.0 to 0.2.0:
|
105
|
+
- Branch name: `release/v0.2.0`
|
106
|
+
- Commit message: `Release v0.2.0`
|
107
|
+
- PR title: `Release v0.2.0`
|
108
|
+
- Git tag (after merge): `v0.2.0`
|
@@ -0,0 +1,29 @@
|
|
1
|
+
---
|
2
|
+
name: Feature request
|
3
|
+
about: Suggest a new feature for the SDK
|
4
|
+
title: '[FEATURE] '
|
5
|
+
labels: enhancement
|
6
|
+
assignees: ''
|
7
|
+
---
|
8
|
+
|
9
|
+
## Feature Description
|
10
|
+
A clear and concise description of what you want to happen.
|
11
|
+
|
12
|
+
## Use Case
|
13
|
+
Describe the use case or problem this feature would solve.
|
14
|
+
|
15
|
+
## Proposed Solution
|
16
|
+
Describe how you'd like this feature to work.
|
17
|
+
|
18
|
+
## Alternatives Considered
|
19
|
+
Describe any alternative solutions or features you've considered.
|
20
|
+
|
21
|
+
## Roadmap Phase
|
22
|
+
Which phase of the roadmap does this belong to?
|
23
|
+
- [ ] Phase 1: Core SDK Foundation
|
24
|
+
- [ ] Phase 2: Advanced SDK Features
|
25
|
+
- [ ] Phase 3: CLI Integration
|
26
|
+
- [ ] Phase 4: Advanced Features & Polish
|
27
|
+
|
28
|
+
## Additional Context
|
29
|
+
Add any other context or screenshots about the feature request here.
|
@@ -0,0 +1,34 @@
|
|
1
|
+
---
|
2
|
+
name: Roadmap Task
|
3
|
+
about: Track implementation of a roadmap item
|
4
|
+
title: '[ROADMAP] '
|
5
|
+
labels: roadmap
|
6
|
+
assignees: ''
|
7
|
+
---
|
8
|
+
|
9
|
+
## Task Description
|
10
|
+
Brief description of the roadmap task to implement.
|
11
|
+
|
12
|
+
## Roadmap Reference
|
13
|
+
Link to the specific item in ROADMAP.md this implements.
|
14
|
+
|
15
|
+
## Phase
|
16
|
+
- [ ] Phase 1: Core SDK Foundation
|
17
|
+
- [ ] Phase 2: Advanced SDK Features
|
18
|
+
- [ ] Phase 3: CLI Integration
|
19
|
+
- [ ] Phase 4: Advanced Features & Polish
|
20
|
+
|
21
|
+
## Implementation Details
|
22
|
+
Detailed technical approach for implementing this feature.
|
23
|
+
|
24
|
+
## Acceptance Criteria
|
25
|
+
- [ ] Implementation complete
|
26
|
+
- [ ] Tests written and passing
|
27
|
+
- [ ] Documentation updated
|
28
|
+
- [ ] Code reviewed
|
29
|
+
|
30
|
+
## Dependencies
|
31
|
+
List any other roadmap items that must be completed first.
|
32
|
+
|
33
|
+
## Notes
|
34
|
+
Any additional implementation notes or considerations.
|
@@ -0,0 +1,75 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
|
9
|
+
permissions:
|
10
|
+
contents: read
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
scan_ruby:
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- name: Checkout code
|
18
|
+
uses: actions/checkout@v4
|
19
|
+
|
20
|
+
- name: Set up Ruby
|
21
|
+
uses: ruby/setup-ruby@v1
|
22
|
+
with:
|
23
|
+
ruby-version: .ruby-version
|
24
|
+
bundler-cache: true
|
25
|
+
|
26
|
+
- name: Scan for security vulnerabilities
|
27
|
+
run: |
|
28
|
+
gem install bundler-audit
|
29
|
+
bundle-audit check --update
|
30
|
+
|
31
|
+
lint:
|
32
|
+
runs-on: ubuntu-latest
|
33
|
+
|
34
|
+
steps:
|
35
|
+
- name: Checkout code
|
36
|
+
uses: actions/checkout@v4
|
37
|
+
|
38
|
+
- name: Set up Ruby
|
39
|
+
uses: ruby/setup-ruby@v1
|
40
|
+
with:
|
41
|
+
ruby-version: .ruby-version
|
42
|
+
bundler-cache: true
|
43
|
+
|
44
|
+
- name: Lint code for consistent style
|
45
|
+
run: bundle exec rubocop
|
46
|
+
|
47
|
+
test:
|
48
|
+
runs-on: ubuntu-latest
|
49
|
+
|
50
|
+
strategy:
|
51
|
+
fail-fast: false
|
52
|
+
matrix:
|
53
|
+
ruby-version:
|
54
|
+
- '3.2'
|
55
|
+
- '3.3'
|
56
|
+
- '3.4'
|
57
|
+
|
58
|
+
steps:
|
59
|
+
- name: Checkout code
|
60
|
+
uses: actions/checkout@v4
|
61
|
+
|
62
|
+
- name: Set up Ruby
|
63
|
+
uses: ruby/setup-ruby@v1
|
64
|
+
with:
|
65
|
+
ruby-version: ${{ matrix.ruby-version }}
|
66
|
+
bundler-cache: true
|
67
|
+
|
68
|
+
- name: Run tests
|
69
|
+
run: bundle exec rake spec
|
70
|
+
|
71
|
+
- name: Upload coverage reports
|
72
|
+
uses: codecov/codecov-action@v4
|
73
|
+
if: matrix.ruby-version == '3.3'
|
74
|
+
with:
|
75
|
+
fail_ci_if_error: false
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
AllCops:
|
2
|
+
DisabledByDefault: true
|
3
|
+
TargetRubyVersion: 3.2
|
4
|
+
SuggestExtensions: false
|
5
|
+
Exclude:
|
6
|
+
- 'bin/*'
|
7
|
+
- 'vendor/**/*'
|
8
|
+
- 'tmp/**/*'
|
9
|
+
|
10
|
+
# Style Rules
|
11
|
+
Style/HashSyntax:
|
12
|
+
Enabled: true
|
13
|
+
|
14
|
+
Style/StringLiterals:
|
15
|
+
Enabled: true
|
16
|
+
EnforcedStyle: double_quotes
|
17
|
+
|
18
|
+
Style/StringLiteralsInInterpolation:
|
19
|
+
Enabled: true
|
20
|
+
EnforcedStyle: double_quotes
|
21
|
+
|
22
|
+
Style/MultilineIfThen:
|
23
|
+
Enabled: true
|
24
|
+
|
25
|
+
Style/MethodDefParentheses:
|
26
|
+
Enabled: true
|
27
|
+
|
28
|
+
Style/RedundantReturn:
|
29
|
+
Enabled: true
|
30
|
+
|
31
|
+
Style/RedundantSelf:
|
32
|
+
Enabled: true
|
33
|
+
|
34
|
+
Style/RedundantInterpolation:
|
35
|
+
Enabled: true
|
36
|
+
|
37
|
+
# Layout Rules
|
38
|
+
Layout/LineLength:
|
39
|
+
Enabled: true
|
40
|
+
Max: 120
|
41
|
+
|
42
|
+
Layout/IndentationWidth:
|
43
|
+
Enabled: true
|
44
|
+
|
45
|
+
Layout/IndentationStyle:
|
46
|
+
Enabled: true
|
47
|
+
|
48
|
+
Layout/EmptyLines:
|
49
|
+
Enabled: true
|
50
|
+
|
51
|
+
Layout/TrailingEmptyLines:
|
52
|
+
Enabled: true
|
53
|
+
|
54
|
+
Layout/TrailingWhitespace:
|
55
|
+
Enabled: true
|
56
|
+
|
57
|
+
Layout/SpaceBeforeBlockBraces:
|
58
|
+
Enabled: true
|
59
|
+
|
60
|
+
Layout/SpaceInsideBlockBraces:
|
61
|
+
Enabled: true
|
62
|
+
|
63
|
+
Layout/SpaceInsideHashLiteralBraces:
|
64
|
+
Enabled: true
|
65
|
+
|
66
|
+
Layout/SpaceInsideArrayLiteralBrackets:
|
67
|
+
Enabled: true
|
68
|
+
|
69
|
+
Layout/SpaceInsideParens:
|
70
|
+
Enabled: true
|
71
|
+
|
72
|
+
Layout/SpaceAroundOperators:
|
73
|
+
Enabled: true
|
74
|
+
|
75
|
+
Layout/CaseIndentation:
|
76
|
+
Enabled: true
|
77
|
+
|
78
|
+
Layout/EndAlignment:
|
79
|
+
Enabled: true
|
80
|
+
EnforcedStyleAlignWith: variable
|
81
|
+
|
82
|
+
Layout/ElseAlignment:
|
83
|
+
Enabled: true
|
84
|
+
|
85
|
+
Layout/EmptyLinesAroundClassBody:
|
86
|
+
Enabled: true
|
87
|
+
|
88
|
+
Layout/EmptyLinesAroundModuleBody:
|
89
|
+
Enabled: true
|
90
|
+
|
91
|
+
Layout/EmptyLinesAroundMethodBody:
|
92
|
+
Enabled: true
|
93
|
+
|
94
|
+
Layout/FirstHashElementIndentation:
|
95
|
+
Enabled: true
|
96
|
+
|
97
|
+
Layout/HashAlignment:
|
98
|
+
Enabled: true
|
99
|
+
|
100
|
+
Layout/MultilineMethodCallIndentation:
|
101
|
+
Enabled: true
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.4.5
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,100 @@
|
|
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.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
### Added
|
11
|
+
- Nothing yet
|
12
|
+
|
13
|
+
### Changed
|
14
|
+
- Nothing yet
|
15
|
+
|
16
|
+
### Deprecated
|
17
|
+
- Nothing yet
|
18
|
+
|
19
|
+
### Removed
|
20
|
+
- Nothing yet
|
21
|
+
|
22
|
+
### Fixed
|
23
|
+
- Nothing yet
|
24
|
+
|
25
|
+
### Security
|
26
|
+
- Nothing yet
|
27
|
+
|
28
|
+
## [0.2.0] - 2025-08-01
|
29
|
+
|
30
|
+
### Added
|
31
|
+
- Initial gem structure with professional Ruby gem scaffold
|
32
|
+
- Basic configuration files (RuboCop, RSpec, GitHub Actions)
|
33
|
+
- Development tooling setup
|
34
|
+
- RSpec test framework with SimpleCov coverage reporting
|
35
|
+
- RuboCop linter with custom configuration
|
36
|
+
- GitHub Actions CI for multi-OS and multi-Ruby testing
|
37
|
+
- HTTP client infrastructure (#16, #17, #19)
|
38
|
+
- Faraday as HTTP client with retry middleware
|
39
|
+
- RESTful methods (GET, POST, PUT, DELETE)
|
40
|
+
- Automatic retry for transient failures (429, 503, 504)
|
41
|
+
- Configurable timeout settings
|
42
|
+
- Production/sandbox environment support
|
43
|
+
- Comprehensive error handling framework (#17)
|
44
|
+
- InvalidCredentialsError for authentication failures
|
45
|
+
- SessionExpiredError for expired sessions
|
46
|
+
- TokenRefreshError for refresh failures
|
47
|
+
- NetworkTimeoutError for connection timeouts
|
48
|
+
- Unified error response parsing
|
49
|
+
- Session management with authentication (#1-5)
|
50
|
+
- Basic session class with login/logout
|
51
|
+
- Remember token authentication support
|
52
|
+
- Session expiration tracking and automatic refresh
|
53
|
+
- Secure credential storage using system keyring
|
54
|
+
- Session validation and error handling
|
55
|
+
- Account models and data structures (#20)
|
56
|
+
- Account model with proper data parsing
|
57
|
+
- AccountBalance model with BigDecimal precision for monetary values
|
58
|
+
- CurrentPosition model for position tracking with P&L calculations
|
59
|
+
- Support for options, equities, and futures positions
|
60
|
+
- CLI foundation with interactive mode (#23, #24)
|
61
|
+
- Core CLI structure using Thor
|
62
|
+
- `login` command with --remember and --test flags
|
63
|
+
- `logout` command with session cleanup
|
64
|
+
- `status` command to check session status and expiration
|
65
|
+
- `refresh` command to refresh session using remember token
|
66
|
+
- `accounts` command to list all accounts
|
67
|
+
- `select` command to choose active account
|
68
|
+
- `balance` command with table formatting and --all flag
|
69
|
+
- Interactive menu-driven interface
|
70
|
+
- Vim-style navigation (j/k for up/down, q/ESC to exit)
|
71
|
+
- Number key shortcuts for menu selection
|
72
|
+
- Automatic entry into interactive mode after login
|
73
|
+
- CLI helper utilities
|
74
|
+
- Colored output helpers (error, warning, success, info)
|
75
|
+
- Currency formatting with thousand separators
|
76
|
+
- TTY::Table integration for data display
|
77
|
+
- Pastel color support
|
78
|
+
- Configuration management
|
79
|
+
- YAML-based configuration file (~/.config/tastytrade/config.yml)
|
80
|
+
- Environment persistence (production/sandbox)
|
81
|
+
- Current account selection persistence
|
82
|
+
- Safe config file handling with error recovery
|
83
|
+
- Security features
|
84
|
+
- MIT License
|
85
|
+
- Code of Conduct
|
86
|
+
- Security policy documentation
|
87
|
+
- Keyring integration for secure credential storage
|
88
|
+
|
89
|
+
### Changed
|
90
|
+
- Account.get_balances now returns AccountBalance object instead of raw hash
|
91
|
+
- Account.get_positions now returns array of CurrentPosition objects instead of raw hashes
|
92
|
+
- CLI menus now use consistent vim-style navigation with extracted helper method
|
93
|
+
- Updated release-pr Claude Code command to include ROADMAP.md updates in release process
|
94
|
+
- Removed MFA requirement for RubyGems.org publishing
|
95
|
+
- Updated release-pr command to reflect that rake release auto-creates git tags
|
96
|
+
|
97
|
+
### Fixed
|
98
|
+
- Account data parsing from API response (#25)
|
99
|
+
- "Failed to load current account" error in balance view by implementing account caching
|
100
|
+
- TTY::Table rendering in non-TTY environments with fallback formatting
|
data/CLAUDE.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
# CLAUDE.md
|
2
|
+
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
4
|
+
|
5
|
+
## Common Development Tasks
|
6
|
+
|
7
|
+
### Running Tests
|
8
|
+
```bash
|
9
|
+
bundle exec rake spec # Run all tests
|
10
|
+
bundle exec rspec spec/path # Run specific test file
|
11
|
+
```
|
12
|
+
|
13
|
+
### Code Quality
|
14
|
+
```bash
|
15
|
+
bundle exec rake rubocop # Run linter
|
16
|
+
bundle exec rubocop -a # Auto-fix linting issues
|
17
|
+
```
|
18
|
+
|
19
|
+
### Development Console
|
20
|
+
```bash
|
21
|
+
bin/console # Interactive Ruby console with gem loaded
|
22
|
+
```
|
23
|
+
|
24
|
+
### Building and Installing Locally
|
25
|
+
```bash
|
26
|
+
bundle exec rake build # Build gem to pkg/
|
27
|
+
bundle exec rake install # Install gem locally
|
28
|
+
```
|
29
|
+
|
30
|
+
### Release Process
|
31
|
+
```bash
|
32
|
+
bin/release # Interactive release script
|
33
|
+
# OR manually:
|
34
|
+
# 1. Update version in lib/tastytrade/version.rb
|
35
|
+
# 2. Update CHANGELOG.md
|
36
|
+
# 3. bundle exec rake release
|
37
|
+
```
|
38
|
+
|
39
|
+
## Project Structure
|
40
|
+
|
41
|
+
```
|
42
|
+
tastytrade/
|
43
|
+
├── lib/
|
44
|
+
│ └── tastytrade/ # Main gem code
|
45
|
+
│ └── version.rb # Version constant
|
46
|
+
├── spec/ # RSpec tests
|
47
|
+
├── bin/ # Executable scripts
|
48
|
+
│ ├── console # Development console
|
49
|
+
│ ├── setup # Setup script
|
50
|
+
│ └── release # Release automation
|
51
|
+
├── docs/ # Additional documentation
|
52
|
+
└── .github/workflows/ # CI/CD configuration
|
53
|
+
```
|
54
|
+
|
55
|
+
## Architecture Notes
|
56
|
+
|
57
|
+
This is a Ruby gem scaffold with professional tooling setup:
|
58
|
+
- RSpec for testing with SimpleCov for coverage
|
59
|
+
- RuboCop for code style enforcement
|
60
|
+
- GitHub Actions for multi-OS and multi-Ruby CI
|
61
|
+
- Security policy and contribution guidelines
|
62
|
+
- Professional README with badges and clear sections
|
63
|
+
|
64
|
+
## Key Development Patterns
|
65
|
+
|
66
|
+
1. **Version Management**: Version is defined in `lib/tastytrade/version.rb`
|
67
|
+
2. **Testing**: Mirror directory structure in spec/, use descriptive test names
|
68
|
+
3. **Documentation**: Use YARD format for method documentation
|
69
|
+
4. **Error Handling**: Raise specific error classes, not generic exceptions
|
70
|
+
5. **Dependencies**: Keep runtime dependencies minimal, use development dependencies liberally
|
71
|
+
|
72
|
+
## Gem-Specific Configurations
|
73
|
+
|
74
|
+
- Ruby 3.2.0+ required
|
75
|
+
- RuboCop configured with custom rules in `.rubocop.yml`
|
76
|
+
- RSpec configured in `.rspec` and `spec/spec_helper.rb`
|
77
|
+
- Git-based file inclusion in gemspec
|
78
|
+
- MFA required for RubyGems.org pushes
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
6
|
+
|
7
|
+
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
|
8
|
+
|
9
|
+
## Our Standards
|
10
|
+
|
11
|
+
Examples of behavior that contributes to a positive environment for our community include:
|
12
|
+
|
13
|
+
* Demonstrating empathy and kindness toward other people
|
14
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
15
|
+
* Giving and gracefully accepting constructive feedback
|
16
|
+
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
|
17
|
+
* Focusing on what is best not just for us as individuals, but for the overall community
|
18
|
+
|
19
|
+
Examples of unacceptable behavior include:
|
20
|
+
|
21
|
+
* The use of sexualized language or imagery, and sexual attention or advances of any kind
|
22
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
23
|
+
* Public or private harassment
|
24
|
+
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
25
|
+
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
26
|
+
|
27
|
+
## Enforcement Responsibilities
|
28
|
+
|
29
|
+
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
|
30
|
+
|
31
|
+
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
|
32
|
+
|
33
|
+
## Scope
|
34
|
+
|
35
|
+
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
36
|
+
|
37
|
+
## Enforcement
|
38
|
+
|
39
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at 58859899+ryanhamamura@users.noreply.github.com. All complaints will be reviewed and investigated promptly and fairly.
|
40
|
+
|
41
|
+
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
|
42
|
+
|
43
|
+
## Enforcement Guidelines
|
44
|
+
|
45
|
+
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
|
46
|
+
|
47
|
+
### 1. Correction
|
48
|
+
|
49
|
+
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
|
50
|
+
|
51
|
+
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
|
52
|
+
|
53
|
+
### 2. Warning
|
54
|
+
|
55
|
+
**Community Impact**: A violation through a single incident or series of actions.
|
56
|
+
|
57
|
+
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
58
|
+
|
59
|
+
### 3. Temporary Ban
|
60
|
+
|
61
|
+
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
|
62
|
+
|
63
|
+
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
|
64
|
+
|
65
|
+
### 4. Permanent Ban
|
66
|
+
|
67
|
+
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
|
68
|
+
|
69
|
+
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
70
|
+
|
71
|
+
## Attribution
|
72
|
+
|
73
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
|
74
|
+
available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
75
|
+
|
76
|
+
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
|
77
|
+
|
78
|
+
[homepage]: https://www.contributor-covenant.org
|
79
|
+
|
80
|
+
For answers to common questions about this code of conduct, see the FAQ at
|
81
|
+
https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
|