intranet-core 1.0.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 (37) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +38 -0
  3. data/lib/core_extensions.rb +12 -0
  4. data/lib/core_extensions/string.rb +43 -0
  5. data/lib/core_extensions/tree.rb +84 -0
  6. data/lib/core_extensions/webrick/httpresponse.rb +22 -0
  7. data/lib/intranet/abstract_responder.rb +34 -0
  8. data/lib/intranet/core.rb +125 -0
  9. data/lib/intranet/core/builder.rb +98 -0
  10. data/lib/intranet/core/haml_wrapper.rb +60 -0
  11. data/lib/intranet/core/locales.rb +47 -0
  12. data/lib/intranet/core/servlet.rb +42 -0
  13. data/lib/intranet/core/version.rb +8 -0
  14. data/lib/intranet/logger.rb +38 -0
  15. data/lib/intranet/resources/haml/http_error.haml +27 -0
  16. data/lib/intranet/resources/haml/skeleton.haml +52 -0
  17. data/lib/intranet/resources/haml/title_and_breadcrumb.haml +8 -0
  18. data/lib/intranet/resources/locales/en.yml +46 -0
  19. data/lib/intranet/resources/locales/fr.yml +46 -0
  20. data/lib/intranet/resources/www/background.jpg +0 -0
  21. data/lib/intranet/resources/www/error.png +0 -0
  22. data/lib/intranet/resources/www/favicon.ico +0 -0
  23. data/lib/intranet/resources/www/fonts/SourceSansPro.woff2 +0 -0
  24. data/lib/intranet/resources/www/nav.js +25 -0
  25. data/lib/intranet/resources/www/style.css +306 -0
  26. data/spec/core_extensions/string_spec.rb +135 -0
  27. data/spec/core_extensions/tree_spec.rb +208 -0
  28. data/spec/core_extensions/webrick/httpresponse_spec.rb +43 -0
  29. data/spec/intranet/core/fr.yml +5 -0
  30. data/spec/intranet/core/haml_wrapper_spec.rb +70 -0
  31. data/spec/intranet/core/locales_spec.rb +74 -0
  32. data/spec/intranet/core_spec.rb +403 -0
  33. data/spec/intranet/logger_spec.rb +129 -0
  34. data/spec/spec_helper.rb +50 -0
  35. data/spec/test_responder/responder.rb +42 -0
  36. data/spec/test_responder/www/style.css +5 -0
  37. metadata +218 -0
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'intranet/logger'
4
+
5
+ RSpec.describe Intranet::Logger do
6
+ it 'should define 5 logging levels (FATAL, ERROR, WARN, INFO, DEBUG)' do
7
+ expect { described_class::FATAL }.not_to raise_error
8
+ expect { described_class::ERROR }.not_to raise_error
9
+ expect { described_class::WARN }.not_to raise_error
10
+ expect { described_class::INFO }.not_to raise_error
11
+ expect { described_class::DEBUG }.not_to raise_error
12
+ end
13
+
14
+ it { is_expected.to respond_to(:fatal, :error, :warn, :info, :debug) }
15
+
16
+ describe '#log' do
17
+ before(:all) do
18
+ @logger = described_class.new
19
+ end
20
+
21
+ TEST_CASES = [
22
+ {
23
+ level: described_class::FATAL, level_str: 'FATAL', level_method: :fatal,
24
+ displayed: {
25
+ described_class::FATAL => true,
26
+ described_class::ERROR => true,
27
+ described_class::WARN => true,
28
+ described_class::INFO => true,
29
+ described_class::DEBUG => true
30
+ },
31
+ color_regex: /^\033\[1;37;41m.*\033\[0m$/,
32
+ color_desc: 'bold white on a red background'
33
+ },
34
+ {
35
+ level: described_class::ERROR, level_str: 'ERROR', level_method: :error,
36
+ displayed: {
37
+ described_class::FATAL => false,
38
+ described_class::ERROR => true,
39
+ described_class::WARN => true,
40
+ described_class::INFO => true,
41
+ described_class::DEBUG => true
42
+ },
43
+ color_regex: /^\033\[0;31m.*\033\[0m$/,
44
+ color_desc: 'red'
45
+ },
46
+ {
47
+ level: described_class::WARN, level_str: 'WARN', level_method: :warn,
48
+ displayed: {
49
+ described_class::FATAL => false,
50
+ described_class::ERROR => false,
51
+ described_class::WARN => true,
52
+ described_class::INFO => true,
53
+ described_class::DEBUG => true
54
+ },
55
+ color_regex: /^\033\[0;33m.*\033\[0m$/,
56
+ color_desc: 'yellow'
57
+ },
58
+ {
59
+ level: described_class::INFO, level_str: 'INFO', level_method: :info,
60
+ displayed: {
61
+ described_class::FATAL => false,
62
+ described_class::ERROR => false,
63
+ described_class::WARN => false,
64
+ described_class::INFO => true,
65
+ described_class::DEBUG => true
66
+ },
67
+ color_regex: /^\033\[0;36m.*\033\[0m$/,
68
+ color_desc: 'cyan'
69
+ },
70
+ {
71
+ level: described_class::DEBUG, level_str: 'DEBUG', level_method: :debug,
72
+ displayed: {
73
+ described_class::FATAL => false,
74
+ described_class::ERROR => false,
75
+ described_class::WARN => false,
76
+ described_class::INFO => false,
77
+ described_class::DEBUG => true
78
+ },
79
+ color_regex: /^\033\[0;35m.*\033\[0m$/,
80
+ color_desc: 'purple'
81
+ }
82
+ ].freeze
83
+
84
+ TEST_CASES.each do |tc|
85
+ context 'given a ' + tc[:level_str] + ' message' do
86
+ it 'should only be displayed if logger level is at least ' + tc[:level_str] do
87
+ tc[:displayed].each do |level, displayed|
88
+ @logger.level = level
89
+ if displayed
90
+ expect { @logger.log(tc[:level], 'TEST_MSG') }
91
+ .to output(/TEST_MSG/).to_stderr_from_any_process
92
+ expect { @logger.send(tc[:level_method], 'TEST_MSG') }
93
+ .to output(/TEST_MSG/).to_stderr_from_any_process
94
+ else
95
+ expect { @logger.log(tc[:level], 'TEST_MSG') }
96
+ .not_to output.to_stderr_from_any_process
97
+ expect { @logger.send(tc[:level_method], 'TEST_MSG') }
98
+ .not_to output.to_stderr_from_any_process
99
+ end
100
+ end
101
+ end
102
+
103
+ it 'should be timestamped' do
104
+ @logger.level = tc[:level]
105
+ time_of_test = Time.now
106
+ allow(Time).to receive(:now).and_return(time_of_test)
107
+ expect { @logger.log(tc[:level], 'TEST_MSG') }
108
+ .to output(/#{time_of_test.strftime("\\[%Y-%m-%d %H:%M:%S\\]")}/)
109
+ .to_stderr_from_any_process
110
+ expect { @logger.send(tc[:level_method], 'TEST_MSG') }
111
+ .to output(/#{time_of_test.strftime("\\[%Y-%m-%d %H:%M:%S\\]")}/)
112
+ .to_stderr_from_any_process
113
+ end
114
+
115
+ it 'should be colored in ' + tc[:color_desc] do
116
+ @logger.level = tc[:level]
117
+ expect { @logger.log(tc[:level], 'TEST_MSG') }
118
+ .to output(tc[:color_regex]).to_stderr_from_any_process
119
+ expect { @logger.send(tc[:level_method], 'TEST_MSG') }
120
+ .to output(tc[:color_regex]).to_stderr_from_any_process
121
+ end
122
+ end
123
+ end
124
+
125
+ after(:all) do
126
+ @logger.close
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is automatically loaded in each *_spec.rb file, so keep it light!
4
+
5
+ RSpec.configure do |config|
6
+ config.expect_with :rspec do |expectations|
7
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
8
+ end
9
+
10
+ config.mock_with :rspec do |mocks|
11
+ mocks.verify_partial_doubles = true
12
+ end
13
+
14
+ config.shared_context_metadata_behavior = :apply_to_host_groups
15
+
16
+ config.disable_monkey_patching!
17
+
18
+ # config.warnings = true
19
+
20
+ # Use the documentation formatter when RSpec is launched with one file only
21
+ config.default_formatter = 'doc' if config.files_to_run.one?
22
+
23
+ # Print the 10 slowest examples and example groups at the
24
+ # end of the spec run, to help surface which specs are running
25
+ # particularly slow.
26
+ # config.profile_examples = 10
27
+
28
+ # Run specs in random order to surface order dependencies. If you find an
29
+ # order dependency and want to debug it, you can fix the order by providing
30
+ # the seed, which is printed after each run.
31
+ # --seed 1234
32
+ config.order = :random
33
+
34
+ # Seed global randomization in this process using the `--seed` CLI option.
35
+ # Setting this allows you to use `--seed` to deterministically reproduce
36
+ # test failures related to randomization by passing the same `--seed` value
37
+ # as the one that triggered the failure.
38
+ Kernel.srand config.seed
39
+
40
+ # Add lib/ directory to load path
41
+ $LOAD_PATH << File.absolute_path(File.join('..', 'lib'), __dir__)
42
+
43
+ # Load and start SimpleCov to gather code coverage information
44
+ unless config.files_to_run.one?
45
+ require 'simplecov'
46
+ SimpleCov.add_filter 'spec' # exclude 'spec' folder from coverage
47
+ SimpleCov.start
48
+ require 'intranet/core'
49
+ end
50
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'intranet/abstract_responder'
4
+
5
+ module Intranet
6
+ class TestResponder < AbstractResponder
7
+ attr_reader :finalized
8
+
9
+ def initialize(responses = {}, extra_css = [], extra_js = [])
10
+ @responses = responses
11
+ @extra_css = extra_css
12
+ @extra_js = extra_js
13
+ @finalized = false
14
+ end
15
+
16
+ def finalize
17
+ @finalized = true
18
+ end
19
+
20
+ def resources_dir
21
+ __dir__
22
+ end
23
+
24
+ def generate_page(path, query)
25
+ if path == '/query'
26
+ [200, 'text/plain', query.to_s + "\r\n"]
27
+ else
28
+ @responses.fetch(path)
29
+ end
30
+ rescue KeyError
31
+ super(path, query)
32
+ end
33
+
34
+ def css_dependencies
35
+ super + @extra_css
36
+ end
37
+
38
+ def js_dependencies
39
+ super + @extra_js
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,5 @@
1
+ /**
2
+ * test_responder/www/style.css
3
+ * Design for the Test Responder of the Intranet-Core.
4
+ */
5
+
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: intranet-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ebling Mis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-12-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: haml
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: htmlentities
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: i18n
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: titleize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webrick
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
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: rspec
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: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.61.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.61.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
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: yard
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
+ description:
154
+ email: ebling.mis@protonmail.com
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files: []
158
+ files:
159
+ - README.md
160
+ - lib/core_extensions.rb
161
+ - lib/core_extensions/string.rb
162
+ - lib/core_extensions/tree.rb
163
+ - lib/core_extensions/webrick/httpresponse.rb
164
+ - lib/intranet/abstract_responder.rb
165
+ - lib/intranet/core.rb
166
+ - lib/intranet/core/builder.rb
167
+ - lib/intranet/core/haml_wrapper.rb
168
+ - lib/intranet/core/locales.rb
169
+ - lib/intranet/core/servlet.rb
170
+ - lib/intranet/core/version.rb
171
+ - lib/intranet/logger.rb
172
+ - lib/intranet/resources/haml/http_error.haml
173
+ - lib/intranet/resources/haml/skeleton.haml
174
+ - lib/intranet/resources/haml/title_and_breadcrumb.haml
175
+ - lib/intranet/resources/locales/en.yml
176
+ - lib/intranet/resources/locales/fr.yml
177
+ - lib/intranet/resources/www/background.jpg
178
+ - lib/intranet/resources/www/error.png
179
+ - lib/intranet/resources/www/favicon.ico
180
+ - lib/intranet/resources/www/fonts/SourceSansPro.woff2
181
+ - lib/intranet/resources/www/nav.js
182
+ - lib/intranet/resources/www/style.css
183
+ - spec/core_extensions/string_spec.rb
184
+ - spec/core_extensions/tree_spec.rb
185
+ - spec/core_extensions/webrick/httpresponse_spec.rb
186
+ - spec/intranet/core/fr.yml
187
+ - spec/intranet/core/haml_wrapper_spec.rb
188
+ - spec/intranet/core/locales_spec.rb
189
+ - spec/intranet/core_spec.rb
190
+ - spec/intranet/logger_spec.rb
191
+ - spec/spec_helper.rb
192
+ - spec/test_responder/responder.rb
193
+ - spec/test_responder/www/style.css
194
+ homepage: https://bitbucket.org/ebling-mis/intranet-core.git
195
+ licenses:
196
+ - MIT
197
+ metadata: {}
198
+ post_install_message:
199
+ rdoc_options: []
200
+ require_paths:
201
+ - lib
202
+ required_ruby_version: !ruby/object:Gem::Requirement
203
+ requirements:
204
+ - - "~>"
205
+ - !ruby/object:Gem::Version
206
+ version: '2.3'
207
+ required_rubygems_version: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - ">="
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ requirements: []
213
+ rubyforge_project:
214
+ rubygems_version: 2.5.2.1
215
+ signing_key:
216
+ specification_version: 4
217
+ summary: Core component to build a custom intranet.
218
+ test_files: []