vanilla 1.9.17 → 1.11.0

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