solidus_prismic 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7de04219212949a3f62aabd1878861ae382e4699
4
+ data.tar.gz: 993c76e94a0cdc14f9149f4570728115b44ad9c9
5
+ SHA512:
6
+ metadata.gz: 1bc896500242600e6bf059b32ac97793931bee687be4f111ba3edac513575c097022177f505aee8ca2ea16b9165f2c55ea976ead0d6e415abdd00e2b946a1a0b
7
+ data.tar.gz: dac6f867f1ba5d92f9f4c5d87d829bea83aaced8b793af53f5cbf344170e082160c2f638762199541801e30e95f2968d29cbeff4a92da38e6c662b7b2c19cc63
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2017 Deseret Book
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,157 @@
1
+ # Solidus Prismic
2
+
3
+ [Prismic.io](https://prismic.io) Client for use in Solidus based applications.
4
+ Prismic is a CMS Backend that can be used to suplement your site with additional
5
+ content. That content can be updated through Prismic allowing you to make changes
6
+ to your site without a deploy.
7
+
8
+ ## Installation
9
+
10
+ Add solidus_prismic to your Gemfile:
11
+
12
+ ```ruby
13
+ gem 'solidus_prismic'
14
+ ```
15
+
16
+ Then, run bundle install.
17
+
18
+ Create an account and repository at [Prismic.io](https://prismic.io)
19
+
20
+ After that's done, you need to set additional environment variables:
21
+ ```
22
+ # These values are found at: https://yourapp.prismic.io/settings/apps/
23
+ PRISMIC_API_URL=https://yourapp.prismic.io/api # Required
24
+ PRISMIC_ACCESS_TOKEN=123FAKE456 # Only required if using a private API or preview refs
25
+ ```
26
+
27
+ ## Example
28
+
29
+ _NOTE: This is an example of one way to use Prismic to add content to your sites.
30
+ You can do any number of things as long as you can model the data in Prismic and
31
+ set up a mechanism to render it in your store. This is an example of adding custom
32
+ content to a Product page._
33
+
34
+ Create a Repeatable Custom Type in Prismic called `Products`
35
+
36
+ Edit the Product Type using the JSON editor tab on the right and paste this:
37
+
38
+ ```
39
+ {
40
+ "Main" : {
41
+ "uid" : {
42
+ "type" : "UID",
43
+ "config" : {
44
+ "label" : "Product Slug",
45
+ "placeholder" : "Product Slug"
46
+ }
47
+ },
48
+ "title" : {
49
+ "type" : "StructuredText",
50
+ "config" : {
51
+ "single" : "heading1",
52
+ "label" : "Title",
53
+ "placeholder" : "title"
54
+ }
55
+ },
56
+ "description" : {
57
+ "type" : "StructuredText",
58
+ "config" : {
59
+ "multi" : "paragraph, preformatted, heading1, heading2, heading3, heading4, heading5, heading6, strong, em, hyperlink, image, embed, list-item, o-list-item, o-list-item",
60
+ "label" : "Description",
61
+ "placeholder" : "Description"
62
+ }
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ The UID field which will translate to the Product Slug in Solidus as a unique identifier and label.
69
+ The Title field gives allows for a custom Product Title
70
+ The Description field gives allows for a custom Product Description
71
+
72
+ Hit Save at the top.
73
+
74
+ Go to your Solidus app
75
+
76
+ Add `include PrismicHelper` to `Spree::ProductsController`:
77
+
78
+ ```
79
+ # app/controllers/spree/products_controller_decorator.rb
80
+
81
+ Spree::ProductsController.class_eval do
82
+ include PrismicHelper
83
+
84
+ before_action :get_prismic_documents, only: :show
85
+
86
+ ##
87
+ # Retrieve Prismic Document for the current @product
88
+ #
89
+ def get_prismic_documents
90
+ @prismic_document = prismic_api.get_by_uid 'products', @product.slug
91
+ end
92
+ end
93
+ ```
94
+
95
+ Now that you have your Prismic Document you can add that custom data to your Product page:
96
+
97
+ ```
98
+ <%# views/spree/products/show.html.erb %>
99
+
100
+ <% cache [I18n.locale, current_pricing_options, @product] do %>
101
+ <div data-hook="product_show" itemscope itemtype="http://schema.org/Product">
102
+ <% @body_id = 'product-details' %>
103
+
104
+ <div class="columns six alpha" data-hook="product_left_part">
105
+ ...
106
+ </div>
107
+
108
+ <div class="columns ten omega" data-hook="product_right_part">
109
+ <div class="row" data-hook="product_right_part_wrap">
110
+
111
+ <div id="product-description" data-hook="product_description">
112
+
113
+ <!-- Check for Custom Prismic Data or render from Database -->
114
+ <h1 class="product-title" itemprop="name">
115
+ <% if @prismic_document&.fragments['title'].present? %>
116
+ <%= @prismic_document.fragments['title'].as_text %>
117
+ <% else %>
118
+ <%= @product.name %>
119
+ <% end %>
120
+ </h1>
121
+
122
+ <div itemprop="description" data-hook="description">
123
+ <% if @prismic_document&.fragments['description'].present? %>
124
+ <%= @prismic_document.fragments['description'].as_text %>
125
+ <% else %>
126
+ <%= product_description(@product) rescue Spree.t(:product_has_no_description) %>
127
+ <% end %>
128
+ </div>
129
+ <!-- End Prismic -->
130
+
131
+ <div id="cart-form" data-hook="cart_form">
132
+ <%= render partial: 'cart_form' %>
133
+ </div>
134
+
135
+ </div>
136
+
137
+ <%= render partial: 'taxons' %>
138
+
139
+ </div>
140
+ </div>
141
+
142
+ </div>
143
+ <% end %>
144
+ ```
145
+
146
+ Use the `include PrismicHelper` on any file that you want to retrieve Prismic data from.
147
+
148
+ ## Testing
149
+
150
+ First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs, and [Rubocop](https://github.com/bbatsov/rubocop) static code analysis. The dummy app can be regenerated by using `rake test_app`.
151
+
152
+ ```shell
153
+ bundle
154
+ bundle exec rake
155
+ ```
156
+
157
+ Copyright (c) 2017 Deseret Book, released under the New BSD License
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'bundler'
2
+
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ begin
6
+ require 'spree/testing_support/extension_rake'
7
+ require 'rubocop/rake_task'
8
+ require 'rspec/core/rake_task'
9
+
10
+ RSpec::Core::RakeTask.new(:spec)
11
+
12
+ RuboCop::RakeTask.new
13
+
14
+ task default: %i(first_run rubocop spec)
15
+ rescue LoadError
16
+ # no rspec available
17
+ end
18
+
19
+ task :first_run do
20
+ if Dir['spec/dummy'].empty?
21
+ Rake::Task[:test_app].invoke
22
+ Dir.chdir('../../')
23
+ end
24
+ end
25
+
26
+ desc 'Generates a dummy app for testing'
27
+ task :test_app do
28
+ ENV['LIB_NAME'] = 'solidus_prismic'
29
+ Rake::Task['extension:test_app'].invoke
30
+ end
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js'
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/backend/all.css'
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -0,0 +1,70 @@
1
+ module PrismicHelper
2
+ require 'prismic'
3
+
4
+ ##
5
+ # Setting @ref as the actual ref id being queried, even if it's the master ref.
6
+ # To be used to call the API, for instance: api.form('everything').submit(ref)
7
+ # If we fail to initialize the Prismic API we return the last successful ref
8
+ # stored in Rails cache
9
+ #
10
+ def prismic_ref
11
+ if api.nil?
12
+ @ref = Rails.cache.fetch('prismic_ref')
13
+ else
14
+ master_ref = api.master_ref.ref
15
+ Rails.cache.write('prismic_ref', master_ref)
16
+ @ref ||= preview_ref || experiment_ref || master_ref
17
+ end
18
+ end
19
+
20
+ ##
21
+ # Access and initialization of the Prismic::API object.
22
+ #
23
+ def prismic_api
24
+ prismic_url = ENV['PRISMIC_API_URL']
25
+ @api ||= Prismic.api(prismic_url, ENV['PRISMIC_ACCESS_TOKEN'])
26
+ rescue Prismic::API::PrismicWSConnectionError,
27
+ Prismic::API::BadPrismicResponseError,
28
+ Prismic::API::PrismicWSAuthError,
29
+ Net::OpenTimeout => e
30
+ Rails.logger.error e
31
+ @api = nil
32
+ end
33
+
34
+ private
35
+
36
+ ##
37
+ # Returns the ref of the user's Prismic preview token
38
+ #
39
+ def preview_ref
40
+ preview_token = params[:token]
41
+ if preview_token
42
+ cookies[Prismic::PREVIEW_COOKIE] = { value: preview_token, expires: 30.minutes.from_now }
43
+ preview_token
44
+ elsif request.cookies.key?(Prismic::PREVIEW_COOKIE)
45
+ request.cookies[Prismic::PREVIEW_COOKIE]
46
+ end
47
+ end
48
+
49
+ ##
50
+ # Returns the ref for the Prismic experiment the user is part of
51
+ #
52
+ def experiment_ref
53
+ experiments = api.experiments.current
54
+ if experiments
55
+ if request.cookies.key?(Prismic::EXPERIMENTS_COOKIE)
56
+ # If they are already placed into an experiment group use that
57
+ request.cookies[Prismic::EXPERIMENTS_COOKIE]
58
+ else
59
+ # Else assign them randomly to a group
60
+ ref = experiments.variations.sample.ref
61
+ cookies[Prismic::EXPERIMENTS_COOKIE] = { value: ref, expires: 1.year.from_now }
62
+ ref
63
+ end
64
+ else
65
+ # If there are no experiments remove the experiments cookie
66
+ cookies.delete Prismic::EXPERIMENTS_COOKIE
67
+ nil
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: Hello world
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Spree::Core::Engine.routes.draw do
2
+ # Add your extension routes here
3
+ end
@@ -0,0 +1,30 @@
1
+ module SolidusPrismic
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ class_option :auto_run_migrations, type: :boolean, default: false
5
+
6
+ def add_javascripts
7
+ append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_prismic\n"
8
+ append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_prismic\n"
9
+ end
10
+
11
+ def add_stylesheets
12
+ inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_prismic\n", before: /\*\//, verbose: true
13
+ inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_prismic\n", before: /\*\//, verbose: true
14
+ end
15
+
16
+ def add_migrations
17
+ run 'bundle exec rake railties:install:migrations FROM=solidus_prismic'
18
+ end
19
+
20
+ def run_migrations
21
+ run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
22
+ if run_migrations
23
+ run 'bundle exec rake db:migrate'
24
+ else
25
+ puts 'Skipping rake db:migrate, don\'t forget to run it!'
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,2 @@
1
+ require 'solidus_core'
2
+ require 'solidus_prismic/engine'
@@ -0,0 +1,20 @@
1
+ module SolidusPrismic
2
+ class Engine < Rails::Engine
3
+ require 'spree/core'
4
+ isolate_namespace Spree
5
+ engine_name 'solidus_prismic'
6
+
7
+ # use rspec for tests
8
+ config.generators do |g|
9
+ g.test_framework :rspec
10
+ end
11
+
12
+ def self.activate
13
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
14
+ Rails.configuration.cache_classes ? require(c) : load(c)
15
+ end
16
+ end
17
+
18
+ config.to_prepare(&method(:activate).to_proc)
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ # Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them.
3
+ #
4
+ # Example adding this to your spec_helper will load these Factories for use:
5
+ # require 'solidus_prismic/factories'
6
+ end
@@ -0,0 +1,3 @@
1
+ module SolidusPrismic
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,240 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_prismic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eric Saupe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: prismic.io
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capybara
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: poltergeist
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: coffee-rails
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: sass-rails
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: database_cleaner
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: factory_girl
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-rails
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
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: simplecov
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: sqlite3
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ description: Solidus Client for communicating with Prismic.io
196
+ email: esaupe@deseretbook.com
197
+ executables: []
198
+ extensions: []
199
+ extra_rdoc_files: []
200
+ files:
201
+ - LICENSE
202
+ - README.md
203
+ - Rakefile
204
+ - app/assets/javascripts/spree/backend/solidus_prismic.js
205
+ - app/assets/javascripts/spree/frontend/solidus_prismic.js
206
+ - app/assets/stylesheets/spree/backend/solidus_prismic.css
207
+ - app/assets/stylesheets/spree/frontend/solidus_prismic.css
208
+ - app/helpers/prismic_helper.rb
209
+ - config/locales/en.yml
210
+ - config/routes.rb
211
+ - lib/generators/solidus_prismic/install/install_generator.rb
212
+ - lib/solidus_prismic.rb
213
+ - lib/solidus_prismic/engine.rb
214
+ - lib/solidus_prismic/factories.rb
215
+ - lib/solidus_prismic/version.rb
216
+ homepage: https://www.deseretbook.com
217
+ licenses:
218
+ - BSD-3-Clause
219
+ metadata: {}
220
+ post_install_message:
221
+ rdoc_options: []
222
+ require_paths:
223
+ - lib
224
+ required_ruby_version: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: '0'
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ requirements: []
235
+ rubyforge_project:
236
+ rubygems_version: 2.5.2
237
+ signing_key:
238
+ specification_version: 4
239
+ summary: Solidus Prismic Client
240
+ test_files: []