iknow_view_models 2.9.0 → 2.10.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 +4 -4
- data/.github/workflows/gem-push.yml +31 -0
- data/.github/workflows/test.yml +65 -0
- data/Appraisals +16 -6
- data/gemfiles/{rails_6_0_beta.gemfile → rails_6_0.gemfile} +2 -2
- data/gemfiles/rails_6_1.gemfile +9 -0
- data/gemfiles/rails_7_0.gemfile +9 -0
- data/iknow_view_models.gemspec +3 -1
- data/lib/iknow_view_models/version.rb +1 -1
- data/lib/view_model/callbacks.rb +2 -2
- data/lib/view_model/test_helpers/arvm_builder.rb +4 -2
- data/lib/view_model/traversal_context.rb +2 -2
- data/lib/view_model.rb +5 -4
- data/test/helpers/arvm_test_models.rb +12 -4
- data/test/helpers/controller_test_helpers.rb +3 -1
- data/test/unit/view_model/active_record/cache_test.rb +3 -8
- metadata +13 -12
- data/.circleci/config.yml +0 -119
- data/.travis.yml +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5b7807279bffd6a119f6aa212280d03782bea8d39b5fb166e9f2aa4e791f31b
|
4
|
+
data.tar.gz: a51ac429d13d5988c65311f2f0ebc8c0e331ebeb00c209edecdc9bbd82dec7b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc8eac346b4d66764c0c4d391ed4cb1baee030d1a843855a6425a7b2ddb9e8596528b817021ed83413ea96c7404ae68e5e6a8c6574fbefb9145ef026e4c50951
|
7
|
+
data.tar.gz: d2e28952cfbb1ff9fb4d8e1adbb4afce1ca21b67836e3ac560cea2c0ba57e63a44f0bd39de133ab56b2c281ff0672d5452d2fae9f487c902ae1e8575087074ed
|
@@ -0,0 +1,31 @@
|
|
1
|
+
name: Publish Ruby Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ "v2.x" ]
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
build:
|
9
|
+
name: Build + Publish
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
permissions:
|
12
|
+
contents: read
|
13
|
+
packages: write
|
14
|
+
|
15
|
+
steps:
|
16
|
+
- uses: actions/checkout@v3
|
17
|
+
- name: Set up Ruby 2.7
|
18
|
+
uses: ruby/setup-ruby@v1
|
19
|
+
with:
|
20
|
+
ruby-version: 2.7
|
21
|
+
|
22
|
+
- name: Publish to RubyGems
|
23
|
+
run: |
|
24
|
+
mkdir -p $HOME/.gem
|
25
|
+
touch $HOME/.gem/credentials
|
26
|
+
chmod 0600 $HOME/.gem/credentials
|
27
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
28
|
+
gem build *.gemspec
|
29
|
+
gem push *.gem
|
30
|
+
env:
|
31
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
@@ -0,0 +1,65 @@
|
|
1
|
+
name: Run Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
branches: "**"
|
6
|
+
|
7
|
+
permissions:
|
8
|
+
contents: read
|
9
|
+
checks: write
|
10
|
+
pull-requests: write
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
test:
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
|
16
|
+
services:
|
17
|
+
postgres:
|
18
|
+
image: postgres:13-alpine
|
19
|
+
ports:
|
20
|
+
- "5432:5432"
|
21
|
+
env:
|
22
|
+
POSTGRES_DB: iknow_view_models
|
23
|
+
POSTGRES_USER: rails
|
24
|
+
POSTGRES_PASSWORD: password
|
25
|
+
|
26
|
+
strategy:
|
27
|
+
fail-fast: false
|
28
|
+
matrix:
|
29
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
30
|
+
include:
|
31
|
+
- ruby-version: '2.7'
|
32
|
+
bundle-gemfile: gemfiles/rails_5_2.gemfile
|
33
|
+
- ruby-version: '3.0'
|
34
|
+
bundle-gemfile: gemfiles/rails_6_0.gemfile
|
35
|
+
- ruby-version: '3.1'
|
36
|
+
bundle-gemfile: gemfiles/rails_6_1.gemfile
|
37
|
+
- ruby-version: '3.2'
|
38
|
+
bundle-gemfile: gemfiles/rails_7_0.gemfile
|
39
|
+
|
40
|
+
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
|
41
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/${{ matrix.bundle-gemfile }}
|
42
|
+
DATABASE_URL: "postgres://rails:password@localhost:5432/iknow_view_models"
|
43
|
+
|
44
|
+
steps:
|
45
|
+
- uses: actions/checkout@v3
|
46
|
+
- name: Set up Ruby
|
47
|
+
uses: ruby/setup-ruby@v1
|
48
|
+
with:
|
49
|
+
ruby-version: ${{ matrix.ruby-version }}
|
50
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
51
|
+
- name: Run tests
|
52
|
+
run: bundle exec rake test
|
53
|
+
- name: Upload result
|
54
|
+
uses: actions/upload-artifact@v3
|
55
|
+
if: always()
|
56
|
+
with:
|
57
|
+
path: test/reports/
|
58
|
+
name: test_results_${{ matrix.ruby-version }}
|
59
|
+
- name: Test Report
|
60
|
+
uses: dorny/test-reporter@v1
|
61
|
+
if: always()
|
62
|
+
with:
|
63
|
+
name: Minitest Tests - ${{ matrix.ruby-version }}
|
64
|
+
path: test/reports/*.xml
|
65
|
+
reporter: java-junit
|
data/Appraisals
CHANGED
@@ -1,9 +1,19 @@
|
|
1
|
-
appraise
|
2
|
-
gem
|
3
|
-
gem
|
1
|
+
appraise 'rails-5-2' do
|
2
|
+
gem 'activerecord', '~> 5.2.0'
|
3
|
+
gem 'activesupport', '~> 5.2.0'
|
4
4
|
end
|
5
5
|
|
6
|
-
appraise
|
7
|
-
gem
|
8
|
-
gem
|
6
|
+
appraise 'rails-6-0' do
|
7
|
+
gem 'activerecord', '~> 6.0.0'
|
8
|
+
gem 'activesupport', '~> 6.0.0'
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise 'rails-6-1' do
|
12
|
+
gem 'activerecord', '~> 6.1.0'
|
13
|
+
gem 'activesupport', '~> 6.1.0'
|
14
|
+
end
|
15
|
+
|
16
|
+
appraise 'rails-7-0' do
|
17
|
+
gem 'activerecord', '~> 7.0.0'
|
18
|
+
gem 'activesupport', '~> 7.0.0'
|
9
19
|
end
|
data/iknow_view_models.gemspec
CHANGED
@@ -20,6 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
+
spec.required_ruby_version = '>= 2.7.3'
|
24
|
+
|
23
25
|
spec.add_dependency "activerecord", ">= 5.0"
|
24
26
|
spec.add_dependency "activesupport", ">= 5.0"
|
25
27
|
|
@@ -42,7 +44,7 @@ Gem::Specification.new do |spec|
|
|
42
44
|
spec.add_development_dependency "byebug"
|
43
45
|
spec.add_development_dependency "method_source"
|
44
46
|
spec.add_development_dependency "minitest-hooks"
|
45
|
-
spec.add_development_dependency "pg"
|
47
|
+
spec.add_development_dependency "pg"
|
46
48
|
spec.add_development_dependency "pry"
|
47
49
|
spec.add_development_dependency "rake"
|
48
50
|
spec.add_development_dependency "rspec-expectations"
|
data/lib/view_model/callbacks.rb
CHANGED
@@ -11,9 +11,9 @@ module ViewModel::Callbacks
|
|
11
11
|
# callbacks instance with additional instance method access to the view,
|
12
12
|
# context and extra context-dependent parameters.
|
13
13
|
module CallbackEnvContext
|
14
|
-
def method_missing(method,
|
14
|
+
def method_missing(method, ...)
|
15
15
|
if _callbacks.respond_to?(method, true)
|
16
|
-
_callbacks.send(method,
|
16
|
+
_callbacks.send(method, ...)
|
17
17
|
else
|
18
18
|
super
|
19
19
|
end
|
@@ -62,8 +62,10 @@ class ViewModel::TestHelpers::ARVMBuilder
|
|
62
62
|
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{name.underscore.pluralize} CASCADE")
|
63
63
|
namespace.send(:remove_const, name)
|
64
64
|
namespace.send(:remove_const, viewmodel_name) if viewmodel
|
65
|
-
|
66
|
-
|
65
|
+
if ActiveSupport::VERSION::MAJOR < 7
|
66
|
+
# prevent cached old class from being used to resolve associations
|
67
|
+
ActiveSupport::Dependencies::Reference.clear!
|
68
|
+
end
|
67
69
|
end
|
68
70
|
|
69
71
|
private
|
@@ -23,8 +23,8 @@ class ViewModel::TraversalContext
|
|
23
23
|
attr_reader :shared_context
|
24
24
|
delegate :access_control, :callbacks, to: :shared_context
|
25
25
|
|
26
|
-
def self.new_child(
|
27
|
-
self.allocate.tap { |c| c.initialize_as_child(
|
26
|
+
def self.new_child(...)
|
27
|
+
self.allocate.tap { |c| c.initialize_as_child(...) }
|
28
28
|
end
|
29
29
|
|
30
30
|
def initialize(shared_context: nil, **shared_context_params)
|
data/lib/view_model.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# A ViewModel encapsulates a particular aggregation of data calculated via the
|
4
4
|
# underlying models and provides a means of serializing it into views.
|
5
5
|
require 'jbuilder'
|
6
|
+
require 'base64'
|
6
7
|
require 'deep_preloader'
|
7
8
|
|
8
9
|
class ViewModel
|
@@ -209,16 +210,16 @@ class ViewModel
|
|
209
210
|
ViewModel::SerializeContext
|
210
211
|
end
|
211
212
|
|
212
|
-
def new_serialize_context(
|
213
|
-
serialize_context_class.new(
|
213
|
+
def new_serialize_context(...)
|
214
|
+
serialize_context_class.new(...)
|
214
215
|
end
|
215
216
|
|
216
217
|
def deserialize_context_class
|
217
218
|
ViewModel::DeserializeContext
|
218
219
|
end
|
219
220
|
|
220
|
-
def new_deserialize_context(
|
221
|
-
deserialize_context_class.new(
|
221
|
+
def new_deserialize_context(...)
|
222
|
+
deserialize_context_class.new(...)
|
222
223
|
end
|
223
224
|
|
224
225
|
def accepts_schema_version?(schema_version)
|
@@ -6,10 +6,18 @@ require "view_model/active_record/controller"
|
|
6
6
|
|
7
7
|
require "acts_as_manual_list"
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
db_config =
|
10
|
+
if (url = ENV['DATABASE_URL'])
|
11
|
+
url
|
12
|
+
else
|
13
|
+
db_config_path = File.join(File.dirname(__FILE__), '../config/database.yml')
|
14
|
+
yaml = YAML.safe_load(File.open(db_config_path))
|
15
|
+
raise 'Test database configuration missing' unless yaml['test']
|
16
|
+
|
17
|
+
yaml['test']
|
18
|
+
end
|
19
|
+
|
20
|
+
ActiveRecord::Base.establish_connection(db_config)
|
13
21
|
|
14
22
|
# Remove test tables if any exist
|
15
23
|
%w[labels parents children targets poly_ones poly_twos owners
|
@@ -267,7 +267,9 @@ module ControllerTestControllers
|
|
267
267
|
[:ParentController, :ChildController, :LabelController, :TargetController].each do |name|
|
268
268
|
Object.send(:remove_const, name)
|
269
269
|
end
|
270
|
-
ActiveSupport::
|
270
|
+
if ActiveSupport::VERSION::MAJOR < 7
|
271
|
+
ActiveSupport::Dependencies::Reference.clear!
|
272
|
+
end
|
271
273
|
super
|
272
274
|
end
|
273
275
|
end
|
@@ -15,16 +15,11 @@ require "view_model/active_record"
|
|
15
15
|
|
16
16
|
DUMMY_RAILS_CACHE = ActiveSupport::Cache::MemoryStore.new
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
18
|
+
IknowCache.configure! do
|
19
|
+
logger ::ActiveRecord::Base.logger
|
20
|
+
cache DUMMY_RAILS_CACHE
|
22
21
|
end
|
23
22
|
|
24
|
-
# Ensure we have a dummy Rails, and then prepend our dummy cache
|
25
|
-
module Rails; end
|
26
|
-
Rails.singleton_class.prepend(RailsDummyCache)
|
27
|
-
|
28
23
|
class ViewModel::ActiveRecord
|
29
24
|
class CacheTest < ActiveSupport::TestCase
|
30
25
|
using ViewModel::Utils::Collections
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iknow_view_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iKnow Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -280,16 +280,16 @@ dependencies:
|
|
280
280
|
name: pg
|
281
281
|
requirement: !ruby/object:Gem::Requirement
|
282
282
|
requirements:
|
283
|
-
- - "
|
283
|
+
- - ">="
|
284
284
|
- !ruby/object:Gem::Version
|
285
|
-
version: '0
|
285
|
+
version: '0'
|
286
286
|
type: :development
|
287
287
|
prerelease: false
|
288
288
|
version_requirements: !ruby/object:Gem::Requirement
|
289
289
|
requirements:
|
290
|
-
- - "
|
290
|
+
- - ">="
|
291
291
|
- !ruby/object:Gem::Version
|
292
|
-
version: '0
|
292
|
+
version: '0'
|
293
293
|
- !ruby/object:Gem::Dependency
|
294
294
|
name: pry
|
295
295
|
requirement: !ruby/object:Gem::Requirement
|
@@ -353,11 +353,11 @@ executables: []
|
|
353
353
|
extensions: []
|
354
354
|
extra_rdoc_files: []
|
355
355
|
files:
|
356
|
-
- ".circleci/config.yml"
|
357
356
|
- ".envrc"
|
357
|
+
- ".github/workflows/gem-push.yml"
|
358
|
+
- ".github/workflows/test.yml"
|
358
359
|
- ".gitignore"
|
359
360
|
- ".idea/codeStyleSettings.xml"
|
360
|
-
- ".travis.yml"
|
361
361
|
- Appraisals
|
362
362
|
- Gemfile
|
363
363
|
- LICENSE.txt
|
@@ -365,7 +365,9 @@ files:
|
|
365
365
|
- Rakefile
|
366
366
|
- appveyor.yml
|
367
367
|
- gemfiles/rails_5_2.gemfile
|
368
|
-
- gemfiles/
|
368
|
+
- gemfiles/rails_6_0.gemfile
|
369
|
+
- gemfiles/rails_6_1.gemfile
|
370
|
+
- gemfiles/rails_7_0.gemfile
|
369
371
|
- iknow_view_models.gemspec
|
370
372
|
- lib/iknow_view_models.rb
|
371
373
|
- lib/iknow_view_models/railtie.rb
|
@@ -461,15 +463,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
461
463
|
requirements:
|
462
464
|
- - ">="
|
463
465
|
- !ruby/object:Gem::Version
|
464
|
-
version:
|
466
|
+
version: 2.7.3
|
465
467
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
466
468
|
requirements:
|
467
469
|
- - ">="
|
468
470
|
- !ruby/object:Gem::Version
|
469
471
|
version: '0'
|
470
472
|
requirements: []
|
471
|
-
|
472
|
-
rubygems_version: 2.7.6.2
|
473
|
+
rubygems_version: 3.1.6
|
473
474
|
signing_key:
|
474
475
|
specification_version: 4
|
475
476
|
summary: ViewModels provide a means of encapsulating a collection of related data
|
data/.circleci/config.yml
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
version: 2.1
|
2
|
-
|
3
|
-
executors:
|
4
|
-
ruby-pg:
|
5
|
-
parameters:
|
6
|
-
ruby-version:
|
7
|
-
type: string
|
8
|
-
default: "2.6"
|
9
|
-
pg-version:
|
10
|
-
type: string
|
11
|
-
default: "11"
|
12
|
-
gemfile:
|
13
|
-
type: string
|
14
|
-
default: "Gemfile"
|
15
|
-
environment:
|
16
|
-
PGHOST: 127.0.0.1
|
17
|
-
PGUSER: eikaiwa
|
18
|
-
docker:
|
19
|
-
- image: circleci/ruby:<< parameters.ruby-version >>
|
20
|
-
environment:
|
21
|
-
BUNDLE_JOBS: 3
|
22
|
-
BUNDLE_RETRY: 3
|
23
|
-
BUNDLE_PATH: vendor/bundle
|
24
|
-
RAILS_ENV: test
|
25
|
-
BUNDLE_GEMFILE: << parameters.gemfile >>
|
26
|
-
- image: circleci/postgres:<< parameters.pg-version >>-alpine
|
27
|
-
environment:
|
28
|
-
POSTGRES_USER: eikaiwa
|
29
|
-
POSTGRES_DB: iknow_view_models
|
30
|
-
POSTGRES_PASSWORD: ""
|
31
|
-
|
32
|
-
jobs:
|
33
|
-
test:
|
34
|
-
parameters:
|
35
|
-
ruby-version:
|
36
|
-
type: string
|
37
|
-
pg-version:
|
38
|
-
type: string
|
39
|
-
gemfile:
|
40
|
-
type: string
|
41
|
-
executor:
|
42
|
-
name: ruby-pg
|
43
|
-
ruby-version: << parameters.ruby-version >>
|
44
|
-
pg-version: << parameters.pg-version >>
|
45
|
-
gemfile: << parameters.gemfile >>
|
46
|
-
parallelism: 1
|
47
|
-
steps:
|
48
|
-
- checkout
|
49
|
-
|
50
|
-
- run:
|
51
|
-
# Remove the non-appraisal gemfile for safety: we never want to use it.
|
52
|
-
name: Prepare bundler
|
53
|
-
command: bundle -v && rm Gemfile
|
54
|
-
|
55
|
-
- run:
|
56
|
-
name: Compute a gemfile lock
|
57
|
-
command: bundle lock && cp "${BUNDLE_GEMFILE}.lock" /tmp/gem-lock
|
58
|
-
|
59
|
-
- restore_cache:
|
60
|
-
keys:
|
61
|
-
- iknow_viewmodels-<< parameters.ruby-version >>-{{ checksum "/tmp/gem-lock" }}
|
62
|
-
- iknow_viewmodels-
|
63
|
-
|
64
|
-
- run:
|
65
|
-
name: Bundle Install
|
66
|
-
command: bundle check || bundle install
|
67
|
-
|
68
|
-
- save_cache:
|
69
|
-
key: iknow_viewmodels-<< parameters.ruby-version >>-{{ checksum "/tmp/gem-lock" }}
|
70
|
-
paths:
|
71
|
-
- vendor/bundle
|
72
|
-
|
73
|
-
- run:
|
74
|
-
name: Wait for DB
|
75
|
-
command: dockerize -wait tcp://localhost:5432 -timeout 1m
|
76
|
-
|
77
|
-
- run:
|
78
|
-
name: Run minitest
|
79
|
-
command: bundle exec rake test
|
80
|
-
|
81
|
-
- store_test_results:
|
82
|
-
path: test/reports
|
83
|
-
|
84
|
-
publish:
|
85
|
-
executor: ruby-pg
|
86
|
-
steps:
|
87
|
-
- checkout
|
88
|
-
- run:
|
89
|
-
name: Setup Rubygems
|
90
|
-
command: |
|
91
|
-
mkdir ~/.gem &&
|
92
|
-
echo -e "---\r\n:rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials &&
|
93
|
-
chmod 0600 ~/.gem/credentials
|
94
|
-
- run:
|
95
|
-
name: Publish to Rubygems
|
96
|
-
command: |
|
97
|
-
gem build iknow_view_models.gemspec
|
98
|
-
gem push iknow_view_models-*.gem
|
99
|
-
|
100
|
-
workflows:
|
101
|
-
version: 2.1
|
102
|
-
build:
|
103
|
-
jobs:
|
104
|
-
- test:
|
105
|
-
name: 'ruby 2.6 rails 5.2 pg 11'
|
106
|
-
ruby-version: "2.6"
|
107
|
-
pg-version: "11"
|
108
|
-
gemfile: gemfiles/rails_5_2.gemfile
|
109
|
-
- test:
|
110
|
-
name: 'ruby 2.6 rails 6.0 pg 11'
|
111
|
-
ruby-version: "2.6"
|
112
|
-
pg-version: "11"
|
113
|
-
gemfile: gemfiles/rails_6_0_beta.gemfile
|
114
|
-
- publish:
|
115
|
-
filters:
|
116
|
-
branches:
|
117
|
-
only: master
|
118
|
-
tags:
|
119
|
-
ignore: /.*/
|
data/.travis.yml
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
dist: trusty
|
2
|
-
sudo: false
|
3
|
-
language: ruby
|
4
|
-
cache: bundler
|
5
|
-
|
6
|
-
rvm:
|
7
|
-
- 2.5
|
8
|
-
|
9
|
-
gemfile:
|
10
|
-
- gemfiles/rails_5_2.gemfile
|
11
|
-
|
12
|
-
addons:
|
13
|
-
postgresql: "10"
|
14
|
-
apt:
|
15
|
-
packages:
|
16
|
-
- postgresql-10
|
17
|
-
- postgresql-client-10
|
18
|
-
- postgresql-server-dev-10
|
19
|
-
env:
|
20
|
-
global:
|
21
|
-
- PGPORT=5433
|
22
|
-
|
23
|
-
before_install:
|
24
|
-
- gem update --system
|
25
|
-
- gem install bundler
|
26
|
-
|
27
|
-
before_script:
|
28
|
-
- psql -c 'CREATE DATABASE iknow_view_models;'
|
29
|
-
|
30
|
-
notifications:
|
31
|
-
email: false
|