marti 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +34 -0
  4. data/app/assets/stylesheets/markdown_articles/markdown_articles.css +4 -0
  5. data/app/controllers/marti/application_controller.rb +4 -0
  6. data/app/controllers/marti/marticles_controller.rb +27 -0
  7. data/app/helpers/marti/application_helper.rb +4 -0
  8. data/app/helpers/marti/marti_helper.rb +4 -0
  9. data/app/models/marti/marticle.rb +15 -0
  10. data/config/routes.rb +4 -0
  11. data/lib/marti.rb +51 -0
  12. data/lib/marti/engine.rb +5 -0
  13. data/lib/marti/errors/errors.rb +7 -0
  14. data/lib/marti/renderers/html_with_pygments.rb +12 -0
  15. data/lib/marti/services/marticle_builder.rb +28 -0
  16. data/lib/marti/services/marticle_parser.rb +116 -0
  17. data/lib/marti/version.rb +3 -0
  18. data/lib/tasks/marti_tasks.rake +4 -0
  19. data/test/dummy/README.rdoc +28 -0
  20. data/test/dummy/Rakefile +6 -0
  21. data/test/dummy/app/assets/javascripts/application.js +13 -0
  22. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  23. data/test/dummy/app/controllers/application_controller.rb +5 -0
  24. data/test/dummy/app/helpers/application_helper.rb +2 -0
  25. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/test/dummy/bin/bundle +3 -0
  27. data/test/dummy/bin/rails +4 -0
  28. data/test/dummy/bin/rake +4 -0
  29. data/test/dummy/config.ru +4 -0
  30. data/test/dummy/config/application.rb +23 -0
  31. data/test/dummy/config/boot.rb +5 -0
  32. data/test/dummy/config/database.yml +25 -0
  33. data/test/dummy/config/environment.rb +5 -0
  34. data/test/dummy/config/environments/development.rb +29 -0
  35. data/test/dummy/config/environments/production.rb +80 -0
  36. data/test/dummy/config/environments/test.rb +36 -0
  37. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  38. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  39. data/test/dummy/config/initializers/inflections.rb +16 -0
  40. data/test/dummy/config/initializers/mime_types.rb +5 -0
  41. data/test/dummy/config/initializers/secret_token.rb +12 -0
  42. data/test/dummy/config/initializers/session_store.rb +3 -0
  43. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  44. data/test/dummy/config/locales/en.yml +23 -0
  45. data/test/dummy/config/routes.rb +4 -0
  46. data/test/dummy/log/development.log +47 -0
  47. data/test/dummy/log/test.log +2090 -0
  48. data/test/dummy/public/404.html +58 -0
  49. data/test/dummy/public/422.html +58 -0
  50. data/test/dummy/public/500.html +57 -0
  51. data/test/dummy/public/favicon.ico +0 -0
  52. data/test/fixtures/test.md +6 -0
  53. data/test/fixtures/test_with_cut.md +9 -0
  54. data/test/fixtures/test_with_updated_at.md +4 -0
  55. data/test/integration/navigation_test.rb +10 -0
  56. data/test/marti_test.rb +28 -0
  57. data/test/models/marticle_test.rb +16 -0
  58. data/test/services/marticle_builder_test.rb +36 -0
  59. data/test/services/marticle_parser_test.rb +47 -0
  60. data/test/test_helper.rb +19 -0
  61. metadata +200 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ $author: Max
2
+ $somekey: avalue
3
+ $boolean1: y
4
+ $boolean2: false
5
+
6
+ #Hello
@@ -0,0 +1,9 @@
1
+ $author: Max
2
+
3
+ #Cut test
4
+
5
+ hello there
6
+
7
+ --CUT--
8
+
9
+ How's it hanging
@@ -0,0 +1,4 @@
1
+ $last_updated_at: 2013-10-11 23:11:33
2
+ $author: Max
3
+
4
+ #Sup
@@ -0,0 +1,10 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActionDispatch::IntegrationTest
4
+ fixtures :all
5
+
6
+ # test "the truth" do
7
+ # assert true
8
+ # end
9
+ end
10
+
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class MartiTest < ActiveSupport::TestCase
4
+ test "can set and get a config setting" do
5
+ prev_dir = Marti.article_directory
6
+ Marti.configure do |config|
7
+ config.article_directory = "blah"
8
+ end
9
+ assert_equal Marti.article_directory, "blah"
10
+ # Reset config for rest of tests
11
+ Marti.configure do |config|
12
+ config.article_directory = prev_dir
13
+ end
14
+ end
15
+
16
+ test 'raise an error if not configured' do
17
+ prev_config = Marti.config
18
+ Marti.instance_variable_set('@config', nil)
19
+ error_raised = begin
20
+ !Marti.article_directory
21
+ rescue Marti::Errors::NotYetConfiguredError => _
22
+ true
23
+ end
24
+ assert error_raised
25
+ # Reset config for rest of tests
26
+ Marti.instance_variable_set('@config', prev_config)
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class MarticleTest < ActiveSupport::TestCase
4
+ test "can build a set of markdown articles given a directory" do
5
+ setup
6
+ articles = Marti::Marticle.articles
7
+ expected = Dir[File.join(Marti.article_directory, "*.md")].count
8
+ assert_equal expected, articles.size
9
+ end
10
+ #test "can build an individual article" do
11
+ # setup
12
+ # test = Marti::Marticle.build("test")
13
+ # assert_equal "Max", test.author
14
+ #end
15
+
16
+ end
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ class MarticleBuilderTest < ActiveSupport::TestCase
4
+ attr_reader :path, :builder
5
+
6
+ test 'it should build an article given a path' do
7
+ setup(:test)
8
+ article = builder.build
9
+ assert article.is_a?(Marti::Marticle)
10
+ end
11
+
12
+ test 'it should set the path of the marticle' do
13
+ setup(:test)
14
+ article = builder.build
15
+ assert_equal path, article.path
16
+ end
17
+
18
+ test 'it should raise an error if the file does not exist' do
19
+ setup(:invalid)
20
+ error_raised = begin
21
+ !builder.build
22
+ rescue Marti::Errors::ArticleNotFoundError => _
23
+ true
24
+ end
25
+ assert error_raised
26
+ end
27
+
28
+ def setup(type=nil)
29
+ @path = {
30
+ updated: 'test_with_updated_at',
31
+ cut: 'test_with_cut',
32
+ invalid: 'asdsadasdsad'
33
+ }.fetch(type, 'test')
34
+ @builder = Marti::MarticleBuilder.new(path)
35
+ end
36
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ class MarticleParserTest < ActiveSupport::TestCase
4
+ attr_reader :test_file, :parser
5
+
6
+ test 'can deal with a given updated at' do
7
+ setup(:updated)
8
+ article = parser.parse
9
+ assert_equal Time.new(2013, 10, 11, 23, 11, 33), article.last_updated_at
10
+ end
11
+
12
+ test 'will use file time if no updated at given' do
13
+ setup(:test)
14
+ article = parser.parse
15
+ expected = File.mtime(test_file)
16
+ assert_equal expected, article.last_updated_at
17
+ end
18
+
19
+ test 'will work with any given key value pair' do
20
+ setup(:test)
21
+ article = parser.parse
22
+ assert_equal 'avalue', article.somekey
23
+ end
24
+
25
+ test 'will get the correct extract with a given cut' do
26
+ setup(:cut)
27
+ article = parser.parse
28
+ expected = "<h1>Cut test</h1>\n\n<p>hello there</p>"
29
+ assert_equal expected, article.extract
30
+ end
31
+
32
+ test 'will correctly handle boolean values' do
33
+ setup(:test)
34
+ article = parser.parse
35
+ assert article.boolean1
36
+ assert_not article.boolean2
37
+ end
38
+
39
+ def setup(type=nil)
40
+ path = {
41
+ updated: 'test_with_updated_at',
42
+ cut: 'test_with_cut'
43
+ }.fetch(type, 'test')
44
+ @test_file = File.join(Marti.article_directory, "#{path}.md")
45
+ @parser = Marti::MarticleParser.new(test_file)
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
16
+
17
+ Marti.configure do |config|
18
+ config.article_directory = File.join(File.dirname(__FILE__), 'fixtures')
19
+ end
metadata ADDED
@@ -0,0 +1,200 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: marti
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Max Dupenois
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: redcarpet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pygments.rb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pg
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: As I said in the summary
70
+ email:
71
+ - max.dupenois@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - MIT-LICENSE
77
+ - Rakefile
78
+ - app/assets/stylesheets/markdown_articles/markdown_articles.css
79
+ - app/controllers/marti/application_controller.rb
80
+ - app/controllers/marti/marticles_controller.rb
81
+ - app/helpers/marti/application_helper.rb
82
+ - app/helpers/marti/marti_helper.rb
83
+ - app/models/marti/marticle.rb
84
+ - config/routes.rb
85
+ - lib/marti.rb
86
+ - lib/marti/engine.rb
87
+ - lib/marti/errors/errors.rb
88
+ - lib/marti/renderers/html_with_pygments.rb
89
+ - lib/marti/services/marticle_builder.rb
90
+ - lib/marti/services/marticle_parser.rb
91
+ - lib/marti/version.rb
92
+ - lib/tasks/marti_tasks.rake
93
+ - test/dummy/README.rdoc
94
+ - test/dummy/Rakefile
95
+ - test/dummy/app/assets/javascripts/application.js
96
+ - test/dummy/app/assets/stylesheets/application.css
97
+ - test/dummy/app/controllers/application_controller.rb
98
+ - test/dummy/app/helpers/application_helper.rb
99
+ - test/dummy/app/views/layouts/application.html.erb
100
+ - test/dummy/bin/bundle
101
+ - test/dummy/bin/rails
102
+ - test/dummy/bin/rake
103
+ - test/dummy/config.ru
104
+ - test/dummy/config/application.rb
105
+ - test/dummy/config/boot.rb
106
+ - test/dummy/config/database.yml
107
+ - test/dummy/config/environment.rb
108
+ - test/dummy/config/environments/development.rb
109
+ - test/dummy/config/environments/production.rb
110
+ - test/dummy/config/environments/test.rb
111
+ - test/dummy/config/initializers/backtrace_silencers.rb
112
+ - test/dummy/config/initializers/filter_parameter_logging.rb
113
+ - test/dummy/config/initializers/inflections.rb
114
+ - test/dummy/config/initializers/mime_types.rb
115
+ - test/dummy/config/initializers/secret_token.rb
116
+ - test/dummy/config/initializers/session_store.rb
117
+ - test/dummy/config/initializers/wrap_parameters.rb
118
+ - test/dummy/config/locales/en.yml
119
+ - test/dummy/config/routes.rb
120
+ - test/dummy/log/development.log
121
+ - test/dummy/log/test.log
122
+ - test/dummy/public/404.html
123
+ - test/dummy/public/422.html
124
+ - test/dummy/public/500.html
125
+ - test/dummy/public/favicon.ico
126
+ - test/fixtures/test.md
127
+ - test/fixtures/test_with_cut.md
128
+ - test/fixtures/test_with_updated_at.md
129
+ - test/integration/navigation_test.rb
130
+ - test/marti_test.rb
131
+ - test/models/marticle_test.rb
132
+ - test/services/marticle_builder_test.rb
133
+ - test/services/marticle_parser_test.rb
134
+ - test/test_helper.rb
135
+ homepage: http://3void.com
136
+ licenses: []
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.4.5
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Allows for really simple markdown based articles
158
+ test_files:
159
+ - test/dummy/app/assets/javascripts/application.js
160
+ - test/dummy/app/assets/stylesheets/application.css
161
+ - test/dummy/app/controllers/application_controller.rb
162
+ - test/dummy/app/helpers/application_helper.rb
163
+ - test/dummy/app/views/layouts/application.html.erb
164
+ - test/dummy/bin/bundle
165
+ - test/dummy/bin/rails
166
+ - test/dummy/bin/rake
167
+ - test/dummy/config/application.rb
168
+ - test/dummy/config/boot.rb
169
+ - test/dummy/config/database.yml
170
+ - test/dummy/config/environment.rb
171
+ - test/dummy/config/environments/development.rb
172
+ - test/dummy/config/environments/production.rb
173
+ - test/dummy/config/environments/test.rb
174
+ - test/dummy/config/initializers/backtrace_silencers.rb
175
+ - test/dummy/config/initializers/filter_parameter_logging.rb
176
+ - test/dummy/config/initializers/inflections.rb
177
+ - test/dummy/config/initializers/mime_types.rb
178
+ - test/dummy/config/initializers/secret_token.rb
179
+ - test/dummy/config/initializers/session_store.rb
180
+ - test/dummy/config/initializers/wrap_parameters.rb
181
+ - test/dummy/config/locales/en.yml
182
+ - test/dummy/config/routes.rb
183
+ - test/dummy/config.ru
184
+ - test/dummy/log/development.log
185
+ - test/dummy/log/test.log
186
+ - test/dummy/public/404.html
187
+ - test/dummy/public/422.html
188
+ - test/dummy/public/500.html
189
+ - test/dummy/public/favicon.ico
190
+ - test/dummy/Rakefile
191
+ - test/dummy/README.rdoc
192
+ - test/fixtures/test.md
193
+ - test/fixtures/test_with_cut.md
194
+ - test/fixtures/test_with_updated_at.md
195
+ - test/integration/navigation_test.rb
196
+ - test/marti_test.rb
197
+ - test/models/marticle_test.rb
198
+ - test/services/marticle_builder_test.rb
199
+ - test/services/marticle_parser_test.rb
200
+ - test/test_helper.rb