with_record 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a85bfdc493cc49684f10c49e2a8ada346bc89525db6e022f2ac194732befd4a0
4
- data.tar.gz: ed31f21b9a16b84bb4b97bfc911663b00d5d12bd818e5ea1946241075f4f99d6
3
+ metadata.gz: 44c03e0867828bf1a25fd554d3890846f04b11dfe7a09dafd77af6442e243ceb
4
+ data.tar.gz: bc5bb9ae0132ea0da8d352fde7fa4828685f6caaa84611269f7688f1bf23df8a
5
5
  SHA512:
6
- metadata.gz: 12068099c10ee390ee8db671cc253b1b85c6c3c75a88a9fe67befdb3db7433af8fbdefc65a0a3b512f570a9d2987b1e01fe58327df99e5069b8764c42ed4bfab
7
- data.tar.gz: 7902e50a4cd12cdfb1467adf64b80c9c4b9e3c24ef8754ed5eaf14b2c8fe579533f61d63524ff8d4dd11f26d7ec8cd10e9f8cc9f787438a9e6baab87a0cb79ea
6
+ metadata.gz: 40f932d4c3ffa854adea095f6584488ea1e56a9c971cf95a03dd8c5d8b48c87783f19f4cdab4eb5ed7219b905ca421eddcf668999a3934e4d93df079aa65634f
7
+ data.tar.gz: 78e709238a2be3939aa156e11f168ed5d670b39a4eb8ea4f6123ed77df8e7a0c35450f2190a952b6204121a89b30526fdd6464e3d12ff13340648f4d606ac34b
data/README.md CHANGED
@@ -1,8 +1,70 @@
1
- # WithRecord
2
- Short description and motivation.
1
+ # with_record
2
+
3
+ [![RailsJazz](https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/my_other.svg?raw=true)](https://www.railsjazz.com)
4
+ [![https://www.patreon.com/igorkasyanchuk](https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/patron.svg?raw=true)](https://www.patreon.com/igorkasyanchuk)
5
+
6
+ This gem could DRY your code and return association/relation with additioanl records. Could be used in case you have form with soft-deleted value.
7
+
8
+ **The example of problem:**
9
+
10
+ You have 2 models: User and Project. User has many projects. Project belongs to "assignee" (or author).
11
+
12
+ Let's say you have "soft-delete" (for example using paranoia" gem) and deleted user. Same time, all projects are still available (you just have such logic).
13
+
14
+ Now you want to edit the project. And in the form you have a dropdown with all active users. In this case list will be blank (because user was deleted).
15
+
16
+ So usually you need to do something like:
17
+
18
+ ```slim
19
+ # just an example with problem (!!!)
20
+ = f.input :assignee_id, as: :select, collection: User.all + [User.unscoped.find_by(id: f.object.assineed_id)]
21
+ ```
22
+
23
+ But now you can do the following:
24
+ ```slim
25
+ # just an example with solution
26
+ = f.input :assignee_id, as: :select, collection: User.all.with_record(f.object.assineed_id)
27
+ ```
28
+
29
+ And as a bonus you can also call scopes for example:
30
+
31
+ ```ruby
32
+ User.all.with_record(f.object.assineed_id).ordered` # to return by first_name
33
+ ```
34
+
35
+ Or
36
+
37
+ ```ruby
38
+ @project.users.with_record(42).ordered # to include user by ID
39
+ @project.users.with_records(42, 43, 44).ordered # to include user by ID's
40
+ ```
3
41
 
4
42
  ## Usage
5
- How to use my plugin.
43
+
44
+ This gem is adding two methods to ActiveRecord Relations and Associations - `with_record(...)` and `with_records(...)`.
45
+
46
+ You can do the following:
47
+
48
+ ```ruby
49
+ u1 = User.create(name: 'John')
50
+ u2 = User.create(name: 'Bob')
51
+
52
+ p1 = u1.projects.create(name: 'apple')
53
+ p2 = u2.projects.create(name: 'google')
54
+ p3 = u2.projects.create(name: 'amazon')
55
+
56
+ assert_equal u1.projects.with_record(p2), [p1, p2]
57
+ assert_equal u1.projects.with_records(p2, p3), [p1, p2, p3]
58
+ assert_equal u1.projects.with_records([p2, p3]), [p1, p2, p3]
59
+
60
+ assert_equal Project.where(id: p1.id).with_record(p2), [p1, p2]
61
+ assert_equal Project.where(id: p1.id).with_records(p2, p3), [p1, p2, p3]
62
+ assert_equal Project.where(id: p1.id).with_records([p2, p3]), [p1, p2, p3]
63
+
64
+ assert_equal Project.where(id: p1.id).with_record(nil), [p1]
65
+ assert_equal Project.where(id: p1.id).with_records(nil), [p1]
66
+ ```
67
+
6
68
 
7
69
  ## Installation
8
70
  Add this line to your application's Gemfile:
@@ -21,8 +83,22 @@ Or install it yourself as:
21
83
  $ gem install with_record
22
84
  ```
23
85
 
86
+ ## How it works and limitations
87
+
88
+ - it's adding 2 methods to AR Relations and Associations.
89
+ - it's executing original scope, returning and ID's (or other PK values), then adding a new ID into it and returning a new releation
90
+ - joins, includes, ... before call `.with_record` won't be returned in final scope
91
+
24
92
  ## Contributing
25
- Contribution directions go here.
93
+
94
+ You are welcome to contribute.
26
95
 
27
96
  ## License
97
+
28
98
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
99
+
100
+ [<img src="https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/more_gems.png?raw=true"
101
+ />](https://www.railsjazz.com/)
102
+
103
+ [<img src="https://github.com/igorkasyanchuk/rails_time_travel/blob/main/docs/more_gems.png?raw=true"
104
+ />](https://www.railsjazz.com/?utm_source=github&utm_medium=bottom&utm_campaign=with_record)
@@ -15,10 +15,10 @@ module WithRecord
15
15
  end
16
16
 
17
17
  config.after_initialize do
18
- # load models
19
- Rails.application.eager_load!
20
- ActiveRecord::Relation.send :include, Extension
21
- ActiveRecord::Associations::CollectionProxy.send :include, Extension
18
+ ActiveSupport.on_load(:active_record) do
19
+ ActiveRecord::Relation.send :include, Extension
20
+ ActiveRecord::Associations::CollectionProxy.send :include, Extension
21
+ end
22
22
  end
23
23
  end
24
24
  end
@@ -1,3 +1,3 @@
1
1
  module WithRecord
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: with_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Kasyanchuk
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-07 00:00:00.000000000 Z
11
+ date: 2024-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3.6
33
+ version: 2.0.2
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.3.6
40
+ version: 2.0.2
41
41
  description: Include more records in your relations/associations, just to DRY your
42
42
  code.
43
43
  email:
@@ -57,7 +57,7 @@ homepage: https://github.com/igorkasyanchuk/with_record
57
57
  licenses:
58
58
  - MIT
59
59
  metadata: {}
60
- post_install_message:
60
+ post_install_message:
61
61
  rdoc_options: []
62
62
  require_paths:
63
63
  - lib
@@ -72,8 +72,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  requirements: []
75
- rubygems_version: 3.0.1
76
- signing_key:
75
+ rubygems_version: 3.3.7
76
+ signing_key:
77
77
  specification_version: 4
78
78
  summary: Include more records in your relations/associations, just to DRY your code.
79
79
  test_files: []