iknow_view_models 2.8.5 → 2.8.6
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/.envrc +1 -0
- data/.gitignore +2 -0
- data/iknow_view_models.gemspec +1 -0
- data/lib/iknow_view_models/version.rb +1 -1
- data/lib/view_model/controller.rb +20 -4
- data/nix/gem/generate.rb +41 -0
- data/shell.nix +20 -0
- data/test/helpers/controller_test_helpers.rb +5 -2
- data/test/unit/view_model/active_record/cache_test.rb +6 -2
- data/test/unit/view_model/active_record/controller_test.rb +0 -1
- data/test/unit/view_model/controller_test.rb +43 -0
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8f4644f2bf2710cf5f455959e820599c3452b2e460888fefeb2abd78f356db8
|
4
|
+
data.tar.gz: ec9f0b4cb3009b4e64fa3c77cfea24c716062220ba2de95d566ac0a758a10836
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a268fef9e337366301b6d4bbc72138a06b8e6fdcc4929091550be15a36867d533d2a7394de88cdeb2d98a719572b0f1d9f6d7210eca5150f8b0ae40f959ed47
|
7
|
+
data.tar.gz: e327ca86167c3b94de129ffac178c6188c7a86ec5251c2a6779e6d85a820f6b518740264ffcd8a417e4d46ad7a78ebb2770ce25a95e74af6f42ba8904932a890
|
data/.envrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
eval "$(lorri direnv)"
|
data/.gitignore
CHANGED
data/iknow_view_models.gemspec
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'view_model'
|
4
|
+
require 'oj'
|
4
5
|
|
5
6
|
module ViewModel::Controller
|
6
7
|
extend ActiveSupport::Concern
|
@@ -18,7 +19,7 @@ module ViewModel::Controller
|
|
18
19
|
|
19
20
|
# Render viewmodel(s) to a JSON API response as a String
|
20
21
|
def prerender_viewmodel(viewmodel, status: nil, serialize_context: viewmodel.class.try(:new_serialize_context))
|
21
|
-
|
22
|
+
encode_jbuilder do |json|
|
22
23
|
json.data do
|
23
24
|
ViewModel.serialize(viewmodel, json, serialize_context: serialize_context)
|
24
25
|
end
|
@@ -45,7 +46,7 @@ module ViewModel::Controller
|
|
45
46
|
json_view = wrap_json_view(json_view)
|
46
47
|
json_references = wrap_json_view(json_references)
|
47
48
|
|
48
|
-
|
49
|
+
encode_jbuilder do |json|
|
49
50
|
json.data json_view
|
50
51
|
if json_references.present?
|
51
52
|
json.references do
|
@@ -104,8 +105,23 @@ module ViewModel::Controller
|
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
108
|
+
def encode_jbuilder
|
109
|
+
builder = Jbuilder.new do |json|
|
110
|
+
yield json
|
111
|
+
end
|
112
|
+
|
113
|
+
# Jbuilder#encode no longer uses MultiJson, but instead calls `.to_json`. In
|
114
|
+
# the context of ActiveSupport, we don't want this, because AS replaces the
|
115
|
+
# .to_json interface with its own .as_json, which demands that everything is
|
116
|
+
# reduced to a Hash before it can be JSON encoded. Using this is not only
|
117
|
+
# slightly more expensive in terms of allocations, but also defeats the
|
118
|
+
# purpose of our precompiled `CompiledJson` terminals. Instead serialize
|
119
|
+
# using OJ with options equivalent to those used by MultiJson.
|
120
|
+
Oj.dump(builder.attributes!, mode: :compat, time_format: :ruby, use_to_json: true)
|
121
|
+
end
|
122
|
+
|
107
123
|
def render_jbuilder(status:)
|
108
|
-
response =
|
124
|
+
response = encode_jbuilder do |json|
|
109
125
|
yield json
|
110
126
|
end
|
111
127
|
|
data/nix/gem/generate.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#! /usr/bin/env nix-shell
|
2
|
+
#! nix-shell -i ruby -p ruby -p bundler -p bundix
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
# Bundix doesn't support `gemspec` directive in Gemfiles, as it doesn't copy the
|
6
|
+
# gemspec (and its dependencies) into the store.
|
7
|
+
# This workaround is from https://github.com/manveru/bundix/issues/10#issuecomment-405879379
|
8
|
+
|
9
|
+
require 'shellwords'
|
10
|
+
|
11
|
+
def sh(*args)
|
12
|
+
warn args.shelljoin
|
13
|
+
system(*args) || raise
|
14
|
+
end
|
15
|
+
|
16
|
+
sh 'bundle', 'lock'
|
17
|
+
|
18
|
+
require 'fileutils'
|
19
|
+
require 'bundler'
|
20
|
+
|
21
|
+
lockfile = Bundler::LockfileParser.new(File.read('Gemfile.lock'))
|
22
|
+
gems = lockfile.specs.select { |spec| spec.source.is_a?(Bundler::Source::Rubygems) }
|
23
|
+
sources = [URI('https://rubygems.org/')] | gems.map(&:source).flat_map(&:remotes)
|
24
|
+
|
25
|
+
FileUtils.mkdir_p 'nix/gem'
|
26
|
+
Dir.chdir 'nix/gem' do
|
27
|
+
['Gemfile', 'Gemfile.lock', 'gemset.nix'].each do |f|
|
28
|
+
File.delete(f) if File.exist?(f)
|
29
|
+
end
|
30
|
+
|
31
|
+
File.open('Gemfile', 'w') do |gemfile|
|
32
|
+
sources.each { |source| gemfile.puts "source #{source.to_s.inspect}" }
|
33
|
+
gemfile.puts
|
34
|
+
|
35
|
+
gems.each do |gem|
|
36
|
+
gemfile.puts "gem #{gem.name.inspect}, #{gem.version.to_s.inspect}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
sh 'bundix', '-l'
|
41
|
+
end
|
data/shell.nix
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
with import <nixpkgs> {};
|
2
|
+
|
3
|
+
(bundlerEnv {
|
4
|
+
name = "dev";
|
5
|
+
gemdir = ./nix/gem;
|
6
|
+
|
7
|
+
gemConfig = (defaultGemConfig.override { postgresql = postgresql_11; });
|
8
|
+
|
9
|
+
ruby = ruby_2_6.overrideAttrs (attrs: {
|
10
|
+
patches = (attrs.patches or []) ++ [
|
11
|
+
# RubyGems has a regression where you can no longer build certain gems
|
12
|
+
# outside their directory. Until this is merged, patch from the pull
|
13
|
+
# request.
|
14
|
+
(fetchpatch {
|
15
|
+
url = https://patch-diff.githubusercontent.com/raw/rubygems/rubygems/pull/2596.patch;
|
16
|
+
sha256 = "0m1s5brd30bqcr8v99sczihm83g270philx83kkw5bpix462fdm3";
|
17
|
+
})
|
18
|
+
];
|
19
|
+
});
|
20
|
+
}).env
|
@@ -198,12 +198,15 @@ class DummyController
|
|
198
198
|
end
|
199
199
|
|
200
200
|
# Provide dummy Rails env
|
201
|
-
module
|
202
|
-
def
|
201
|
+
module RailsDummyEnv
|
202
|
+
def env
|
203
203
|
'production'
|
204
204
|
end
|
205
205
|
end
|
206
206
|
|
207
|
+
module Rails; end
|
208
|
+
Rails.singleton_class.prepend(RailsDummyEnv)
|
209
|
+
|
207
210
|
module ActionController
|
208
211
|
class Parameters
|
209
212
|
end
|
@@ -15,12 +15,16 @@ require "view_model/active_record"
|
|
15
15
|
|
16
16
|
DUMMY_RAILS_CACHE = ActiveSupport::Cache::MemoryStore.new
|
17
17
|
|
18
|
-
module
|
19
|
-
def
|
18
|
+
module RailsDummyCache
|
19
|
+
def cache
|
20
20
|
DUMMY_RAILS_CACHE
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
# Ensure we have a dummy Rails, and then prepend our dummy cache
|
25
|
+
module Rails; end
|
26
|
+
Rails.singleton_class.prepend(RailsDummyCache)
|
27
|
+
|
24
28
|
class ViewModel::ActiveRecord
|
25
29
|
class CacheTest < ActiveSupport::TestCase
|
26
30
|
using ViewModel::Utils::Collections
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/unit'
|
3
|
+
require 'minitest/hooks'
|
4
|
+
|
5
|
+
require_relative '../../helpers/arvm_test_utilities.rb'
|
6
|
+
require_relative '../../helpers/viewmodel_spec_helpers.rb'
|
7
|
+
|
8
|
+
require 'view_model'
|
9
|
+
require 'view_model/controller'
|
10
|
+
|
11
|
+
class ViewModel::ControllerTest < ActiveSupport::TestCase
|
12
|
+
include ARVMTestUtilities
|
13
|
+
extend Minitest::Spec::DSL
|
14
|
+
|
15
|
+
describe 'rendering prerendered json terminals' do
|
16
|
+
let(:controller) do
|
17
|
+
Class.new do
|
18
|
+
def self.rescue_from(*); end
|
19
|
+
include ViewModel::Controller
|
20
|
+
public :encode_jbuilder
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:terminal) { { 'a' => 100 } }
|
25
|
+
|
26
|
+
let(:encoded_terminal) do
|
27
|
+
ViewModel::Controller::CompiledJson.new(Oj.dump(terminal, mode: :compat))
|
28
|
+
end
|
29
|
+
|
30
|
+
let(:expected_dump) { encode(terminal) }
|
31
|
+
let(:computed_dump) { encode(encoded_terminal) }
|
32
|
+
|
33
|
+
def encode(value)
|
34
|
+
controller.new.encode_jbuilder do |json|
|
35
|
+
json.x value
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'passes through the prerendered data' do
|
40
|
+
assert_equal(expected_dump, computed_dump)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
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.8.
|
4
|
+
version: 2.8.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iKnow Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -192,6 +192,20 @@ dependencies:
|
|
192
192
|
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: oj
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: appraisal
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -340,6 +354,7 @@ extensions: []
|
|
340
354
|
extra_rdoc_files: []
|
341
355
|
files:
|
342
356
|
- ".circleci/config.yml"
|
357
|
+
- ".envrc"
|
343
358
|
- ".gitignore"
|
344
359
|
- ".idea/codeStyleSettings.xml"
|
345
360
|
- ".travis.yml"
|
@@ -399,6 +414,8 @@ files:
|
|
399
414
|
- lib/view_model/traversal_context.rb
|
400
415
|
- lib/view_model/utils.rb
|
401
416
|
- lib/view_model/utils/collections.rb
|
417
|
+
- nix/gem/generate.rb
|
418
|
+
- shell.nix
|
402
419
|
- test/config/database.yml
|
403
420
|
- test/helpers/arvm_test_models.rb
|
404
421
|
- test/helpers/arvm_test_utilities.rb
|
@@ -427,6 +444,7 @@ files:
|
|
427
444
|
- test/unit/view_model/active_record/version_test.rb
|
428
445
|
- test/unit/view_model/active_record_test.rb
|
429
446
|
- test/unit/view_model/callbacks_test.rb
|
447
|
+
- test/unit/view_model/controller_test.rb
|
430
448
|
- test/unit/view_model/deserialization_error/unique_violation_test.rb
|
431
449
|
- test/unit/view_model/record_test.rb
|
432
450
|
- test/unit/view_model/traversal_context_test.rb
|
@@ -484,6 +502,7 @@ test_files:
|
|
484
502
|
- test/unit/view_model/active_record/version_test.rb
|
485
503
|
- test/unit/view_model/active_record_test.rb
|
486
504
|
- test/unit/view_model/callbacks_test.rb
|
505
|
+
- test/unit/view_model/controller_test.rb
|
487
506
|
- test/unit/view_model/deserialization_error/unique_violation_test.rb
|
488
507
|
- test/unit/view_model/record_test.rb
|
489
508
|
- test/unit/view_model/traversal_context_test.rb
|