anchormodel 0.1.5 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +6 -6
- data/README.md +78 -2
- data/VERSION +1 -1
- data/anchormodel.gemspec +4 -4
- data/doc/Anchormodel/ActiveModelTypeValueMulti.html +410 -0
- data/doc/Anchormodel/ActiveModelTypeValueSingle.html +113 -31
- data/doc/Anchormodel/Attribute.html +109 -9
- data/doc/Anchormodel/ModelMixin.html +3 -92
- data/doc/Anchormodel/SimpleFormInputs/Helpers/AnchormodelInputsCommon.html +267 -0
- data/doc/Anchormodel/SimpleFormInputs/Helpers.html +124 -0
- data/doc/Anchormodel/SimpleFormInputs.html +124 -0
- data/doc/Anchormodel/Util.html +131 -15
- data/doc/Anchormodel/Version.html +3 -3
- data/doc/Anchormodel.html +97 -32
- data/doc/AnchormodelCheckBoxesInput.html +140 -0
- data/doc/AnchormodelGenerator.html +3 -3
- data/doc/AnchormodelInput.html +140 -0
- data/doc/AnchormodelRadioButtonsInput.html +140 -0
- data/doc/_index.html +16 -4
- data/doc/class_list.html +1 -1
- data/doc/file.README.html +77 -5
- data/doc/frames.html +1 -1
- data/doc/index.html +77 -5
- data/doc/method_list.html +49 -9
- data/doc/top-level-namespace.html +4 -4
- data/lib/anchormodel/active_model_type_value_multi.rb +31 -0
- data/lib/anchormodel/active_model_type_value_single.rb +4 -2
- data/lib/anchormodel/attribute.rb +7 -1
- data/lib/anchormodel/model_mixin.rb +7 -0
- data/lib/anchormodel/simple_form_inputs/anchormodel_check_boxes_input.rb +23 -0
- data/lib/anchormodel/simple_form_inputs/helpers/anchormodel_inputs_common.rb +7 -3
- data/lib/anchormodel/util.rb +57 -7
- data/lib/anchormodel.rb +7 -0
- data/test/active_record_model/user_test.rb +73 -9
- data/test/dummy/app/anchormodels/animal.rb +6 -0
- data/test/dummy/app/models/user.rb +1 -0
- data/test/dummy/db/migrate/20240425182000_add_animals_to_users.rb +5 -0
- data/test/dummy/db/schema.rb +2 -1
- metadata +13 -2
@@ -21,10 +21,6 @@ class UserTest < Minitest::Test
|
|
21
21
|
)
|
22
22
|
end
|
23
23
|
|
24
|
-
def test_missing_key
|
25
|
-
assert_raises { Role.find(:does_not_exist) }
|
26
|
-
end
|
27
|
-
|
28
24
|
def test_basic_setters_and_getters
|
29
25
|
u = User.create!(role: 'guest', locale: 'de') # String assignment
|
30
26
|
assert_equal Role.find(:guest), u.role
|
@@ -57,11 +53,6 @@ class UserTest < Minitest::Test
|
|
57
53
|
assert Role.find(:moderator) < Role.find(:admin)
|
58
54
|
end
|
59
55
|
|
60
|
-
def test_presence_validation
|
61
|
-
valentine = User.new
|
62
|
-
assert_raises(ActiveRecord::RecordInvalid) { valentine.save! }
|
63
|
-
end
|
64
|
-
|
65
56
|
def test_alternative_column_name
|
66
57
|
ben = User.create!(
|
67
58
|
role: Role.find(:moderator),
|
@@ -119,6 +110,19 @@ class UserTest < Minitest::Test
|
|
119
110
|
assert_nil u.secondary_role
|
120
111
|
end
|
121
112
|
|
113
|
+
###---
|
114
|
+
# Testing failures
|
115
|
+
###---
|
116
|
+
|
117
|
+
def test_presence_validation
|
118
|
+
valentine = User.new
|
119
|
+
assert_raises(ActiveRecord::RecordInvalid) { valentine.save! }
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_missing_key
|
123
|
+
assert_raises { Role.find(:does_not_exist) }
|
124
|
+
end
|
125
|
+
|
122
126
|
# Attempting to create a model with an invalid constant name should fail
|
123
127
|
def test_invalid_key_update
|
124
128
|
assert_raises(RuntimeError) { User.create!(role: :admin, locale: :de, preferred_locale: :invalid) }
|
@@ -137,4 +141,64 @@ class UserTest < Minitest::Test
|
|
137
141
|
ActiveRecord::Base.connection.execute(sql)
|
138
142
|
assert_raises(RuntimeError) { User.first.role }
|
139
143
|
end
|
144
|
+
|
145
|
+
###---
|
146
|
+
# Testing multiple anchormodel associations
|
147
|
+
###---
|
148
|
+
|
149
|
+
def test_multi_basics
|
150
|
+
u = User.create!(role: 'guest', locale: 'de')
|
151
|
+
assert_equal(Set.new, u.animals)
|
152
|
+
# Adding
|
153
|
+
u.animals << 'cat'
|
154
|
+
assert_equal(Set.new([Animal.find(:cat)]), u.animals)
|
155
|
+
u.animals.add :dog
|
156
|
+
assert_equal(Set.new([Animal.find(:cat), Animal.find(:dog)]), u.animals)
|
157
|
+
u.animals.add Animal.find(:horse)
|
158
|
+
assert_equal(Set.new([Animal.find(:cat), Animal.find(:dog), Animal.find(:horse)]), u.animals)
|
159
|
+
# Removing
|
160
|
+
u.animals.delete 'cat'
|
161
|
+
assert_equal(Set.new([Animal.find(:dog), Animal.find(:horse)]), u.animals)
|
162
|
+
u.animals.delete :dog
|
163
|
+
assert_equal(Set.new([Animal.find(:horse)]), u.animals)
|
164
|
+
u.animals.delete Animal.find(:horse)
|
165
|
+
assert_equal(false, u.animals.any?)
|
166
|
+
# Setting
|
167
|
+
u.animals = %i[cat dog]
|
168
|
+
assert_equal(Set.new([Animal.find(:cat), Animal.find(:dog)]), u.animals)
|
169
|
+
# Clearing
|
170
|
+
u.animals.clear
|
171
|
+
assert_equal(false, u.animals.any?)
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_multi_save_load
|
175
|
+
u = User.create!(role: 'guest', locale: 'de')
|
176
|
+
u.animals = %i[cat dog]
|
177
|
+
u.save!
|
178
|
+
freshly_loaded_u = User.first
|
179
|
+
assert_equal(Set.new([Animal.find(:cat), Animal.find(:dog)]), freshly_loaded_u.animals)
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_multi_model_readers_and_writers
|
183
|
+
u = User.create!(role: 'guest', locale: 'de')
|
184
|
+
u.cat!
|
185
|
+
u.cat!
|
186
|
+
assert_equal(Set.new([Animal.find(:cat)]), u.animals) # tolerate no duplicate cat
|
187
|
+
assert_equal(true, u.cat?)
|
188
|
+
u.dog!
|
189
|
+
assert_equal(true, u.cat?)
|
190
|
+
assert_equal(true, u.dog?)
|
191
|
+
assert_equal(false, u.horse?)
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_multi_model_scopes
|
195
|
+
u = User.create!(role: 'guest', locale: 'fr', animals: %w[dog cat])
|
196
|
+
v = User.create!(role: 'guest', locale: 'it', animals: %w[dog horse])
|
197
|
+
assert_equal(0, User.rat.count)
|
198
|
+
assert_equal(1, User.cat.count)
|
199
|
+
assert_equal(1, User.horse.count)
|
200
|
+
assert_equal(2, User.dog.count)
|
201
|
+
assert_equal(u.id, User.cat.first.id)
|
202
|
+
assert_equal(v.id, User.horse.first.id)
|
203
|
+
end
|
140
204
|
end
|
@@ -3,4 +3,5 @@ class User < ApplicationRecord
|
|
3
3
|
belongs_to_anchormodel :secondary_role, Role, optional: true, model_readers: false, model_writers: false, model_scopes: false
|
4
4
|
belongs_to_anchormodel :locale, model_methods: false
|
5
5
|
belongs_to_anchormodel :preferred_locale, Locale
|
6
|
+
belongs_to_anchormodels :animals
|
6
7
|
end
|
data/test/dummy/db/schema.rb
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema[7.0].define(version:
|
13
|
+
ActiveRecord::Schema[7.0].define(version: 20_240_425_182_000) do
|
14
14
|
create_table 'users', force: :cascade do |t|
|
15
15
|
t.string 'role'
|
16
16
|
t.string 'locale'
|
@@ -18,5 +18,6 @@ ActiveRecord::Schema[7.0].define(version: 20_230_124_084_241) do
|
|
18
18
|
t.datetime 'updated_at', null: false
|
19
19
|
t.string 'secondary_role'
|
20
20
|
t.string 'preferred_locale', default: 'en', null: false
|
21
|
+
t.string 'animals', default: '', null: false
|
21
22
|
end
|
22
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: anchormodel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sandro Kalbermatter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -170,12 +170,19 @@ files:
|
|
170
170
|
- bin/rails
|
171
171
|
- doc/Anchormodel.html
|
172
172
|
- doc/Anchormodel/ActiveModelTypeValue.html
|
173
|
+
- doc/Anchormodel/ActiveModelTypeValueMulti.html
|
173
174
|
- doc/Anchormodel/ActiveModelTypeValueSingle.html
|
174
175
|
- doc/Anchormodel/Attribute.html
|
175
176
|
- doc/Anchormodel/ModelMixin.html
|
177
|
+
- doc/Anchormodel/SimpleFormInputs.html
|
178
|
+
- doc/Anchormodel/SimpleFormInputs/Helpers.html
|
179
|
+
- doc/Anchormodel/SimpleFormInputs/Helpers/AnchormodelInputsCommon.html
|
176
180
|
- doc/Anchormodel/Util.html
|
177
181
|
- doc/Anchormodel/Version.html
|
182
|
+
- doc/AnchormodelCheckBoxesInput.html
|
178
183
|
- doc/AnchormodelGenerator.html
|
184
|
+
- doc/AnchormodelInput.html
|
185
|
+
- doc/AnchormodelRadioButtonsInput.html
|
179
186
|
- doc/_index.html
|
180
187
|
- doc/class_list.html
|
181
188
|
- doc/css/common.css
|
@@ -191,9 +198,11 @@ files:
|
|
191
198
|
- doc/method_list.html
|
192
199
|
- doc/top-level-namespace.html
|
193
200
|
- lib/anchormodel.rb
|
201
|
+
- lib/anchormodel/active_model_type_value_multi.rb
|
194
202
|
- lib/anchormodel/active_model_type_value_single.rb
|
195
203
|
- lib/anchormodel/attribute.rb
|
196
204
|
- lib/anchormodel/model_mixin.rb
|
205
|
+
- lib/anchormodel/simple_form_inputs/anchormodel_check_boxes_input.rb
|
197
206
|
- lib/anchormodel/simple_form_inputs/anchormodel_input.rb
|
198
207
|
- lib/anchormodel/simple_form_inputs/anchormodel_radio_buttons_input.rb
|
199
208
|
- lib/anchormodel/simple_form_inputs/helpers/anchormodel_inputs_common.rb
|
@@ -206,6 +215,7 @@ files:
|
|
206
215
|
- test/active_record_model/user_test.rb
|
207
216
|
- test/dummy/.gitignore
|
208
217
|
- test/dummy/Rakefile
|
218
|
+
- test/dummy/app/anchormodels/animal.rb
|
209
219
|
- test/dummy/app/anchormodels/locale.rb
|
210
220
|
- test/dummy/app/anchormodels/role.rb
|
211
221
|
- test/dummy/app/helpers/application_helper.rb
|
@@ -230,6 +240,7 @@ files:
|
|
230
240
|
- test/dummy/config/puma.rb
|
231
241
|
- test/dummy/config/routes.rb
|
232
242
|
- test/dummy/db/migrate/20230107173151_create_users.rb
|
243
|
+
- test/dummy/db/migrate/20240425182000_add_animals_to_users.rb
|
233
244
|
- test/dummy/db/schema.rb
|
234
245
|
- test/dummy/db/seeds.rb
|
235
246
|
- test/dummy/lib/tasks/.keep
|