jekyll-locale 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 73cdeebfabff92747661cda740330d4fadb99139
4
+ data.tar.gz: 6bb5b58bdb7420b41ea12c5b2d3f5f6267e93623
5
+ SHA512:
6
+ metadata.gz: c1182409d6e2c03b9aec4a8af42fbe9ccffbc72b956df482931e47ee3d6ba534b5e9055025cb8201a3709f00cd849aa2886b22122789aff6f2b2af97a8d1fc35
7
+ data.tar.gz: ba66142dc23a732e769a10085cdcf0135a4d33d485fe61d5f90788a5ab541cb2dab8491443865ab9e66a9179e1b19a3e0a55ebe65d335eb24a008a7073fdbff9
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Ashwin Maroli
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Jekyll Locale
2
+
3
+ A localization plugin for Jekyll
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Locale::Drop < Drops::Drop
5
+ extend Forwardable
6
+
7
+ mutable false
8
+ private def_delegator :@obj, :data, :fallback_data
9
+ end
10
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Locale::Handler
5
+ def initialize(site)
6
+ @site = site
7
+ @config = site.config
8
+ end
9
+
10
+ def reset
11
+ @data = nil
12
+ end
13
+
14
+ def data
15
+ @data ||= begin
16
+ fallback = site.site_data.dig(locales_dir, locale)
17
+ return {} unless fallback.is_a?(Hash)
18
+
19
+ # transform hash to one with "latinized lowercased string keys"
20
+ Jekyll::Utils.snake_case_keys(fallback)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ attr_reader :site, :config
27
+
28
+ def locales_dir
29
+ @locales_dir ||= begin
30
+ value = config["locales_dir"]
31
+ value.to_s.empty? ? "locales" : value
32
+ end
33
+ end
34
+
35
+ def locale
36
+ @locale ||= begin
37
+ value = config["locale"]
38
+ value.to_s.empty? ? "en" : value
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Locale
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ class Drops::UnifiedPayloadDrop
5
+ def locale
6
+ @locale ||= Jekyll::Locale::Drop.new(@obj.locale_handler)
7
+ end
8
+ end
9
+
10
+ class Site
11
+ def locale_handler
12
+ @locale_handler ||= Jekyll::Locale::Handler.new(self)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Utils
5
+ extend self
6
+
7
+ # Convert all keys to snake_case by substituting non-alphanumeric characters
8
+ # with an underscore.
9
+ # The keys are first converted to lowercase strings and then any letters with accents
10
+ # are replaced with their plaintext counterpart
11
+ #
12
+ # hash - the hash to which to apply this transformation
13
+ #
14
+ # Returns a new hash with snake_cased keys or a hash with stringified keys.
15
+ def snake_case_keys(hash)
16
+ transform_keys(hash) do |key|
17
+ begin
18
+ Utils.slugify(key.to_s, :mode => "latin", :replacement => "_")
19
+ rescue StandardError
20
+ key.to_s
21
+ end
22
+ end
23
+ end
24
+
25
+ def slugify(string, mode: nil, cased: false, replacement: "-")
26
+ mode ||= "default"
27
+ return nil if string.nil?
28
+
29
+ unless SLUGIFY_MODES.include?(mode)
30
+ return cased ? string : string.downcase
31
+ end
32
+
33
+ # Drop accent marks from latin characters. Everything else turns to ?
34
+ if mode == "latin"
35
+ I18n.config.available_locales = :en if I18n.config.available_locales.empty?
36
+ string = I18n.transliterate(string)
37
+ end
38
+
39
+ slug = replace_character_sequence(string, :mode => mode, :replacement => replacement)
40
+
41
+ # Remove leading/trailing hyphen
42
+ slug.gsub!(%r!^\-|\-$!i, "")
43
+
44
+ slug.downcase! unless cased
45
+ slug
46
+ end
47
+
48
+ private
49
+
50
+ # Replace each character sequence with a hyphen.
51
+ #
52
+ # See Utils#slugify for a description of the character sequence specified
53
+ # by each mode.
54
+ def replace_character_sequence(string, **opts)
55
+ replaceable_char =
56
+ case opts[:mode]
57
+ when "raw"
58
+ SLUGIFY_RAW_REGEXP
59
+ when "pretty"
60
+ # "._~!$&'()+,;=@" is human readable (not URI-escaped) in URL
61
+ # and is allowed in both extN and NTFS.
62
+ SLUGIFY_PRETTY_REGEXP
63
+ when "ascii"
64
+ # For web servers not being able to handle Unicode, the safe
65
+ # method is to ditch anything else but latin letters and numeric
66
+ # digits.
67
+ SLUGIFY_ASCII_REGEXP
68
+ else
69
+ SLUGIFY_DEFAULT_REGEXP
70
+ end
71
+
72
+ # Strip according to the mode
73
+ string.gsub(replaceable_char, opts[:replacement])
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jekyll
4
+ module Locale
5
+ autoload :Drop, "jekyll/locale/drop"
6
+ autoload :Handler, "jekyll/locale/handler"
7
+ end
8
+ end
9
+
10
+ require_relative "jekyll/patches/site"
11
+ require_relative "jekyll/patches/utils"
12
+
13
+ Jekyll::Hooks.register :site, :after_reset do |site|
14
+ site.locale_handler.reset
15
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jekyll-locale
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ashwin Maroli
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-21 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.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.8'
27
+ description:
28
+ email:
29
+ - ashmaroli@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - LICENSE.txt
35
+ - README.md
36
+ - lib/jekyll-locale.rb
37
+ - lib/jekyll/locale/drop.rb
38
+ - lib/jekyll/locale/handler.rb
39
+ - lib/jekyll/locale/version.rb
40
+ - lib/jekyll/patches/site.rb
41
+ - lib/jekyll/patches/utils.rb
42
+ homepage: https://github.com/ashmaroli/jekyll-locale
43
+ licenses:
44
+ - MIT
45
+ metadata:
46
+ allowed_push_host: https://rubygems.org
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 2.3.0
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 2.6.14
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: A localization plugin for Jekyll
67
+ test_files: []