middleman-org 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a311d5390b08913e4ac82bcd7bb59531c3d4271f
4
- data.tar.gz: 7eb15646043b8c664ddbd971ed0c6a0c55b5c66d
3
+ metadata.gz: bf5aaf69f1bc7cba22e779756677d0908873b125
4
+ data.tar.gz: 4b6cb340f6ddf4dc8b8454d8baf4e8e234d27341
5
5
  SHA512:
6
- metadata.gz: 0d30c48667d5da0083fd65ea2692ba13e101fc467266679c5147d1a025bc2d5e04521f89bd52f02b559b13b797b92b4db784cf5a67e47d4db10b22ee71789695
7
- data.tar.gz: 6d0e6436ea4300f2298a2f53484daa8c3b54c5a5c35bcd16c0aab0edfd27c8a34e26e372ab659e4ecf9344420b3d4875391faadac42971d47d9f55b084b92a52
6
+ metadata.gz: 32700033edf67993b760448be923258a9c6571df01a5a9a149ab542b174fe0045746daaad0b921b541f48bb3e32a69df47eec6f334460fea67ddad19ed3a89c0
7
+ data.tar.gz: 0da29da22f9d467a3c50268e8e2097fe20b159ad94813726ed917f92214e7318f569e3cccc22d02661c07695a403af781a95576ce6359a877402ae6dbde82abc
@@ -1,65 +1,67 @@
1
- require 'middleman-org/org_data'
2
- require 'middleman-org/org_article'
3
- require 'middleman-org/helpers'
4
-
5
1
  module Middleman
6
2
  class OrgExtension < ::Middleman::Extension
7
- self.supports_multiple_instances = true
8
-
9
- option :name, nil, 'Unique ID for telling multiple orgs apart'
10
- option :layout, 'layout', 'article specific layout'
11
- option :root, 'org', 'source folder for org files'
12
- option :prefix, nil, 'prefix on destination and root path'
13
3
 
14
4
  option :emacs, 'emacs', 'emacs executable'
15
5
  option :load, nil, 'load elisp file'
6
+ option :defaults, {}, 'default values if the keys do not exsist'
7
+ option :alias, {}, 'alias'
16
8
 
17
- attr_reader :data
18
- attr_reader :name
19
-
20
- self.defined_helpers = [Middleman::Org::Helpers]
9
+ # self.defined_helpers = [Middleman::Org::Helpers]
21
10
  def initialize(app, options_hash = {}, &block)
22
11
  # Call super to build options from the options_hash
23
12
  super
24
13
 
25
14
  # Require libraries only when activated
26
- require 'emacs-ruby'
27
15
  require 'org-ruby'
28
- require 'middleman-org/org_data'
29
16
  ::Tilt.prefer(Tilt::OrgTemplate, 'org')
30
17
 
31
- @name = options.name.to_sym if options.name
32
- # options.root = File.join(options.prefix, options.root) if options.prefix
33
-
34
18
  app.after_configuration do
35
19
  template_extensions org: :html
36
20
  if config[:org_engine] == :emacs_ruby
21
+ require 'emacs-ruby'
37
22
  ::Tilt.prefer(Tilt::EmacsRuby::OrgTemplate, 'org')
38
23
  end
39
24
  end
40
-
41
- # set up your extension
42
- # puts options.my_option
43
25
  end
44
26
 
45
27
  def after_configuration
46
- @name ||= :"org#{::Middleman::Org.instances.keys.length}"
47
- ::Middleman::Org.instances[@name] = self
28
+ ::Middleman::Sitemap::Resource.send :include, OrgInstanceMethods
29
+ end
48
30
 
49
- # Make sure ActiveSupport's TimeZone stuff has something to work with,
50
- # allowing people to set their desired time zone via Time.zone or
51
- # set :time_zone
52
- Time.zone = app.config[:time_zone] if app.config[:time_zone]
53
- time_zone = Time.zone || 'UTC'
54
- zone_default = Time.find_zone!(time_zone)
55
- unless zone_default
56
- raise 'Value assigned to time_zone not recognized.'
31
+ module OrgInstanceMethods
32
+ def in_buffer_setting
33
+ @in_buffer_setting ||= extract_ibs source_file
57
34
  end
58
- Time.zone_default = zone_default
59
35
 
60
- @data = Org::OrgData.new(@app, self, options)
61
- @app.sitemap.register_resource_list_manipulator(:"org_articles", @data, false)
62
- end
36
+ def front_matter
37
+ # this code is from middleman-core
38
+ @enhanced_data ||= ::Middleman::Util.recursively_enhance(raw_data).freeze
39
+ end
63
40
 
41
+ def data
42
+ front_matter.merge(in_buffer_setting)
43
+ end
44
+
45
+ private
46
+
47
+ IN_BUFFER_SETTING_REGEXP = /^#\+(\w+):\s*(.*)$/
48
+
49
+ def extract_ibs(path)
50
+ ibs = {}
51
+ File.open(path, 'r') do |f|
52
+ f.each_line do |line|
53
+ if line =~ IN_BUFFER_SETTING_REGEXP
54
+ key = app.extensions[:org].options[:alias][$1.downcase] || $1.downcase
55
+ key = key.to_sym
56
+ ibs[key] = $2
57
+ end
58
+ end
59
+ end
60
+ app.extensions[:org].options[:defaults].each do |k, v|
61
+ ibs[k] = v unless ibs.has_key?(k)
62
+ end
63
+ ibs
64
+ end
65
+ end
64
66
  end
65
67
  end
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module Org
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = ['dawnstar.hu@gmail.com']
11
11
  s.homepage = 'http://github.com/xiaoxinghu/middleman-org'
12
12
  s.summary = %q{org-mode extension for middleman}
13
- s.description = %q{Middleman extension for publishing org-mode project}
13
+ s.description = %q{Use in buffer settings as front matter.}
14
14
  s.files = `git ls-files`.split("\n")
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-org
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xiaoxing Hu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-30 00:00:00.000000000 Z
11
+ date: 2015-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: middleman-core
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.1'
83
- description: Middleman extension for publishing org-mode project
83
+ description: Use in buffer settings as front matter.
84
84
  email:
85
85
  - dawnstar.hu@gmail.com
86
86
  executables: []
@@ -94,9 +94,6 @@ files:
94
94
  - features/support/env.rb
95
95
  - lib/middleman-org.rb
96
96
  - lib/middleman-org/extension.rb
97
- - lib/middleman-org/helpers.rb
98
- - lib/middleman-org/org_article.rb
99
- - lib/middleman-org/org_data.rb
100
97
  - lib/middleman-org/version.rb
101
98
  - lib/middleman_extension.rb
102
99
  - middleman-org.gemspec
@@ -120,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
117
  version: '0'
121
118
  requirements: []
122
119
  rubyforge_project:
123
- rubygems_version: 2.4.6
120
+ rubygems_version: 2.4.8
124
121
  signing_key:
125
122
  specification_version: 4
126
123
  summary: org-mode extension for middleman
@@ -1,52 +0,0 @@
1
- module Middleman
2
- module Org
3
- def self.instances
4
- @org_instances ||= {}
5
- end
6
-
7
- def self.instances=(v)
8
- @org_instances = v
9
- end
10
-
11
- module Helpers
12
- def self.included(base)
13
- ::Middleman::Org.instances = {}
14
- end
15
-
16
- def org_instances
17
- ::Middleman::Org.instances
18
- end
19
-
20
- def org_controller(org_name = nil)
21
- # Warn if a non-existent org name provided
22
- if org_name && !org_instances.keys.include?(org_name.to_sym)
23
- fail "Non-existent org name provided: #{org_name}."
24
- end
25
-
26
- org_name ||= org_instances.keys.first
27
- org_instances[org_name.to_sym]
28
- end
29
-
30
- def org_data(org_name = nil)
31
- org_controller(org_name).data
32
- end
33
-
34
- def org_article?
35
- !current_article.nil?
36
- end
37
-
38
- def current_article
39
- article = current_resource
40
- if article && article.is_a?(OrgArticle)
41
- article
42
- else
43
- nil
44
- end
45
- end
46
-
47
- def articles(org_name = nil)
48
- org_data(org_name).articles
49
- end
50
- end
51
- end
52
- end
@@ -1,116 +0,0 @@
1
- require 'active_support/time_with_zone'
2
- require 'active_support/core_ext/time/acts_like'
3
- require 'active_support/core_ext/time/calculations'
4
- require 'nokogiri'
5
-
6
- module Middleman
7
- module Org
8
-
9
- module OrgArticle
10
- def self.extended(base)
11
- base.class.send(:attr_accessor, :org_controller)
12
- end
13
-
14
- def org_data
15
- org_controller.data
16
- end
17
-
18
- def org_options
19
- org_controller.options
20
- end
21
-
22
- IN_BUFFER_SETTING_REGEXP = /^#\+(\w+):\s*(.*)$/
23
-
24
- def in_buffer_setting
25
- return @_in_buffer_setting if @_in_buffer_setting
26
-
27
- @_in_buffer_setting = {}
28
- File.open(source_file, 'r') do |f|
29
- f.each_line do |line|
30
- if line =~ IN_BUFFER_SETTING_REGEXP
31
- @_in_buffer_setting[$1] = $2
32
- end
33
- end
34
- end
35
- @_in_buffer_setting
36
- end
37
-
38
- def render(opts={}, locs={}, &block)
39
- unless opts.has_key?(:layout)
40
- opts[:layout] = org_options.layout if opts[:layout].nil?
41
- # Convert to a string unless it's a boolean
42
- opts[:layout] = opts[:layout].to_s if opts[:layout].is_a? Symbol
43
- end
44
-
45
- opts[:emacs] = org_options.emacs
46
- opts[:load] = org_options.load
47
-
48
- content = super(opts, locs, &block)
49
- # testing
50
- # content = export source_file
51
- fix_links(content)
52
- end
53
-
54
- def fix_links(content)
55
- html = ::Nokogiri::HTML(content)
56
- html.xpath("//@src | //@href | //@poster").each do |attribute|
57
- attribute.value = attribute.value.gsub(/^(.+)\.org$/, '\1.html')
58
- end
59
- html.to_s
60
- end
61
-
62
- def title
63
- in_buffer_setting['TITLE'] || File.basename(source_file, '.*')
64
- end
65
-
66
- def keywords
67
- article_keywords = in_buffer_setting['KEYWORDS']
68
- return [] unless article_keywords
69
-
70
- if article_keywords.is_a? String
71
- article_keywords.split(' ').map(&:strip)
72
- else
73
- Array(article_keywords).map(&:to_s)
74
- end
75
- end
76
-
77
- def description
78
- in_buffer_setting['DESCRIPTION'] || 'no description'
79
- end
80
-
81
- def category
82
- in_buffer_setting['CATEGORY'] || ''
83
- end
84
-
85
- def published?
86
- in_buffer_setting['DATE'] || false
87
- end
88
-
89
- def body
90
- render layout: false
91
- end
92
-
93
- def date
94
- return @_date if @_date
95
-
96
- return nil unless in_buffer_setting['DATE']
97
- @_date = Date.parse in_buffer_setting['DATE']
98
-
99
- # frontmatter_date = data['date']
100
-
101
- # # First get the date from frontmatter
102
- # if frontmatter_date.is_a? Time
103
- # @_date = frontmatter_date.in_time_zone
104
- # else
105
- # @_date = Time.zone.parse(frontmatter_date.to_s)
106
- # end
107
-
108
- @_date
109
- end
110
-
111
- def slug
112
- end
113
-
114
- end
115
- end
116
- end
@@ -1,58 +0,0 @@
1
- require 'middleman-core/util'
2
-
3
- module Middleman
4
- module Org
5
-
6
- class OrgData
7
- attr_reader :options
8
- attr_reader :controller
9
-
10
- def initialize(app, controller, options)
11
- @app = app
12
- @options = options
13
- @controller = controller
14
-
15
- @_articles = []
16
- end
17
-
18
- def articles
19
- @_articles
20
- end
21
-
22
- def tags
23
- []
24
- end
25
-
26
- def manipulate_resource_list(resources)
27
- @_posts = []
28
- resources.each do |resource|
29
- next unless resource.path =~ /^#{options.root}/
30
-
31
- if options.prefix
32
- resource.destination_path = resource
33
- .path
34
- .gsub(/^#{options.root}/,
35
- options.prefix)
36
- end
37
- if File.extname(resource.source_file) == '.org'
38
- article = convert_to_article resource
39
- next unless publishable?(article)
40
- @_articles << article
41
- end
42
- end
43
- end
44
-
45
- def publishable?(article)
46
- @app.environment == :development || article.published?
47
- end
48
-
49
- def convert_to_article(resource)
50
- return resource if resource.is_a?(OrgArticle)
51
- resource.extend OrgArticle
52
- resource.org_controller = controller
53
- resource
54
- end
55
-
56
- end
57
- end
58
- end