active_model_persistence 0.1.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/.rspec +3 -0
- data/.rubocop.yml +20 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +102 -0
- data/Rakefile +89 -0
- data/active_model_persistence.gemspec +52 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/active_model_persistence/index.rb +290 -0
- data/lib/active_model_persistence/indexable.rb +209 -0
- data/lib/active_model_persistence/persistence.rb +333 -0
- data/lib/active_model_persistence/primary_key.rb +138 -0
- data/lib/active_model_persistence/primary_key_index.rb +57 -0
- data/lib/active_model_persistence/version.rb +6 -0
- data/lib/active_model_persistence.rb +24 -0
- metadata +234 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_model_persistence/indexable'
|
4
|
+
require 'active_model_persistence/primary_key'
|
5
|
+
|
6
|
+
module ActiveModelPersistence
|
7
|
+
# Adds the `find` method to a model class which looks up objects by their primary key value
|
8
|
+
#
|
9
|
+
# @api public
|
10
|
+
#
|
11
|
+
module PrimaryKeyIndex
|
12
|
+
extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
include ActiveModel::Model
|
15
|
+
include ActiveModel::Attributes
|
16
|
+
include ActiveModelPersistence::PrimaryKey
|
17
|
+
include ActiveModelPersistence::Indexable
|
18
|
+
|
19
|
+
class_methods do
|
20
|
+
# Finds an object in the :primary_key index whose primary matches the given value
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
# class Employee
|
24
|
+
# include ActiveModelPersistence::PrimaryKeyIndex
|
25
|
+
# attribute :id, :integer
|
26
|
+
# end
|
27
|
+
# e1 = Employee.new(id: 1)
|
28
|
+
# e1.update_indexes
|
29
|
+
# Employee.find(1) #=> e1
|
30
|
+
# Employee.find(2) #=> nil
|
31
|
+
#
|
32
|
+
# @param primary_key_value [Object] The primary key value to find in the :primary_key index
|
33
|
+
#
|
34
|
+
# @return [Object, nil] The object in the :primary_key index whose primary matches the given value
|
35
|
+
#
|
36
|
+
def find(primary_key_value)
|
37
|
+
find_by_primary_key(primary_key_value).first
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# Create the primary key index
|
43
|
+
#
|
44
|
+
# @api private
|
45
|
+
#
|
46
|
+
def self.extended(base)
|
47
|
+
base.index('primary_key', key_value_source: :primary_key, unique: true)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
included do
|
52
|
+
def primary_key_index
|
53
|
+
self.class.indexes[:primary_key]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
require 'active_model'
|
5
|
+
|
6
|
+
# A set of mixins to add to ActiveModel classes to support persistence
|
7
|
+
#
|
8
|
+
module ActiveModelPersistence
|
9
|
+
# A base class for all ActiveModelPersistence errors
|
10
|
+
class ModelError < StandardError; end
|
11
|
+
|
12
|
+
# Raised when trying to remove a model from an index when the model is not in the index
|
13
|
+
class ObjectNotInIndexError < ModelError; end
|
14
|
+
|
15
|
+
# Raised when trying to add an object to an index when the key already exists in the index for another object
|
16
|
+
class UniqueConstraintError < ModelError; end
|
17
|
+
end
|
18
|
+
|
19
|
+
require_relative 'active_model_persistence/index'
|
20
|
+
require_relative 'active_model_persistence/indexable'
|
21
|
+
require_relative 'active_model_persistence/persistence'
|
22
|
+
require_relative 'active_model_persistence/primary_key'
|
23
|
+
require_relative 'active_model_persistence/primary_key_index'
|
24
|
+
require_relative 'active_model_persistence/version'
|
metadata
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_model_persistence
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Couball
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '7.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '7.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '7.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '7.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bump
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.10'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler-audit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.9'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: github_pages_rake_tasks
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '13.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '13.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: redcarpet
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.5'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.5'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.10'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.10'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rubocop
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.24'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.24'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: simplecov
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.21'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.21'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: yard
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0.9'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0.9'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: yardstick
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.9'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.9'
|
181
|
+
description: 'Adds in-memory persistence to ActiveModel models
|
182
|
+
|
183
|
+
'
|
184
|
+
email:
|
185
|
+
- couballj@verizonmedia.com
|
186
|
+
executables: []
|
187
|
+
extensions: []
|
188
|
+
extra_rdoc_files: []
|
189
|
+
files:
|
190
|
+
- ".rspec"
|
191
|
+
- ".rubocop.yml"
|
192
|
+
- Gemfile
|
193
|
+
- LICENSE.txt
|
194
|
+
- README.md
|
195
|
+
- Rakefile
|
196
|
+
- active_model_persistence.gemspec
|
197
|
+
- bin/console
|
198
|
+
- bin/setup
|
199
|
+
- lib/active_model_persistence.rb
|
200
|
+
- lib/active_model_persistence/index.rb
|
201
|
+
- lib/active_model_persistence/indexable.rb
|
202
|
+
- lib/active_model_persistence/persistence.rb
|
203
|
+
- lib/active_model_persistence/primary_key.rb
|
204
|
+
- lib/active_model_persistence/primary_key_index.rb
|
205
|
+
- lib/active_model_persistence/version.rb
|
206
|
+
homepage: https://github.com/jcouball/active_model_persistence
|
207
|
+
licenses:
|
208
|
+
- MIT
|
209
|
+
metadata:
|
210
|
+
allowed_push_host: https://rubygems.org
|
211
|
+
rubygems_mfa_required: 'true'
|
212
|
+
homepage_uri: https://github.com/jcouball/active_model_persistence
|
213
|
+
source_code_uri: https://github.com/jcouball/active_model_persistence
|
214
|
+
changelog_uri: https://github.com/jcouball/active_model_persistence/blob/main/CHANGELOG.md
|
215
|
+
post_install_message:
|
216
|
+
rdoc_options: []
|
217
|
+
require_paths:
|
218
|
+
- lib
|
219
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
220
|
+
requirements:
|
221
|
+
- - ">="
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: 2.7.0
|
224
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
|
+
requirements:
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: '0'
|
229
|
+
requirements: []
|
230
|
+
rubygems_version: 3.3.3
|
231
|
+
signing_key:
|
232
|
+
specification_version: 4
|
233
|
+
summary: Adds in-memory persistence to ActiveModel models
|
234
|
+
test_files: []
|