mm-jekyll-tags-list 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d91489237bb3492c97417fe88f24a9d8a7d0717f
4
- data.tar.gz: 60105077e0bc8bb974cc90a0d891d5b4811a5d8b
3
+ metadata.gz: 385fcb96e785760a222f9fd8ffe6565352d0c0db
4
+ data.tar.gz: 8e43122f3f71cc53973f1a8e6d50c66b08abdbbf
5
5
  SHA512:
6
- metadata.gz: a971036e623d6d077ba63fc976fdc4a5d03d8af4f24d5190a7e629f78a82f6a167ef778ef5d63dd1e53d1be8d38b312d58382a66d55a996755cc27681f0cc2c6
7
- data.tar.gz: 628e05e25910da9aa7047b70a8affd17fbde53b1840390049451d7ed83dfdf3eae040cf982c7b2cfe39ef0af18f0544d9223af603af34d367ad0b714c51f8f78
6
+ metadata.gz: 9d7a7b0b89c5205a1371330961e1359e050d4d43c8e596ebde053674577949930308c4b11a9eb12954327360e32ef32e3657de75a3b6b7cf928c89420bf6775b
7
+ data.tar.gz: f906e3826f76a91ce47593eb7a5e742f2cb32c056866f1990298f40a07e00148edc7f6153df51018f346742b7607264ec69d9d91c10156f833d56a44697af2e2
@@ -0,0 +1 @@
1
+ Gemfile.lock
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ### 0.0.1
4
+ - Initial release
5
+
6
+ ### 0.0.2
7
+ - Fixed naming issue with gem file
8
+ - Fixed a reference to Prism in the test files (no idea...)
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Tim Oram
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,50 @@
1
+ # Jekyll Tags Plugin
2
+
3
+ Provides a list of tags for use in tag lists or tag clouds.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem mm-jekyll-tags-list
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install mm-jekyll-tags-list
20
+
21
+ ## Configuration
22
+
23
+ You must define a value for *number_popularity_classes* in _config.yml for this plugin to work. *number_popularity_classes* is the number of classes to divide the tag across for the tag cloud.
24
+
25
+ ## Usage
26
+
27
+ This plugin adds two data value, *tag_list* and *tag_data*. *tag_list* contains a list of all the tags that are used in the site. *tag_data* contains a hash with the following structure:
28
+
29
+ {'tagOne': {
30
+ 'post_count': 10,
31
+ 'popularity': 44,
32
+ 'popularity_class': 2
33
+ },
34
+ 'tagTwo': {
35
+ 'post_count': 14,
36
+ 'popularity': 67,
37
+ 'popularity_class': 5
38
+ },
39
+ ...}
40
+
41
+ *post_count* contains the number of posts that use the tag, *popularity* is the percentage from 0-100 of the tag, and *popularity_class* is a remapping of the percentage to a numerical range between 0 and *number_popularity_classes*.
42
+
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it ( https://github.com/mitmaro/jekyll-tags-list-plugin/fork )
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create a new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,41 @@
1
+ module Jekyll
2
+ class TagsList < Generator
3
+
4
+ def generate(site)
5
+ site.data['tag_list'] = TagsList.generate_tags_structure(site).keys
6
+ site.data['tag_data'] = TagsList.generate_tags_structure(site)
7
+ end
8
+
9
+ def self.generate_tags_structure(site)
10
+ tags = Hash.new
11
+ maximum = calculate_maximum_post_count(site)
12
+ for tag in site.tags.keys do
13
+ tags[tag] = Hash.new
14
+ post_count = number_of_posts_for_tag(site, tag)
15
+ popularity = calculate_popularity(maximum, post_count)
16
+ popularity_class = calculate_popularity_class(site, maximum, popularity)
17
+ tags[tag]['post_count'] = post_count.to_s
18
+ tags[tag]['popularity'] = popularity.to_s
19
+ tags[tag]['popularity_class'] = popularity_class.to_s
20
+ end
21
+ tags
22
+ end
23
+
24
+ def self.calculate_popularity_class(site, maximum, popularity)
25
+ output = ((site.config['number_popularity_classes'] / 100.to_f) * popularity).round
26
+ end
27
+
28
+ def self.calculate_maximum_post_count(site)
29
+ max = site.tags.map { |tag,posts| posts.count }.max
30
+ end
31
+
32
+ def self.number_of_posts_for_tag(site, tag)
33
+ count = site.tags[tag].length
34
+ end
35
+
36
+ def self.calculate_popularity(maximum, count)
37
+ percent = ((count.to_f / maximum) * 100).floor
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "mm-jekyll-tags-list"
7
+ spec.version = "0.0.2"
8
+ spec.authors = ["Tim Oram"]
9
+ spec.email = ["mitmaro@gmail.com"]
10
+ spec.summary = %q{Tags List plugin for Jekyll}
11
+ spec.description = %q{Provides a list of tags for use in tag lists or tag clouds.}
12
+ spec.homepage = "https://github.com/mitmaro/jekyll-tags-list-plugin"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "jekyll", "~> 2.0"
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
+ spec.add_development_dependency "rake", "~> 10.3"
23
+ spec.add_development_dependency "rspec", "~> 3.0"
24
+ spec.add_development_dependency "rspec-mocks", "~> 3.0"
25
+
26
+ end
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ bundle install
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ bundle exec rspec
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Jekyll::TagsList do
4
+
5
+ before(:each) do
6
+ @site = double("tags" => {
7
+ 'a' => [1,2,3,4,5],
8
+ 'b' => [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
9
+ 'c' => [1,2,3],
10
+ 'd' => [1,2],
11
+ 'e' => [1,2,3,4],
12
+ 'f' => [1,2,3,4,5,6,7],
13
+ 'g' => [1,2,3,4,5,6,7,8],
14
+ 'g' => [1,2,3,4,5,6,7,8,9,10,11],
15
+ 'h' => [1,2,3],
16
+ 'i' => [1,2,3,4,5],
17
+ },
18
+ "config" => {
19
+ "number_popularity_classes" => 5
20
+ })
21
+ end
22
+
23
+ it "calculates the number of posts for tag" do
24
+ expect(described_class.number_of_posts_for_tag(@site, 'a')).to eql(5)
25
+ expect(described_class.number_of_posts_for_tag(@site, 'b')).to eql(15)
26
+ expect(described_class.number_of_posts_for_tag(@site, 'c')).to eql(3)
27
+ end
28
+
29
+ it "calculates the maximum post count for a tag" do
30
+ expect(described_class.calculate_maximum_post_count(@site)).to eql(15)
31
+ end
32
+
33
+ it "calculates the popularity of a post for a tag" do
34
+ expect(described_class.calculate_popularity(15, 12)).to eql(80)
35
+ expect(described_class.calculate_popularity(15, 2)).to eql(13)
36
+ expect(described_class.calculate_popularity(15, 3)).to eql(20)
37
+ expect(described_class.calculate_popularity(15, 4)).to eql(26)
38
+ expect(described_class.calculate_popularity(15, 5)).to eql(33)
39
+ expect(described_class.calculate_popularity(15, 8)).to eql(53)
40
+ end
41
+
42
+ it "calculates the popularity class of a post for a tag" do
43
+ expect(described_class.calculate_popularity_class(@site, 100, 0)).to eql(0)
44
+ expect(described_class.calculate_popularity_class(@site, 100, 9)).to eql(0)
45
+ expect(described_class.calculate_popularity_class(@site, 100, 10)).to eql(1)
46
+ expect(described_class.calculate_popularity_class(@site, 100, 20)).to eql(1)
47
+ expect(described_class.calculate_popularity_class(@site, 100, 21)).to eql(1)
48
+ expect(described_class.calculate_popularity_class(@site, 100, 29)).to eql(1)
49
+ expect(described_class.calculate_popularity_class(@site, 100, 30)).to eql(2)
50
+ expect(described_class.calculate_popularity_class(@site, 100, 39)).to eql(2)
51
+ expect(described_class.calculate_popularity_class(@site, 100, 40)).to eql(2)
52
+ expect(described_class.calculate_popularity_class(@site, 100, 49)).to eql(2)
53
+ expect(described_class.calculate_popularity_class(@site, 100, 50)).to eql(3)
54
+ expect(described_class.calculate_popularity_class(@site, 100, 59)).to eql(3)
55
+ expect(described_class.calculate_popularity_class(@site, 100, 60)).to eql(3)
56
+ expect(described_class.calculate_popularity_class(@site, 100, 69)).to eql(3)
57
+ expect(described_class.calculate_popularity_class(@site, 100, 70)).to eql(4)
58
+ expect(described_class.calculate_popularity_class(@site, 100, 79)).to eql(4)
59
+ expect(described_class.calculate_popularity_class(@site, 100, 80)).to eql(4)
60
+ expect(described_class.calculate_popularity_class(@site, 100, 89)).to eql(4)
61
+ expect(described_class.calculate_popularity_class(@site, 100, 90)).to eql(5)
62
+ expect(described_class.calculate_popularity_class(@site, 100, 99)).to eql(5)
63
+ expect(described_class.calculate_popularity_class(@site, 100, 100)).to eql(5)
64
+ end
65
+
66
+ it "generates a tags structure for site" do
67
+ result = described_class.generate_tags_structure(@site)
68
+ expect(result["a"]["post_count"]).to eql("5")
69
+ expect(result["a"]["popularity"]).to eql("33")
70
+ expect(result["a"]["popularity_class"]).to eql("2")
71
+ end
72
+
73
+ end
@@ -0,0 +1,40 @@
1
+ require 'jekyll'
2
+ p File.expand_path('../lib/mm-jekyll-tags-list', File.dirname(__FILE__))
3
+ require File.expand_path('../lib/mm-jekyll-tags-list', File.dirname(__FILE__))
4
+
5
+ Jekyll.logger.log_level = :error
6
+
7
+ RSpec.configure do |config|
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+
11
+ def test_dir(*subdirs)
12
+ File.join(File.dirname(__FILE__), *subdirs)
13
+ end
14
+
15
+ def source_dir(*subdirs)
16
+ test_dir('fixtures', *subdirs)
17
+ end
18
+
19
+ def dest_dir(*subdirs)
20
+ test_dir('dest', *subdirs)
21
+ end
22
+
23
+ def build_configs(overrides, base_hash = Jekyll::Configuration::DEFAULTS)
24
+ Jekyll::Utils.deep_merge_hashes(base_hash, overrides)
25
+ end
26
+
27
+ def site_configuration(overrides = {})
28
+ build_configs({
29
+ "source" => source_dir,
30
+ "destination" => dest_dir
31
+ }, build_configs(overrides))
32
+ end
33
+
34
+ def build_site(config = {})
35
+ site = Jekyll::Site.new(site_configuration(
36
+ ))
37
+ site.process
38
+ site
39
+ end
40
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mm-jekyll-tags-list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Oram
@@ -86,8 +86,20 @@ email:
86
86
  executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
- files: []
90
- homepage: https://github.com/mitmaro/jekyll-tags-list
89
+ files:
90
+ - ".gitignore"
91
+ - Changelog.md
92
+ - Gemfile
93
+ - LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - lib/mm-jekyll-tags-list.rb
97
+ - mm_jekyll_tags_list_plugin.gemspec
98
+ - script/bootstrap
99
+ - script/cibuild
100
+ - spec/mm_jekyll_tags_list_spec.rb
101
+ - spec/spec_helper.rb
102
+ homepage: https://github.com/mitmaro/jekyll-tags-list-plugin
91
103
  licenses:
92
104
  - MIT
93
105
  metadata: {}
@@ -111,4 +123,6 @@ rubygems_version: 2.4.1
111
123
  signing_key:
112
124
  specification_version: 4
113
125
  summary: Tags List plugin for Jekyll
114
- test_files: []
126
+ test_files:
127
+ - spec/mm_jekyll_tags_list_spec.rb
128
+ - spec/spec_helper.rb