guide 0.0.1 → 0.5.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.
Files changed (83) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +22 -0
  3. data/Rakefile +18 -0
  4. data/app/assets/javascripts/guide/application.js +21723 -0
  5. data/app/assets/javascripts/guide/scenario.js +12642 -0
  6. data/app/assets/stylesheets/guide/application.css +141 -0
  7. data/app/controllers/guide/base_controller.rb +83 -0
  8. data/app/controllers/guide/nodes_controller.rb +40 -0
  9. data/app/controllers/guide/scenarios_controller.rb +44 -0
  10. data/app/helpers/guide/application_helper.rb +4 -0
  11. data/app/helpers/guide/document_helper.rb +20 -0
  12. data/app/models/guide/arborist.rb +44 -0
  13. data/app/models/guide/bouncer.rb +34 -0
  14. data/app/models/guide/cartographer.rb +49 -0
  15. data/app/models/guide/content.rb +28 -0
  16. data/app/models/guide/default_authentication_system.rb +13 -0
  17. data/app/models/guide/default_authorisation_system.rb +18 -0
  18. data/app/models/guide/diplomat.rb +60 -0
  19. data/app/models/guide/document.rb +20 -0
  20. data/app/models/guide/endpoint_stocktaker.rb +94 -0
  21. data/app/models/guide/errors.rb +2 -0
  22. data/app/models/guide/errors/base.rb +6 -0
  23. data/app/models/guide/errors/interface_violation.rb +2 -0
  24. data/app/models/guide/errors/invalid_node.rb +2 -0
  25. data/app/models/guide/errors/invalid_scenario.rb +2 -0
  26. data/app/models/guide/errors/invalid_visibility_option.rb +2 -0
  27. data/app/models/guide/errors/permission_denied.rb +2 -0
  28. data/app/models/guide/fixture.rb +15 -0
  29. data/app/models/guide/fixtures.rb +3 -0
  30. data/app/models/guide/form_object.rb +3 -0
  31. data/app/models/guide/monkey.rb +47 -0
  32. data/app/models/guide/nobilizer.rb +9 -0
  33. data/app/models/guide/node.rb +67 -0
  34. data/app/models/guide/photographer.rb +20 -0
  35. data/app/models/guide/scout.rb +59 -0
  36. data/app/models/guide/simulator.rb +26 -0
  37. data/app/models/guide/structure.rb +75 -0
  38. data/app/models/guide/view_model.rb +37 -0
  39. data/app/view_models/guide/layout_view.rb +81 -0
  40. data/app/view_models/guide/navigation_view.rb +25 -0
  41. data/app/view_models/guide/node_view.rb +59 -0
  42. data/app/view_models/guide/scenario_layout_view.rb +49 -0
  43. data/app/view_models/guide/scenario_view.rb +39 -0
  44. data/app/views/guide/_content.html.erb +17 -0
  45. data/app/views/guide/common/_category.html.erb +9 -0
  46. data/app/views/guide/common/_footer.html.erb +21 -0
  47. data/app/views/guide/common/_locale_switcher.html.erb +6 -0
  48. data/app/views/guide/common/_navigation.html.erb +12 -0
  49. data/app/views/guide/common/_navigation_node.html.erb +39 -0
  50. data/app/views/guide/common/_page_title.html.erb +8 -0
  51. data/app/views/guide/common/_search.html.erb +23 -0
  52. data/app/views/guide/common/_unsupported_browser_message.html.erb +6 -0
  53. data/app/views/guide/common/_visibility_banner.html.erb +25 -0
  54. data/app/views/guide/nodes/_document.html.erb +3 -0
  55. data/app/views/guide/nodes/_scenario.html.erb +14 -0
  56. data/app/views/guide/nodes/_scenario_list.html.erb +10 -0
  57. data/app/views/guide/nodes/_structure.html.erb +26 -0
  58. data/app/views/guide/nodes/_template_location.html.erb +7 -0
  59. data/app/views/guide/nodes/show.html.erb +7 -0
  60. data/app/views/guide/scenarios/_scenario.html.erb +25 -0
  61. data/app/views/guide/scenarios/scenario/_locale_switcher.html.erb +5 -0
  62. data/app/views/guide/scenarios/scenario/_toolbar.html.erb +39 -0
  63. data/app/views/guide/scenarios/scenario/_visibility.html.erb +10 -0
  64. data/app/views/guide/scenarios/show.html.erb +1 -0
  65. data/app/views/layouts/guide/application.html.erb +76 -0
  66. data/app/views/layouts/guide/scenario.html.erb +38 -0
  67. data/app/views/layouts/guide/scenario/default.html.erb +1 -0
  68. data/app/views/layouts/guide/scenario/default.text.erb +1 -0
  69. data/config/initializers/assets.rb +1 -0
  70. data/config/locales/models/guide/monkey.en.yml +6 -0
  71. data/config/locales/views/guide/nodes/_structure.en.yml +7 -0
  72. data/config/routes.rb +6 -0
  73. data/lib/guide.rb +12 -0
  74. data/lib/guide/authorisation_spec_helper.rb +83 -0
  75. data/lib/guide/configuration.rb +29 -0
  76. data/lib/guide/consistency_spec_helper.rb +33 -0
  77. data/lib/guide/engine.rb +9 -0
  78. data/lib/guide/version.rb +3 -0
  79. data/lib/tasks/guide_tasks.rake +4 -0
  80. metadata +207 -16
  81. data/.gitignore +0 -26
  82. data/Gemfile +0 -4
  83. data/guide.gemspec +0 -12
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1 @@
1
+ Rails.application.config.assets.precompile += ['guide/application.js', 'guide/scenario.js']
@@ -0,0 +1,6 @@
1
+ en:
2
+ guide:
3
+ monkey:
4
+ invalid_node: "I can't give you what you're looking for because a node in your path (%{node_id}) doesn't exist.\nPerhaps you need to add it to its parent using `contains :%{node_id}`."
5
+
6
+ invalid_starting_node: "I can't give you what you're looking for because the node that you told me to start from doesn't exist. This means that something is fundamentally wrong with your setup."
@@ -0,0 +1,7 @@
1
+ en:
2
+ guide:
3
+ nodes:
4
+ structure:
5
+ format_heading:
6
+ html: "HTML version"
7
+ text: "Plain text version"
data/config/routes.rb ADDED
@@ -0,0 +1,6 @@
1
+ Guide::Engine.routes.draw do
2
+ root :to => 'nodes#show'
3
+
4
+ get 'scenario/:scenario_id/:scenario_format/for/*node_path' => 'scenarios#show', :as => 'scenario'
5
+ get '*node_path' => 'nodes#show', :as => 'node'
6
+ end
data/lib/guide.rb ADDED
@@ -0,0 +1,12 @@
1
+ require "guide/engine"
2
+ require "guide/configuration"
3
+
4
+ module Guide
5
+ def self.configuration
6
+ @@configuration ||= Guide::Configuration.new
7
+ end
8
+
9
+ def self.configure
10
+ yield(configuration)
11
+ end
12
+ end
@@ -0,0 +1,83 @@
1
+ module Guide::AuthorisationSpecHelper
2
+ RSpec.shared_context "the user is allowed to see the active node" do
3
+ before do
4
+ allow(controller).to receive(:injected_authorisation_system).
5
+ and_return(authorisation_system)
6
+ allow(controller).to receive(:injected_authentication_system).
7
+ and_return(authentication_system)
8
+ allow(Guide::Bouncer).to receive(:new).with(
9
+ authorisation_system: authorisation_system
10
+ ).and_return(bouncer)
11
+ allow(bouncer).to receive(:user_can_access?).
12
+ with(active_node).and_return(true)
13
+ end
14
+
15
+ let(:authentication_system) { instance_double(Guide::DefaultAuthenticationSystem) }
16
+ let(:authorisation_system) { instance_double(Guide::DefaultAuthorisationSystem) }
17
+ let(:content_node) { Guide::Content.new }
18
+ let(:active_node) do
19
+ Guide::Monkey.new(content_node, bouncer).fetch_node(node_path)
20
+ end
21
+ let(:bouncer) do
22
+ instance_double(Guide::Bouncer,
23
+ :user_can_access? => true,
24
+ :user_is_privileged? => false)
25
+ end
26
+ end
27
+
28
+ RSpec.shared_context "the user is not allowed to see the active node" do
29
+ before do
30
+ allow(controller).to receive(:injected_authorisation_system).
31
+ and_return(authorisation_system)
32
+ allow(controller).to receive(:injected_authentication_system).
33
+ and_return(authentication_system)
34
+ allow(Guide::Bouncer).to receive(:new).with(
35
+ authorisation_system: authorisation_system
36
+ ).and_return(bouncer)
37
+ allow(bouncer).to receive(:user_can_access?).
38
+ with(active_node).and_return(false)
39
+ end
40
+
41
+ let(:authentication_system) { instance_double(Guide::DefaultAuthenticationSystem) }
42
+ let(:authorisation_system) { instance_double(Guide::DefaultAuthorisationSystem) }
43
+ let(:content_node) { Guide::Content.new }
44
+ let(:active_node) do
45
+ Guide::Monkey.new(content_node, bouncer).fetch_node(node_path)
46
+ end
47
+ let(:bouncer) do
48
+ instance_double(Guide::Bouncer,
49
+ :user_can_access? => true,
50
+ :user_is_privileged? => false)
51
+ end
52
+ end
53
+
54
+ RSpec.shared_context "the user is allowed to see the scenario" do
55
+ before do
56
+ allow(bouncer).to receive(:user_can_access?).
57
+ with(scenario).and_return(true)
58
+ end
59
+
60
+ let(:scenario) { active_node.scenarios[scenario_id] }
61
+ end
62
+
63
+ RSpec.shared_context "the user is not allowed to see the scenario" do
64
+ before do
65
+ allow(bouncer).to receive(:user_can_access?).
66
+ with(scenario).and_return(false)
67
+ end
68
+
69
+ let(:scenario) { active_node.scenarios[scenario_id] }
70
+ end
71
+
72
+ RSpec.shared_context "we are in a development environment" do
73
+ before do
74
+ allow(Rails).to receive(:env).and_return(double(:development? => true))
75
+ end
76
+ end
77
+
78
+ RSpec.shared_context "we are not in a development environment" do
79
+ before do
80
+ allow(Rails).to receive(:env).and_return(double(:development? => false))
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,29 @@
1
+ class Guide::Configuration
2
+ attr_accessor :asset_path_for_logo,
3
+ :company_name,
4
+ :controller_class_to_inherit,
5
+ :default_layout_for_scenarios,
6
+ :default_javascripts_for_documents,
7
+ :default_javascripts_for_structures,
8
+ :default_stylesheets_for_documents,
9
+ :default_stylesheets_for_structures,
10
+ :guide_name,
11
+ :helper_module_to_globally_include,
12
+ :local_variable_for_view_model,
13
+ :supported_locales
14
+
15
+ def initialize
16
+ @asset_path_for_logo = ''
17
+ @company_name = 'Your Awesome Company'
18
+ @controller_class_to_inherit = 'ApplicationController'
19
+ @default_layout_for_scenarios = 'layouts/guide/scenario/default'
20
+ @default_javascripts_for_documents = []
21
+ @default_javascripts_for_structures = []
22
+ @default_stylesheets_for_documents = []
23
+ @default_stylesheets_for_structures = []
24
+ @guide_name = 'Your Awesome Guide'
25
+ @helper_module_to_globally_include = 'Guide::ApplicationHelper::DefaultInclude'
26
+ @local_variable_for_view_model = :view
27
+ @supported_locales = { "English" => "en" }
28
+ end
29
+ end
@@ -0,0 +1,33 @@
1
+ module Guide::ConsistencySpecHelper
2
+ RSpec.shared_examples_for "a guide structure and a real view model" do
3
+ described_class.new.scenarios.first.tap do |id, scenario|
4
+ context "\n\n for scenario #{scenario.name}\n " do
5
+ let(:guide_view_model) { scenario.view_model }
6
+
7
+ it "the Guide::ViewModel implements the real view model's interface\n" do
8
+ expect_implemented_interface(guide_view_model, real_view_model)
9
+ end
10
+
11
+ it "the real view model implements the Guide::ViewModel's interface\n" do
12
+ expect_implemented_interface(real_view_model, guide_view_model)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def expect_implemented_interface(object, interface)
21
+ expect(methods_defined_on(object)).
22
+ to include(*methods_defined_on(interface)),
23
+ "I expected your #{object.class.name} to implement all of the methods on your #{interface.class.name}"
24
+ end
25
+
26
+ def methods_defined_on(object)
27
+ if object.kind_of?(Guide::ViewModel)
28
+ object.guide_view_model_interface_methods
29
+ else
30
+ object.methods - Module.instance_methods
31
+ end.sort
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ module Guide
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Guide
4
+
5
+ config.generators do |g|
6
+ g.test_framework :rspec, :fixture => false
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Guide
2
+ VERSION = "0.5.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :guide do
3
+ # # Task goes here
4
+ # end
metadata CHANGED
@@ -1,29 +1,221 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guide
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
- - Jiexin huang
8
- autorequire:
7
+ - Luke Arndt
8
+ - Jordan Lewis
9
+ - Jiexin Huang
10
+ autorequire:
9
11
  bindir: bin
10
12
  cert_chain: []
11
- date: 2015-10-28 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Living styleguide for your Rails app
14
- email: hjx500@gmail.com
13
+ date: 2021-03-25 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: railties
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '4'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '4'
29
+ - !ruby/object:Gem::Dependency
30
+ name: activemodel
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '4'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '4'
43
+ - !ruby/object:Gem::Dependency
44
+ name: sprockets-rails
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: sass-rails
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '3.2'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '3.2'
71
+ - !ruby/object:Gem::Dependency
72
+ name: appraisal
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: sqlite3
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: rspec-rails
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: pry
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ description: Document your Rails application with a living component library and styleguide
128
+ email:
129
+ - luke@arndt.io
130
+ - jordan@lewis.io
131
+ - hjx500@gmail.com
15
132
  executables: []
16
133
  extensions: []
17
134
  extra_rdoc_files: []
18
135
  files:
19
- - ".gitignore"
20
- - Gemfile
21
- - guide.gemspec
22
- homepage: http://rubygems.org/gems/guide
136
+ - LICENSE
137
+ - Rakefile
138
+ - app/assets/javascripts/guide/application.js
139
+ - app/assets/javascripts/guide/scenario.js
140
+ - app/assets/stylesheets/guide/application.css
141
+ - app/controllers/guide/base_controller.rb
142
+ - app/controllers/guide/nodes_controller.rb
143
+ - app/controllers/guide/scenarios_controller.rb
144
+ - app/helpers/guide/application_helper.rb
145
+ - app/helpers/guide/document_helper.rb
146
+ - app/models/guide/arborist.rb
147
+ - app/models/guide/bouncer.rb
148
+ - app/models/guide/cartographer.rb
149
+ - app/models/guide/content.rb
150
+ - app/models/guide/default_authentication_system.rb
151
+ - app/models/guide/default_authorisation_system.rb
152
+ - app/models/guide/diplomat.rb
153
+ - app/models/guide/document.rb
154
+ - app/models/guide/endpoint_stocktaker.rb
155
+ - app/models/guide/errors.rb
156
+ - app/models/guide/errors/base.rb
157
+ - app/models/guide/errors/interface_violation.rb
158
+ - app/models/guide/errors/invalid_node.rb
159
+ - app/models/guide/errors/invalid_scenario.rb
160
+ - app/models/guide/errors/invalid_visibility_option.rb
161
+ - app/models/guide/errors/permission_denied.rb
162
+ - app/models/guide/fixture.rb
163
+ - app/models/guide/fixtures.rb
164
+ - app/models/guide/form_object.rb
165
+ - app/models/guide/monkey.rb
166
+ - app/models/guide/nobilizer.rb
167
+ - app/models/guide/node.rb
168
+ - app/models/guide/photographer.rb
169
+ - app/models/guide/scout.rb
170
+ - app/models/guide/simulator.rb
171
+ - app/models/guide/structure.rb
172
+ - app/models/guide/view_model.rb
173
+ - app/view_models/guide/layout_view.rb
174
+ - app/view_models/guide/navigation_view.rb
175
+ - app/view_models/guide/node_view.rb
176
+ - app/view_models/guide/scenario_layout_view.rb
177
+ - app/view_models/guide/scenario_view.rb
178
+ - app/views/guide/_content.html.erb
179
+ - app/views/guide/common/_category.html.erb
180
+ - app/views/guide/common/_footer.html.erb
181
+ - app/views/guide/common/_locale_switcher.html.erb
182
+ - app/views/guide/common/_navigation.html.erb
183
+ - app/views/guide/common/_navigation_node.html.erb
184
+ - app/views/guide/common/_page_title.html.erb
185
+ - app/views/guide/common/_search.html.erb
186
+ - app/views/guide/common/_unsupported_browser_message.html.erb
187
+ - app/views/guide/common/_visibility_banner.html.erb
188
+ - app/views/guide/nodes/_document.html.erb
189
+ - app/views/guide/nodes/_scenario.html.erb
190
+ - app/views/guide/nodes/_scenario_list.html.erb
191
+ - app/views/guide/nodes/_structure.html.erb
192
+ - app/views/guide/nodes/_template_location.html.erb
193
+ - app/views/guide/nodes/show.html.erb
194
+ - app/views/guide/scenarios/_scenario.html.erb
195
+ - app/views/guide/scenarios/scenario/_locale_switcher.html.erb
196
+ - app/views/guide/scenarios/scenario/_toolbar.html.erb
197
+ - app/views/guide/scenarios/scenario/_visibility.html.erb
198
+ - app/views/guide/scenarios/show.html.erb
199
+ - app/views/layouts/guide/application.html.erb
200
+ - app/views/layouts/guide/scenario.html.erb
201
+ - app/views/layouts/guide/scenario/default.html.erb
202
+ - app/views/layouts/guide/scenario/default.text.erb
203
+ - config/initializers/assets.rb
204
+ - config/locales/models/guide/monkey.en.yml
205
+ - config/locales/views/guide/nodes/_structure.en.yml
206
+ - config/routes.rb
207
+ - lib/guide.rb
208
+ - lib/guide/authorisation_spec_helper.rb
209
+ - lib/guide/configuration.rb
210
+ - lib/guide/consistency_spec_helper.rb
211
+ - lib/guide/engine.rb
212
+ - lib/guide/version.rb
213
+ - lib/tasks/guide_tasks.rake
214
+ homepage: https://github.com/envato/guide
23
215
  licenses:
24
216
  - MIT
25
217
  metadata: {}
26
- post_install_message:
218
+ post_install_message:
27
219
  rdoc_options: []
28
220
  require_paths:
29
221
  - lib
@@ -38,9 +230,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
38
230
  - !ruby/object:Gem::Version
39
231
  version: '0'
40
232
  requirements: []
41
- rubyforge_project:
42
- rubygems_version: 2.4.5.1
43
- signing_key:
233
+ rubygems_version: 3.2.15
234
+ signing_key:
44
235
  specification_version: 4
45
- summary: Living styleguide for your Rails app
236
+ summary: Living documentation for your Rails application
46
237
  test_files: []