bridgetown-core 0.17.0 → 0.17.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bd231215591b9251d63525c740620bf4cd6da0beb5e48abd420ce745355ac0bb
4
- data.tar.gz: 82dff2c41efbac2e9ea4f60cc441f8665044c3c8e6576695a50db376951c5866
3
+ metadata.gz: 7878e020dc228c491934a986395227f17fa2ca93398ae0f3961a77c4df6e1761
4
+ data.tar.gz: 73dd2ad473c8525974708393f97f0ce464241fedcc78951186b726ea3435c444
5
5
  SHA512:
6
- metadata.gz: 4606e45f6a843e7de6e9e81c873cb5082ca958277631d83dd260b0eef64289e8c93259d771fee5501dd5c7ec92747d278faffbaf3802ee72457e300aee96714e
7
- data.tar.gz: 82cd06e0dd5a11061d2c37d3defb8d57e381f4129abed12bd47fa4af8c2bbaee3372c3aac09fcf3b9b6fd92a8152dd458b79da710fc575c8e91096946e5ced87
6
+ metadata.gz: 38624e9ea2b7e604b773f2224eec18fdce5e44fc9c9e388c7cefa1ebee6fcee62aa96406ff783a7458a5b3d7a24f45c486a2cc2e925867609a26cb8e30336bb1
7
+ data.tar.gz: eb46348e312153b95b46b1b5e7fbfca154c4d39c87af62e9b77ccdfacdd43cca640b8adf216c223aeb9f47f92977df48d3550dab1a7a173dac256c92cf89f77f
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
38
38
  s.add_runtime_dependency("erubi", "~> 1.9")
39
39
  s.add_runtime_dependency("faraday", "~> 1.0")
40
40
  s.add_runtime_dependency("faraday_middleware", "~> 1.0")
41
+ s.add_runtime_dependency("hash_with_dot_access", "~> 1.0")
41
42
  s.add_runtime_dependency("i18n", "~> 1.0")
42
43
  s.add_runtime_dependency("kramdown", "~> 2.1")
43
44
  s.add_runtime_dependency("kramdown-parser-gfm", "~> 1.0")
@@ -29,8 +29,8 @@ require "csv"
29
29
  require "json"
30
30
 
31
31
  # 3rd party
32
- require "active_support/core_ext/hash/indifferent_access"
33
32
  require "active_support/core_ext/string/inflections"
33
+ require "hash_with_dot_access"
34
34
  require "pathutil"
35
35
  require "addressable/uri"
36
36
  require "safe_yaml/load"
@@ -61,10 +61,10 @@ module Bridgetown
61
61
  end
62
62
 
63
63
  # Returns the value of +data+["site_metadata"] or creates a new instance of
64
- # +ActiveSupport::HashWithIndifferentAccess+
64
+ # +HashWithDotAccess::Hash+
65
65
  # @return [Hash] Returns a hash of site metadata
66
66
  def metadata
67
- data["site_metadata"] ||= ActiveSupport::HashWithIndifferentAccess.new
67
+ data["site_metadata"] ||= HashWithDotAccess::Hash.new
68
68
  end
69
69
 
70
70
  # The Hash payload containing site-wide data.
@@ -116,7 +116,7 @@ module Bridgetown
116
116
  # @see Collection
117
117
  def collections
118
118
  @collections ||= collection_names.each_with_object(
119
- ActiveSupport::HashWithIndifferentAccess.new
119
+ HashWithDotAccess::Hash.new
120
120
  ) do |name, hsh|
121
121
  hsh[name] = Bridgetown::Collection.new(self, name)
122
122
  end
@@ -30,10 +30,10 @@ module Bridgetown
30
30
  else
31
31
  Time.now
32
32
  end
33
- self.layouts = ActiveSupport::HashWithIndifferentAccess.new
33
+ self.layouts = HashWithDotAccess::Hash.new
34
34
  self.pages = []
35
35
  self.static_files = []
36
- self.data = ActiveSupport::HashWithIndifferentAccess.new
36
+ self.data = HashWithDotAccess::Hash.new
37
37
  @post_attr_hash = {}
38
38
  @collections = nil
39
39
  @documents = nil
@@ -22,7 +22,7 @@ module Bridgetown
22
22
  **Utils.merged_file_read_opts(site, opts))
23
23
  if content =~ Document::YAML_FRONT_MATTER_REGEXP
24
24
  self.content = $POSTMATCH
25
- self.data = SafeYAML.load(Regexp.last_match(1))&.with_indifferent_access
25
+ self.data = SafeYAML.load(Regexp.last_match(1))&.with_dot_access
26
26
  end
27
27
  rescue Psych::SyntaxError => e
28
28
  Bridgetown.logger.warn "YAML Exception reading #{filename}: #{e.message}"
@@ -32,7 +32,7 @@ module Bridgetown
32
32
  raise e if site.config["strict_front_matter"]
33
33
  end
34
34
 
35
- self.data ||= ActiveSupport::HashWithIndifferentAccess.new
35
+ self.data ||= HashWithDotAccess::Hash.new
36
36
 
37
37
  validate_data! filename
38
38
  validate_permalink! filename
@@ -4,7 +4,7 @@ module Bridgetown
4
4
  # TODO: refactor this whole object! Already had to fix obscure
5
5
  # bugs just making minor changes, and all the indirection is
6
6
  # quite hard to decipher. -JW
7
- class Configuration < ActiveSupport::HashWithIndifferentAccess
7
+ class Configuration < HashWithDotAccess::Hash
8
8
  # Default options. Overridden by values in bridgetown.config.yml.
9
9
  # Strings rather than symbols are used for compatibility with YAML.
10
10
  DEFAULTS = {
@@ -311,6 +311,10 @@ module Bridgetown
311
311
  raise Bridgetown::Errors::InvalidConfigurationError,
312
312
  "'#{option}' should be set as an array, but was: #{self[option].inspect}."
313
313
  end
314
+
315
+ # add _pages to includes set
316
+ self[:include] << "_pages"
317
+
314
318
  self
315
319
  end
316
320
  end
@@ -63,7 +63,7 @@ module Bridgetown
63
63
  # Returns a Hash containing the data. An empty hash is returned if
64
64
  # no data was read.
65
65
  def data
66
- @data ||= ActiveSupport::HashWithIndifferentAccess.new
66
+ @data ||= HashWithDotAccess::Hash.new
67
67
  end
68
68
 
69
69
  # Merge some data in with this document's data.
@@ -170,7 +170,7 @@ module Bridgetown
170
170
  #
171
171
  # Returns the permalink or nil if no permalink was set in the data.
172
172
  def permalink
173
- data && data.is_a?(Hash) && data["permalink"]
173
+ data&.permalink
174
174
  end
175
175
 
176
176
  # The computed URL for the document. See `Bridgetown::URL#to_s` for more details.
@@ -295,7 +295,7 @@ module Bridgetown
295
295
 
296
296
  def previous_doc
297
297
  pos = collection.docs.index { |post| post.equal?(self) }
298
- collection.docs[pos - 1] if pos && pos.positive?
298
+ collection.docs[pos - 1] if pos&.positive?
299
299
  end
300
300
 
301
301
  def trigger_hooks(hook_name, *args)
@@ -138,6 +138,14 @@ module Bridgetown
138
138
  input.split.length
139
139
  end
140
140
 
141
+ # Calculates the average reading time of the supplied content.
142
+ # @param input [String] the String of content to analyze.
143
+ # @return [Float] the number of minutes required to read the content.
144
+ def reading_time(input, round_to = 0)
145
+ wpm = @context.registers[:site].config[:reading_time_wpm] || 250
146
+ (number_of_words(input).to_f / wpm).ceil(round_to)
147
+ end
148
+
141
149
  # Join an array of things into a string by separating with commas and the
142
150
  # word "and" for the last one.
143
151
  #
@@ -9,7 +9,7 @@ module Bridgetown
9
9
  include Validatable
10
10
 
11
11
  attr_writer :dir
12
- attr_accessor :site, :pager
12
+ attr_accessor :site, :paginator, :pager
13
13
  attr_accessor :name, :ext, :basename
14
14
  attr_accessor :data, :content, :output
15
15
 
@@ -121,12 +121,18 @@ module Bridgetown
121
121
  # desired placeholder replacements. For details see "url.rb"
122
122
  def url_placeholders
123
123
  {
124
- path: @dir,
124
+ path: qualified_pages_path_for_url,
125
125
  basename: basename,
126
126
  output_ext: output_ext,
127
127
  }
128
128
  end
129
129
 
130
+ # Strips _pages prefix off if needed for the url/destination generation
131
+ # @return [String]
132
+ def qualified_pages_path_for_url
133
+ @dir.sub(%r!^/_pages!, "")
134
+ end
135
+
130
136
  # Extract information from the page filename.
131
137
  #
132
138
  # name - The String filename of the page file.
@@ -6,7 +6,7 @@ module Bridgetown
6
6
 
7
7
  def initialize(site)
8
8
  @site = site
9
- @content = ActiveSupport::HashWithIndifferentAccess.new
9
+ @content = {}
10
10
  @entry_filter = EntryFilter.new(site)
11
11
  end
12
12
 
@@ -20,7 +20,7 @@ module Bridgetown
20
20
  base = site.in_source_dir(dir)
21
21
  read_data_to(base, @content)
22
22
  merge_environment_specific_metadata!
23
- @content
23
+ @content = @content.with_dot_access
24
24
  end
25
25
 
26
26
  # Read and parse all .yaml, .yml, .json, .csv and .tsv
@@ -44,7 +44,7 @@ module Bridgetown
44
44
  if File.directory?(path)
45
45
  read_data_to(
46
46
  path,
47
- data[sanitize_filename(entry)] = ActiveSupport::HashWithIndifferentAccess.new
47
+ data[sanitize_filename(entry)] = {}
48
48
  )
49
49
  else
50
50
  key = sanitize_filename(File.basename(entry, ".*"))
@@ -6,7 +6,7 @@ module Bridgetown
6
6
 
7
7
  def initialize(site)
8
8
  @site = site
9
- @path_defaults = ActiveSupport::HashWithIndifferentAccess.new
9
+ @path_defaults = HashWithDotAccess::Hash.new
10
10
  end
11
11
 
12
12
  def read
@@ -249,12 +249,12 @@ module Bridgetown
249
249
  )
250
250
  end
251
251
 
252
- # Set page content to payload and assign pager if document has one.
252
+ # Set page content to payload and assign paginator if document has one.
253
253
  #
254
254
  # Returns nothing
255
255
  def assign_pages!
256
256
  payload["page"] = document.to_liquid
257
- payload["paginator"] = (document.pager.to_liquid if document.respond_to?(:pager))
257
+ payload["paginator"] = document.paginator.to_liquid if document.respond_to?(:paginator)
258
258
  end
259
259
 
260
260
  # Set related posts to payload if document is a post.
@@ -8,17 +8,27 @@ module Bridgetown
8
8
  class Helpers
9
9
  include Bridgetown::Filters
10
10
 
11
+ attr_reader :view, :site
12
+
11
13
  Context = Struct.new(:registers)
12
14
 
13
- def initialize(site)
15
+ def initialize(view, site)
16
+ @view = view
14
17
  @site = site
15
18
 
16
19
  # duck typing for Liquid context
17
- @context = Context.new({ site: @site })
20
+ @context = Context.new({ site: site })
18
21
  end
19
22
 
20
23
  def webpack_path(asset_type)
21
- Bridgetown::Utils.parse_webpack_manifest_file(@site, asset_type.to_s)
24
+ Bridgetown::Utils.parse_webpack_manifest_file(site, asset_type.to_s)
25
+ end
26
+
27
+ # @param pairs [Hash] A hash of key/value pairs.
28
+ #
29
+ # @return [String] Space-separated keys where the values are truthy.
30
+ def class_map(pairs = {})
31
+ pairs.select { |_key, truthy| truthy }.keys.join(" ")
22
32
  end
23
33
 
24
34
  def t(*args)
@@ -26,7 +36,7 @@ module Bridgetown
26
36
  end
27
37
  end
28
38
 
29
- attr_reader :layout, :page, :site, :content
39
+ attr_reader :layout, :page, :paginator, :site, :content
30
40
 
31
41
  def initialize(convertible)
32
42
  if convertible.is_a?(Layout)
@@ -36,6 +46,7 @@ module Bridgetown
36
46
  else
37
47
  @page = convertible
38
48
  end
49
+ @paginator = page.paginator if page.respond_to?(:paginator)
39
50
  @site = page.site
40
51
  end
41
52
 
@@ -61,7 +72,7 @@ module Bridgetown
61
72
  end
62
73
 
63
74
  def helpers
64
- @helpers ||= Helpers.new(@site)
75
+ @helpers ||= Helpers.new(self, site)
65
76
  end
66
77
 
67
78
  def method_missing(method, *args, &block)
@@ -59,7 +59,7 @@ module Bridgetown
59
59
 
60
60
  # This is where the magic happens! DON'T BE EVIL!!! ;-)
61
61
  output = obj.instance_eval(ruby_code)
62
- output.is_a?(Hash) ? output.with_indifferent_access : output
62
+ output.is_a?(Hash) ? output.with_dot_access : output
63
63
  end
64
64
  end
65
65
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bridgetown
4
- VERSION = "0.17.0"
4
+ VERSION = "0.17.1"
5
5
  CODE_NAME = "Mount Scott"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bridgetown-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bridgetown Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-17 00:00:00.000000000 Z
11
+ date: 2020-10-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: hash_with_dot_access
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: i18n
113
127
  requirement: !ruby/object:Gem::Requirement