adva-markup 0.0.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.
@@ -0,0 +1,5 @@
1
+ require_dependency 'content'
2
+
3
+ Content.class_eval do
4
+ filters :body
5
+ end
@@ -0,0 +1,6 @@
1
+ require_dependency 'section'
2
+
3
+ Section.class_eval do
4
+ has_option :default_filter
5
+ end
6
+
@@ -0,0 +1,14 @@
1
+ require_dependency 'admin/blogs/_form.html'
2
+
3
+ Admin::Blogs::Form.class_eval do
4
+ include do
5
+ def fields
6
+ super
7
+ fieldset do
8
+ column do
9
+ form.input :default_filter, :as => :select, :collection => Adva::Markup.options
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ require_dependency 'admin/posts/_form.html.rb'
2
+
3
+ Admin::Posts::Form.include do
4
+ def sidebar
5
+ super
6
+ tab :options do
7
+ form.input :filter, :as => :select, :collection => Adva::Markup.options
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ en:
2
+ markup: ""
@@ -0,0 +1,3 @@
1
+ # Adva::Registry.set :redirect, {
2
+ # 'controller#action' => lambda { |controller| controller.show_url }
3
+ # }
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ # Rails.application.routes.draw do
2
+ # resource :markup
3
+ # end
@@ -0,0 +1 @@
1
+ require 'adva/markup'
@@ -0,0 +1,48 @@
1
+ require 'adva'
2
+ require 'RedCloth'
3
+ require 'rdiscount'
4
+
5
+ ERB::Util.send(:undef_method, :t) # wtf, redcloth!
6
+
7
+ module Adva
8
+ class Markup < ::Rails::Engine
9
+ include Adva::Engine
10
+
11
+ autoload :ActionController, 'adva/markup/action_controller'
12
+ autoload :ActiveRecord, 'adva/markup/active_record'
13
+
14
+ mattr_accessor :filters
15
+ self.filters = {
16
+ :markdown => 'RDiscount',
17
+ :textile => 'RedCloth'
18
+ }
19
+
20
+ class << self
21
+ def apply(name, markup)
22
+ if filter = self.filter(name)
23
+ filter.new(markup).to_html
24
+ end
25
+ end
26
+
27
+ def filter(name)
28
+ filters[name.to_sym].constantize if name.present? && filters[name.to_sym]
29
+ end
30
+
31
+ def keys
32
+ @keys ||= filters.keys.map(&:to_s).sort
33
+ end
34
+
35
+ def names
36
+ @names ||= keys.map { |key| key.titleize }
37
+ end
38
+
39
+ def options
40
+ @options ||= Hash[*names.zip(keys).flatten]
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ ActionController::Base.extend(Adva::Markup::ActionController::ActMacro)
47
+ ActiveRecord::Base.extend(Adva::Markup::ActiveRecord::ActMacro)
48
+
@@ -0,0 +1,38 @@
1
+ module Adva
2
+ class Markup
3
+ module ActionController
4
+ module ActMacro
5
+ def filtered_attributes(*models)
6
+ options = models.extract_options!
7
+ options[:models] = models.map(&:to_s).map(&:camelize)
8
+ options[:only] = Array(options[:only]).map(&:to_sym)
9
+ options[:except] = Array(options[:except]).map(&:to_sym)
10
+
11
+ class_inheritable_accessor :filtered_attribute_options
12
+ self.filtered_attribute_options = options
13
+
14
+ include InstanceMethods
15
+ end
16
+ end
17
+
18
+ module InstanceMethods
19
+ def render(*args)
20
+ options = filtered_attribute_options
21
+ excluded = options[:except].include?(params[:action].to_sym)
22
+ included = options[:only].empty? || options[:only].include?(params[:action].to_sym)
23
+
24
+ !excluded && included ? with_filtered_attributes { super } : super
25
+ end
26
+
27
+ def with_filtered_attributes
28
+ models = filtered_attribute_options[:models].map(&:constantize)
29
+ models.each { |model| model.read_filtered_attributes = true }
30
+ yield.tap do
31
+ models.each { |model| model.read_filtered_attributes = false }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,41 @@
1
+ # TODO make sure this can be called multiple times
2
+ #
3
+ module Adva
4
+ class Markup
5
+ module ActiveRecord
6
+ module ActMacro
7
+ def filters(*attributes)
8
+ class_inheritable_accessor :filtered_attributes
9
+ class_inheritable_accessor :read_filtered_attributes
10
+
11
+ self.filtered_attributes = attributes
12
+ self.read_filtered_attributes = false
13
+
14
+ before_save :filter_attributes!
15
+ include InstanceMethods
16
+ include attribute_readers_module
17
+ end
18
+
19
+ def attribute_readers_module
20
+ Module.new.tap do |readers|
21
+ filtered_attributes.each do |name|
22
+ readers.module_eval <<-rb
23
+ def #{name}; read_filtered_attributes ? send(:#{name}_html) : super; end
24
+ rb
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ module InstanceMethods
31
+ def filter_attributes!
32
+ filtered_attributes.each do |name|
33
+ value = self.send(name)
34
+ value = Adva::Markup.apply(filter, value) if respond_to?(:filter) && filter
35
+ write_attribute(:"#{name}_html", value)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adva-markup
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Sven Fuchs
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-29 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: adva-core
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rdiscount
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: RedCloth
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ description: "[description]"
64
+ email: nobody@adva-cms.org
65
+ executables: []
66
+
67
+ extensions: []
68
+
69
+ extra_rdoc_files: []
70
+
71
+ files:
72
+ - app/views/admin/blogs/_form_slice.html.rb
73
+ - app/views/admin/posts/_form_slice.html.rb
74
+ - app/models/content_slice.rb
75
+ - app/models/section_slice.rb
76
+ - config/redirects.rb
77
+ - config/routes.rb
78
+ - config/locales/en.yml
79
+ - lib/adva/markup.rb
80
+ - lib/adva/markup/action_controller.rb
81
+ - lib/adva/markup/active_record.rb
82
+ - lib/adva-markup.rb
83
+ has_rdoc: true
84
+ homepage: http://github.com/svenfuchs/adva-cms2
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options: []
89
+
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ requirements: []
111
+
112
+ rubyforge_project: "[none]"
113
+ rubygems_version: 1.3.7
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: "[summary]"
117
+ test_files: []
118
+