jekyll-tally-tags 0.1.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.
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jekyll'
4
+
5
+ module Jekyll
6
+ module TallyTags
7
+ class Subject < Jekyll::Page
8
+ attr_accessor :docs, :type, :slug
9
+
10
+ ATTRIBUTES_FOR_LIQUID = %w(
11
+ docs
12
+ filters
13
+ type
14
+ title
15
+ date
16
+ name
17
+ path
18
+ url
19
+ permalink
20
+ sum
21
+ ).freeze
22
+
23
+ # 初始化
24
+ # @param [Site] site
25
+ # @param [Hash{Symbol => String}] titles
26
+ # @param [String] type
27
+ # @param [Array<String>] filters
28
+ # @param [Array<Document>] docs
29
+ def initialize(site, titles, type, filters, docs)
30
+ @site = site
31
+ @docs = docs
32
+ @filters = filters
33
+ @type = type
34
+ @title = titles
35
+ @config = site.config[CLASSIFY]
36
+ @slug = slugify_string_title
37
+
38
+ @ext = File.extname(relative_path)
39
+ @path = relative_path
40
+ @name = File.basename(relative_path, @ext)
41
+
42
+ @data = {
43
+ LAYOUT => layout,
44
+ PERMALINK => @config[PERMALINKS][type]
45
+ }
46
+ @content = ""
47
+
48
+ end
49
+
50
+ # @return [Array<Float>]
51
+ def sum
52
+ sum = []
53
+ @docs.each do |doc|
54
+ (0..doc[COUNT].size - 1).each do |index|
55
+ count = doc[COUNT][index].to_f
56
+ if !sum[index]
57
+ sum[index] = 0
58
+ end
59
+ sum[index] = sum[index] + count
60
+ end
61
+ end
62
+ sum
63
+ end
64
+
65
+ # @return [String]
66
+ def template
67
+ @config.dig(PERMALINKS, type)
68
+ end
69
+
70
+ # @return [String]
71
+ def layout
72
+ @config.dig(LAYOUTS, type) || @config[LAYOUT]
73
+ end
74
+
75
+ # @return [Hash{ String => String}] eg: {:categories => "ruby", :title => "something"}
76
+ def url_placeholders
77
+ if @title.is_a? Hash
78
+ @title.merge(:type => @type)
79
+ else
80
+ { :name => @slug, :type => @type }
81
+ end
82
+ end
83
+
84
+ # @return [String]
85
+ def url
86
+ u = @url ||= URL.new(
87
+ :template => template,
88
+ :placeholders => url_placeholders,
89
+ :permalink => nil
90
+ ).to_s
91
+ rescue ArgumentError
92
+ raise ArgumentError, "提供的模板 \"#{template}\" 无效."
93
+ end
94
+
95
+ def filters
96
+ @filters
97
+ end
98
+
99
+ # @return [String]
100
+ def permalink
101
+ data.is_a?(Hash) && data[PERMALINK]
102
+ end
103
+
104
+ # @return [String]
105
+ def title
106
+ @title if @title.is_a?(String)
107
+ end
108
+
109
+ # @return [Date]
110
+ def date
111
+ # if @title.is_a?(Hash)
112
+ # args = @title.values.map(&:to_i)
113
+ # Date.new(*args)
114
+ # end
115
+ # TODO: 修复日期
116
+ "2011/01/11"
117
+ end
118
+
119
+ # @return [String]
120
+ def relative_path
121
+ @relative_path ||=
122
+ begin
123
+ path = URL.unescape_path(url).gsub(%r!^/!, "")
124
+ path = File.join(path, INDEX_HTML) if url.end_with?("/")
125
+ path
126
+ end
127
+ end
128
+
129
+ # @return [String]
130
+ def inspect
131
+ "#<TagsLib:Subject @type=#{@type} @title=#{@title} @data=#{@data.inspect}>"
132
+ end
133
+
134
+ private
135
+
136
+ def slugify_string_title
137
+ return unless title.is_a?(String)
138
+ Utils.slugify(title, :mode => @config[SLUG_MODE])
139
+ end
140
+
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module TallyTags
5
+ VERSION = "0.1.0"
6
+ # 字段
7
+ CLASSIFY = "classify".freeze
8
+ SUBJECTS = "subjects".freeze
9
+ SUBJECT = "subject".freeze
10
+ CLASS = "class".freeze
11
+ CLASSES = "classes".freeze
12
+ YEAR = "year".freeze
13
+ MONTH = "month".freeze
14
+ DAY = "day".freeze
15
+ WEEK = "week".freeze
16
+ READ_METHOD = "read_".freeze
17
+ ENABLED = "enabled".freeze
18
+ ALL = "all".freeze
19
+ # Subject
20
+ SLUG_MODE = "slug_mode".freeze
21
+ INDEX_HTML = "index.html".freeze
22
+ LAYOUT = "layout".freeze
23
+ LAYOUTS = "layouts".freeze
24
+ PERMALINK = "permalink".freeze
25
+ PERMALINKS = "permalinks".freeze
26
+ NUMBER = "number".freeze
27
+ TALLY = "tally".freeze
28
+ KEYS = "keys".freeze
29
+ # Hooks
30
+ NO_NAME = %r!^(?>.+/)*?(\d{2,4}-\d{1,2}-\d{1,2})(-([^/]*))?(\.[^.]+)$!.freeze
31
+ ###
32
+ COUNTER = 'counter'.freeze # 总配置字段
33
+ TEMPLATES = 'templates'.freeze # 对应的 key 表
34
+ KEY = "key".freeze
35
+ UNIT = 'unit'.freeze # 表内 计算后的单位
36
+ NAME = 'name'.freeze # key 表的名称
37
+ COUNT = 'count'.freeze # 需要计算的下标
38
+ CATEGORY = 'category'.freeze # 分类下标
39
+ TAG = 'tag'.freeze # 标签下标
40
+ TAGS = 'tags'.freeze # 需要分类的下标
41
+ FORMATTER = 'formatter'.freeze
42
+ INT = 'int'.freeze
43
+
44
+ # Doc
45
+ ID = 'id'.freeze
46
+ DATA = 'data'.freeze
47
+ TITLE = 'title'.freeze
48
+ COMBINE = 'combine'.freeze
49
+ DEFAULT = 'default'.freeze
50
+ FIND = 'find'.freeze
51
+ TO = 'to'.freeze
52
+ DEEP = 'deep'.freeze
53
+ end
54
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-tally-tags
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Danyow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-07-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jekyll
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3.6'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3.6'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ description: 开箱即用!
48
+ email:
49
+ - i.zuucol@gmail.com
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - ".gitignore"
55
+ - ".idea/.gitignore"
56
+ - ".idea/inspectionProfiles/Project_Default.xml"
57
+ - ".idea/jekyll-tally-tags.iml"
58
+ - ".idea/misc.xml"
59
+ - ".idea/modules.xml"
60
+ - ".idea/vcs.xml"
61
+ - ".rubocop.yml"
62
+ - CHANGELOG.md
63
+ - CODE_OF_CONDUCT.md
64
+ - Gemfile
65
+ - Gemfile.lock
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - bin/console
70
+ - bin/setup
71
+ - jekyll-tally-tags.gemspec
72
+ - lib/jekyll-tally-tags/classify.rb
73
+ - lib/jekyll-tally-tags/counter.rb
74
+ - lib/jekyll-tally-tags/hooks_doc.rb
75
+ - lib/jekyll-tally-tags/hooks_logs.rb
76
+ - lib/jekyll-tally-tags/subject.rb
77
+ - lib/jekyll-tally-tags/version.rb
78
+ homepage: https://github.com/danyow/jekyll-tally-tags
79
+ licenses:
80
+ - MIT
81
+ metadata: {}
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 2.4.0
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubygems_version: 3.2.22
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: 一个基于 *Tags* 的计数插件.
101
+ test_files: []