rabl 0.16.1 → 0.18.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/CHANGELOG.md +56 -1
- data/README.md +83 -9
- data/lib/rabl/builder.rb +19 -1
- data/lib/rabl/cache_engine.rb +4 -2
- data/lib/rabl/configuration.rb +71 -4
- data/lib/rabl/digestor/rails3.rb +2 -0
- data/lib/rabl/digestor/rails41.rb +2 -0
- data/lib/rabl/digestor/rails5.rb +2 -0
- data/lib/rabl/digestor.rb +2 -0
- data/lib/rabl/engine.rb +343 -27
- data/lib/rabl/helpers.rb +37 -10
- data/lib/rabl/multi_builder.rb +8 -2
- data/lib/rabl/partials.rb +2 -0
- data/lib/rabl/railtie.rb +3 -1
- data/lib/rabl/renderer.rb +5 -2
- data/lib/rabl/sources.rb +261 -14
- data/lib/rabl/template.rb +8 -5
- data/lib/rabl/template_cache_key.rb +93 -0
- data/lib/rabl/tracker.rb +2 -0
- data/lib/rabl/version.rb +3 -1
- data/lib/rabl.rb +25 -9
- metadata +5 -116
data/lib/rabl.rb
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'active_support'
|
|
4
|
+
require 'active_support/core_ext/array/extract_options'
|
|
2
5
|
require 'active_support/core_ext/string/inflections'
|
|
3
6
|
require 'active_support/core_ext/object/blank'
|
|
4
7
|
require 'active_support/core_ext/hash/reverse_merge'
|
|
@@ -15,11 +18,12 @@ require 'rabl/multi_builder'
|
|
|
15
18
|
require 'rabl/configuration'
|
|
16
19
|
require 'rabl/renderer'
|
|
17
20
|
require 'rabl/cache_engine'
|
|
21
|
+
require 'rabl/template_cache_key'
|
|
18
22
|
|
|
19
23
|
if defined?(Rails) && Rails.respond_to?(:version)
|
|
20
|
-
require 'rabl/tracker' if Rails.version =~ /^[
|
|
21
|
-
require 'rabl/digestor' if Rails.version =~ /^[
|
|
22
|
-
require 'rabl/railtie' if Rails.version =~ /^[
|
|
24
|
+
require 'rabl/tracker' if Rails.version =~ /^[45678]/
|
|
25
|
+
require 'rabl/digestor' if Rails.version =~ /^[45678]/
|
|
26
|
+
require 'rabl/railtie' if Rails.version =~ /^[345678]/
|
|
23
27
|
end
|
|
24
28
|
|
|
25
29
|
# Rabl.register!
|
|
@@ -54,16 +58,18 @@ module Rabl
|
|
|
54
58
|
end
|
|
55
59
|
|
|
56
60
|
# Fetches from the source_cache, stores block result in cache if nil
|
|
57
|
-
# Used to cache the contents and paths to various rabl templates
|
|
58
|
-
#
|
|
59
|
-
|
|
61
|
+
# Used to cache the contents and paths to various rabl templates, keyed by
|
|
62
|
+
# everything the lookup depends on (the file, the view path and the lookup details)
|
|
63
|
+
# source_cache("users/index", ["path/to/view"], [:json]) { "/full/path/to/template/users/index" }
|
|
64
|
+
def source_cache(file, view_path, lookup = nil)
|
|
60
65
|
return yield unless Rabl.configuration.cache_sources
|
|
61
66
|
|
|
62
|
-
cache_key = [file, view_path].compact.join(":")
|
|
63
|
-
|
|
64
67
|
@_source_cache ||= {}
|
|
65
68
|
|
|
66
|
-
|
|
69
|
+
# stores a frozen copy of the key, so later changes to the caller's strings don't reach it
|
|
70
|
+
@_source_cache.fetch([file, view_path, lookup]) do
|
|
71
|
+
@_source_cache[frozen_copy([file, view_path, lookup])] = yield
|
|
72
|
+
end
|
|
67
73
|
end
|
|
68
74
|
|
|
69
75
|
# Resets the RABL source cache
|
|
@@ -71,6 +77,16 @@ module Rabl
|
|
|
71
77
|
@_source_cache = {}
|
|
72
78
|
end
|
|
73
79
|
|
|
80
|
+
# Returns a copy of value whose Strings and Arrays are frozen, for cache keys that
|
|
81
|
+
# must not change when the caller's objects do
|
|
82
|
+
def frozen_copy(value)
|
|
83
|
+
case value
|
|
84
|
+
when Array then value.map { |item| frozen_copy(item) }.freeze
|
|
85
|
+
when String then value.frozen? ? value : value.dup.freeze
|
|
86
|
+
else value
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
74
90
|
# Renders an object using a specified template within an application.
|
|
75
91
|
# render(@post, 'posts/show', :view_path => "/path/to/app/views")
|
|
76
92
|
def render(object, source, options = {})
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rabl
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.18.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nathan Esquenazi
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-10-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -24,118 +24,6 @@ dependencies:
|
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 2.3.14
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: riot
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.12.3
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.12.3
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: rr
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rake
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: tilt
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: oj
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: msgpack
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: 1.0.0
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 1.0.0
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: bson
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 1.7.0
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: 1.7.0
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: plist
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - ">="
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0'
|
|
139
27
|
description: General ruby templating with json, bson, xml and msgpack support
|
|
140
28
|
email:
|
|
141
29
|
- nesquena@gmail.com
|
|
@@ -163,6 +51,7 @@ files:
|
|
|
163
51
|
- lib/rabl/renderer.rb
|
|
164
52
|
- lib/rabl/sources.rb
|
|
165
53
|
- lib/rabl/template.rb
|
|
54
|
+
- lib/rabl/template_cache_key.rb
|
|
166
55
|
- lib/rabl/tracker.rb
|
|
167
56
|
- lib/rabl/version.rb
|
|
168
57
|
homepage: https://github.com/nesquena/rabl
|
|
@@ -177,14 +66,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
177
66
|
requirements:
|
|
178
67
|
- - ">="
|
|
179
68
|
- !ruby/object:Gem::Version
|
|
180
|
-
version: '
|
|
69
|
+
version: '2.7'
|
|
181
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
182
71
|
requirements:
|
|
183
72
|
- - ">="
|
|
184
73
|
- !ruby/object:Gem::Version
|
|
185
74
|
version: '0'
|
|
186
75
|
requirements: []
|
|
187
|
-
rubygems_version: 3.
|
|
76
|
+
rubygems_version: 3.5.22
|
|
188
77
|
signing_key:
|
|
189
78
|
specification_version: 4
|
|
190
79
|
summary: General ruby templating with json, bson, xml and msgpack support
|