vanilla 1.9.17 → 1.11.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.
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
2
- require 'vanilla'
1
+ require "rubygems"
2
+ require "rake/gempackagetask"
3
+ require "rake/rdoctask"
4
+
3
5
  load File.join(File.dirname(__FILE__), *%w[lib tasks vanilla.rake])
4
6
 
5
7
  task :default => :test
@@ -7,14 +9,11 @@ task :default => :test
7
9
  require "rake/testtask"
8
10
  Rake::TestTask.new do |t|
9
11
  t.libs << "test"
12
+ t.ruby_opts << "-rubygems"
10
13
  t.test_files = FileList["test/**/*_test.rb"]
11
14
  t.verbose = true
12
15
  end
13
16
 
14
- require "rubygems"
15
- require "rake/gempackagetask"
16
- require "rake/rdoctask"
17
-
18
17
  if Object.const_defined?(:Gem)
19
18
  # This builds the actual gem. For details of what all these options
20
19
  # mean, and other ones you can add, check the documentation here:
@@ -25,7 +24,7 @@ if Object.const_defined?(:Gem)
25
24
 
26
25
  # Change these as appropriate
27
26
  s.name = "vanilla"
28
- s.version = "1.9.17"
27
+ s.version = "1.11.0"
29
28
  s.summary = "A bliki-type web content thing."
30
29
  s.author = "James Adam"
31
30
  s.email = "james@lazyatom.com.com"
@@ -42,7 +41,7 @@ if Object.const_defined?(:Gem)
42
41
 
43
42
  # All the other gems we need.
44
43
  s.add_dependency("rack", ">= 0.9.1")
45
- s.add_dependency("soup", ">= 0.9.9")
44
+ s.add_dependency("soup", ">= 0.9.10")
46
45
  s.add_dependency("ratom", ">= 0.3.5")
47
46
  s.add_dependency("RedCloth", ">= 4.1.1")
48
47
  s.add_dependency("BlueCloth", ">= 1.0.0")
@@ -51,6 +50,7 @@ if Object.const_defined?(:Gem)
51
50
 
52
51
  s.add_development_dependency("shoulda") # add any other gems for testing/development
53
52
  s.add_development_dependency("mocha")
53
+ s.add_development_dependency("haml")
54
54
 
55
55
  # If you want to publish automatically to rubyforge, you'll may need
56
56
  # to tweak this, and the publishing task below too.
data/lib/vanilla/app.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'vanilla/request'
2
2
  require 'vanilla/authentication'
3
3
  require 'vanilla/routes'
4
- require 'vanilla/soup_with_timestamps'
4
+ require 'vanilla/soup/timestamp_backend'
5
5
 
6
6
  # Require the base set of renderers
7
7
  require 'vanilla/renderers/base'
@@ -18,7 +18,7 @@ module Vanilla
18
18
 
19
19
  def initialize(config_file=nil)
20
20
  prepare_configuration(config_file)
21
- @soup = SoupWithTimestamps.new(config[:soup])
21
+ @soup = prepare_soup(config)
22
22
  @authenticator = Vanilla::Authentication::Base.new(self)
23
23
  end
24
24
 
@@ -99,5 +99,14 @@ module Vanilla
99
99
  File.open(self[:filename], 'w') { |f| f.puts self.to_yaml }
100
100
  end
101
101
  end
102
+
103
+ def prepare_soup(config)
104
+ if config[:soups]
105
+ backends = [config[:soups]].flatten.map { |path| Vanilla::Soup::TimestampBackend.new(::Soup::Backends::YAMLBackend.new(path)) }
106
+ ::Soup.new(::Soup::Backends::MultiSoup.new(*backends))
107
+ else
108
+ ::Soup.new(Vanilla::Soup::TimestampBackend.new(::Soup::Backends::YAMLBackend.new(config[:soup])))
109
+ end
110
+ end
102
111
  end
103
112
  end
@@ -7,6 +7,6 @@ class NewSnip < Dynasnip
7
7
  app.request.authenticate!
8
8
 
9
9
  base_params = {:render_as => '', :content => '', :author => current_user}.update(app.request.params)
10
- editor = EditSnip.new(app).edit(Snip.new(base_params))
10
+ editor = EditSnip.new(app).edit(Soup::Snip.new(base_params))
11
11
  end
12
12
  end
@@ -0,0 +1,15 @@
1
+ require 'vanilla/renderers/base'
2
+
3
+ require 'haml'
4
+
5
+ module Vanilla::Renderers
6
+ class Haml < Base
7
+ def prepare(snip, part=:content, args=[], enclosing_snip=snip)
8
+ @snip = snip
9
+ end
10
+
11
+ def process_text(content)
12
+ ::Haml::Engine.new(content).render(binding)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ require 'soup'
2
+
3
+ module Vanilla
4
+ module Soup
5
+ class TimestampBackend
6
+ def initialize(backend)
7
+ @backend = backend
8
+ end
9
+
10
+ def save_snip(attributes)
11
+ attributes[:created_at] ||= Time.now
12
+ attributes[:created_at] = Time.parse(attributes[:created_at]) if attributes[:created_at].is_a?(String)
13
+ attributes[:updated_at] = Time.now
14
+ @backend.save_snip(attributes)
15
+ end
16
+
17
+ def method_missing(*args)
18
+ @backend.__send__(*args)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class BaseRendererTest < Vanilla::TestCase
4
4
  context "in general" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
  require 'vanilla/dynasnip'
3
3
 
4
4
  class DynasnipTest < Vanilla::TestCase
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class ErbRendererTest < Vanilla::TestCase
4
4
  context "when rendering" do
@@ -0,0 +1,37 @@
1
+ require 'haml'
2
+ require 'test_helper'
3
+
4
+ class HamlRendererTest < Vanilla::TestCase
5
+ context "when rendering" do
6
+ should "render Haml into HTML" do
7
+ haml_snip(:name => "test", :content => "#hello\n stuff")
8
+ assert_response_body %{<div id='hello'>\n stuff\n</div>}, "/test"
9
+ end
10
+
11
+ should "insert evaluated Haml content into the snip" do
12
+ haml_snip(:name => "test", :content => "= 1 + 2")
13
+ assert_response_body "3", "/test"
14
+ end
15
+
16
+ should "evaluate Erb content in the snip" do
17
+ haml_snip(:name => "test", :content => "- if false\n monkey\n- else\n donkey")
18
+ assert_response_body "donkey", "/test"
19
+ end
20
+
21
+ should "expose the snip as an instance variable" do
22
+ haml_snip(:name => "test", :content => "= @snip.name")
23
+ assert_response_body "test", "/test"
24
+ end
25
+
26
+ should "expose the app as an instance variable" do
27
+ haml_snip(:name => "test", :content => "= @app.class.name")
28
+ assert_response_body "Vanilla::App", "/test"
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def haml_snip(params)
35
+ create_snip(params.merge(:render_as => "Haml"))
36
+ end
37
+ end
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class MarkdownRendererTest < Vanilla::TestCase
4
4
  context "when rendering" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class RawRendererTest < Vanilla::TestCase
4
4
  context "when rendering" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class RubyRendererTest < Vanilla::TestCase
4
4
  context "when rendering normally" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), *%w[test_helper])
1
+ require "test_helper"
2
2
  Treetop.load File.join(File.dirname(__FILE__), *%w[.. lib vanilla snip_reference])
3
3
 
4
4
  class SnipReferenceParserTest < Test::Unit::TestCase
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), *%w[test_helper])
1
+ require "test_helper"
2
2
 
3
3
  class SnipReferenceTest < Vanilla::TestCase
4
4
  def setup
@@ -0,0 +1,2 @@
1
+ --- # Soup attributes
2
+ :name: whatwhat
data/test/test_helper.rb CHANGED
@@ -1,19 +1,16 @@
1
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
2
- require "rubygems"
3
- require "vanilla"
4
- require "test/unit"
5
1
  require "shoulda"
6
2
  require "mocha"
7
3
  require "fileutils"
8
4
  require "rack/mock"
5
+ require "vanilla"
9
6
 
10
7
  module Vanilla
11
8
  module Test
12
9
  def setup_clean_environment
13
- FileUtils.mkdir_p(File.dirname(test_config_file))
10
+ FileUtils.mkdir_p(File.dirname(config_file_for_tests))
14
11
  clear_soup
15
- File.open(test_config_file, 'w') { |f| f.write({:soup => soup_path}.to_yaml) }
16
- @app = Vanilla::App.new(test_config_file)
12
+ File.open(config_file_for_tests, 'w') { |f| f.write({:soup => soup_path}.to_yaml) }
13
+ @app = Vanilla::App.new(config_file_for_tests)
17
14
 
18
15
  require "vanilla/dynasnips/current_snip"
19
16
  @app.soup << CurrentSnip.snip_attributes
@@ -33,19 +30,17 @@ module Vanilla
33
30
  end
34
31
 
35
32
  def assert_response_body(expected, uri)
36
- assert_equal expected, response_body_for(uri)
33
+ assert_equal expected.strip, response_body_for(uri).strip
37
34
  end
38
35
 
39
36
  def set_main_template(template_content)
40
- system = @app.soup["system"] || Snip.new({:name => "system"}, @app.soup)
37
+ system = @app.soup["system"] || Soup::Snip.new({:name => "system"}, @app.soup)
41
38
  system.main_template = template_content
42
39
  system.save
43
40
  end
44
41
 
45
42
  def create_snip(params)
46
- s = Snip.new(params, @app.soup)
47
- s.save
48
- s
43
+ @app.soup << params
49
44
  end
50
45
 
51
46
  def mock_env_for_url(url)
@@ -56,12 +51,12 @@ module Vanilla
56
51
  Rack::Request.new(mock_env_for_url(url))
57
52
  end
58
53
 
59
- def test_config_file
54
+ def config_file_for_tests
60
55
  File.join(File.dirname(__FILE__), "tmp", "config.yml")
61
56
  end
62
57
 
63
- def test_config(options={})
64
- File.open(test_config_file, 'w') { |f| f.write({:soup => soup_path}.update(options).to_yaml) }
58
+ def config_for_tests(options={})
59
+ File.open(config_file_for_tests, 'w') { |f| f.write({:soup => soup_path}.update(options).to_yaml) }
65
60
  end
66
61
 
67
62
  def soup_path
@@ -1,8 +1,4 @@
1
1
  CurrentSnip--- # Soup attributes
2
- :created_at: 2010-01-04 13:54:23.700595 +00:00
3
- :updated_at: 2010-01-04 13:54:23.700596 +00:00
4
- :name: current_snip
5
- :render_as: Ruby
6
2
  :usage: |-
7
3
  The current_snip dyna normally returns the result of rendering the snip named by the
8
4
  'snip' value in the parameters. This way, it can be used in templates to place the currently
@@ -13,3 +9,7 @@ CurrentSnip--- # Soup attributes
13
9
  &#123;current_snip name&#125;
14
10
 
15
11
  will output the name of the current snip, or the name of the snip currently being edited.
12
+ :updated_at: 2010-06-10 15:00:13.119623 +01:00
13
+ :render_as: Ruby
14
+ :name: current_snip
15
+ :created_at: 2010-06-10 15:00:13.119621 +01:00
@@ -1,5 +1,5 @@
1
1
  --- # Soup attributes
2
- :created_at: 2010-01-04 13:54:23.701146 +00:00
3
- :updated_at: 2010-01-04 13:54:23.701148 +00:00
2
+ :updated_at: 2010-06-10 15:00:13.120125 +01:00
4
3
  :name: system
5
4
  :main_template: "{current_snip}"
5
+ :created_at: 2010-06-10 15:00:13.120123 +01:00
@@ -0,0 +1,4 @@
1
+ --- # Soup attributes
2
+ :updated_at: 2010-06-10 15:00:13.120894 +01:00
3
+ :name: temp
4
+ :created_at: 2010-06-10 15:00:13 +01:00
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), 'test_helper')
1
+ require "test_helper"
2
2
 
3
3
  class VanillaAppTest < Vanilla::TestCase
4
4
 
@@ -39,7 +39,7 @@ class VanillaAppTest < Vanilla::TestCase
39
39
 
40
40
  context "when detecting the snip renderer" do
41
41
  setup do
42
- @app = Vanilla::App.new(test_config_file)
42
+ @app = Vanilla::App.new(config_file_for_tests)
43
43
  end
44
44
 
45
45
  should "return the constant refered to in the render_as property of the snip" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class VanillaPresentingTest < Vanilla::TestCase
4
4
  def setup
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "test_helper")
1
+ require "test_helper"
2
2
 
3
3
  class VanillaRequestTest < Vanilla::TestCase
4
4
  context "when requesting the root" do
@@ -14,8 +14,8 @@ class VanillaRequestTest < Vanilla::TestCase
14
14
 
15
15
  context "with a start snip configuration set" do
16
16
  setup do
17
- test_config(:root_snip => "custom")
18
- @app = Vanilla::App.new(test_config_file)
17
+ config_for_tests(:root_snip => "custom")
18
+ @app = Vanilla::App.new(config_file_for_tests)
19
19
  end
20
20
 
21
21
  should "use specified snip as default" do
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), *%w[test_helper])
1
+ require "test_helper"
2
2
 
3
3
  class VanillaSoupTest < Vanilla::TestCase
4
4
  should "convert timestamps to times" do
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vanilla
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.17
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 11
8
+ - 0
9
+ version: 1.11.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - James Adam
@@ -9,99 +14,143 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-01-04 00:00:00 +00:00
17
+ date: 2010-06-10 00:00:00 +01:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rack
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 9
30
+ - 1
23
31
  version: 0.9.1
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: soup
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
33
- version: 0.9.9
34
- version:
41
+ segments:
42
+ - 0
43
+ - 9
44
+ - 10
45
+ version: 0.9.10
46
+ type: :runtime
47
+ version_requirements: *id002
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: ratom
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
40
52
  requirements:
41
53
  - - ">="
42
54
  - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 3
58
+ - 5
43
59
  version: 0.3.5
44
- version:
60
+ type: :runtime
61
+ version_requirements: *id003
45
62
  - !ruby/object:Gem::Dependency
46
63
  name: RedCloth
47
- type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
50
66
  requirements:
51
67
  - - ">="
52
68
  - !ruby/object:Gem::Version
69
+ segments:
70
+ - 4
71
+ - 1
72
+ - 1
53
73
  version: 4.1.1
54
- version:
74
+ type: :runtime
75
+ version_requirements: *id004
55
76
  - !ruby/object:Gem::Dependency
56
77
  name: BlueCloth
57
- type: :runtime
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
60
80
  requirements:
61
81
  - - ">="
62
82
  - !ruby/object:Gem::Version
83
+ segments:
84
+ - 1
85
+ - 0
86
+ - 0
63
87
  version: 1.0.0
64
- version:
88
+ type: :runtime
89
+ version_requirements: *id005
65
90
  - !ruby/object:Gem::Dependency
66
91
  name: treetop
67
- type: :runtime
68
- version_requirement:
69
- version_requirements: !ruby/object:Gem::Requirement
92
+ prerelease: false
93
+ requirement: &id006 !ruby/object:Gem::Requirement
70
94
  requirements:
71
95
  - - ">="
72
96
  - !ruby/object:Gem::Version
97
+ segments:
98
+ - 1
99
+ - 4
100
+ - 1
73
101
  version: 1.4.1
74
- version:
102
+ type: :runtime
103
+ version_requirements: *id006
75
104
  - !ruby/object:Gem::Dependency
76
105
  name: warden
77
- type: :runtime
78
- version_requirement:
79
- version_requirements: !ruby/object:Gem::Requirement
106
+ prerelease: false
107
+ requirement: &id007 !ruby/object:Gem::Requirement
80
108
  requirements:
81
109
  - - ">="
82
110
  - !ruby/object:Gem::Version
111
+ segments:
112
+ - 0
113
+ - 5
114
+ - 2
83
115
  version: 0.5.2
84
- version:
116
+ type: :runtime
117
+ version_requirements: *id007
85
118
  - !ruby/object:Gem::Dependency
86
119
  name: shoulda
87
- type: :development
88
- version_requirement:
89
- version_requirements: !ruby/object:Gem::Requirement
120
+ prerelease: false
121
+ requirement: &id008 !ruby/object:Gem::Requirement
90
122
  requirements:
91
123
  - - ">="
92
124
  - !ruby/object:Gem::Version
125
+ segments:
126
+ - 0
93
127
  version: "0"
94
- version:
128
+ type: :development
129
+ version_requirements: *id008
95
130
  - !ruby/object:Gem::Dependency
96
131
  name: mocha
132
+ prerelease: false
133
+ requirement: &id009 !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ segments:
138
+ - 0
139
+ version: "0"
97
140
  type: :development
98
- version_requirement:
99
- version_requirements: !ruby/object:Gem::Requirement
141
+ version_requirements: *id009
142
+ - !ruby/object:Gem::Dependency
143
+ name: haml
144
+ prerelease: false
145
+ requirement: &id010 !ruby/object:Gem::Requirement
100
146
  requirements:
101
147
  - - ">="
102
148
  - !ruby/object:Gem::Version
149
+ segments:
150
+ - 0
103
151
  version: "0"
104
- version:
152
+ type: :development
153
+ version_requirements: *id010
105
154
  description:
106
155
  email: james@lazyatom.com.com
107
156
  executables:
@@ -119,15 +168,18 @@ files:
119
168
  - test/base_renderer_test.rb
120
169
  - test/dynasnip_test.rb
121
170
  - test/erb_renderer_test.rb
171
+ - test/haml_renderer_test.rb
122
172
  - test/markdown_renderer_test.rb
123
173
  - test/raw_renderer_test.rb
124
174
  - test/ruby_renderer_test.rb
125
175
  - test/snip_reference_parser_test.rb
126
176
  - test/snip_reference_test.rb
177
+ - test/soup/whatwhat.yml
127
178
  - test/test_helper.rb
128
179
  - test/tmp/config.yml
129
180
  - test/tmp/soup/current_snip.yml
130
181
  - test/tmp/soup/system.yml
182
+ - test/tmp/soup/temp.yml
131
183
  - test/vanilla_app_test.rb
132
184
  - test/vanilla_presenting_test.rb
133
185
  - test/vanilla_request_test.rb
@@ -150,7 +202,6 @@ files:
150
202
  - lib/vanilla/dynasnips/link_to_current_snip.rb
151
203
  - lib/vanilla/dynasnips/logout.rb
152
204
  - lib/vanilla/dynasnips/new.rb
153
- - lib/vanilla/dynasnips/notes.rb
154
205
  - lib/vanilla/dynasnips/pre.rb
155
206
  - lib/vanilla/dynasnips/rand.rb
156
207
  - lib/vanilla/dynasnips/raw.rb
@@ -158,6 +209,7 @@ files:
158
209
  - lib/vanilla/renderers/base.rb
159
210
  - lib/vanilla/renderers/bold.rb
160
211
  - lib/vanilla/renderers/erb.rb
212
+ - lib/vanilla/renderers/haml.rb
161
213
  - lib/vanilla/renderers/markdown.rb
162
214
  - lib/vanilla/renderers/raw.rb
163
215
  - lib/vanilla/renderers/ruby.rb
@@ -170,7 +222,7 @@ files:
170
222
  - lib/vanilla/snips/start.rb
171
223
  - lib/vanilla/snips/system.rb
172
224
  - lib/vanilla/snips/tutorial.rb
173
- - lib/vanilla/soup_with_timestamps.rb
225
+ - lib/vanilla/soup/timestamp_backend.rb
174
226
  - lib/vanilla/static.rb
175
227
  - lib/vanilla.rb
176
228
  - bin/vanilla
@@ -192,18 +244,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
192
244
  requirements:
193
245
  - - ">="
194
246
  - !ruby/object:Gem::Version
247
+ segments:
248
+ - 0
195
249
  version: "0"
196
- version:
197
250
  required_rubygems_version: !ruby/object:Gem::Requirement
198
251
  requirements:
199
252
  - - ">="
200
253
  - !ruby/object:Gem::Version
254
+ segments:
255
+ - 0
201
256
  version: "0"
202
- version:
203
257
  requirements: []
204
258
 
205
259
  rubyforge_project: vanilla
206
- rubygems_version: 1.3.5
260
+ rubygems_version: 1.3.6
207
261
  signing_key:
208
262
  specification_version: 3
209
263
  summary: A bliki-type web content thing.
@@ -1,42 +0,0 @@
1
- require 'vanilla/dynasnip'
2
-
3
- class Notes < Dynasnip
4
- def get(*args)
5
- all_notes_content = all_notes.map { |snip|
6
- render_note(snip)
7
- }.join("")
8
- snip.main_template.gsub('[notes]', all_notes_content)
9
- end
10
-
11
- def post(*args)
12
- new_note = Snip.new(cleaned_params)
13
- new_note.name = "note_#{snip.next_note_id}"
14
- new_note.kind = "note"
15
- new_note.save
16
- increment_next_id
17
- get(*args)
18
- end
19
-
20
- private
21
-
22
- def all_notes
23
- Snip.with(:kind, "= 'note'")
24
- end
25
-
26
- def increment_next_id
27
- s = snip
28
- s.next_note_id = s.next_note_id.to_i + 1
29
- s.save
30
- end
31
-
32
- def render_note(note)
33
- note_link = link_to(note.name)
34
- note_content = Vanilla.render(note.name, nil, context, [])
35
- snip.note_template.gsub('[note]', note_content).gsub('[link]', note_link)
36
- end
37
-
38
- attribute :next_note_id, 1
39
-
40
- attribute :note_template, %{<dt>[link]</dt><dd>[note]</dd>}
41
- attribute :main_template, %{<dl>[notes]</dl>}
42
- end
@@ -1,22 +0,0 @@
1
- require 'soup'
2
- require 'delegate'
3
-
4
- module Vanilla
5
- class SoupWithTimestamps < DelegateClass(Soup)
6
- def initialize(config)
7
- super(Soup.new(config))
8
- end
9
-
10
- def <<(attributes)
11
- attributes[:created_at] ||= Time.now
12
- attributes[:created_at] = Time.parse(attributes[:created_at]) if attributes[:created_at].is_a?(String)
13
- attributes[:updated_at] = Time.now
14
- super
15
- end
16
-
17
- def new_snip(attributes)
18
- Snip.new(attributes, self)
19
- end
20
- end
21
- end
22
-