guide 0.0.1 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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: []