anonymous_active_record 1.0.8 → 1.0.9
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 +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
|
+
[](https://opensource.org/licenses/MIT)
|
8
|
+
[](https://app.fossa.io/projects/git%2Bgithub.com%2Fpboling%2Fanonymous_active_record?ref=badge_shield)
|
9
|
+
[](https://rubygems.org/gems/anonymous_active_record)
|
10
|
+
[](https://github.com/pboling/anonymous_active_record)
|
11
|
+
[](https://depfu.com/github/pboling/anonymous_active_record?project_id=5614)
|
12
|
+
[![CodeCov][🖇codecov-img♻️]][🖇codecov]
|
13
|
+
[](https://codeclimate.com/github/pboling/anonymous_active_record/test_coverage)
|
14
|
+
[](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 | [](https://www.codetriage.com/pboling/anonymous_active_record) |
|
79
|
+
| expert support | [](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
|
[](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
|