stupid_formatter 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,23 +1,115 @@
1
1
  = StupidFormatter
2
2
 
3
- This is a super-stupid gem for formatting text in a chain. You can change the chain by doing this:
3
+ StupidFormatter let's you pipe text through processors in a chain by abstracting the actual implementation
4
+ details of each processor into a unified API. By default, it can do ERb, Markdown (via RDiscount) and
5
+ syntax-highlight with CodeRay.
6
+
7
+ Say you want to format some markdown-formatted text with RDiscount and also include some ERb processing
8
+ with CodeRay syntax highlighting, you could configure the chain somewhere at the beginning of your app like so:
4
9
 
5
10
  StupidFormatter.chain = [StupidFormatter::Erb, StupidFormatter::RDiscount]
11
+
12
+ Then, pass in your Markdown-marked-up, ERb-riddled string to <code>StupidFormatter.result</code> or
13
+ just call <code>string.formatted</code> and you'll see results.
14
+
15
+ The ERb, RDiscount chain mentioned above is actually the default, so if you want to stick with that,
16
+ just skip that chain config step (yes, it is a stupid example).
17
+
18
+ Formatters are processed in the order they are given in the Array, so ERb comes first, then RDiscount
19
+ in this example.
6
20
 
7
- Then, pass in your Markdown-markedup, erb-riddled string to StupidFormatter.result and you'll
8
- see results. A coderay helper is included for erb, see test/fixtures/erb_coderay_markdown_example.txt
21
+ To install, do:
9
22
 
10
- This is so completely alpha, you have no idea!
23
+ sudo gem install stupid_formatter
24
+
25
+ This is so completely alpha, you have no idea! Don't expect beautiful code or RDoc.
11
26
 
27
+ == Using the formatters directly
28
+
29
+ Of course, you can access the formatters directly as well. To format a string with RDiscount, do:
30
+
31
+ StupidFormatter::RDiscount.new("# some markdown").result
32
+
12
33
  == Custom formatters
13
34
 
14
- You can define your own formatters and by conforming to the public api, which is:
35
+ You can define your own formatters very easily by conforming to the public API, which is:
15
36
 
16
37
  * inherit from StupidFormatter::AbstractFormatter
17
38
  * make a result instance method that does not take any arguments
18
39
  * use the local attribute 'input' to do whatever you want with the text, and return it
19
40
 
41
+ === Example custom formatter
42
+
43
+ In our example, let's create a formatter that will reverse the text.
44
+
45
+ class StupidFormatter::WrittenInReverse < StupidFormatter::AbstractFormatter
46
+ def result
47
+ input.reverse
48
+ end
49
+ end
50
+
51
+ After adding that to the chain with
52
+
53
+ StupidFormatter.chain << StupidFormatter::WrittenInReverse
54
+
55
+ Your text will be reversed when calling <code>"some string".formatted</code>
56
+
57
+ == ERb Helpers
58
+
59
+ === Capturing blocks with ERb
60
+
61
+ The ERb-formatter offers a capture-helper, which allows you to capture the content of a block into
62
+ a variable like so:
63
+
64
+ <% @foo = capture do %>
65
+ Bar
66
+ <% end %>
67
+ Foo<%= @foo %>
68
+
69
+ The above example will render into "FooBar". This functionality is used in the Coderay helper, which
70
+ is automatically included in the ERb formatter, see next section.
71
+
72
+ === Syntax highlighting with Coderay
73
+
74
+ With the CoderayHelper that gets included into the ERb formatter automatically, you can get syntax-highlighting
75
+ very easily:
76
+
77
+ <% highlight do %>
78
+ puts 'Your Awesome Ruby(tm) here!'
79
+ <% end %>
80
+
81
+ The language defaults to :ruby, but you can pass in any CodeRay-language to the highlight method:
82
+
83
+ <% highlight :javascript do %>
84
+ var foo = 'bar';
85
+ <% end %>
86
+
87
+ The highlighting is configured to use CSS instead of in-place colors, so you might want to add a
88
+ decent (http://railscasts.com/stylesheets/coderay.css) coderay css file into your HTML.
89
+
90
+ Thanks Ryan for making that great CodeRay CSS and giving it away (http://railscasts.com/episodes/46-catch-all-route)!
91
+
92
+ === Making your own helpers
93
+
94
+ Let's make a helper that reverses the text you gave in the block, like so:
95
+
96
+ <% written_in_reverse do %>
97
+ anna
98
+ <% end %>
99
+
100
+ Just create a module that uses the capture helper and appends the result to the @output_buffer and include it
101
+ in the ERb helper, like so:
102
+
103
+ module WrittenInReverse
104
+ def written_in_reverse
105
+ text = capture { yield }
106
+ @output_buffer << text.reverse
107
+ end
108
+ end
109
+ StupidFormatter::ERb.send :include, WrittenInReverse
20
110
 
111
+ This will print 'anna' in your ERb. Easy, right?
112
+
21
113
  == Note on Patches/Pull Requests
22
114
 
23
115
  * Fork the project.
data/Rakefile CHANGED
@@ -6,13 +6,13 @@ begin
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "stupid_formatter"
8
8
  gem.summary = %Q{A stupid formatter for piping text through markup processors}
9
- gem.description = %Q{With stupid_formatter you can pipe your blog post through erb and markdown in a chain}
9
+ gem.description = %Q{A stupid formatter for piping text through markup processors with a unified API}
10
10
  gem.email = "christoph at olszowka dot de"
11
11
  gem.homepage = "http://github.com/colszowka/stupid_formatter"
12
12
  gem.authors = ["Christoph Olszowka"]
13
13
  gem.add_dependency "rdiscount", ">= 1.5.0"
14
14
  gem.add_dependency "coderay", ">= 0.9.0"
15
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
15
+ gem.add_development_dependency "shoulda", ">= 0"
16
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
17
  end
18
18
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -2,19 +2,36 @@ require 'rdiscount'
2
2
  require 'erb'
3
3
  require 'coderay'
4
4
 
5
+ class String
6
+ #
7
+ # Pipes this string through the StupidFormatter and it's configured chain.
8
+ # The same as StupidFormatter.result(some_string)
9
+ #
10
+ def formatted
11
+ StupidFormatter.result(self)
12
+ end
13
+ end
14
+
5
15
  module StupidFormatter
6
-
7
- # Make the formatter chain configurable.
8
16
  class << self
17
+ #
18
+ # Returns the current processing chain. Defaults to [StupidFormatter::Erb, StupidFormatter::RDiscount]
19
+ #
9
20
  def chain
10
- @chain ||= [StupidFormatter::RDiscount]
21
+ @chain ||= [StupidFormatter::Erb, StupidFormatter::RDiscount]
11
22
  end
12
23
 
24
+ #
25
+ # Make the formatter chain configurable. Pass in an Array of Formatters in the order
26
+ # you want them processed in.
27
+ #
13
28
  def chain=(chain)
14
29
  @chain = chain
15
30
  end
16
31
 
32
+ #
17
33
  # Will put the input string through all formatters in the chain
34
+ #
18
35
  def result(input)
19
36
  output = input.clone
20
37
  chain.each do |formatter|
@@ -24,6 +41,9 @@ module StupidFormatter
24
41
  end
25
42
  end
26
43
 
44
+ #
45
+ # Base class for formatters, providing the basic API.
46
+ #
27
47
  class AbstractFormatter
28
48
  attr_reader :input
29
49
 
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{stupid_formatter}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Christoph Olszowka"]
12
- s.date = %q{2010-02-11}
13
- s.description = %q{With stupid_formatter you can pipe your blog post through erb and markdown in a chain}
12
+ s.date = %q{2010-02-13}
13
+ s.description = %q{A stupid formatter for piping text through markup processors with a unified API}
14
14
  s.email = %q{christoph at olszowka dot de}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
@@ -51,16 +51,16 @@ Gem::Specification.new do |s|
51
51
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
52
  s.add_runtime_dependency(%q<rdiscount>, [">= 1.5.0"])
53
53
  s.add_runtime_dependency(%q<coderay>, [">= 0.9.0"])
54
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
54
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
55
55
  else
56
56
  s.add_dependency(%q<rdiscount>, [">= 1.5.0"])
57
57
  s.add_dependency(%q<coderay>, [">= 0.9.0"])
58
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
58
+ s.add_dependency(%q<shoulda>, [">= 0"])
59
59
  end
60
60
  else
61
61
  s.add_dependency(%q<rdiscount>, [">= 1.5.0"])
62
62
  s.add_dependency(%q<coderay>, [">= 0.9.0"])
63
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
63
+ s.add_dependency(%q<shoulda>, [">= 0"])
64
64
  end
65
65
  end
66
66
 
@@ -25,6 +25,16 @@ class TestStupidFormatter < Test::Unit::TestCase
25
25
  assert_equal fixtures(:erb_coderay_markdown_expectation), @result
26
26
  end
27
27
  end
28
+
29
+ context "when I call formatted on a complex fixture string" do
30
+ setup do
31
+ @result = fixtures(:erb_coderay_markdown_example).formatted
32
+ end
33
+
34
+ should "render as in the expectation fixture" do
35
+ assert_equal fixtures(:erb_coderay_markdown_expectation), @result
36
+ end
37
+ end
28
38
  end
29
39
 
30
40
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stupid_formatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christoph Olszowka
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-11 00:00:00 +01:00
12
+ date: 2010-02-13 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: 0.9.0
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: thoughtbot-shoulda
36
+ name: shoulda
37
37
  type: :development
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: "0"
44
44
  version:
45
- description: With stupid_formatter you can pipe your blog post through erb and markdown in a chain
45
+ description: A stupid formatter for piping text through markup processors with a unified API
46
46
  email: christoph at olszowka dot de
47
47
  executables: []
48
48