marti 0.1.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 (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