Skip to content

Commit 6d4c605

Browse files
committed
Initial commit
0 parents  commit 6d4c605

38 files changed

Lines changed: 3212 additions & 0 deletions

.github/workflows/ci.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ main, master ]
6+
pull_request:
7+
branches: [ main, master ]
8+
9+
jobs:
10+
test:
11+
runs-on: ubuntu-latest
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
ruby: ['3.1', '3.2', '3.3']
16+
17+
steps:
18+
- uses: actions/checkout@v4
19+
20+
- name: Set up Ruby ${{ matrix.ruby }}
21+
uses: ruby/setup-ruby@v1
22+
with:
23+
ruby-version: ${{ matrix.ruby }}
24+
bundler-cache: true
25+
26+
- name: Run tests
27+
run: bundle exec rspec
28+
29+
- name: Run Rubocop
30+
run: bundle exec rubocop
31+
if: matrix.ruby == '3.3'
32+
33+
- name: Upload coverage
34+
uses: codecov/codecov-action@v3
35+
if: matrix.ruby == '3.3'
36+
with:
37+
files: ./coverage/.resultset.json
38+
flags: unittests
39+
name: codecov-umbrella
40+

.gitignore

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
*.gem
2+
*.rbc
3+
/.config
4+
/coverage/
5+
/InstalledFiles
6+
/pkg/
7+
/spec/reports/
8+
/spec/examples.txt
9+
/test/tmp/
10+
/test/version_tmp/
11+
/tmp/
12+
13+
# Used by dotenv library to load environment variables.
14+
.env
15+
16+
# Documentation cache and generated files:
17+
/.yardoc/
18+
/_yardoc/
19+
/doc/
20+
/rdoc/
21+
22+
# Environment normalization:
23+
/.bundle/
24+
/vendor/bundle
25+
/lib/bundler/man/
26+
27+
# For a library or gem, you might want to ignore these files since the code is
28+
# intended to run in multiple environments; otherwise, check them in:
29+
Gemfile.lock
30+
.ruby-version
31+
.ruby-gemset
32+
33+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34+
.rvmrc
35+
36+
# IDE files
37+
.idea/
38+
.vscode/
39+
*.swp
40+
*.swo
41+
*~
42+

.rspec

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
--require spec_helper
2+
--color
3+
--format documentation
4+

.rubocop.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
AllCops:
2+
TargetRubyVersion: 3.1
3+
NewCops: enable
4+
SuggestExtensions: false
5+
Exclude:
6+
- 'vendor/**/*'
7+
- 'bin/**/*'
8+
- 'tmp/**/*'
9+
10+
Style/Documentation:
11+
Enabled: false
12+
13+
Style/StringLiterals:
14+
Enabled: true
15+
EnforcedStyle: double_quotes
16+
17+
Style/StringLiteralsInInterpolation:
18+
Enabled: true
19+
EnforcedStyle: double_quotes
20+
21+
Layout/LineLength:
22+
Max: 120
23+
24+
Metrics/MethodLength:
25+
Max: 20
26+
27+
Metrics/AbcSize:
28+
Max: 20
29+
Exclude:
30+
- 'lib/fathom/client.rb' # HTTP client needs complex response handling
31+
32+
Metrics/CyclomaticComplexity:
33+
Max: 7
34+
Exclude:
35+
- 'lib/fathom/client.rb' # HTTP client has many response codes to handle
36+
37+
Metrics/ParameterLists:
38+
Max: 5
39+
Exclude:
40+
- 'lib/fathom/client.rb' # Request retry logic needs multiple params
41+
42+
Metrics/ClassLength:
43+
Max: 100
44+
Exclude:
45+
- 'lib/fathom/client.rb' # HTTP client is inherently complex
46+
47+
Metrics/BlockLength:
48+
Exclude:
49+
- 'spec/**/*'
50+
- '*.gemspec'
51+
52+
Style/FrozenStringLiteralComment:
53+
Enabled: true
54+
EnforcedStyle: always
55+
56+
Naming/PredicateMethod:
57+
Exclude:
58+
- 'lib/fathom/resource.rb' # delete is a REST method, not a predicate
59+

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
## [1.0.0] - 2025-10-17
11+
12+
### Added
13+
- Full support for Fathom API v1
14+
- **Meetings API**: List, retrieve, fetch summaries and transcripts
15+
- **Recordings API**: Get summaries and transcripts with async delivery support
16+
- **Teams API**: List teams and manage team members
17+
- **Team Members API**: List and filter team members
18+
- **Webhooks API**: Full CRUD operations (create, list, retrieve, delete)
19+
- Automatic rate limiting with exponential backoff and configurable retries
20+
- Comprehensive error handling with custom error classes
21+
- Built with Ruby's native `Net::HTTP` (no external HTTP dependencies)
22+
- Ruby 3.1+ support with modern syntax (endless methods, shorthand hash, pattern matching)
23+
- Extensive test coverage (125 examples, 94.87% coverage)
24+
- Live API integration test script
25+
- Full RuboCop compliance
26+
27+
### Technical Details
28+
- Authentication via `X-Api-Key` header
29+
- Dynamic attribute access with `method_missing`
30+
- Rate limit tracking and automatic retry logic
31+
- Pagination support with cursor-based navigation
32+
- Proper handling of API response formats
33+

CODE_OF_CONDUCT.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, religion, or sexual identity
10+
and orientation.
11+
12+
## Our Standards
13+
14+
Examples of behavior that contributes to a positive environment for our
15+
community include:
16+
17+
* Demonstrating empathy and kindness toward other people
18+
* Being respectful of differing opinions, viewpoints, and experiences
19+
* Giving and gracefully accepting constructive feedback
20+
* Accepting responsibility and apologizing to those affected by our mistakes,
21+
and learning from the experience
22+
* Focusing on what is best not just for us as individuals, but for the
23+
overall community
24+
25+
## Enforcement
26+
27+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
28+
reported to the community leaders responsible for enforcement.
29+
All complaints will be reviewed and investigated promptly and fairly.
30+
31+
## Attribution
32+
33+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
34+
version 2.0, available at
35+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
36+
37+
[homepage]: https://www.contributor-covenant.org
38+

Gemfile

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
source "https://rubygems.org"
4+
5+
# Specify your gem's dependencies in fathom-ruby.gemspec
6+
gemspec
7+
8+
gem "rake", "~> 13.0"
9+
10+
# Development dependencies
11+
group :development do
12+
gem "irb", "~> 1.0"
13+
gem "openssl"
14+
gem "rdoc", "~> 6.0"
15+
gem "rspec", "~> 3.0"
16+
gem "rubocop", "~> 1.21"
17+
gem "simplecov", "~> 0.22"
18+
gem "webmock", "~> 3.0"
19+
end

LICENSE

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Juan Rodriguez
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
22+

0 commit comments

Comments
 (0)