guide 0.3.2 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 05f8dc1c5a10f5db5ac53ae01566b5286cfee65a
4
- data.tar.gz: 061709b13d06de7d5e93a7e8779e3a6ae14db9c3
2
+ SHA256:
3
+ metadata.gz: 834284627905914ce52a34b58861f270d951b125471101bd83248284a247ca15
4
+ data.tar.gz: 07ea2efaf9adfa938097cafe44fdaa611e56eece4361bc9a6cb5e0549020531c
5
5
  SHA512:
6
- metadata.gz: 374bdd0e11bd950c4dfdea7060d9e718b6a5da7c1495277b95b12355d40f2a37a4b363b98ed44f30b24006d8410467e9796d61c4eb734b0e3509cdc2e1a3a2c3
7
- data.tar.gz: 255cff843ba6ef460df8a894ef37f55626b57dc7dea2941cb98a7193d38706a7df6474903c2d10053fa69e1428275235bdb687e76ae4a4bb421d9a461fad1274
6
+ metadata.gz: 4572f98d727c97126b316720edd40fd26eb87f8e3050a3f16f99744214ba5cbbee739082f2fccf6288281fc39a6d6687fb6da5cb136e979c383a5554ab55fdbc
7
+ data.tar.gz: f2fe796c35c78fd01cac15056acdaf7c8e755aa4bedff580f07f802c6dffb163d301eb600af08ef7b5ac35463d9b92c0e6a8d261f97d5fe9620defa767def067
data/README.md ADDED
@@ -0,0 +1,440 @@
1
+ # Guide gem
2
+ Document your entire user interface, not just your styles.
3
+
4
+ # Features
5
+
6
+ - Create a component library using real templates from your application
7
+ - Organise your components into a dynamic tree structure
8
+ - Fake out your backend at the view model layer
9
+ - See what each template looks like when you vary the data it receives
10
+
11
+ ## Development Status [![tests](https://github.com/envato/guide/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/envato/guide/actions/workflows/test.yml)
12
+ Guide runs in production at [Envato](https://market.styleguide.envato.com). While it is moderately mature at this stage, its API and features are still subject to changes.
13
+
14
+ ## Installation
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem 'guide'
19
+ ```
20
+
21
+ And then execute:
22
+ ```shell
23
+ $ bundle install
24
+ ```
25
+
26
+ ## Configuration
27
+ Add `/config/initializers/guide.rb`
28
+
29
+ ```Ruby
30
+ # Available options with example usage
31
+
32
+ Guide.configure do |config|
33
+ config.asset_path_for_logo = "guide/aweosme-guide-logo.svg"
34
+ config.company_name = "Your Awesome Company"
35
+ config.controller_class_to_inherit = "Guide::ControllerInjection"
36
+ config.default_stylesheets_for_structures = ['application/core/index', 'application/pages/default/index']
37
+ config.guide_name = "Your Awesome Guide"
38
+ config.helper_module_to_globally_include = 'Guide::HelperInjection'
39
+ config.local_variable_for_view_model = :view_model
40
+ config.supported_locales = {
41
+ "English" => "en",
42
+ "Portuguese" => "pt",
43
+ "Spanish" => "es",
44
+ }
45
+ end
46
+ ```
47
+
48
+ **Note:** If you are having asset compiling issues you may need to add Guide's assets to your asset precompile config e.g.
49
+
50
+ ```Ruby
51
+ # config/application.rb
52
+
53
+ config.assets.precompile += [
54
+ 'guide/application.js',
55
+ 'guide/scenario.js',
56
+ 'guide/application.css',
57
+ 'guide/scenario.css'
58
+ ]
59
+ ```
60
+
61
+
62
+ ## Build your Guide(s)
63
+
64
+ ### Architecture & Navigation
65
+
66
+ Each Guide is essentially a tree of nodes with pages that are either a `Document` or a `Structure`.
67
+
68
+ - Use `Node` for organising things in the tree without adding pages
69
+ - Use `Document` for static pages
70
+ - Use `Structure` for dynamic pages with scenarios. Each `Structure` represents a template in your application.
71
+
72
+ `content.rb` is the root node of that tree and defines your top level navigation structure.
73
+ To add child nodes, use the following DSL:
74
+
75
+ `contains :child_node_name`
76
+
77
+ This example declares that the tree contains a child node named:
78
+
79
+ `Guide::Content::ChildNodeName`
80
+
81
+ You will need to create a class for it.
82
+
83
+ All of your content should live in the `Guide::Content` namespace so that Guide can find it easily.
84
+
85
+ Feel free to redeclare the base node class in your system at the following path:
86
+
87
+ `app/<whatever_you_want>/guide/content.rb`
88
+
89
+ It needs to be a `Document` or a `Structure`, otherwise your Guide will not have a working homepage.
90
+
91
+ The convention for the subdirectory in app/ is `documentation`,
92
+ but if you don't like that, you can use something else.
93
+
94
+ We don't recommend putting it inside the standard rails directories though.
95
+
96
+ Here's an example of what `app/documentation/guide/content.rb` might look like:
97
+
98
+ ``` Ruby
99
+ # app/documentation/guide/content.rb
100
+
101
+ class Guide::Content < Guide::Document
102
+ contains :structures
103
+ contains :ui_library
104
+ contains :branding
105
+ end
106
+ ```
107
+
108
+ To specify options such as visibility, append them to the declaration:
109
+
110
+ ```Ruby
111
+ contains :structures # no visbility specified = public
112
+ contains :ui_library, :visibility => :unpublished
113
+ contains :branding, :visibility => :restricted
114
+ ```
115
+
116
+ ### Node
117
+ > A node is a point on the content tree. Everything in the content folder is a node.
118
+
119
+ ```Ruby
120
+ # app/documentation/guide/ui_library/typography
121
+
122
+ class Guide::Content::UILibrary::Typography < Guide::Node
123
+ contains :body
124
+ contains :currency
125
+ contains :heading
126
+ contains :new_experiment, :visibility => :unpublished
127
+ contains :link
128
+ contains :list
129
+ contains :preformatted
130
+ end
131
+ ```
132
+
133
+ ### Document
134
+ > This type of node has no scenarios, but is still renderable. It corresponds to a static template, usually with the same name, in the same folder.
135
+
136
+ **Supported formats**
137
+ - `html`
138
+ - `text`
139
+
140
+ ```Ruby
141
+ # app/documentation/guide/content/ui_library/typography/heading.rb
142
+
143
+ class Guide::Content::UILibrary::Typography::Heading < Guide::Document
144
+ end
145
+ ```
146
+
147
+ `app/documentation/guide/content/ui_library/typography/heading.html`
148
+ ```HTML
149
+ <div><p>Whatever you like!</p></div>
150
+ ```
151
+
152
+ ### Structure
153
+ > This type of node can manage a list of Scenarios, so that we can render a piece of the UI as it would look in lots of different situations.
154
+
155
+ For more info on how to add Structures and Scenarios, see the [wiki](https://github.com/envato/guide/wiki/Adding-Structures)
156
+
157
+ ### Scenario
158
+ > Each Scenario represents a set of data passed into the template via its view model. These let us see what our templates look like under various conditions.
159
+
160
+ ### Homepage
161
+ The homepage of your Guide is a special snowflake. Edit the contents here:
162
+ `app/documentation/guide/_content.html.erb`
163
+
164
+
165
+ ## Advanced setup
166
+ ### Linking
167
+
168
+ In order to link to other Guide pages from within your content, you will need to use the `node_path` url helper. Here are a couple of examples:
169
+
170
+ ```Ruby
171
+ <%= link_to "root level link", guide.node_path('documents') %>
172
+ <%= link_to "nested link", guide.node_path('documents/restricted') %>
173
+ ```
174
+
175
+ ### Fixtures
176
+ Fixtures are reusable data for your Structures. They can be defined once and then reused across multiple structures and scenarios.
177
+
178
+ Tip: Try to organise your fixtures in a similar way to your real view models.
179
+
180
+ Guide defines the `Guide::Fixtures` module, so if your put your fixtures in `app/documentation/guide/fixtures/` they should be autoloaded correctly.
181
+
182
+ ```Ruby
183
+ # app/documentation/guide/fixtures/common.rb
184
+
185
+ class Guide::Fixtures::Common < Guide::Fixture
186
+ def self.alert_box_view_model(options = {})
187
+ Guide::ViewModel.new(
188
+ {
189
+ :type => :notice,
190
+ :message => "You need to set a message",
191
+ }, options
192
+ )
193
+ end
194
+ end
195
+ ```
196
+
197
+ ### Injections
198
+ Injections can be used when you need to supply code to help Guide work within the context of your application.
199
+
200
+
201
+ #### Controller base class
202
+
203
+ Guide allows you to push code directly into its controllers through dependency injection. You will need to do this to be able to use most of the other code injections that Guide supports, as you'll see a bit later on.
204
+
205
+ When configuring Guide, one of the options available to you is to specify a `controller_class_to_inherit`. This does what it says. Think of it like an ApplicationController, but specific to your Guide.
206
+
207
+ The class that you supply needs to be a Rails controller, so you'll need to inherit from `ActionController::Base`.
208
+
209
+ If you choose to use this feature, remember to use unique method names. It may be helpful to take a glance at the code for Guide's controllers to make sure that you haven't got any clashes.
210
+
211
+ ```Ruby
212
+ # Controller base class injection
213
+
214
+ Guide.configure do |config|
215
+ config.controller_class_to_inherit = "Guide::ControllerInjection"
216
+ end
217
+
218
+ class Guide::ControllerInjection < ActionController::Base
219
+ # Your code here
220
+ end
221
+ ```
222
+
223
+ #### Authentication system
224
+
225
+ Unless you're running a totally public Guide, you will need some way to determine who is viewing it so that you can choose what they are allowed to see.
226
+
227
+ Since the means of authentication varies across different applications, Guide allows you to pass in an authentication system instead of providing its own.
228
+
229
+ If you inject an authentication system, Guide will call the `#user_signed_in?`, `#url_for_sign_in` and `#url_for_sign_out` methods on it. It's recommended that you inherit from `Guide::DefaultAuthenticationSystem`.
230
+
231
+ Here's an example of how you might set this up:
232
+
233
+ ```Ruby
234
+ # Authentication system injection
235
+
236
+ class Guide::ControllerInjection < ActionController::Base
237
+ private
238
+
239
+ def authentication_system
240
+ Guide::AuthenticationSystemInjection.new(request)
241
+ end
242
+ end
243
+
244
+ class Guide::AuthenticationSystem < Guide::DefaultAuthenticationSystem
245
+ def initialize(request)
246
+ @request = request
247
+ end
248
+
249
+ def user_signed_in?
250
+ RealAuthenticationSystemForYourApplication.new(request).signed_in?
251
+ end
252
+
253
+ def url_for_sign_in
254
+ # Where do you want to send people when they click the 'sign in' link?
255
+ end
256
+
257
+ def url_for_sign_out
258
+ # This is where people will end up when they click 'sign out'
259
+ end
260
+ end
261
+ ```
262
+
263
+ #### Authorisation system
264
+
265
+ Once you've figured out who is looking at your Guide, you're ready to decide what they're allowed to see.
266
+
267
+ As with the authentication system, most applications have some way of determining this sort of thing. Instead of presuming to know how your system works, Guide lets you implement this yourself.
268
+
269
+ If you inject an authorisation system, Guide will call the `#allow?(action)`, `#user_is_privileged?` and `#valid_visibility_options` methods on it. Inheriting from `Guide::DefaultAuthorisatinSystem` will get you some sensible defaults for the latter two of these methods.
270
+
271
+ You can set this up however you like, as long as you hook into the controller via `#authorisation_system` and implement the `#allow?(action)` method. Here's an example of how you might do it:
272
+
273
+ ```Ruby
274
+ # Authorisation system injection
275
+
276
+ class Guide::ControllerInjection < ActionController::Base
277
+ private
278
+
279
+ def authorisation_system
280
+ Guide::AuthorisationSystemInjection.new(real_authorisation_system)
281
+ end
282
+
283
+ def real_authorisation_system
284
+ RealAuthorisationSystemForYourApplication.new(signed_in_user)
285
+ end
286
+ end
287
+
288
+ class Guide::AuthorisationSystemInjection < Guide::DefaultAuthorisationSystem
289
+ def initialize(real_system)
290
+ @real_system = real_system
291
+ end
292
+
293
+ def allow?(action)
294
+ if Rails.env.development?
295
+ true
296
+ else
297
+ @real_system.allow?(action)
298
+ end
299
+ end
300
+
301
+ # Optional methods for if you want to use custom visibility options
302
+
303
+ def user_is_privileged?
304
+ allow?(:view_guide_not_ready_yet) ||
305
+ allow?(:view_guide_top_secret_feature)
306
+ end
307
+
308
+ def valid_visibility_options
309
+ [
310
+ nil,
311
+ :not_ready_yet,
312
+ :restricted,
313
+ ]
314
+ end
315
+ end
316
+ ```
317
+
318
+ #### HTML Injection
319
+
320
+ If you would like to push some HTML directly onto every page in Guide, you can do so using an HTML injection.
321
+
322
+ A good example of HTML that you might like to inject is a stylesheet link tag:
323
+
324
+ ```Ruby
325
+ # HTML injection for a stylesheet link tag
326
+
327
+ class Guide::ControllerInjection
328
+ private
329
+
330
+ def html_injection
331
+ Guide::HtmlInjection.new.prepare_injection(view_context)
332
+ end
333
+ end
334
+
335
+ class Guide::HtmlInjection
336
+ include ActionView::Helpers::AssetTagHelper
337
+
338
+ def prepare_injection(view_context)
339
+ [
340
+ view_context.stylesheet_link_tag("application/core/index"),
341
+ ].join(" ")
342
+ end
343
+ end
344
+ ```
345
+
346
+ #### Helper Injection
347
+
348
+ While the Guide development team recommends the use of view models instead of helpers, sometimes you're working on an application that already relies on them. Guide allows you to inject helpers so that you can get started without first having to retire them all.
349
+
350
+ Here's how to do it:
351
+
352
+ ```Ruby
353
+ # Injecting helper modules
354
+
355
+ Guide.configure do |config|
356
+ config.helper_module_to_globally_include = "Guide::HelperInjection"
357
+ end
358
+
359
+ module Guide::HelperInjection
360
+ include ::RegretHelper
361
+ include ::SoonToBeRetiredHelper
362
+ end
363
+ ```
364
+
365
+ If you _really_ need to, you can add `include ::ApplicationHelper` to this list.
366
+
367
+ ## Browser tests
368
+ Guide does not come packaged with browser tests, but it's a great idea to write some. Here's an example of how you might create one:
369
+
370
+ ```ruby
371
+ content = Guide::Content.new
372
+ authorisation_system = Guide::DefaultAuthorisationSystem.new
373
+ bouncer = Guide::Bouncer.new(authorisation_system: authorisation_system)
374
+ cartographer = Guide::Cartographer.new(bouncer)
375
+
376
+ cartographer.draw_paths_to_visible_renderable_nodes(starting_node: content).each do |node_path, node_title|
377
+ aggregate_failures do
378
+ begin
379
+ visit Guide::Engine.routes.url_helpers.node_path(:node_path => node_path)
380
+ with_scope('.sg-header') do
381
+ expect(page).to have_content("<put something recognisable here>")
382
+ end
383
+ puts "Successfully visited #{node_title}"
384
+ rescue StandardError, RSpec::Expectations::ExpectationNotMetError => e
385
+ raise [
386
+ "Could not load the guide page for #{node_path},",
387
+ "To open this in your browser, visit <Root path to your guide>/#{node_path}",
388
+ "You can find the file for this at app/documentation/guide/content/#{node_path}.rb",
389
+ "Here's what I saw when I tried to go there:",
390
+ "#{e.message}",
391
+ "#{page.body.split('Full backtrace').first}",
392
+ ].join("\n\n")
393
+ end
394
+ end
395
+ end
396
+ ```
397
+
398
+ ### Consistency Specs
399
+ These specs ensure that your fake view models (Guide::ViewModel) in Guide have the same public interfaces as the real view models in your application
400
+ `spec/documentation/guide/content`
401
+
402
+ ### Step 3: Access your Guide(s)
403
+ When you mount the gem in your routes file, you can specify a route to mount it to. If you want it mounted at the root of your application, you'd use:
404
+
405
+ ```ruby
406
+ mount Guide::Engine => "/"
407
+ ```
408
+
409
+ Or if you want it at, say, `/guide/`, you could use:
410
+
411
+ ```ruby
412
+ mount Guide::Engine => '/guide/'
413
+ ```
414
+
415
+ Any routes defined by the Guide gem will be prefixed with the path you specify when you mount it.
416
+
417
+ ## Maintainer
418
+ - [Luke Arndt](https://github.com/lukearndt)
419
+
420
+ ## License
421
+ Guide uses the MIT license. See [LICENSE.txt](https://github.com/envato/guide/blob/master/LICENSE.txt) for details.
422
+
423
+ ## Contact
424
+ - [github project](https://github.com/envato/guide)
425
+ - Bug reports and feature requests are via [github issues](https://github.com/envato/guide/issues)
426
+
427
+ ## Code of conduct
428
+ We welcome contribution from everyone. Read more about it in
429
+ [`CODE_OF_CONDUCT.md`](https://github.com/envato/guide/blob/master/CODE_OF_CONDUCT.md)
430
+
431
+ ## Contributing
432
+ 1. Fork it ( http://github.com/envato/guide/fork )
433
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
434
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
435
+ 4. Push to the branch (`git push origin my-new-feature`)
436
+ 5. Create new Pull Request
437
+
438
+ For larger new features: do everything as above, but first also make contact with the project maintainers to be sure your change fits with the project direction and you won't be wasting effort going in the wrong direction.
439
+
440
+ Please see the [Wiki](https://github.com/envato/guide/wiki) for indepth instructions on developing and understanding the Guide gem.
data/Rakefile CHANGED
@@ -1,26 +1,18 @@
1
- begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
- end
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
6
3
 
7
- require 'rdoc/task'
4
+ RSpec::Core::RakeTask.new(:spec)
8
5
 
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Guide'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
6
+ task :setup_test_app, [:rails_version] do |_task, args|
7
+ require_relative './spec/test_apps/setup'
8
+ TestApps::Setup.call args.fetch(:rails_version) {
9
+ abort "Example usage: rake #{ARGV[0]}[5.1.4]"
10
+ }
15
11
  end
16
12
 
17
- APP_RAKEFILE = File.expand_path("../spec/test_app/Rakefile", __FILE__)
18
- load 'rails/tasks/engine.rake'
19
-
20
-
21
- load 'rails/tasks/statistics.rake'
22
-
23
-
24
-
25
- Bundler::GemHelper.install_tasks
26
-
13
+ if ENV['APPRAISAL_INITIALIZED'] || ENV['TRAVIS']
14
+ task default: :spec
15
+ else
16
+ require 'appraisal'
17
+ task default: :appraisal
18
+ end
@@ -4,12 +4,12 @@ class Guide::BaseController < Guide.configuration.controller_class_to_inherit.co
4
4
 
5
5
  private
6
6
 
7
- around_filter :set_locale
7
+ around_action :set_locale
8
8
  def set_locale
9
9
  I18n.with_locale(diplomat.negotiate_locale) { yield }
10
10
  end
11
11
 
12
- around_filter :handle_known_errors
12
+ around_action :handle_known_errors
13
13
  def handle_known_errors
14
14
  begin
15
15
  yield
@@ -18,9 +18,9 @@ class Guide::BaseController < Guide.configuration.controller_class_to_inherit.co
18
18
 
19
19
  case error
20
20
  when Guide::Errors::InvalidNode, Guide::Errors::PermissionDenied
21
- render :text => 'Nothing to see here.', :status => '404'
21
+ render :plain => 'Nothing to see here.', :status => '404'
22
22
  else
23
- render :text => "Something's gone wrong. Sorry about that.", :status => '500'
23
+ render :plain => "Something's gone wrong. Sorry about that.", :status => '500'
24
24
  end
25
25
  end
26
26
  end
@@ -39,6 +39,6 @@ class Guide::ScenariosController < Guide::BaseController
39
39
  end
40
40
 
41
41
  def scenario_format
42
- params[:scenario_format]
42
+ params[:scenario_format].to_sym
43
43
  end
44
44
  end
@@ -28,7 +28,7 @@ class Guide::ScenarioLayoutView
28
28
  end
29
29
 
30
30
  def inject_stylesheets?
31
- @format == 'html'
31
+ @format == :html
32
32
  end
33
33
 
34
34
  def node_stylesheets
@@ -36,7 +36,7 @@ class Guide::ScenarioLayoutView
36
36
  end
37
37
 
38
38
  def inject_javascripts?
39
- @format == 'html'
39
+ @format == :html
40
40
  end
41
41
 
42
42
  def node_javascripts
@@ -2,7 +2,7 @@
2
2
  <div am-Grid class="h-text-align-center">
3
3
  <div am-Grid-Col="m:4 l:6" am-Grid-Row="m:start l:start">
4
4
  <div class="sg-home__section">
5
- <%= link_to '/structures',
5
+ <%= link_to guide.node_path('structures'),
6
6
  :class => "t-link -color-dark -decoration-reversed" do %>
7
7
  <h3 class="t-heading -size-m">Structures</h3>
8
8
  <% end %>
@@ -4,12 +4,12 @@
4
4
  :class => top_level_node ? 'sg-navigation__section' : nil do %>
5
5
  <% if child_node_view.leaf_node? %>
6
6
  <%= link_to child_node_view.name,
7
- node_path.present? ? "/#{node_path}/#{child_node_view.id}" : "/#{child_node_view.id}",
7
+ guide.node_path([node_path, child_node_view.id].compact.join('/')),
8
8
  :class => child_node_view.active? ? 'is-active' : nil %>
9
9
  <% else %>
10
10
  <% if top_level_node %>
11
11
  <div class="sg-navigation__section-title">
12
- <%= link_to "/#{child_node_view.id}" do %>
12
+ <%= link_to(guide.node_path(child_node_view.id)) do %>
13
13
  <h4><%= child_node_view.name %></h4>
14
14
  <% end %>
15
15
  </div>
@@ -9,6 +9,6 @@
9
9
  nil,
10
10
  :width => "100%",
11
11
  :scrolling => "no",
12
- :src => "/scenario/#{scenario_id}/#{scenario_format}/for/#{node_path}"
12
+ :src => guide.scenario_path(scenario_id, scenario_format, node_path)
13
13
  ) %>
14
14
  <% end %>
@@ -26,7 +26,7 @@
26
26
  <%= link_to "L", "##{scenario_id}", :class => "js-guide__responsive-desktop t-link -color-inherit -decoration-reversed" %>
27
27
  </div>
28
28
  <div class="sg-actions__control">
29
- <%= link_to "/scenario/#{scenario_id}/#{view.formats.first}/for/#{view.node_path}",
29
+ <%= link_to guide.scenario_path(scenario_id, view.formats.first, view.node_path),
30
30
  :class =>"sg-actions__icon",
31
31
  :target => "_blank",
32
32
  :alt => "Open this scenario in a new tab" do %>
data/lib/guide/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Guide
2
- VERSION = "0.3.2"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,37 +1,87 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Arndt
8
8
  - Jordan Lewis
9
9
  - Jiexin Huang
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-03-26 00:00:00.000000000 Z
13
+ date: 2021-06-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rails
16
+ name: railties
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: '3.1'
22
- - - "<"
21
+ version: '5.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '5.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: actionpack
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '5.2'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '5.2'
43
+ - !ruby/object:Gem::Dependency
44
+ name: actionview
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '5.2'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '5.2'
57
+ - !ruby/object:Gem::Dependency
58
+ name: activemodel
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
23
62
  - !ruby/object:Gem::Version
24
- version: '5'
63
+ version: '5.2'
25
64
  type: :runtime
26
65
  prerelease: false
27
66
  version_requirements: !ruby/object:Gem::Requirement
28
67
  requirements:
29
68
  - - ">="
30
69
  - !ruby/object:Gem::Version
31
- version: '3.1'
32
- - - "<"
70
+ version: '5.2'
71
+ - !ruby/object:Gem::Dependency
72
+ name: sprockets-rails
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
33
76
  - !ruby/object:Gem::Version
34
- version: '5'
77
+ version: '0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
35
85
  - !ruby/object:Gem::Dependency
36
86
  name: sass-rails
37
87
  requirement: !ruby/object:Gem::Requirement
@@ -47,7 +97,7 @@ dependencies:
47
97
  - !ruby/object:Gem::Version
48
98
  version: '3.2'
49
99
  - !ruby/object:Gem::Dependency
50
- name: sqlite3
100
+ name: appraisal
51
101
  requirement: !ruby/object:Gem::Requirement
52
102
  requirements:
53
103
  - - ">="
@@ -88,6 +138,20 @@ dependencies:
88
138
  - - ">="
89
139
  - !ruby/object:Gem::Version
90
140
  version: '0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: rails-controller-testing
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
91
155
  description: Document your Rails application with a living component library and styleguide
92
156
  email:
93
157
  - luke@arndt.io
@@ -98,6 +162,7 @@ extensions: []
98
162
  extra_rdoc_files: []
99
163
  files:
100
164
  - LICENSE
165
+ - README.md
101
166
  - Rakefile
102
167
  - app/assets/javascripts/guide/application.js
103
168
  - app/assets/javascripts/guide/scenario.js
@@ -178,8 +243,14 @@ files:
178
243
  homepage: https://github.com/envato/guide
179
244
  licenses:
180
245
  - MIT
181
- metadata: {}
182
- post_install_message:
246
+ metadata:
247
+ homepage_uri: https://github.com/envato/guide
248
+ source_code_uri: https://github.com/envato/guide/tree/v0.6.1
249
+ changelog_uri: https://github.com/envato/guide/blob/HEAD/CHANGELOG.md
250
+ bug_tracker_uri: https://github.com/envato/guide/issues
251
+ wiki_uri: https://github.com/envato/guide/wiki
252
+ documentation_uri: https://www.rubydoc.info/gems/guide/0.6.1
253
+ post_install_message:
183
254
  rdoc_options: []
184
255
  require_paths:
185
256
  - lib
@@ -187,17 +258,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
258
  requirements:
188
259
  - - ">="
189
260
  - !ruby/object:Gem::Version
190
- version: '0'
261
+ version: '2.6'
191
262
  required_rubygems_version: !ruby/object:Gem::Requirement
192
263
  requirements:
193
264
  - - ">="
194
265
  - !ruby/object:Gem::Version
195
266
  version: '0'
196
267
  requirements: []
197
- rubyforge_project:
198
- rubygems_version: 2.4.5.1
199
- signing_key:
268
+ rubygems_version: 3.2.15
269
+ signing_key:
200
270
  specification_version: 4
201
271
  summary: Living documentation for your Rails application
202
272
  test_files: []
203
- has_rdoc: