mongoid-markdown 0.1.0 → 0.1.1

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/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gem 'rdiscount'
4
+ gem 'moped'
5
+ gem 'mongoid', '>= 2.0'
4
6
 
5
7
  group :development do
6
8
  gem "rspec", ">= 2.8.0"
@@ -1,14 +1,30 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activemodel (3.2.8)
5
+ activesupport (= 3.2.8)
6
+ builder (~> 3.0.0)
7
+ activesupport (3.2.8)
8
+ i18n (~> 0.6)
9
+ multi_json (~> 1.0)
10
+ builder (3.0.0)
4
11
  diff-lcs (1.1.3)
5
12
  git (1.2.5)
13
+ i18n (0.6.1)
6
14
  jeweler (1.8.4)
7
15
  bundler (~> 1.0)
8
16
  git (>= 1.2.5)
9
17
  rake
10
18
  rdoc
11
19
  json (1.7.5)
20
+ mongoid (3.0.5)
21
+ activemodel (~> 3.1)
22
+ moped (~> 1.1)
23
+ origin (~> 1.0)
24
+ tzinfo (~> 0.3.22)
25
+ moped (1.2.1)
26
+ multi_json (1.3.6)
27
+ origin (1.0.7)
12
28
  rake (0.9.2.2)
13
29
  rdiscount (1.6.8)
14
30
  rdoc (3.12)
@@ -21,6 +37,7 @@ GEM
21
37
  rspec-expectations (2.11.3)
22
38
  diff-lcs (~> 1.1.3)
23
39
  rspec-mocks (2.11.2)
40
+ tzinfo (0.3.33)
24
41
 
25
42
  PLATFORMS
26
43
  ruby
@@ -28,6 +45,8 @@ PLATFORMS
28
45
  DEPENDENCIES
29
46
  bundler (>= 1.0.0)
30
47
  jeweler (>= 1.8.4)
48
+ mongoid (>= 2.0)
49
+ moped
31
50
  rdiscount
32
51
  rdoc (>= 3.12)
33
52
  rspec (>= 2.8.0)
@@ -1,6 +1,6 @@
1
- = mongoid-markdown
1
+ # Mongoid Markdown
2
2
 
3
- Add Markdown functionality for any Mongoid object.
3
+ Add Markdown functionality to any Mongoid object.
4
4
 
5
5
  ```ruby
6
6
 
@@ -11,23 +11,34 @@ class Message
11
11
  field :body, :markdown => true
12
12
  end
13
13
 
14
+ message = Message.new :body => "## Hello world"
14
15
 
15
- message = Message.new :body => my_markdown_text
16
+ message.marked_down? # => false
16
17
 
17
- message.body.markdown!
18
+ message.markdown!
18
19
 
19
- message.body = some_other_markedup_txt
20
+ message.marked_down? # => true
20
21
 
21
- message.body.reload
22
+ puts message.body # => "<h2>Hello world</h2>"
22
23
 
23
- message.body.marked_down?
24
+ message.body = "## Goodbye cruel world..."
25
+
26
+ message.reload # not sure about this!
27
+
28
+ message.marked_down? # => true
24
29
  ```
25
30
 
26
31
  Enjoy!
27
32
 
28
33
  Extracted from: https://github.com/baphled/chat-engine/blob/master/lib/mongoid/markdown.rb
29
34
 
30
- == Contributing to mongoid-markdown
35
+ See specs for more usage examples
36
+
37
+ Should work on both Mongoid pre 2.4 and later, including 3.x.
38
+
39
+ Please help fix any bugs or come with suggestions to improvements.
40
+
41
+ ## Contributing to mongoid-markdown
31
42
 
32
43
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
33
44
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -1,110 +1,7 @@
1
1
  require 'rdiscount'
2
2
 
3
- module Mongoid
4
- module Markdown
5
- def self.included(base)
6
- base.extend ClassMethods
7
- end
8
-
9
- module ClassMethods
10
- def markdown(*attributes)
11
- write_inheritable_attribute(:markdown_attributes, markdown_attributes + Array(attributes))
12
- @markdown_unicode = String.new.respond_to? :chars
13
-
14
- type_options = %w( plain source )
15
-
16
- attributes.each do |attribute|
17
- define_method(attribute) do |*type|
18
- type = type.first
19
- value = read_attribute(attribute)
20
-
21
- if type.nil? && value
22
- marked_down[attribute.to_sym] ||= RDiscount.new(value).to_html.html_safe
23
- elsif type.nil? && value.nil?
24
- nil
25
- elsif type_options.include?(type.to_s)
26
- send("#{attribute}_#{type}")
27
- else
28
- raise "I don't understand the `#{type}' option. Try #{type_options.join(' or ')}."
29
- end
30
- end
31
-
32
- define_method("#{attribute}_plain", proc { strip_markdown_html(__send__(attribute)) if __send__(attribute) } )
33
- define_method("#{attribute}_source", proc { read_attribute(attribute) } )
34
- end
35
-
36
- include InstanceMethods
37
- end
38
-
39
- def markdown_attributes
40
- read_inheritable_attribute(:markdown_attributes) ||
41
- write_inheritable_attribute(:markdown_attributes, [])
42
- end
43
-
44
- def field(name, options = {})
45
- returning super(name, options.reject { |k, v| k == :markdown }) do
46
- markdown name if options[:markdown]
47
- end
48
- end
49
- end
50
-
51
- module InstanceMethods
52
- def marked_down
53
- marked_down? ? (@marked_down ||= {}) : @attributes.dup
54
- end
55
-
56
- def marked_down?
57
- @is_marked_down != false
58
- end
59
-
60
- def marked_down=(value)
61
- @is_marked_down = !!value
62
- end
63
-
64
- def markdown!
65
- self.class.markdown_attributes.each { |attr| __send__(attr) }
66
- end
67
-
68
- def reload
69
- marked_down.clear
70
- super
71
- end
72
-
73
- def write_attribute(attr_name, value)
74
- marked_down[attr_name.to_s] = nil
75
- super
76
- end
77
-
78
- private
79
- def strip_markdown_html(html)
80
- returning html.dup.gsub(html_regexp, '') do |h|
81
- markdown_glyphs.each do |(entity, char)|
82
- sub = [ :gsub!, entity, char ]
83
- @textiled_unicode ? h.chars.send(*sub) : h.send(*sub)
84
- end
85
- end
86
- end
87
-
88
- def markdown_glyphs
89
- [[ '&#8217;', "'" ],
90
- [ '&#8216;', "'" ],
91
- [ '&lt;', '<' ],
92
- [ '&gt;', '>' ],
93
- [ '&#8221;', '"' ],
94
- [ '&#8220;', '"' ],
95
- [ '&#8230;', '...' ],
96
- [ '\1&#8212;', '--' ],
97
- [ ' &rarr; ', '->' ],
98
- [ ' &#8211; ', '-' ],
99
- [ '&#215;', 'x' ],
100
- [ '&#8482;', '(TM)' ],
101
- [ '&#174;', '(R)' ],
102
- [ '&#169;', '(C)' ]]
103
- end
104
-
105
- def html_regexp
106
- %r{<(?:[^>"']+|"(?:\\.|[^\\"]+)*"|'(?:\\.|[^\\']+)*')*>}xm
107
- end
108
- end
109
- end
3
+ if Mongoid::VERSION < '2.4.0'
4
+ require 'mongoid-markdown/mongoid_old'
5
+ else
6
+ require 'mongoid-markdown/mongoid_new'
110
7
  end
@@ -0,0 +1,133 @@
1
+ require 'rdiscount'
2
+
3
+ Mongoid::Fields.option :markdown do |model,field,options|
4
+ options = {} unless options.kind_of?(Hash)
5
+
6
+ attribute = field.name.to_sym
7
+
8
+ model.class_eval do
9
+ (self.markdown_attributes ||= []) << attribute
10
+
11
+ define_method(attribute) do |*type|
12
+ type = type.first
13
+ value = read_attribute(attribute)
14
+
15
+ if type.nil? && value
16
+ marked_down[attribute] ||= RDiscount.new(value).to_html.html_safe
17
+ elsif type.nil? && value.nil?
18
+ nil
19
+ elsif type_options.include?(type.to_s)
20
+ send("#{attribute}_#{type}")
21
+ else
22
+ raise "I don't understand the `#{type}' option. Try #{type_options.join(' or ')}."
23
+ end
24
+ end
25
+
26
+ define_method("#{attribute}_plain", proc { strip_markdown_html(__send__(attribute)) if __send__(attribute) } )
27
+ define_method("#{attribute}_source", proc { read_attribute(attribute) } )
28
+ end
29
+ end
30
+
31
+ module Mongoid
32
+ module Markdown
33
+ extend ActiveSupport::Concern
34
+
35
+ included do
36
+ # attr_accessor :geo
37
+ cattr_accessor :markdown_attributes
38
+ @@markdown_attributes = []
39
+
40
+ self.send :include, InstanceMethods
41
+ end
42
+
43
+ def marked_down
44
+ marked_down? ? (@marked_down ||= {}) : @attributes.dup
45
+ end
46
+
47
+ def marked_down?
48
+ @is_marked_down != false
49
+ end
50
+
51
+ def marked_down=(value)
52
+ @is_marked_down = !!value
53
+ end
54
+
55
+ def markdown!
56
+ self.class.markdown_attributes.each { |attr| __send__(attr) }
57
+ end
58
+
59
+ def reload
60
+ marked_down.clear
61
+ super
62
+ end
63
+
64
+ def write_attribute(attr_name, value)
65
+ marked_down[attr_name.to_s] = nil
66
+ super
67
+ end
68
+
69
+ module InstanceMethods
70
+ private
71
+
72
+ def strip_markdown_html(html)
73
+ returning html.dup.gsub(html_regexp, '') do |h|
74
+ markdown_glyphs.each do |(entity, char)|
75
+ sub = [ :gsub!, entity, char ]
76
+ @textiled_unicode ? h.chars.send(*sub) : h.send(*sub)
77
+ end
78
+ end
79
+ end
80
+
81
+ def markdown_glyphs
82
+ [[ '&#8217;', "'" ],
83
+ [ '&#8216;', "'" ],
84
+ [ '&lt;', '<' ],
85
+ [ '&gt;', '>' ],
86
+ [ '&#8221;', '"' ],
87
+ [ '&#8220;', '"' ],
88
+ [ '&#8230;', '...' ],
89
+ [ '\1&#8212;', '--' ],
90
+ [ ' &rarr; ', '->' ],
91
+ [ ' &#8211; ', '-' ],
92
+ [ '&#215;', 'x' ],
93
+ [ '&#8482;', '(TM)' ],
94
+ [ '&#174;', '(R)' ],
95
+ [ '&#169;', '(C)' ]]
96
+ end
97
+
98
+ def html_regexp
99
+ %r{<(?:[^>"']+|"(?:\\.|[^\\"]+)*"|'(?:\\.|[^\\']+)*')*>}xm
100
+ end
101
+ end
102
+
103
+ module ClassMethods
104
+ def markdown(*attributes)
105
+ @markdown_unicode = String.new.respond_to? :chars
106
+
107
+ type_options = %w( plain source )
108
+
109
+ attributes.each do |attribute|
110
+ define_method(attribute) do |*type|
111
+ type = type.first
112
+ value = read_attribute(attribute)
113
+
114
+ if type.nil? && value
115
+ marked_down[attribute.to_sym] ||= RDiscount.new(value).to_html.html_safe
116
+ elsif type.nil? && value.nil?
117
+ nil
118
+ elsif type_options.include?(type.to_s)
119
+ send("#{attribute}_#{type}")
120
+ else
121
+ raise "I don't understand the `#{type}' option. Try #{type_options.join(' or ')}."
122
+ end
123
+ end
124
+
125
+ define_method("#{attribute}_plain", proc { strip_markdown_html(__send__(attribute)) if __send__(attribute) } )
126
+ define_method("#{attribute}_source", proc { read_attribute(attribute) } )
127
+ end
128
+
129
+ include InstanceMethods
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,109 @@
1
+ require 'rdiscount'
2
+
3
+ module Mongoid
4
+ module Markdown
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ # For mongoid < 2.4 only
9
+ def markdown(*attributes)
10
+ write_inheritable_attribute(:markdown_attributes, markdown_attributes + Array(attributes))
11
+ @markdown_unicode = String.new.respond_to? :chars
12
+
13
+ type_options = %w( plain source )
14
+
15
+ attributes.each do |attribute|
16
+ define_method(attribute) do |*type|
17
+ type = type.first
18
+ value = read_attribute(attribute)
19
+
20
+ if type.nil? && value
21
+ marked_down[attribute.to_sym] ||= RDiscount.new(value).to_html.html_safe
22
+ elsif type.nil? && value.nil?
23
+ nil
24
+ elsif type_options.include?(type.to_s)
25
+ send("#{attribute}_#{type}")
26
+ else
27
+ raise "I don't understand the `#{type}' option. Try #{type_options.join(' or ')}."
28
+ end
29
+ end
30
+
31
+ define_method("#{attribute}_plain", proc { strip_markdown_html(__send__(attribute)) if __send__(attribute) } )
32
+ define_method("#{attribute}_source", proc { read_attribute(attribute) } )
33
+ end
34
+
35
+ include InstanceMethods
36
+ end
37
+
38
+ def markdown_attributes
39
+ read_inheritable_attribute(:markdown_attributes) ||
40
+ write_inheritable_attribute(:markdown_attributes, [])
41
+ end
42
+
43
+ def field(name, options = {})
44
+ returning super(name, options.reject { |k, v| k == :markdown }) do
45
+ markdown name if options[:markdown]
46
+ end
47
+ end
48
+ end
49
+
50
+ module InstanceMethods
51
+ def marked_down
52
+ marked_down? ? (@marked_down ||= {}) : @attributes.dup
53
+ end
54
+
55
+ def marked_down?
56
+ @is_marked_down != false
57
+ end
58
+
59
+ def marked_down=(value)
60
+ @is_marked_down = !!value
61
+ end
62
+
63
+ def markdown!
64
+ self.class.markdown_attributes.each { |attr| __send__(attr) }
65
+ end
66
+
67
+ def reload
68
+ marked_down.clear
69
+ super
70
+ end
71
+
72
+ def write_attribute(attr_name, value)
73
+ marked_down[attr_name.to_s] = nil
74
+ super
75
+ end
76
+
77
+ private
78
+ def strip_markdown_html(html)
79
+ returning html.dup.gsub(html_regexp, '') do |h|
80
+ markdown_glyphs.each do |(entity, char)|
81
+ sub = [ :gsub!, entity, char ]
82
+ @textiled_unicode ? h.chars.send(*sub) : h.send(*sub)
83
+ end
84
+ end
85
+ end
86
+
87
+ def markdown_glyphs
88
+ [[ '&#8217;', "'" ],
89
+ [ '&#8216;', "'" ],
90
+ [ '&lt;', '<' ],
91
+ [ '&gt;', '>' ],
92
+ [ '&#8221;', '"' ],
93
+ [ '&#8220;', '"' ],
94
+ [ '&#8230;', '...' ],
95
+ [ '\1&#8212;', '--' ],
96
+ [ ' &rarr; ', '->' ],
97
+ [ ' &#8211; ', '-' ],
98
+ [ '&#215;', 'x' ],
99
+ [ '&#8482;', '(TM)' ],
100
+ [ '&#174;', '(R)' ],
101
+ [ '&#169;', '(C)' ]]
102
+ end
103
+
104
+ def html_regexp
105
+ %r{<(?:[^>"']+|"(?:\\.|[^\\"]+)*"|'(?:\\.|[^\\']+)*')*>}xm
106
+ end
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,71 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "mongoid-markdown"
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Kristian Mandrup"]
12
+ s.date = "2012-09-14"
13
+ s.description = "Easily use markdown with mongoid texts"
14
+ s.email = "kmandrup@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "lib/mongoid-markdown.rb",
29
+ "lib/mongoid-markdown/mongoid_new.rb",
30
+ "lib/mongoid-markdown/mongoid_old.rb",
31
+ "mongoid-markdown.gemspec",
32
+ "spec/mongoid-markdown_spec.rb",
33
+ "spec/spec_helper.rb"
34
+ ]
35
+ s.homepage = "http://github.com/kristianmandrup/mongoid-markdown"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "1.8.24"
39
+ s.summary = "Add markdown functionality to any mongoid text field"
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<rdiscount>, [">= 0"])
46
+ s.add_runtime_dependency(%q<moped>, [">= 0"])
47
+ s.add_runtime_dependency(%q<mongoid>, [">= 2.0"])
48
+ s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
49
+ s.add_development_dependency(%q<rdoc>, [">= 3.12"])
50
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
51
+ s.add_development_dependency(%q<jeweler>, [">= 1.8.4"])
52
+ else
53
+ s.add_dependency(%q<rdiscount>, [">= 0"])
54
+ s.add_dependency(%q<moped>, [">= 0"])
55
+ s.add_dependency(%q<mongoid>, [">= 2.0"])
56
+ s.add_dependency(%q<rspec>, [">= 2.8.0"])
57
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
58
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
59
+ s.add_dependency(%q<jeweler>, [">= 1.8.4"])
60
+ end
61
+ else
62
+ s.add_dependency(%q<rdiscount>, [">= 0"])
63
+ s.add_dependency(%q<moped>, [">= 0"])
64
+ s.add_dependency(%q<mongoid>, [">= 2.0"])
65
+ s.add_dependency(%q<rspec>, [">= 2.8.0"])
66
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
67
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
68
+ s.add_dependency(%q<jeweler>, [">= 1.8.4"])
69
+ end
70
+ end
71
+
@@ -1,7 +1,26 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
+
3
+ class Message
4
+ include Mongoid::Document
5
+ include Mongoid::Markdown
6
+
7
+ field :body, :markdown => true
8
+ end
2
9
 
3
10
  describe "MongoidMarkdown" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
11
+ subject { Message.new :body => markdown_text }
12
+
13
+ let(:markdown_text) { '## Hello world '}
14
+
15
+ describe '.markdown!' do
16
+ before :each do
17
+ subject.markdown!
18
+ end
19
+
20
+ it "should markup text" do
21
+ subject.marked_down?.should be_true
22
+ puts subject.body
23
+ subject.body.should_not == markdown_text
24
+ end
6
25
  end
7
26
  end
@@ -1,12 +1,15 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
1
  require 'rspec'
2
+ require 'moped'
3
+ require 'mongoid'
4
+
4
5
  require 'mongoid-markdown'
5
6
 
6
- # Requires supporting files with custom matchers and macros, etc,
7
- # in ./support/ and its subdirectories.
8
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
7
+ Mongoid.configure do |config|
8
+ config.connect_to('mongoid_markdown-test')
9
+ end
9
10
 
10
- RSpec.configure do |config|
11
-
11
+ RSpec.configure do |config|
12
+ config.before(:each) do
13
+ Mongoid.purge!
14
+ end
12
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,38 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: moped
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: mongoid
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
30
62
  - !ruby/object:Gem::Dependency
31
63
  name: rspec
32
64
  requirement: !ruby/object:Gem::Requirement
@@ -97,17 +129,20 @@ executables: []
97
129
  extensions: []
98
130
  extra_rdoc_files:
99
131
  - LICENSE.txt
100
- - README.rdoc
132
+ - README.md
101
133
  files:
102
134
  - .document
103
135
  - .rspec
104
136
  - Gemfile
105
137
  - Gemfile.lock
106
138
  - LICENSE.txt
107
- - README.rdoc
139
+ - README.md
108
140
  - Rakefile
109
141
  - VERSION
110
142
  - lib/mongoid-markdown.rb
143
+ - lib/mongoid-markdown/mongoid_new.rb
144
+ - lib/mongoid-markdown/mongoid_old.rb
145
+ - mongoid-markdown.gemspec
111
146
  - spec/mongoid-markdown_spec.rb
112
147
  - spec/spec_helper.rb
113
148
  homepage: http://github.com/kristianmandrup/mongoid-markdown
@@ -125,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
160
  version: '0'
126
161
  segments:
127
162
  - 0
128
- hash: 4336708852903825094
163
+ hash: -68746546745012311
129
164
  required_rubygems_version: !ruby/object:Gem::Requirement
130
165
  none: false
131
166
  requirements: