anonymous_active_record 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +71 -0
- data/CONTRIBUTING.md +60 -0
- data/LICENSE.txt +21 -0
- data/README.md +190 -67
- data/SECURITY.md +14 -0
- data/lib/anonymous_active_record/generator.rb +9 -7
- data/lib/anonymous_active_record/version.rb +3 -1
- data/lib/anonymous_active_record.rb +26 -25
- data.tar.gz.sig +0 -0
- metadata +136 -74
- metadata.gz.sig +0 -0
- data/LICENSE +0 -7
- data/spec/anonymous_active_record_spec.rb +0 -1025
- data/spec/db/database.yml +0 -4
- data/spec/spec_helper.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88f0a087ea06c2f95b0dc073bdc82320be8dff7a3c716dc0032e64b21b95d211
|
4
|
+
data.tar.gz: baec44efc3b5f547f546f586b3ff0b9c6f6e27a05403f4db6caaacff01da9728
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4ba575163b07e62f31cf833aadcc44fd7ed953714aaeef1153aae0c184a927dcafbfafa976c219850b8bafd523e91a2be6308a17cd0d150826621062f57b904
|
7
|
+
data.tar.gz: 44ded816af7df8db18e32d8e793d06702e5ad922c73b5475350e7d9ec049c230d91bdeac38bebe7c0ff29f4802a375334d3db1870db183717333c4dd846dab8d
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file,
|
4
|
+
starting with version 1.0.9.
|
5
|
+
|
6
|
+
The format is based on [Keep a Changelog v1](https://keepachangelog.com/en/1.0.0/),
|
7
|
+
and this project adheres to [Semantic Versioning v2](https://semver.org/spec/v2.0.0.html).
|
8
|
+
|
9
|
+
## [Unreleased]
|
10
|
+
### Added
|
11
|
+
### Changed
|
12
|
+
### Fixed
|
13
|
+
### Removed
|
14
|
+
|
15
|
+
## [1.0.9] 2024.SEP.18
|
16
|
+
COVERAGE: 100.00% -- 82/82 lines in 4 files
|
17
|
+
BRANCH COVERAGE: 94.44% -- 17/18 branches in 4 files
|
18
|
+
59.09% documented
|
19
|
+
### Added
|
20
|
+
- 100% test coverage
|
21
|
+
- Expanded CI test matrix to cover all supported & unsupported Rubies
|
22
|
+
- Ruby 2.4
|
23
|
+
- Ruby 2.5
|
24
|
+
- Ruby 2.6
|
25
|
+
- Ruby 2.7
|
26
|
+
- Ruby 3.0
|
27
|
+
- Ruby 3.1
|
28
|
+
- Ruby 3.2
|
29
|
+
- Ruby 3.3
|
30
|
+
- ruby-head
|
31
|
+
- truffleruby-head
|
32
|
+
- Improved Documentation
|
33
|
+
- `kettle-soup-cover` for test coverage enforcement
|
34
|
+
- `kettle-soup-cover` for test coverage enforcement
|
35
|
+
- `bin/checksums` for release checksums
|
36
|
+
- Checksums for release
|
37
|
+
- SHA-256
|
38
|
+
- SHA-512
|
39
|
+
- Signed releases
|
40
|
+
- Add CHANGELOG.md
|
41
|
+
- Add SECURITY.md (Security policy)
|
42
|
+
|
43
|
+
## [1.0.8] 2021.FEB.14
|
44
|
+
|
45
|
+
## [1.0.7] 2021.FEB.13
|
46
|
+
|
47
|
+
## [1.0.6] 2021.FEB.13
|
48
|
+
|
49
|
+
## [1.0.5] 2021.FEB.13
|
50
|
+
|
51
|
+
## [1.0.4] 2019.JUN.11
|
52
|
+
|
53
|
+
## [1.0.3] 2019.JUN.11
|
54
|
+
|
55
|
+
## [1.0.2] 2019.JUN.11
|
56
|
+
|
57
|
+
## [1.0.1] 2019.MAY.10
|
58
|
+
|
59
|
+
## [1.0.0] 2018.NOV.29
|
60
|
+
|
61
|
+
## [0.1.5] yanked
|
62
|
+
|
63
|
+
## [0.1.4] 2018.NOV.29
|
64
|
+
|
65
|
+
## [0.1.3] 2018.NOV.28
|
66
|
+
|
67
|
+
## [0.1.2] 2018.SEP.10
|
68
|
+
|
69
|
+
## [0.1.1] 2018.SEP.09
|
70
|
+
|
71
|
+
## [0.1.0] 2018.JAN.04
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
## Contributing
|
2
|
+
|
3
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/pboling/anonymous_active_record][🚎src-main].
|
4
|
+
This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
|
5
|
+
the [code of conduct][🤝conduct].
|
6
|
+
|
7
|
+
To submit a patch, please fork the project and create a patch with tests. Once you're happy with it send a pull request.
|
8
|
+
|
9
|
+
## Development
|
10
|
+
|
11
|
+
After checking out the repo, run `bin/setup` to install dependencies.
|
12
|
+
Then, run `bin/rake` to run the default rake tasks, which include specs.
|
13
|
+
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
14
|
+
|
15
|
+
## Release
|
16
|
+
|
17
|
+
### One-time, Per-developer, Setup
|
18
|
+
|
19
|
+
**IMPORTANT**: Your public key for signing gems will need to be picked up by the line in the
|
20
|
+
`gemspec` defining the `spec.cert_chain` (check the relevant ENV variables there),
|
21
|
+
in order to sign the new release.
|
22
|
+
See: [RubyGems Security Guide][🔒️rubygems-security-guide]
|
23
|
+
|
24
|
+
### To release a new version:
|
25
|
+
|
26
|
+
1. Run `bin/setup && bin/rake` as a tests, coverage, & linting sanity check
|
27
|
+
2. Update the version number in `version.rb`
|
28
|
+
3. Run `bin/setup && bin/rake` again as a secondary check, and to update `Gemfile.lock`
|
29
|
+
4. Run `git commit -am "🔖 Prepare release v<VERSION>"` to commit the changes
|
30
|
+
5. Run `git push` to trigger the final CI pipeline before release, & merge PRs
|
31
|
+
- NOTE: Remember to [check the build][🧪build]!
|
32
|
+
6. Run `export GIT_TRUNK_BRANCH_NAME="$(git remote show origin | grep 'HEAD branch' | cut -d ' ' -f5)" && echo $GIT_TRUNK_BRANCH_NAME`
|
33
|
+
7. Run `git checkout $GIT_TRUNK_BRANCH_NAME`
|
34
|
+
8. Run `git pull origin $GIT_TRUNK_BRANCH_NAME` to ensure you will release the latest trunk code
|
35
|
+
9. Set `SOURCE_DATE_EPOCH` so `rake build` and `rake release` use same timestamp, and generate same checksums
|
36
|
+
- Run `export SOURCE_DATE_EPOCH=$EPOCHSECONDS && echo $SOURCE_DATE_EPOCH`
|
37
|
+
- If the echo above has no output, then it didn't work.
|
38
|
+
- Note that you'll need the `zsh/datetime` module, if running `zsh`.
|
39
|
+
- In `bash` you can use `date +%s` instead, i.e. `export SOURCE_DATE_EPOCH=$(date +%s) && echo $SOURCE_DATE_EPOCH`
|
40
|
+
10. Run `bundle exec rake build`
|
41
|
+
11. Run `bin/checksums` (more [context][🔒️rubygems-checksums-pr]) to create SHA-256 and SHA-512 checksums
|
42
|
+
- Checksums will be committed automatically by the script, but not pushed
|
43
|
+
12. Run `bundle exec rake release` which will create a git tag for the version,
|
44
|
+
push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems]
|
45
|
+
|
46
|
+
## Contributors
|
47
|
+
|
48
|
+
[![Contributors][🖐contributors-img]][🖐contributors]
|
49
|
+
|
50
|
+
Made with [contributors-img][🖐contrib-rocks].
|
51
|
+
|
52
|
+
[🧪build]: https://github.com/pboling/anonymous_active_record/actions
|
53
|
+
[🤝conduct]: https://github.com/pboling/anonymous_active_record/blob/main/CODE_OF_CONDUCT.md
|
54
|
+
[🖐contrib-rocks]: https://contrib.rocks
|
55
|
+
[🖐contributors]: https://github.com/pboling/anonymous_active_record/graphs/contributors
|
56
|
+
[🖐contributors-img]: https://contrib.rocks/image?repo=pboling/anonymous_active_record
|
57
|
+
[💎rubygems]: https://rubygems.org
|
58
|
+
[🔒️rubygems-security-guide]: https://guides.rubygems.org/security/#building-gems
|
59
|
+
[🔒️rubygems-checksums-pr]: https://github.com/rubygems/guides/pull/325
|
60
|
+
[🚎src-main]: https://github.com/pboling/anonymous_active_record
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2017 - 2022, 2024 Peter H. Boling, http://railsbling.com
|
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.
|
data/README.md
CHANGED
@@ -1,52 +1,127 @@
|
|
1
1
|
# AnonymousActiveRecord
|
2
2
|
|
3
|
+
<div id="badges">
|
4
|
+
|
5
|
+
<div align="center">
|
6
|
+
|
7
|
+
[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT)
|
8
|
+
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fpboling%2Fanonymous_active_record.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fpboling%2Fanonymous_active_record?ref=badge_shield)
|
9
|
+
[![Version](https://img.shields.io/gem/v/anonymous_active_record.svg)](https://rubygems.org/gems/anonymous_active_record)
|
10
|
+
[![Downloads Today](https://img.shields.io/gem/rd/anonymous_active_record.svg)](https://github.com/pboling/anonymous_active_record)
|
11
|
+
[![Depfu](https://badges.depfu.com/badges/272ce0df3bc6df5cbea9354e2c3b65af/overview.svg)](https://depfu.com/github/pboling/anonymous_active_record?project_id=5614)
|
12
|
+
[![CodeCov][🖇codecov-img♻️]][🖇codecov]
|
13
|
+
[![Test Coverage](https://api.codeclimate.com/v1/badges/fe504d4ab2fb77cecf7d/test_coverage)](https://codeclimate.com/github/pboling/anonymous_active_record/test_coverage)
|
14
|
+
[![Maintainability](https://api.codeclimate.com/v1/badges/fe504d4ab2fb77cecf7d/maintainability)](https://codeclimate.com/github/pboling/anonymous_active_record/maintainability)
|
15
|
+
[![CI Supported Build][🚎s-wfi]][🚎s-wf]
|
16
|
+
[![CI Unsupported Build][🚎us-wfi]][🚎us-wf]
|
17
|
+
[![CI Style Build][🚎st-wfi]][🚎st-wf]
|
18
|
+
[![CI Coverage Build][🚎cov-wfi]][🚎cov-wf]
|
19
|
+
[![CI Heads Build][🚎hd-wfi]][🚎hd-wf]
|
20
|
+
[![CI Ancient Build][🚎an-wfi]][🚎an-wf]
|
21
|
+
[![CI Dead Build][🚎ded-wfi]][🚎ded-wf]
|
22
|
+
|
23
|
+
[🖇codecov-img♻️]: https://codecov.io/gh/pboling/anonymous_active_record/graph/badge.svg?token=FLAk5BEAkv
|
24
|
+
[🖇codecov]: https://codecov.io/gh/pboling/anonymous_active_record
|
25
|
+
[🚎s-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/supported.yml
|
26
|
+
[🚎s-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/supported.yml/badge.svg
|
27
|
+
[🚎us-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/unsupported.yml
|
28
|
+
[🚎us-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/unsupported.yml/badge.svg
|
29
|
+
[🚎st-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/style.yml
|
30
|
+
[🚎st-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/style.yml/badge.svg
|
31
|
+
[🚎cov-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/coverage.yml
|
32
|
+
[🚎cov-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/coverage.yml/badge.svg
|
33
|
+
[🚎hd-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/heads.yml
|
34
|
+
[🚎hd-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/heads.yml/badge.svg
|
35
|
+
[🚎an-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/ancient.yml
|
36
|
+
[🚎an-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/ancient.yml/badge.svg
|
37
|
+
[🚎ded-wf]: https://github.com/pboling/anonymous_active_record/actions/workflows/dead.yml
|
38
|
+
[🚎ded-wfi]: https://github.com/pboling/anonymous_active_record/actions/workflows/dead.yml/badge.svg
|
39
|
+
|
40
|
+
</div>
|
41
|
+
|
42
|
+
-----
|
43
|
+
|
44
|
+
<div align="center">
|
45
|
+
|
46
|
+
[![Liberapay Patrons][⛳liberapay-img]][⛳liberapay]
|
47
|
+
[![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
|
48
|
+
[![Polar Shield][🖇polar-img]][🖇polar]
|
49
|
+
[![Donate to my FLOSS or refugee efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
50
|
+
[![Donate to my FLOSS or refugee efforts using Patreon][🖇patreon-img]][🖇patreon]
|
51
|
+
|
52
|
+
[⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
|
53
|
+
[⛳liberapay]: https://liberapay.com/pboling/donate
|
54
|
+
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
55
|
+
[🖇sponsor]: https://github.com/sponsors/pboling
|
56
|
+
[🖇polar-img]: https://polar.sh/embed/seeks-funding-shield.svg?org=pboling
|
57
|
+
[🖇polar]: https://polar.sh/pboling
|
58
|
+
[🖇kofi-img]: https://img.shields.io/badge/buy%20me%20coffee-donate-yellow.svg
|
59
|
+
[🖇kofi]: https://ko-fi.com/O5O86SNP4
|
60
|
+
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-yellow.svg
|
61
|
+
[🖇patreon]: https://patreon.com/galtzo
|
62
|
+
|
63
|
+
<span class="badge-buymealatte">
|
64
|
+
<a href="https://www.buymeacoffee.com/pboling"><img src="https://img.buymeacoffee.com/button-api/?text=Buy me a latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff" /></a>
|
65
|
+
</span>
|
66
|
+
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
|
3
70
|
This library was 🎩 inspired by 🎩, the [Wolverine project](https://github.com/mcary/wolverine), which [implemented a clever workaround](https://github.com/mcary/wolverine/commit/fa27fa2cc485b2fa83d71b2045ba5a0a069dba75) to the official non-support of [anonymous classes by ActiveRecord](https://github.com/rails/rails/issues/8934).
|
4
71
|
|
5
72
|
Warning: Use of this gem is a **security risk**, due to the use of Ruby's `eval`. It is intended for use in a test suite, or other non-critical environment.
|
6
73
|
|
7
|
-
| Project
|
8
|
-
|
9
|
-
| gem name
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
74
|
+
| Project | AnonymousActiveRecord |
|
75
|
+
|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
76
|
+
| gem name | [anonymous_active_record](https://rubygems.org/gems/anonymous_active_record) |
|
77
|
+
| documentation | [on Github.com][homepage], [on RDoc.info][documentation], [![on Railsbling.com][🚎blog-img]][🚎blog] |
|
78
|
+
| code triage | [![Open Source Helpers](https://www.codetriage.com/pboling/anonymous_active_record/badges/users.svg)](https://www.codetriage.com/pboling/anonymous_active_record) |
|
79
|
+
| expert support | [![Get help on Codementor](https://cdn.codementor.io/badges/get_help_github.svg)](https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github) |
|
80
|
+
| `...` 💖 | [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay] [![Sponsor Me][🖇sponsor-img]][🖇sponsor] [![Follow Me on LinkedIn][🖇linkedin-img]][🖇linkedin] [![Find Me on WellFound:][✌️wellfound-img]][✌️wellfound] [![Find Me on CrunchBase][💲crunchbase-img]][💲crunchbase] [![My LinkTree][🌳linktree-img]][🌳linktree] [![Follow Me on Ruby.Social][🐘ruby-mast-img]][🐘ruby-mast] [![Tweet @ Peter][🐦tweet-img]][🐦tweet] [💻][coderme] [🌏][aboutme] |
|
81
|
+
|
82
|
+
<!-- 7️⃣ spread 💖 -->
|
83
|
+
[🐦tweet-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow%20%40galtzo
|
84
|
+
[🐦tweet]: http://twitter.com/galtzo
|
85
|
+
[🚎blog]: http://www.railsbling.com/tags/anonymous_active_record/
|
86
|
+
[🚎blog-img]: https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat
|
87
|
+
[🖇linkedin]: http://www.linkedin.com/in/peterboling
|
88
|
+
[🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-blue?style=plastic&logo=linkedin
|
89
|
+
[✌️wellfound]: https://angel.co/u/peter-boling
|
90
|
+
[✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=plastic&logo=wellfound
|
91
|
+
[💲crunchbase]: https://www.crunchbase.com/person/peter-boling
|
92
|
+
[💲crunchbase-img]: https://img.shields.io/badge/peter--boling-purple?style=plastic&logo=crunchbase
|
93
|
+
[🐘ruby-mast]: https://ruby.social/@galtzo
|
94
|
+
[🐘ruby-mast-img]: https://img.shields.io/mastodon/follow/109447111526622197?domain=https%3A%2F%2Fruby.social&style=plastic&logo=mastodon&label=Ruby%20%40galtzo
|
95
|
+
[🌳linktree]: https://linktr.ee/galtzo
|
96
|
+
[🌳linktree-img]: https://img.shields.io/badge/galtzo-purple?style=plastic&logo=linktree
|
97
|
+
|
98
|
+
<!-- Maintainer Contact Links -->
|
99
|
+
[aboutme]: https://about.me/peter.boling
|
100
|
+
[coderme]: https://coderwall.com/Peter%20Boling
|
22
101
|
|
23
102
|
## Installation
|
24
103
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
gem 'anonymous_active_record'
|
29
|
-
```
|
104
|
+
Install the gem and add to the application's Gemfile by executing,
|
105
|
+
adding the `--group test` on the end if you will only use it for testing
|
106
|
+
(which is the only way it should be used):
|
30
107
|
|
31
|
-
|
108
|
+
$ bundle add anonymous_active_record --group test
|
32
109
|
|
33
|
-
|
34
|
-
|
35
|
-
Or install it yourself as:
|
110
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
36
111
|
|
37
112
|
$ gem install anonymous_active_record
|
38
113
|
|
39
114
|
## Compatibility
|
40
115
|
|
41
|
-
This gem is compatible with, as of
|
42
|
-
• Ruby 2.4, 2.5, 2.6, 2.7, 3.0, ruby-head
|
116
|
+
This gem is compatible with, as of Sep 2024:
|
117
|
+
• Ruby 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, ruby-head, truffleruby-head
|
43
118
|
|
44
119
|
## Usage
|
45
120
|
|
46
121
|
Require the library in your `spec_helper` or other test suite boot file.
|
47
122
|
|
48
123
|
```ruby
|
49
|
-
require
|
124
|
+
require "anonymous_active_record"
|
50
125
|
```
|
51
126
|
|
52
127
|
Let's say you want to write specs for a module, `HasBalloon`, which provides a method `has_balloon?`, and will be mixed into ActiveRecord classes.
|
@@ -54,7 +129,7 @@ Let's say you want to write specs for a module, `HasBalloon`, which provides a m
|
|
54
129
|
```ruby
|
55
130
|
module HasBalloon
|
56
131
|
def has_balloon?
|
57
|
-
name ==
|
132
|
+
name == "Spot" # only Spot has a balloon
|
58
133
|
end
|
59
134
|
end
|
60
135
|
```
|
@@ -71,7 +146,7 @@ let(:ar_with_balloon) do
|
|
71
146
|
"#{b_f}#{name}#{b_f}"
|
72
147
|
end
|
73
148
|
def b_f
|
74
|
-
has_balloon? ?
|
149
|
+
has_balloon? ? "🎈" : "🌸"
|
75
150
|
end
|
76
151
|
end
|
77
152
|
end
|
@@ -81,19 +156,19 @@ So do this instead:
|
|
81
156
|
|
82
157
|
```ruby
|
83
158
|
let(:ar_with_balloon) do
|
84
|
-
AnonymousActiveRecord.generate(columns: [
|
159
|
+
AnonymousActiveRecord.generate(columns: ["name"]) do
|
85
160
|
include HasBalloon
|
86
161
|
def flowery_name
|
87
162
|
"#{b_f}#{name}#{b_f}"
|
88
163
|
end
|
89
164
|
def b_f
|
90
|
-
has_balloon? ?
|
165
|
+
has_balloon? ? "🎈" : "🌸"
|
91
166
|
end
|
92
167
|
end
|
93
168
|
end
|
94
|
-
it
|
95
|
-
expect(ar_with_balloon.new(name:
|
96
|
-
expect(ar_with_balloon.new(name:
|
169
|
+
it "can test the module" do
|
170
|
+
expect(ar_with_balloon.new(name: "Spot").flowery_name).to(eq("🎈Spot🎈"))
|
171
|
+
expect(ar_with_balloon.new(name: "Not Spot").flowery_name).to(eq("🌸Not Spot🌸"))
|
97
172
|
end
|
98
173
|
```
|
99
174
|
|
@@ -101,23 +176,23 @@ end
|
|
101
176
|
|
102
177
|
```ruby
|
103
178
|
AnonymousActiveRecord.generate(
|
104
|
-
table_name:
|
179
|
+
table_name: "a_table_name",
|
105
180
|
# if table_name is not set klass_basename will be used to derive a unique random table_name
|
106
181
|
# default is a unique random table name
|
107
|
-
klass_basename:
|
108
|
-
columns: [
|
182
|
+
klass_basename: "anons", # is default
|
183
|
+
columns: ["name"],
|
109
184
|
# columns default is [],
|
110
185
|
# meaning class will have ['id', 'created_at', 'updated_at'], as the AR defaults
|
111
186
|
# Optionally provide an array of hashes and thereby designate column type:
|
112
187
|
# [{name: 'name', type: 'string'}, {name: 'baked_at', type: 'time'}]
|
113
188
|
timestamps: true, # is default
|
114
|
-
indexes: [{
|
189
|
+
indexes: [{columns: ["name"], unique: true}],
|
115
190
|
# indexes default is [],
|
116
191
|
# meaning class will have no indexes, as the AR defaults
|
117
192
|
# Optionally provide an array of hashes of index options (similar to those used in Rails migrations):
|
118
193
|
# [{columns: ['name'], unique: true}, {columns: ['baked_at']}]
|
119
|
-
connection_params: {
|
120
|
-
|
194
|
+
connection_params: {adapter: "sqlite3", encoding: "utf8", database: ":memory:"}, # is default
|
195
|
+
) do
|
121
196
|
# code which becomes part of the class definition
|
122
197
|
end
|
123
198
|
```
|
@@ -128,10 +203,10 @@ The block is optional.
|
|
128
203
|
|
129
204
|
```ruby
|
130
205
|
AnonymousActiveRecord.factory(
|
131
|
-
source_data: [{
|
206
|
+
source_data: [{name: "Phil"}, {name: "Vickie"}],
|
132
207
|
# Array of hashes, where each hash represents a record that will be created
|
133
208
|
# ... The rest of the options are the same as for generate, see above.
|
134
|
-
|
209
|
+
) do
|
135
210
|
# same as for generate, see above.
|
136
211
|
end
|
137
212
|
```
|
@@ -140,51 +215,99 @@ The block is optional.
|
|
140
215
|
|
141
216
|
There is also a `factory!` method that will raise if the create fails, accomplished by calling `create!` instead of `create`.
|
142
217
|
|
143
|
-
##
|
218
|
+
## 🤝 Contributing
|
219
|
+
|
220
|
+
See [CONTRIBUTING.md][🤝contributing]
|
221
|
+
|
222
|
+
[🤝contributing]: CONTRIBUTING.md
|
223
|
+
|
224
|
+
### Code Coverage
|
225
|
+
|
226
|
+
If you need some ideas of where to help, you could work on adding more code coverage.
|
227
|
+
|
228
|
+
[![Coverage Graph][🔑codecov-g]][🖇codecov]
|
144
229
|
|
145
|
-
|
230
|
+
[🔑codecov-g]: https://codecov.io/gh/pboling/anonymous_active_record/graphs/tree.svg?token=FLAk5BEAkv
|
146
231
|
|
147
|
-
|
232
|
+
## 🌈 Contributors
|
148
233
|
|
149
|
-
|
234
|
+
[![Contributors][🖐contributors-img]][🖐contributors]
|
150
235
|
|
151
|
-
|
236
|
+
Made with [contributors-img][🖐contrib-rocks].
|
152
237
|
|
153
|
-
|
238
|
+
[🖐contrib-rocks]: https://contrib.rocks
|
239
|
+
[🖐contributors]: https://github.com/pboling/anonymous_active_record/graphs/contributors
|
240
|
+
[🖐contributors-img]: https://contrib.rocks/image?repo=pboling/anonymous_active_record
|
154
241
|
|
155
|
-
|
242
|
+
## Star History
|
156
243
|
|
157
|
-
|
244
|
+
<a href="https://star-history.com/#pboling/anonymous_active_record&Date">
|
245
|
+
<picture>
|
246
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=pboling/anonymous_active_record&type=Date&theme=dark" />
|
247
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=pboling/anonymous_active_record&type=Date" />
|
248
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=pboling/anonymous_active_record&type=Date" />
|
249
|
+
</picture>
|
250
|
+
</a>
|
158
251
|
|
159
|
-
|
160
|
-
Violations of this scheme should be reported as bugs. Specifically,
|
161
|
-
if a minor or patch version is released that breaks backward
|
162
|
-
compatibility, a new version should be immediately released that
|
163
|
-
restores compatibility. Breaking changes to the public API will
|
164
|
-
only be introduced with new major versions.
|
252
|
+
## 🪇 Code of Conduct
|
165
253
|
|
166
|
-
|
167
|
-
|
254
|
+
Everyone interacting in this project's codebases, issue trackers,
|
255
|
+
chat rooms and mailing lists is expected to follow the [code of conduct][🪇conduct].
|
256
|
+
|
257
|
+
[🪇conduct]: CODE_OF_CONDUCT.md
|
258
|
+
|
259
|
+
## 📌 Versioning
|
260
|
+
|
261
|
+
This Library adheres to [Semantic Versioning 2.0.0][📌semver].
|
262
|
+
Violations of this scheme should be reported as bugs.
|
263
|
+
Specifically, if a minor or patch version is released that breaks backward compatibility,
|
264
|
+
a new version should be immediately released that restores compatibility.
|
265
|
+
Breaking changes to the public API will only be introduced with new major versions.
|
266
|
+
|
267
|
+
To get a better understanding of how SemVer is intended to work over a project's lifetime,
|
268
|
+
read this article from the creator of SemVer:
|
269
|
+
|
270
|
+
- ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
|
271
|
+
|
272
|
+
As a result of this policy, you can (and should) specify a dependency on these libraries using
|
273
|
+
the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
|
168
274
|
|
169
275
|
For example:
|
170
276
|
|
171
277
|
```ruby
|
172
|
-
spec.add_dependency
|
278
|
+
spec.add_dependency("anonymous_active_record", "~> 1.0")
|
173
279
|
```
|
174
280
|
|
175
|
-
|
281
|
+
See [CHANGELOG.md][📌changelog] for list of releases.
|
176
282
|
|
177
|
-
|
283
|
+
[comment]: <> ( 📌 VERSIONING LINKS )
|
178
284
|
|
179
|
-
[
|
285
|
+
[📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
|
286
|
+
[📌semver]: http://semver.org/
|
287
|
+
[📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
|
288
|
+
[📌changelog]: CHANGELOG.md
|
289
|
+
|
290
|
+
## 📄 License
|
291
|
+
|
292
|
+
The gem is available as open source under the terms of
|
293
|
+
the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
|
294
|
+
See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
|
180
295
|
|
181
296
|
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fpboling%2Fanonymous_active_record.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fpboling%2Fanonymous_active_record?ref=badge_large)
|
182
297
|
|
183
|
-
[
|
184
|
-
|
185
|
-
[
|
298
|
+
[comment]: <> ( 📄 LEGAL LINKS )
|
299
|
+
|
300
|
+
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
301
|
+
[📄license]: LICENSE.txt
|
302
|
+
[📄license-ref]: https://opensource.org/licenses/MIT
|
303
|
+
[📄license-img]: https://img.shields.io/badge/License-MIT-green.svg
|
304
|
+
|
305
|
+
### © Copyright
|
306
|
+
|
307
|
+
* Copyright (c) 2017 - 2022, 2024 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
|
308
|
+
|
186
309
|
[railsbling]: http://www.railsbling.com
|
187
310
|
[peterboling]: http://www.peterboling.com
|
311
|
+
[bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
188
312
|
[documentation]: http://rdoc.info/github/pboling/anonymous_active_record/frames
|
189
|
-
[homepage]: https://github.com/pboling/anonymous_active_record
|
190
|
-
[blogpage]: http://www.railsbling.com/tags/anonymous_active_record/
|
313
|
+
[homepage]: https://github.com/pboling/anonymous_active_record
|
data/SECURITY.md
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Security Policy
|
2
|
+
|
3
|
+
## Supported Versions
|
4
|
+
|
5
|
+
| Version | Supported |
|
6
|
+
|---------|-----------|
|
7
|
+
| 1.x | ✅ |
|
8
|
+
| 0.x | ❌ |
|
9
|
+
|
10
|
+
## Reporting a Vulnerability
|
11
|
+
|
12
|
+
Peter Boling is the primary maintainer of this gem. Please find a way
|
13
|
+
to [contact him directly](https://railsbling.com/contact) to report the issue. Include as much relevant information as
|
14
|
+
possible.
|
@@ -14,17 +14,19 @@
|
|
14
14
|
module AnonymousActiveRecord
|
15
15
|
# Generator defines a pseudo anonymous class in a particular namespace of your choosing.
|
16
16
|
class Generator
|
17
|
-
DEFAULT_NAME =
|
17
|
+
DEFAULT_NAME = "anons"
|
18
18
|
|
19
19
|
attr_reader :klass_namespaces, :table_name, :klass_name, :parent_klass
|
20
20
|
|
21
|
-
def initialize(table_name, klass_namespaces = [], klass_basename = nil, parent_klass =
|
22
|
-
@klass_namespaces = Array(klass_namespaces).map(&:to_s).map { |x| x.gsub(/[^a-z0-9]+/i,
|
23
|
-
klass_context = [
|
24
|
-
|
21
|
+
def initialize(table_name, klass_namespaces = [], klass_basename = nil, parent_klass = "ActiveRecord::Base")
|
22
|
+
@klass_namespaces = Array(klass_namespaces).map(&:to_s).map { |x| x.gsub(/[^a-z0-9]+/i, "_") }
|
23
|
+
klass_context = [
|
24
|
+
(klass_basename || DEFAULT_NAME).gsub(/[^a-z0-9]+/i, "_").capitalize,
|
25
|
+
SecureRandom.uuid.gsub(/[^a-z0-9]+/i, "_"),
|
26
|
+
].join("_")
|
25
27
|
@table_name = (table_name || klass_context).downcase.to_s
|
26
28
|
# String#capitalize is Ruby >= 2.4, https://stackoverflow.com/a/3725154/213191
|
27
|
-
@klass_name = (klass_namespaces << klass_context).join(
|
29
|
+
@klass_name = (klass_namespaces << klass_context).join("::")
|
28
30
|
@parent_klass = parent_klass
|
29
31
|
end
|
30
32
|
|
@@ -33,7 +35,7 @@ module AnonymousActiveRecord
|
|
33
35
|
# Class.new(ActiveRecord::Base)
|
34
36
|
# which was useful for specs, and other use cases. But it is now explicitly not supported, see
|
35
37
|
# https://github.com/rails/rails/issues/8934
|
36
|
-
eval
|
38
|
+
eval("class ::#{klass_name} < #{parent_klass}; end")
|
37
39
|
klass = Kernel.const_get(klass_name, true)
|
38
40
|
klass.class_eval(&block) if block
|
39
41
|
klass.table_name = table_name
|