coprl 3.0.0.beta.5 → 3.0.0.beta.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +11 -16
- data/.ruby-version +1 -1
- data/CHANGELOG.md +36 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +35 -39
- data/README.md +3 -3
- data/app/demo/components/snackbar.pom +9 -3
- data/coprl.gemspec +1 -2
- data/lib/coprl/presenters/api/app.rb +7 -2
- data/lib/coprl/presenters/dsl/components/base.rb +0 -1
- data/lib/coprl/presenters/dsl/definition.rb +2 -2
- data/lib/coprl/presenters/dsl/user_interface.rb +2 -2
- data/lib/coprl/presenters/helpers/rails/routes.rb +14 -0
- data/lib/coprl/presenters/helpers/rails.rb +8 -6
- data/lib/coprl/presenters/rails/concerns/coprl_partial.rb +51 -0
- data/lib/coprl/presenters/rails/engine.rb +5 -0
- data/lib/coprl/presenters/rails/railtie.rb +6 -14
- data/lib/coprl/presenters/rails/reloader.rb +15 -0
- data/lib/coprl/presenters/version.rb +1 -1
- data/lib/coprl/presenters/web_client/helpers/headers.rb +8 -6
- data/lib/coprl/presenters/web_client/helpers/rails/template_helper.rb +10 -0
- data/lib/coprl/presenters/web_client/helpers/rails.rb +1 -0
- data/lib/coprl/presenters/web_client/helpers/sinatra/template_helper.rb +20 -0
- data/lib/coprl/presenters/web_client/helpers/sinatra.rb +1 -0
- data/lib/coprl/presenters/web_client/plugin_views_path.rb +5 -5
- data/rails-engine/app/controllers/coprl_controller.rb +0 -17
- data/rails-engine/app/views/layouts/coprl.html.erb +4 -4
- data/rails-engine/config/initializers/presenters.rb +4 -2
- data/rails-engine/config/initializers/routes.rb +5 -0
- data/views/mdc/body/{_preamble.erb → _wrapper.erb} +16 -5
- data/views/mdc/components/buttons/_image.erb +1 -1
- data/views/mdc/layout.erb +4 -4
- metadata +16 -26
- data/app/demo/components/snackbar_attached.pom +0 -6
- data/views/mdc/body/_postamble.erb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 236ae7548578c302ec736e18f4bc4542d37548f4a6f6cea794b80eadb263c61d
|
4
|
+
data.tar.gz: 44da31446c80059812b1839d53ddc36d91d95d8db1ac5f8c09738aae34f9da69
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c417061bb470e7a028d82b9e699e60c96b24fee025f8fcd16c2301841ac913b6da140dad47a23c8ed7d814cf25044b2a517aff76e9e2720cc0c1bbdb5821d0a7
|
7
|
+
data.tar.gz: cde447a1e215f53bf2aec0854cac8611b05db11d49b2596a52ec1f13bd27249a84e73147a7f375a190e0bc445f17fb1508b033b3b0ad3812fa7e638772dfc3ee
|
data/.circleci/config.yml
CHANGED
@@ -7,7 +7,7 @@ jobs:
|
|
7
7
|
build:
|
8
8
|
docker:
|
9
9
|
# specify the version you desire here
|
10
|
-
- image: circleci/ruby:2.7.
|
10
|
+
- image: circleci/ruby:2.7.4-node-browsers
|
11
11
|
|
12
12
|
# Specify service dependencies here if necessary
|
13
13
|
# CircleCI maintains a library of pre-built images
|
@@ -18,28 +18,23 @@ jobs:
|
|
18
18
|
|
19
19
|
steps:
|
20
20
|
- checkout
|
21
|
-
|
22
|
-
# Download and cache dependencies
|
23
21
|
- restore_cache:
|
24
22
|
keys:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
- run:
|
30
|
-
|
31
|
-
|
32
|
-
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
33
|
-
|
23
|
+
# when lock file changes, use increasingly general patterns to restore cache
|
24
|
+
- v1-gem-cache-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
|
25
|
+
- v1-gem-cache-{{ arch }}-{{ .Branch }}-
|
26
|
+
- v1-gem-cache-{{ arch }}-
|
27
|
+
- run: gem install bundler:2.2.20
|
28
|
+
- run: bundle install
|
29
|
+
- run: bundle clean --force
|
34
30
|
- save_cache:
|
35
31
|
paths:
|
36
|
-
-
|
37
|
-
key: v1-
|
38
|
-
|
32
|
+
- ~/.bundle
|
33
|
+
key: v1-gem-cache-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }}
|
39
34
|
- run:
|
40
35
|
name: 'start integration testing server'
|
41
36
|
command: |
|
42
|
-
rackup
|
37
|
+
bundle exec rackup
|
43
38
|
background: true
|
44
39
|
|
45
40
|
# run tests!
|
data/.ruby-version
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
2.7.
|
1
|
+
2.7.4
|
2
2
|
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,39 @@
|
|
1
|
+
# [3.0.0-beta.9](https://github.com/rx/presenters/compare/v3.0.0-beta.8...v3.0.0-beta.9) (2021-09-21)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* added support for api base base_url ([8f69979](https://github.com/rx/presenters/commit/8f699793de899a450df5cfb8b95015a832200178))
|
7
|
+
* fixed bug in context prep for api client ([d0558cf](https://github.com/rx/presenters/commit/d0558cf3966a9bdc91bd9d106dcb0a7ab6f56c34))
|
8
|
+
|
9
|
+
# [3.0.0-beta.8](https://github.com/rx/presenters/compare/v3.0.0-beta.7...v3.0.0-beta.8) (2021-09-17)
|
10
|
+
|
11
|
+
|
12
|
+
### Bug Fixes
|
13
|
+
|
14
|
+
* added check for engine coprl_presenters_rails_engine_url ([d2ee7b5](https://github.com/rx/presenters/commit/d2ee7b5900a256c30e6715d1246639dec682ff08))
|
15
|
+
|
16
|
+
# [3.0.0-beta.7](https://github.com/rx/presenters/compare/v3.0.0-beta.6...v3.0.0-beta.7) (2021-07-09)
|
17
|
+
|
18
|
+
|
19
|
+
### Bug Fixes
|
20
|
+
|
21
|
+
* Rails routes automatically made available as helpers ([#322](https://github.com/rx/presenters/issues/322)) ([abb0031](https://github.com/rx/presenters/commit/abb00311940fda8741459f8aafe29cd7bf074b88))
|
22
|
+
* view paths issue when using partials with Rails Engine ([#321](https://github.com/rx/presenters/issues/321)) ([2a917e7](https://github.com/rx/presenters/commit/2a917e7076895037e5a069e77525ef53d2ca45f1))
|
23
|
+
|
24
|
+
|
25
|
+
### Features
|
26
|
+
|
27
|
+
* switch to use Rails built-in watchers and reloader ([#320](https://github.com/rx/presenters/issues/320)) ([53e0ee4](https://github.com/rx/presenters/commit/53e0ee49caa663ce93ff731c280bcd754da73fc1))
|
28
|
+
|
29
|
+
# [3.0.0-beta.6](https://github.com/rx/presenters/compare/v3.0.0-beta.5...v3.0.0-beta.6) (2021-06-23)
|
30
|
+
|
31
|
+
|
32
|
+
### Bug Fixes
|
33
|
+
|
34
|
+
* fixed typo on if check ([95b3091](https://github.com/rx/presenters/commit/95b3091365a853eee24e4bce0e37b182da1fdc3d))
|
35
|
+
* small tweaks to simplify the presenters wrappers ([#319](https://github.com/rx/presenters/issues/319)) ([cbf0c7c](https://github.com/rx/presenters/commit/cbf0c7c4c80d68ecc84a2989934d2d02e8a1a928))
|
36
|
+
|
1
37
|
# [3.0.0-beta.5](https://github.com/rx/presenters/compare/v3.0.0-beta.4...v3.0.0-beta.5) (2021-06-18)
|
2
38
|
|
3
39
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -30,7 +30,7 @@ GIT
|
|
30
30
|
|
31
31
|
GIT
|
32
32
|
remote: https://github.com/coprl/foo_presenter_plugin.git
|
33
|
-
revision:
|
33
|
+
revision: 6f1d796bf030bf69fca87777d28bdee63e9880d8
|
34
34
|
specs:
|
35
35
|
foo_presenter_plugin (0.0.2)
|
36
36
|
|
@@ -80,11 +80,10 @@ GIT
|
|
80
80
|
PATH
|
81
81
|
remote: .
|
82
82
|
specs:
|
83
|
-
coprl (
|
83
|
+
coprl (3.0.0.beta.8)
|
84
84
|
dry-configurable (> 0.1, <= 7.0)
|
85
85
|
dry-container (~> 0.6)
|
86
86
|
dry-inflector (~> 0.1)
|
87
|
-
filewatcher (~> 1.1.1)
|
88
87
|
ice_nine (~> 0.11)
|
89
88
|
redcarpet (~> 3.4)
|
90
89
|
sinatra (>= 1.4, < 3.0)
|
@@ -99,34 +98,30 @@ GEM
|
|
99
98
|
childprocess (3.0.0)
|
100
99
|
coderay (1.1.2)
|
101
100
|
concurrent-ruby (1.1.9)
|
102
|
-
diff-lcs (1.
|
101
|
+
diff-lcs (1.4.4)
|
103
102
|
docile (1.3.1)
|
104
103
|
dotenv (2.7.6)
|
105
|
-
dry-configurable (0.
|
104
|
+
dry-configurable (0.13.0)
|
106
105
|
concurrent-ruby (~> 1.0)
|
107
|
-
dry-core (~> 0.
|
108
|
-
dry-container (0.
|
106
|
+
dry-core (~> 0.6)
|
107
|
+
dry-container (0.9.0)
|
109
108
|
concurrent-ruby (~> 1.0)
|
110
|
-
dry-configurable (~> 0.
|
111
|
-
dry-core (0.
|
109
|
+
dry-configurable (~> 0.13, >= 0.13.0)
|
110
|
+
dry-core (0.7.1)
|
112
111
|
concurrent-ruby (~> 1.0)
|
113
|
-
dry-inflector (0.2.
|
114
|
-
filewatcher (1.1.1)
|
115
|
-
optimist (~> 3.0)
|
116
|
-
gem-release (2.0.1)
|
112
|
+
dry-inflector (0.2.1)
|
117
113
|
ice_nine (0.11.2)
|
118
114
|
json (2.3.1)
|
119
115
|
method_source (0.9.0)
|
120
|
-
mini_portile2 (2.5.
|
116
|
+
mini_portile2 (2.5.3)
|
121
117
|
mustermann (1.1.1)
|
122
118
|
ruby2_keywords (~> 0.0.1)
|
123
119
|
nio4r (2.5.7)
|
124
|
-
nokogiri (1.11.
|
120
|
+
nokogiri (1.11.7)
|
125
121
|
mini_portile2 (~> 2.5.0)
|
126
122
|
racc (~> 1.4)
|
127
|
-
nokogiri (1.11.
|
123
|
+
nokogiri (1.11.7-x86_64-darwin)
|
128
124
|
racc (~> 1.4)
|
129
|
-
optimist (3.0.1)
|
130
125
|
pry (0.11.3)
|
131
126
|
coderay (~> 1.1.0)
|
132
127
|
method_source (~> 0.9.0)
|
@@ -145,27 +140,27 @@ GEM
|
|
145
140
|
rack (>= 1.0, < 3)
|
146
141
|
rake (13.0.1)
|
147
142
|
redcarpet (3.5.1)
|
148
|
-
regexp_parser (1.
|
149
|
-
rspec (3.
|
150
|
-
rspec-core (~> 3.
|
151
|
-
rspec-expectations (~> 3.
|
152
|
-
rspec-mocks (~> 3.
|
153
|
-
rspec-core (3.
|
154
|
-
rspec-support (~> 3.
|
155
|
-
rspec-expectations (3.
|
143
|
+
regexp_parser (2.1.1)
|
144
|
+
rspec (3.10.0)
|
145
|
+
rspec-core (~> 3.10.0)
|
146
|
+
rspec-expectations (~> 3.10.0)
|
147
|
+
rspec-mocks (~> 3.10.0)
|
148
|
+
rspec-core (3.10.1)
|
149
|
+
rspec-support (~> 3.10.0)
|
150
|
+
rspec-expectations (3.10.1)
|
156
151
|
diff-lcs (>= 1.2.0, < 2.0)
|
157
|
-
rspec-support (~> 3.
|
152
|
+
rspec-support (~> 3.10.0)
|
158
153
|
rspec-html-matchers (0.9.1)
|
159
154
|
nokogiri (~> 1)
|
160
155
|
rspec (>= 3.0.0.a, < 4)
|
161
|
-
rspec-mocks (3.
|
156
|
+
rspec-mocks (3.10.2)
|
162
157
|
diff-lcs (>= 1.2.0, < 2.0)
|
163
|
-
rspec-support (~> 3.
|
164
|
-
rspec-support (3.
|
158
|
+
rspec-support (~> 3.10.0)
|
159
|
+
rspec-support (3.10.2)
|
165
160
|
rspec_junit_formatter (0.4.1)
|
166
161
|
rspec-core (>= 2, < 4, != 2.12.0)
|
167
|
-
ruby2_keywords (0.0.
|
168
|
-
rubyzip (
|
162
|
+
ruby2_keywords (0.0.5)
|
163
|
+
rubyzip (2.3.0)
|
169
164
|
selenium-webdriver (3.142.7)
|
170
165
|
childprocess (>= 0.5, < 4.0)
|
171
166
|
rubyzip (>= 1.2.2)
|
@@ -183,19 +178,20 @@ GEM
|
|
183
178
|
tilt (~> 2.0)
|
184
179
|
thor (1.1.0)
|
185
180
|
tilt (2.0.10)
|
181
|
+
timecop (0.9.4)
|
186
182
|
tzinfo (2.0.4)
|
187
183
|
concurrent-ruby (~> 1.0)
|
188
184
|
tzinfo-data (1.2021.1)
|
189
185
|
tzinfo (>= 1.0.0)
|
190
|
-
watir (6.
|
191
|
-
regexp_parser (
|
192
|
-
selenium-webdriver (
|
186
|
+
watir (6.19.1)
|
187
|
+
regexp_parser (>= 1.2, < 3)
|
188
|
+
selenium-webdriver (>= 3.142.7)
|
193
189
|
watir-rspec (3.0.0)
|
194
190
|
rspec (~> 3.0)
|
195
191
|
watir (>= 6.0.0.beta4)
|
196
|
-
webdrivers (4.
|
192
|
+
webdrivers (4.6.0)
|
197
193
|
nokogiri (~> 1.6)
|
198
|
-
rubyzip (
|
194
|
+
rubyzip (>= 1.3.0)
|
199
195
|
selenium-webdriver (>= 3.0, < 4.0)
|
200
196
|
zeitwerk (2.4.2)
|
201
197
|
|
@@ -213,7 +209,6 @@ DEPENDENCIES
|
|
213
209
|
coprl!
|
214
210
|
dotenv
|
215
211
|
foo_presenter_plugin!
|
216
|
-
gem-release (~> 2.0)
|
217
212
|
google_maps_presenter_plugin!
|
218
213
|
iframe_presenter_plugin!
|
219
214
|
image_crop_presenter_plugin!
|
@@ -233,13 +228,14 @@ DEPENDENCIES
|
|
233
228
|
shotgun (~> 0.9)
|
234
229
|
simplecov
|
235
230
|
thor (~> 1.1.0)
|
231
|
+
timecop (~> 0.9.4)
|
236
232
|
timer_presenter_plugin!
|
237
|
-
watir (~> 6.
|
233
|
+
watir (~> 6.19)
|
238
234
|
watir-rspec (~> 3.0)
|
239
235
|
webdrivers (~> 4.1)
|
240
236
|
|
241
237
|
RUBY VERSION
|
242
|
-
ruby 2.7.
|
238
|
+
ruby 2.7.4p191
|
243
239
|
|
244
240
|
BUNDLED WITH
|
245
241
|
2.2.20
|
data/README.md
CHANGED
@@ -101,13 +101,13 @@ You need to add the following to your layout to use presenters as a partial alon
|
|
101
101
|
##### Inside the <head> tag add the following:
|
102
102
|
|
103
103
|
<title><%= @pom.page.title if @pom.page %></title>
|
104
|
-
<%= coprl_headers
|
104
|
+
<%= coprl_headers %>
|
105
105
|
|
106
106
|
##### Inside the <body> tag, around you existing yield add the following:
|
107
107
|
|
108
|
-
<%=
|
108
|
+
<%= with_presenters_wrapper do %>
|
109
109
|
<%= yield %>
|
110
|
-
<%=
|
110
|
+
<%= end %>
|
111
111
|
|
112
112
|
### Rack
|
113
113
|
#### 1) To use it, add this line to your Gemfile:
|
@@ -8,10 +8,10 @@ Coprl::Presenters.define(:snackbar) do
|
|
8
8
|
|
9
9
|
indented_grid do
|
10
10
|
title 'On Page'
|
11
|
-
body 'You can attach a snackbar on the server side and will render after load.'
|
11
|
+
body 'You can invoke or attach a snackbar on the server side and will render after load.'
|
12
12
|
snackbar 'Top Level Important Information!'
|
13
|
-
|
14
|
-
attach :snackbar_attached
|
13
|
+
# This is the same as above -- see POM at end of file
|
14
|
+
# attach :snackbar_attached
|
15
15
|
|
16
16
|
title 'As Event'
|
17
17
|
button 'Show Snackbar', id: :show_snackbar do
|
@@ -33,3 +33,9 @@ Coprl::Presenters.define(:snackbar) do
|
|
33
33
|
|
34
34
|
attach :code, file: __FILE__
|
35
35
|
end
|
36
|
+
|
37
|
+
# Coprl::Presenters.define(:snackbar_attached) do
|
38
|
+
# title 'In Attached'
|
39
|
+
# body 'This can be done in an attached presenter as well'
|
40
|
+
# snackbar 'Attached Snackbar Displayed!'
|
41
|
+
# end
|
data/coprl.gemspec
CHANGED
@@ -28,7 +28,6 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_runtime_dependency 'tzinfo', '>=1.1', '< 3.0'
|
29
29
|
spec.add_runtime_dependency 'tzinfo-data', '~>1.2018'
|
30
30
|
spec.add_runtime_dependency 'redcarpet', '~>3.4'
|
31
|
-
spec.add_runtime_dependency 'filewatcher', '~> 1.1.1'
|
32
31
|
spec.add_runtime_dependency 'zeitwerk', '~> 2.1'
|
33
32
|
|
34
33
|
spec.add_development_dependency 'thor', '~> 1.1.0'
|
@@ -38,6 +37,6 @@ Gem::Specification.new do |spec|
|
|
38
37
|
spec.add_development_dependency 'bundler', '>= 1.13'
|
39
38
|
spec.add_development_dependency 'rake', '~> 13.0'
|
40
39
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
41
|
-
spec.add_development_dependency 'gem-release', '~> 2.0'
|
42
40
|
spec.add_development_dependency 'shotgun', '~> 0.9'
|
41
|
+
spec.add_development_dependency 'timecop', '~> 0.9.4 '
|
43
42
|
end
|
@@ -66,9 +66,9 @@ module Coprl
|
|
66
66
|
|
67
67
|
def prepare_context(base_params = params)
|
68
68
|
prepare_context = Presenters::Settings.config.presenters.web_client.prepare_context.dup
|
69
|
-
prepare_context.push(method(:scrub_context))
|
69
|
+
prepare_context.push(method(:scrub_context)).push(method(:base_url_context))
|
70
70
|
context = base_params.dup
|
71
|
-
prepare_context.reduce(context) do |params, context_proc|
|
71
|
+
context = prepare_context.reduce(context) do |params, context_proc|
|
72
72
|
context_proc.call(params, session, env)
|
73
73
|
end
|
74
74
|
context
|
@@ -80,6 +80,11 @@ module Coprl
|
|
80
80
|
end
|
81
81
|
params
|
82
82
|
end
|
83
|
+
|
84
|
+
def base_url_context(params, _session, env)
|
85
|
+
params[:base_url] = "#{request.base_url}#{env['SCRIPT_NAME']}"
|
86
|
+
params
|
87
|
+
end
|
83
88
|
end
|
84
89
|
end
|
85
90
|
end
|
@@ -17,8 +17,8 @@ module Coprl
|
|
17
17
|
self
|
18
18
|
end
|
19
19
|
|
20
|
-
def expand(router: , context:{}, &block)
|
21
|
-
presenter = UserInterface.new(router: router, context: context,
|
20
|
+
def expand(router: , context:{}, plugins: [], &block)
|
21
|
+
presenter = UserInterface.new(router: router, context: context, plugins: plugins, name: @name, namespace: @namespace, &@block)
|
22
22
|
yield(presenter) if block
|
23
23
|
presenter.expand_instance
|
24
24
|
end
|
@@ -25,7 +25,7 @@ module Coprl
|
|
25
25
|
private :context, :router, :namespace
|
26
26
|
alias params context
|
27
27
|
|
28
|
-
def initialize(context:, parent: nil, router: nil, name: nil, namespace: [], &block)
|
28
|
+
def initialize(context:, parent: nil, router: nil, name: nil, plugins: [], namespace: [], &block)
|
29
29
|
@parent = parent
|
30
30
|
@router = router || @parent&.send(:router)
|
31
31
|
@context = context || {}
|
@@ -36,7 +36,7 @@ module Coprl
|
|
36
36
|
@footer = nil
|
37
37
|
@name = name
|
38
38
|
@namespace = namespace
|
39
|
-
@plugins = []
|
39
|
+
@plugins = plugins || []
|
40
40
|
@csrf_meta_tags = authenticity_token_meta_tags(@context.fetch(:session, nil))
|
41
41
|
add_global_helpers
|
42
42
|
initialize_plugins
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Coprl
|
2
|
+
module Presenters
|
3
|
+
module Helpers
|
4
|
+
module Rails
|
5
|
+
module Routes
|
6
|
+
include ::Rails.application.routes.url_helpers
|
7
|
+
def default_url_options
|
8
|
+
::Rails.application.config.action_controller.default_url_options || { :host => context[:base_url] ? context[:base_url] : context[:request].host_with_port }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -6,18 +6,20 @@ if defined?(Rails)
|
|
6
6
|
include ActionView::Helpers::AssetUrlHelper
|
7
7
|
include Coprl::Presenters::Helpers::Rails::Currency
|
8
8
|
include Coprl::Presenters::Helpers::Rails::ModelTable
|
9
|
+
include Coprl::Presenters::Helpers::Rails::Routes
|
9
10
|
include Namespace
|
10
11
|
|
11
|
-
def default_url_options
|
12
|
-
{}
|
13
|
-
end
|
14
|
-
|
15
12
|
def presenters_path(presenter, host: false, **params)
|
16
13
|
presenter = _expand_namespace_(presenter, namespace)
|
17
14
|
presenter = presenter.gsub(':', '/')
|
18
15
|
|
19
|
-
path =
|
20
|
-
|
16
|
+
path = if defined?(coprl_presenters_rails_engine_url)
|
17
|
+
host ? coprl_presenters_rails_engine_url(params, host: router.base_url) :
|
18
|
+
coprl_presenters_rails_engine_path(params)
|
19
|
+
else
|
20
|
+
host ? coprl_presenters_web_client_app_url(params, host: router.base_url) :
|
21
|
+
coprl_presenters_web_client_app_path(params)
|
22
|
+
end
|
21
23
|
|
22
24
|
if path.include?('?')
|
23
25
|
path = path.sub('?', "#{presenter}?")
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Coprl
|
2
|
+
module Presenters
|
3
|
+
module Rails
|
4
|
+
module Concerns
|
5
|
+
module CoprlPartial
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
before_action :set_view_path
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
@plugins = []
|
14
|
+
def presenter_plugin(*plugins)
|
15
|
+
@plugins += Array(plugins)
|
16
|
+
end
|
17
|
+
|
18
|
+
def plugins
|
19
|
+
@plugins
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def set_view_path
|
24
|
+
paths = Coprl::Presenters::WebClient::PluginViewsPath.new(pom: nil, plugins: self.class.plugins).render
|
25
|
+
paths.each do |path|
|
26
|
+
prepend_view_path path
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def prepare_context(base_params = params)
|
31
|
+
prepare_context = Coprl::Presenters::Settings.config.presenters.web_client.prepare_context.dup
|
32
|
+
prepare_context.push(method(:scrub_context))
|
33
|
+
context = base_params.dup.to_unsafe_hash
|
34
|
+
prepare_context.reduce(context) do |params, context_proc|
|
35
|
+
context = context_proc.call(params, session, request.env)
|
36
|
+
end
|
37
|
+
context
|
38
|
+
end
|
39
|
+
|
40
|
+
def scrub_context(params, _session, _env)
|
41
|
+
%i(grid_nesting input_tag).each do |key|
|
42
|
+
params.delete(key) {params.delete(key.to_s)}
|
43
|
+
end
|
44
|
+
params
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -12,6 +12,11 @@ module Coprl
|
|
12
12
|
# TODO: should rename these since they are common names that are likely going to collide
|
13
13
|
app.middleware.use ::ActionDispatch::Static, File.join(root, '..', 'public')
|
14
14
|
end
|
15
|
+
|
16
|
+
ActiveSupport.on_load(:action_controller) do
|
17
|
+
include Concerns::CoprlPartial
|
18
|
+
end
|
19
|
+
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'filewatcher'
|
2
|
-
|
3
1
|
module Coprl
|
4
2
|
module Presenters
|
5
3
|
module Rails
|
@@ -15,20 +13,14 @@ module Coprl
|
|
15
13
|
|
16
14
|
WATCH = -> {
|
17
15
|
return unless ::Rails.env.development?
|
16
|
+
|
18
17
|
path = ::Rails.root.join('app', '**', '*.pom')
|
19
|
-
|
20
|
-
|
21
|
-
Thread.new(filewatcher) do |fw|
|
22
|
-
fw.watch do |f|
|
23
|
-
puts "Detected updated POM file: #{f}"
|
24
|
-
begin
|
25
|
-
BOOT.call
|
26
|
-
rescue Exception => exc
|
27
|
-
puts exc.backtrace
|
28
|
-
puts exc.message
|
29
|
-
end
|
30
|
-
end
|
18
|
+
file_watcher = ActiveSupport::FileUpdateChecker.new(Dir[path]) do
|
19
|
+
BOOT.call
|
31
20
|
end
|
21
|
+
|
22
|
+
::Rails.application.reloaders << Reloader.new(file_watcher)
|
23
|
+
|
32
24
|
} unless defined?(WATCH)
|
33
25
|
|
34
26
|
config.after_initialize do
|
@@ -2,16 +2,18 @@ module Coprl::Presenters::WebClient::Helpers
|
|
2
2
|
module Headers
|
3
3
|
include Coprl::Presenters::WebClient::Helpers::HtmlSafe
|
4
4
|
|
5
|
-
def coprl_headers
|
5
|
+
def coprl_headers
|
6
|
+
return unless @pom
|
7
|
+
|
6
8
|
html_safe (<<~HEADERS)
|
7
9
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" type="text/css">
|
8
10
|
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
|
9
11
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css" integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz" crossorigin="anonymous">
|
10
|
-
<link rel="stylesheet" href="#{ base_url }/#{ request.env['SCRIPT_NAME'] }bundle.css">
|
11
|
-
<script defer src="#{ base_url }/#{ request.env['SCRIPT_NAME'] }bundle.js"></script>
|
12
|
-
#{plugin_headers(pom)}
|
13
|
-
#{custom_css(request.env['REQUEST_PATH'], base_url)}
|
14
|
-
#{pom.csrf_meta_tags}
|
12
|
+
<link rel="stylesheet" href="#{ @base_url }/#{ request.env['SCRIPT_NAME'] }bundle.css">
|
13
|
+
<script defer src="#{ @base_url }/#{ request.env['SCRIPT_NAME'] }bundle.js"></script>
|
14
|
+
#{plugin_headers(@pom)}
|
15
|
+
#{custom_css(request.env['REQUEST_PATH'], @base_url)}
|
16
|
+
#{@pom.csrf_meta_tags}
|
15
17
|
HEADERS
|
16
18
|
end
|
17
19
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Coprl::Presenters::WebClient::Helpers::Rails
|
2
|
+
module TemplateHelper
|
3
|
+
def with_presenters_wrapper(&block)
|
4
|
+
render partial: 'body/wrapper', locals: {
|
5
|
+
body_content: capture(&block), header: @pom&.header, drawer: @pom&.drawer,
|
6
|
+
footer: @pom&.footer
|
7
|
+
}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Coprl::Presenters::WebClient::Helpers::Sinatra
|
2
|
+
module TemplateHelper
|
3
|
+
def with_presenters_wrapper(&block)
|
4
|
+
buffer << partial("body/wrapper", locals: {
|
5
|
+
body_content: capture(buffer, &block), header: @pom&.header, drawer: @pom&.drawer,
|
6
|
+
footer: @pom&.footer
|
7
|
+
})
|
8
|
+
end
|
9
|
+
|
10
|
+
def buffer()
|
11
|
+
@_out_buf
|
12
|
+
end
|
13
|
+
|
14
|
+
def capture(buffer)
|
15
|
+
pos = buffer.size
|
16
|
+
yield
|
17
|
+
buffer.slice!(pos..buffer.size)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -8,17 +8,17 @@ module Coprl
|
|
8
8
|
extend Pluggable
|
9
9
|
include_plugins(:WebClientComponents)
|
10
10
|
|
11
|
-
def initialize(pom:)
|
11
|
+
def initialize(pom: nil, plugins: nil)
|
12
12
|
@pom = pom
|
13
|
+
@plugins = plugins || []
|
13
14
|
initialize_plugins
|
14
15
|
end
|
15
16
|
|
16
17
|
def render
|
17
18
|
results = []
|
18
|
-
(
|
19
|
+
(@plugins + Coprl::Presenters::Settings.config.presenters.plugins).each do |plugin|
|
19
20
|
view_dir_method = :"view_dir_#{plugin}"
|
20
|
-
results << send(view_dir_method,
|
21
|
-
@pom) if respond_to?(view_dir_method)
|
21
|
+
results << send(view_dir_method, @pom) if respond_to?(view_dir_method)
|
22
22
|
end
|
23
23
|
results
|
24
24
|
end
|
@@ -26,7 +26,7 @@ module Coprl
|
|
26
26
|
private
|
27
27
|
|
28
28
|
def initialize_plugins
|
29
|
-
@plugins
|
29
|
+
@plugins += @pom.send(:plugins) if @pom
|
30
30
|
self.class.include_plugins(:WebClientComponents, plugins: @plugins)
|
31
31
|
end
|
32
32
|
end
|
@@ -23,21 +23,4 @@ class CoprlController < ApplicationController
|
|
23
23
|
prepend_view_path path
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
27
|
-
def prepare_context(base_params = params)
|
28
|
-
prepare_context = Coprl::Presenters::Settings.config.presenters.web_client.prepare_context.dup
|
29
|
-
prepare_context.push(method(:scrub_context))
|
30
|
-
context = base_params.dup.to_unsafe_hash
|
31
|
-
prepare_context.reduce(context) do |params, context_proc|
|
32
|
-
context = context_proc.call(params, session, request.env)
|
33
|
-
end
|
34
|
-
context
|
35
|
-
end
|
36
|
-
|
37
|
-
def scrub_context(params, _session, _env)
|
38
|
-
%i(grid_nesting input_tag).each do |key|
|
39
|
-
params.delete(key) {params.delete(key.to_s)}
|
40
|
-
end
|
41
|
-
params
|
42
|
-
end
|
43
26
|
end
|
@@ -7,14 +7,14 @@
|
|
7
7
|
<title><%= @pom.page.title if @pom.page %></title>
|
8
8
|
<meta name="description" content="">
|
9
9
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
10
|
-
<%= coprl_headers
|
10
|
+
<%= coprl_headers %>
|
11
11
|
<%= csrf_meta_tags %>
|
12
12
|
<%= csp_meta_tag if defined?(csp_meta_tag) %>
|
13
13
|
</head>
|
14
14
|
<body>
|
15
|
-
<%=
|
16
|
-
<%= yield %>
|
17
|
-
|
15
|
+
<%= with_presenters_wrapper do %>
|
16
|
+
<%= yield %>
|
17
|
+
<% end %>
|
18
18
|
<noscript><p>JavaScript must be enabled to continue.</p></noscript>
|
19
19
|
</body>
|
20
20
|
</html>
|
@@ -28,9 +28,11 @@ class CoprlTemplateHandler
|
|
28
28
|
# otherwise we need to get the presenter name built from params
|
29
29
|
presenter_name = local_assigns[:presenter] ? presenter : namespaced_presenter(params)
|
30
30
|
presenter = Coprl::Presenters::App[presenter_name].call
|
31
|
-
context =
|
31
|
+
context = self.controller.prepare_context(params)
|
32
32
|
router = Coprl::Presenters::WebClient::Router.new(base_url: request.base_url)
|
33
|
-
|
33
|
+
plugins = self.controller.class.plugins
|
34
|
+
|
35
|
+
@pom = presenter.expand(router: router, context: context, plugins: plugins)
|
34
36
|
end
|
35
37
|
#{source}
|
36
38
|
end
|
@@ -1,15 +1,10 @@
|
|
1
1
|
<%
|
2
|
-
header = pom.header
|
3
|
-
drawer = pom.drawer
|
4
|
-
footer = pom.footer
|
5
|
-
|
6
2
|
root_classes = []
|
7
3
|
root_classes << 'v-root--header-present' if header
|
8
4
|
root_classes << 'v-root--drawer-present' if drawer
|
9
5
|
root_classes << 'v-root--footer-present' if footer
|
10
6
|
%>
|
11
7
|
<div class="v-root compatibility-wrapper mdc-typography <%= root_classes.join(' ') %>">
|
12
|
-
|
13
8
|
<% if drawer %>
|
14
9
|
<div class="drawer-frame-root">
|
15
10
|
<%= partial "body/dismissable-drawer", :locals => {drawer: drawer} %>
|
@@ -22,5 +17,21 @@
|
|
22
17
|
<div class="drawer-main-content">
|
23
18
|
<%= partial "body/modal-drawer", :locals => {drawer: drawer} %>
|
24
19
|
<% end %>
|
20
|
+
|
21
|
+
<%= body_content %>
|
22
|
+
|
25
23
|
<div class="v-page-content page-content">
|
26
24
|
<div class="v-errors">
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
<% if drawer %>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
<% end %>
|
32
|
+
|
33
|
+
<%= partial "body/snackbar" %>
|
34
|
+
<% if footer %>
|
35
|
+
<%= partial "body/footer", :locals => {:footer => footer} %>
|
36
|
+
<% end %>
|
37
|
+
</div>
|
@@ -22,4 +22,4 @@
|
|
22
22
|
<%= partial "components/icon", :locals => {comp: comp.icon, class_name: 'mdc-button__icon', position: [:right, :center]} if comp.icon %>
|
23
23
|
</button>
|
24
24
|
<%= partial "components/tooltip", :locals => {comp: comp.tooltip, parent_id: comp.id} if comp.tooltip %>
|
25
|
-
<%= partial "components/menu", :locals => {comp: comp.menu, parent_id: comp.id} if comp.
|
25
|
+
<%= partial "components/menu", :locals => {comp: comp.menu, parent_id: comp.id} if comp.menu %>
|
data/views/mdc/layout.erb
CHANGED
@@ -7,12 +7,12 @@
|
|
7
7
|
<title><%= @pom.page.title if @pom.page %></title>
|
8
8
|
<meta name="description" content="">
|
9
9
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
10
|
-
<%= coprl_headers
|
10
|
+
<%= coprl_headers %>
|
11
11
|
</head>
|
12
12
|
<body class="mdc-typography">
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
<% with_presenters_wrapper do %>
|
14
|
+
<%= yield %>
|
15
|
+
<% end %>
|
16
16
|
<noscript><p>JavaScript must be enabled to continue.</p></noscript>
|
17
17
|
</body>
|
18
18
|
</html>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coprl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.beta.
|
4
|
+
version: 3.0.0.beta.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Russell Edens
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ice_nine
|
@@ -140,20 +140,6 @@ dependencies:
|
|
140
140
|
- - "~>"
|
141
141
|
- !ruby/object:Gem::Version
|
142
142
|
version: '3.4'
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: filewatcher
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
146
|
-
requirements:
|
147
|
-
- - "~>"
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: 1.1.1
|
150
|
-
type: :runtime
|
151
|
-
prerelease: false
|
152
|
-
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
requirements:
|
154
|
-
- - "~>"
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version: 1.1.1
|
157
143
|
- !ruby/object:Gem::Dependency
|
158
144
|
name: zeitwerk
|
159
145
|
requirement: !ruby/object:Gem::Requirement
|
@@ -267,33 +253,33 @@ dependencies:
|
|
267
253
|
- !ruby/object:Gem::Version
|
268
254
|
version: '3.0'
|
269
255
|
- !ruby/object:Gem::Dependency
|
270
|
-
name:
|
256
|
+
name: shotgun
|
271
257
|
requirement: !ruby/object:Gem::Requirement
|
272
258
|
requirements:
|
273
259
|
- - "~>"
|
274
260
|
- !ruby/object:Gem::Version
|
275
|
-
version: '
|
261
|
+
version: '0.9'
|
276
262
|
type: :development
|
277
263
|
prerelease: false
|
278
264
|
version_requirements: !ruby/object:Gem::Requirement
|
279
265
|
requirements:
|
280
266
|
- - "~>"
|
281
267
|
- !ruby/object:Gem::Version
|
282
|
-
version: '
|
268
|
+
version: '0.9'
|
283
269
|
- !ruby/object:Gem::Dependency
|
284
|
-
name:
|
270
|
+
name: timecop
|
285
271
|
requirement: !ruby/object:Gem::Requirement
|
286
272
|
requirements:
|
287
273
|
- - "~>"
|
288
274
|
- !ruby/object:Gem::Version
|
289
|
-
version:
|
275
|
+
version: 0.9.4
|
290
276
|
type: :development
|
291
277
|
prerelease: false
|
292
278
|
version_requirements: !ruby/object:Gem::Requirement
|
293
279
|
requirements:
|
294
280
|
- - "~>"
|
295
281
|
- !ruby/object:Gem::Version
|
296
|
-
version:
|
282
|
+
version: 0.9.4
|
297
283
|
description:
|
298
284
|
email:
|
299
285
|
- 'rx@russelledens.net
|
@@ -359,7 +345,6 @@ files:
|
|
359
345
|
- app/demo/components/selects.pom
|
360
346
|
- app/demo/components/sliders.pom
|
361
347
|
- app/demo/components/snackbar.pom
|
362
|
-
- app/demo/components/snackbar_attached.pom
|
363
348
|
- app/demo/components/steppers.pom
|
364
349
|
- app/demo/components/tab_bars.pom
|
365
350
|
- app/demo/components/tables.pom
|
@@ -598,14 +583,17 @@ files:
|
|
598
583
|
- lib/coprl/presenters/helpers/rails.rb
|
599
584
|
- lib/coprl/presenters/helpers/rails/currency.rb
|
600
585
|
- lib/coprl/presenters/helpers/rails/model_table.rb
|
586
|
+
- lib/coprl/presenters/helpers/rails/routes.rb
|
601
587
|
- lib/coprl/presenters/helpers/redact.rb
|
602
588
|
- lib/coprl/presenters/helpers/route.rb
|
603
589
|
- lib/coprl/presenters/helpers/time.rb
|
604
590
|
- lib/coprl/presenters/namespace.rb
|
605
591
|
- lib/coprl/presenters/pluggable.rb
|
606
592
|
- lib/coprl/presenters/plugins.rb
|
593
|
+
- lib/coprl/presenters/rails/concerns/coprl_partial.rb
|
607
594
|
- lib/coprl/presenters/rails/engine.rb
|
608
595
|
- lib/coprl/presenters/rails/railtie.rb
|
596
|
+
- lib/coprl/presenters/rails/reloader.rb
|
609
597
|
- lib/coprl/presenters/registry.rb
|
610
598
|
- lib/coprl/presenters/router.rb
|
611
599
|
- lib/coprl/presenters/settings.rb
|
@@ -635,6 +623,7 @@ files:
|
|
635
623
|
- lib/coprl/presenters/web_client/helpers/rails/partials.rb
|
636
624
|
- lib/coprl/presenters/web_client/helpers/rails/raw.rb
|
637
625
|
- lib/coprl/presenters/web_client/helpers/rails/safe_markdown.rb
|
626
|
+
- lib/coprl/presenters/web_client/helpers/rails/template_helper.rb
|
638
627
|
- lib/coprl/presenters/web_client/helpers/render_component.rb
|
639
628
|
- lib/coprl/presenters/web_client/helpers/shared.rb
|
640
629
|
- lib/coprl/presenters/web_client/helpers/sinatra.rb
|
@@ -643,6 +632,7 @@ files:
|
|
643
632
|
- lib/coprl/presenters/web_client/helpers/sinatra/partials.rb
|
644
633
|
- lib/coprl/presenters/web_client/helpers/sinatra/raw.rb
|
645
634
|
- lib/coprl/presenters/web_client/helpers/sinatra/safe_markdown.rb
|
635
|
+
- lib/coprl/presenters/web_client/helpers/sinatra/template_helper.rb
|
646
636
|
- lib/coprl/presenters/web_client/helpers/snake_to_camel.rb
|
647
637
|
- lib/coprl/presenters/web_client/helpers/transform_hash.rb
|
648
638
|
- lib/coprl/presenters/web_client/helpers/unique_id.rb
|
@@ -684,6 +674,7 @@ files:
|
|
684
674
|
- rails-engine/app/views/layouts/coprl.html.erb
|
685
675
|
- rails-engine/config.ru
|
686
676
|
- rails-engine/config/initializers/presenters.rb
|
677
|
+
- rails-engine/config/initializers/routes.rb
|
687
678
|
- rails-engine/config/initializers/session.rb
|
688
679
|
- rails-engine/config/routes.rb
|
689
680
|
- scripts/build.sh
|
@@ -815,9 +806,8 @@ files:
|
|
815
806
|
- views/mdc/body/_footer.erb
|
816
807
|
- views/mdc/body/_header.erb
|
817
808
|
- views/mdc/body/_modal-drawer.erb
|
818
|
-
- views/mdc/body/_postamble.erb
|
819
|
-
- views/mdc/body/_preamble.erb
|
820
809
|
- views/mdc/body/_snackbar.erb
|
810
|
+
- views/mdc/body/_wrapper.erb
|
821
811
|
- views/mdc/body/drawer/_divider.erb
|
822
812
|
- views/mdc/body/drawer/_item.erb
|
823
813
|
- views/mdc/body/drawer/_label.erb
|
@@ -949,7 +939,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
949
939
|
- !ruby/object:Gem::Version
|
950
940
|
version: 1.3.1
|
951
941
|
requirements: []
|
952
|
-
rubygems_version: 3.1.
|
942
|
+
rubygems_version: 3.1.6
|
953
943
|
signing_key:
|
954
944
|
specification_version: 4
|
955
945
|
summary: COmmon PResenter Language - A Ruby gem for joyfully writing modern user interfaces
|
@@ -1,17 +0,0 @@
|
|
1
|
-
<%
|
2
|
-
drawer = pom.drawer
|
3
|
-
footer = pom.footer
|
4
|
-
%>
|
5
|
-
</div>
|
6
|
-
</div>
|
7
|
-
<% if drawer %>
|
8
|
-
</div>
|
9
|
-
</div>
|
10
|
-
</div>
|
11
|
-
<% end %>
|
12
|
-
|
13
|
-
<%= partial "body/snackbar" %>
|
14
|
-
<% if footer %>
|
15
|
-
<%= partial "body/footer", :locals => {:footer => footer} %>
|
16
|
-
<% end %>
|
17
|
-
</div>
|