iknow_view_models 2.8.5 → 2.8.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|