guide 0.0.1 → 0.3.1

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/javascripts/guide/application.js +21723 -0
  6. data/app/assets/javascripts/guide/scenario.js +12642 -0
  7. data/app/assets/stylesheets/guide/application.css +141 -0
  8. data/app/controllers/guide/base_controller.rb +83 -0
  9. data/app/controllers/guide/nodes_controller.rb +40 -0
  10. data/app/controllers/guide/scenarios_controller.rb +44 -0
  11. data/app/helpers/guide/application_helper.rb +4 -0
  12. data/app/helpers/guide/document_helper.rb +20 -0
  13. data/app/models/guide/arborist.rb +44 -0
  14. data/app/models/guide/bouncer.rb +34 -0
  15. data/app/models/guide/cartographer.rb +49 -0
  16. data/app/models/guide/content.rb +28 -0
  17. data/app/models/guide/default_authentication_system.rb +13 -0
  18. data/app/models/guide/default_authorisation_system.rb +18 -0
  19. data/app/models/guide/diplomat.rb +60 -0
  20. data/app/models/guide/document.rb +20 -0
  21. data/app/models/guide/endpoint_stocktaker.rb +94 -0
  22. data/app/models/guide/errors.rb +2 -0
  23. data/app/models/guide/errors/base.rb +6 -0
  24. data/app/models/guide/errors/interface_violation.rb +2 -0
  25. data/app/models/guide/errors/invalid_node.rb +2 -0
  26. data/app/models/guide/errors/invalid_scenario.rb +2 -0
  27. data/app/models/guide/errors/invalid_visibility_option.rb +2 -0
  28. data/app/models/guide/errors/permission_denied.rb +2 -0
  29. data/app/models/guide/fixture.rb +15 -0
  30. data/app/models/guide/fixtures.rb +3 -0
  31. data/app/models/guide/form_object.rb +3 -0
  32. data/app/models/guide/monkey.rb +47 -0
  33. data/app/models/guide/nobilizer.rb +9 -0
  34. data/app/models/guide/node.rb +67 -0
  35. data/app/models/guide/photographer.rb +20 -0
  36. data/app/models/guide/scout.rb +59 -0
  37. data/app/models/guide/simulator.rb +26 -0
  38. data/app/models/guide/structure.rb +75 -0
  39. data/app/models/guide/view_model.rb +37 -0
  40. data/app/view_models/guide/layout_view.rb +81 -0
  41. data/app/view_models/guide/navigation_view.rb +25 -0
  42. data/app/view_models/guide/node_view.rb +59 -0
  43. data/app/view_models/guide/scenario_layout_view.rb +49 -0
  44. data/app/view_models/guide/scenario_view.rb +39 -0
  45. data/app/views/guide/_content.html.erb +17 -0
  46. data/app/views/guide/common/_category.html.erb +9 -0
  47. data/app/views/guide/common/_footer.html.erb +21 -0
  48. data/app/views/guide/common/_locale_switcher.html.erb +6 -0
  49. data/app/views/guide/common/_navigation.html.erb +12 -0
  50. data/app/views/guide/common/_navigation_node.html.erb +39 -0
  51. data/app/views/guide/common/_page_title.html.erb +8 -0
  52. data/app/views/guide/common/_search.html.erb +23 -0
  53. data/app/views/guide/common/_unsupported_browser_message.html.erb +6 -0
  54. data/app/views/guide/common/_visibility_banner.html.erb +25 -0
  55. data/app/views/guide/nodes/_document.html.erb +3 -0
  56. data/app/views/guide/nodes/_scenario.html.erb +14 -0
  57. data/app/views/guide/nodes/_scenario_list.html.erb +10 -0
  58. data/app/views/guide/nodes/_structure.html.erb +26 -0
  59. data/app/views/guide/nodes/_template_location.html.erb +7 -0
  60. data/app/views/guide/nodes/show.html.erb +7 -0
  61. data/app/views/guide/scenarios/_scenario.html.erb +25 -0
  62. data/app/views/guide/scenarios/scenario/_locale_switcher.html.erb +5 -0
  63. data/app/views/guide/scenarios/scenario/_toolbar.html.erb +39 -0
  64. data/app/views/guide/scenarios/scenario/_visibility.html.erb +10 -0
  65. data/app/views/guide/scenarios/show.html.erb +1 -0
  66. data/app/views/layouts/guide/application.html.erb +76 -0
  67. data/app/views/layouts/guide/scenario.html.erb +38 -0
  68. data/app/views/layouts/guide/scenario/default.html.erb +1 -0
  69. data/app/views/layouts/guide/scenario/default.text.erb +1 -0
  70. data/config/initializers/assets.rb +1 -0
  71. data/config/initializers/markdown.rb +15 -0
  72. data/config/locales/models/guide/monkey.en.yml +6 -0
  73. data/config/locales/views/guide/nodes/_structure.en.yml +7 -0
  74. data/config/routes.rb +6 -0
  75. data/lib/guide.rb +12 -0
  76. data/lib/guide/authorisation_spec_helper.rb +83 -0
  77. data/lib/guide/configuration.rb +31 -0
  78. data/lib/guide/consistency_spec_helper.rb +33 -0
  79. data/lib/guide/engine.rb +9 -0
  80. data/lib/guide/version.rb +3 -0
  81. data/lib/tasks/guide_tasks.rake +4 -0
  82. metadata +198 -12
  83. data/.gitignore +0 -26
  84. data/Gemfile +0 -4
  85. 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,15 @@
1
+ require 'github/markup'
2
+ require 'rdiscount'
3
+
4
+ class ActionView::Template
5
+ module Handlers
6
+ class Markdown
7
+ def self.call(template)
8
+ markdown = GitHub::Markup.render('README.markdown', template.source)
9
+ "%{<div class='#{Guide.configuration.markdown_wrapper_class}'>#{markdown}</div>}.html_safe"
10
+ end
11
+ end
12
+ end
13
+
14
+ register_template_handler :md, Handlers::Markdown
15
+ end
@@ -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,31 @@
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
+ :markdown_wrapper_class,
14
+ :supported_locales
15
+
16
+ def initialize
17
+ @asset_path_for_logo = ''
18
+ @company_name = 'Your Awesome Company'
19
+ @controller_class_to_inherit = 'ApplicationController'
20
+ @default_layout_for_scenarios = 'layouts/guide/scenario/default'
21
+ @default_javascripts_for_documents = []
22
+ @default_javascripts_for_structures = []
23
+ @default_stylesheets_for_documents = []
24
+ @default_stylesheets_for_structures = []
25
+ @guide_name = 'Your Awesome Guide'
26
+ @helper_module_to_globally_include = 'Guide::ApplicationHelper::DefaultInclude'
27
+ @local_variable_for_view_model = :view
28
+ @markdown_wrapper_class = 'markdown'
29
+ @supported_locales = { "English" => "en" }
30
+ end
31
+ 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.3.1"
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,25 +1,211 @@
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.3.1
5
5
  platform: ruby
6
6
  authors:
7
- - Jiexin huang
7
+ - Luke Arndt
8
+ - Jordan Lewis
9
+ - Jiexin Huang
8
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: 2017-02-23 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '3.1'
22
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: '5'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '3.1'
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: '5'
35
+ - !ruby/object:Gem::Dependency
36
+ name: github-markup
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: rdiscount
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: sass-rails
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '3.2'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '3.2'
77
+ - !ruby/object:Gem::Dependency
78
+ name: sqlite3
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ - !ruby/object:Gem::Dependency
92
+ name: rspec-rails
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ - !ruby/object:Gem::Dependency
106
+ name: pry
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ description: Document your Rails application with a living component library and styleguide
120
+ email:
121
+ - luke@arndt.io
122
+ - jordan@lewis.io
123
+ - hjx500@gmail.com
15
124
  executables: []
16
125
  extensions: []
17
126
  extra_rdoc_files: []
18
127
  files:
19
- - ".gitignore"
20
- - Gemfile
21
- - guide.gemspec
22
- homepage: http://rubygems.org/gems/guide
128
+ - LICENSE
129
+ - README.rdoc
130
+ - Rakefile
131
+ - app/assets/javascripts/guide/application.js
132
+ - app/assets/javascripts/guide/scenario.js
133
+ - app/assets/stylesheets/guide/application.css
134
+ - app/controllers/guide/base_controller.rb
135
+ - app/controllers/guide/nodes_controller.rb
136
+ - app/controllers/guide/scenarios_controller.rb
137
+ - app/helpers/guide/application_helper.rb
138
+ - app/helpers/guide/document_helper.rb
139
+ - app/models/guide/arborist.rb
140
+ - app/models/guide/bouncer.rb
141
+ - app/models/guide/cartographer.rb
142
+ - app/models/guide/content.rb
143
+ - app/models/guide/default_authentication_system.rb
144
+ - app/models/guide/default_authorisation_system.rb
145
+ - app/models/guide/diplomat.rb
146
+ - app/models/guide/document.rb
147
+ - app/models/guide/endpoint_stocktaker.rb
148
+ - app/models/guide/errors.rb
149
+ - app/models/guide/errors/base.rb
150
+ - app/models/guide/errors/interface_violation.rb
151
+ - app/models/guide/errors/invalid_node.rb
152
+ - app/models/guide/errors/invalid_scenario.rb
153
+ - app/models/guide/errors/invalid_visibility_option.rb
154
+ - app/models/guide/errors/permission_denied.rb
155
+ - app/models/guide/fixture.rb
156
+ - app/models/guide/fixtures.rb
157
+ - app/models/guide/form_object.rb
158
+ - app/models/guide/monkey.rb
159
+ - app/models/guide/nobilizer.rb
160
+ - app/models/guide/node.rb
161
+ - app/models/guide/photographer.rb
162
+ - app/models/guide/scout.rb
163
+ - app/models/guide/simulator.rb
164
+ - app/models/guide/structure.rb
165
+ - app/models/guide/view_model.rb
166
+ - app/view_models/guide/layout_view.rb
167
+ - app/view_models/guide/navigation_view.rb
168
+ - app/view_models/guide/node_view.rb
169
+ - app/view_models/guide/scenario_layout_view.rb
170
+ - app/view_models/guide/scenario_view.rb
171
+ - app/views/guide/_content.html.erb
172
+ - app/views/guide/common/_category.html.erb
173
+ - app/views/guide/common/_footer.html.erb
174
+ - app/views/guide/common/_locale_switcher.html.erb
175
+ - app/views/guide/common/_navigation.html.erb
176
+ - app/views/guide/common/_navigation_node.html.erb
177
+ - app/views/guide/common/_page_title.html.erb
178
+ - app/views/guide/common/_search.html.erb
179
+ - app/views/guide/common/_unsupported_browser_message.html.erb
180
+ - app/views/guide/common/_visibility_banner.html.erb
181
+ - app/views/guide/nodes/_document.html.erb
182
+ - app/views/guide/nodes/_scenario.html.erb
183
+ - app/views/guide/nodes/_scenario_list.html.erb
184
+ - app/views/guide/nodes/_structure.html.erb
185
+ - app/views/guide/nodes/_template_location.html.erb
186
+ - app/views/guide/nodes/show.html.erb
187
+ - app/views/guide/scenarios/_scenario.html.erb
188
+ - app/views/guide/scenarios/scenario/_locale_switcher.html.erb
189
+ - app/views/guide/scenarios/scenario/_toolbar.html.erb
190
+ - app/views/guide/scenarios/scenario/_visibility.html.erb
191
+ - app/views/guide/scenarios/show.html.erb
192
+ - app/views/layouts/guide/application.html.erb
193
+ - app/views/layouts/guide/scenario.html.erb
194
+ - app/views/layouts/guide/scenario/default.html.erb
195
+ - app/views/layouts/guide/scenario/default.text.erb
196
+ - config/initializers/assets.rb
197
+ - config/initializers/markdown.rb
198
+ - config/locales/models/guide/monkey.en.yml
199
+ - config/locales/views/guide/nodes/_structure.en.yml
200
+ - config/routes.rb
201
+ - lib/guide.rb
202
+ - lib/guide/authorisation_spec_helper.rb
203
+ - lib/guide/configuration.rb
204
+ - lib/guide/consistency_spec_helper.rb
205
+ - lib/guide/engine.rb
206
+ - lib/guide/version.rb
207
+ - lib/tasks/guide_tasks.rake
208
+ homepage: https://github.com/envato/guide
23
209
  licenses:
24
210
  - MIT
25
211
  metadata: {}
@@ -39,8 +225,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
225
  version: '0'
40
226
  requirements: []
41
227
  rubyforge_project:
42
- rubygems_version: 2.4.5.1
228
+ rubygems_version: 2.5.1
43
229
  signing_key:
44
230
  specification_version: 4
45
- summary: Living styleguide for your Rails app
231
+ summary: Living documentation for your Rails application
46
232
  test_files: []