lifer 0.6.1 → 0.7.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
  SHA256:
3
- metadata.gz: 39e8d5c991a955d4c09740207671d49716b6ef42168b250fbe301c6a443785d5
4
- data.tar.gz: 73e4ea67bc8e9af6f1503782c53c334c5d59f31a2afd351312eb8365b9b42af7
3
+ metadata.gz: a2f61316d5e10ff4212470b5539741a4204f35976f97d193ef7aabfd944c62a5
4
+ data.tar.gz: 03b9aafb098ab04f2aa1306fa34512d9627801d468910fb48cd5e10a736b7e47
5
5
  SHA512:
6
- metadata.gz: eacb4bd82e882758d88e9ffc0de30de8cb9213f35454856a2bed3f487bb8dc568afdb07ac22d6c269ac1b4c9418a18789dcd124193de009456243a2eeedc6415
7
- data.tar.gz: a8dd94d4c24932faae325461a4530c7f931d7ee7315353dc31ca42dac61c325ca91edd5f4f990e0710f4c18d4fbb9b020f51c1f13d8a02012d7c7f4918f5f88e
6
+ metadata.gz: 5c1f46e3c16622144cc513b3496d4d0bb9f14231d1b92960b63249b3962753355ed92d5a27ed12ad3bd930e0e56ef871b4551bb4d888e11384191f5747580b19
7
+ data.tar.gz: bcc5771d87e311dfe52d1c2bc79d9386c8f3677b7f3eafb66100815a9d76b2c8e2b5ce60855424d276c1cc8d8fb5e1c42f2298c5d662edf1ee85d03f8ec1a9c8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ## Next
2
2
 
3
+ ## v0.7.0
4
+
5
+ This release adds Atom feed support to the RSS builder. In your configuration
6
+ file, you can configure feed formats to `rss` (the default) or `atom` now:
7
+
8
+ my_collection:
9
+ rss:
10
+ format: atom
11
+ url: haha.xml
12
+
3
13
  ## v0.6.1
4
14
 
5
15
  This release just fixes a mistake I made, where I built and pushed a tag from a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lifer (0.6.1)
4
+ lifer (0.7.0)
5
5
  i18n (< 2)
6
6
  kramdown (~> 2.4)
7
7
  liquid (~> 5.6, < 6)
data/lib/lifer/brain.rb CHANGED
@@ -125,8 +125,7 @@ class Lifer::Brain
125
125
  # value. If the in-scope collection does not have a configured setting, this
126
126
  # method will return fallback settings (unless `:strict` is `true`).
127
127
  #
128
- # Example usage:
129
- #
128
+ # @example Usage:
130
129
  # setting(:my, :great, :setting)
131
130
  #
132
131
  # @overload setting(path, ..., collection: nil, strict: false)
@@ -160,12 +159,6 @@ class Lifer::Brain
160
159
  path.start_with?("/") ? path : File.join(root, path)
161
160
  end
162
161
 
163
- # FIXME:
164
- # Do collections work with sub-subdirectories? For example, what if the
165
- # configured collection maps to a directory:
166
- #
167
- # subdirectory_one/sub_subdirectory_one
168
- #
169
162
  # @return [Set<Lifer::Collection>]
170
163
  def generate_collections
171
164
  config.collectionables
@@ -1,9 +1,9 @@
1
1
  module Lifer::Builder::HTML::FromLiquid::Drops
2
2
  # This drop allows users to access Lifer collection information from within
3
- # Liquid templates. Example:
3
+ # Liquid templates.
4
4
  #
5
+ # @example Usage
5
6
  # {{ collection.name }}
6
- #
7
7
  # {% for entries in collection.entries %}
8
8
  # {{ entry.title }}
9
9
  # {% endfor %}
@@ -1,7 +1,8 @@
1
1
  module Lifer::Builder::HTML::FromLiquid::Drops
2
2
  # This drop allows users to iterate over their Lifer collections in Liquid
3
- # templates. Example:
3
+ # templates.
4
4
  #
5
+ # @example Usage
5
6
  # {% for collection in collections %}
6
7
  # {{ collection.name }}
7
8
  # {% endfor %}
@@ -27,8 +28,9 @@ module Lifer::Builder::HTML::FromLiquid::Drops
27
28
  def to_a = @collections
28
29
 
29
30
  # Dynamically define Liquid accessors based on the Lifer project's
30
- # collection names. For example, to get the root collection's name:
31
+ # collection names.
31
32
  #
33
+ # @example Get the root collection's name.
32
34
  # {{ collections.root.name }}
33
35
  #
34
36
  # @param arg [String] The name of a collection.
@@ -2,8 +2,7 @@ module Lifer::Builder::HTML::FromLiquid::Drops
2
2
  # This drop represents a Lifer entry and allows users to access entry
3
3
  # metadata and content in Liquid templates.
4
4
  #
5
- # Example usage:
6
- #
5
+ # @example Usage
7
6
  # <h1>{{ entry.title }}</h1>
8
7
  # <small>Published on <datetime>{{ entry.date }}</datetime></small>
9
8
  #
@@ -2,8 +2,7 @@ module Lifer::Builder::HTML::FromLiquid::Drops
2
2
  # Markdown entries may contain YAML frontmatter. And if they do, we need a way
3
3
  # for the Liquid templates to access that data.
4
4
  #
5
- # Example usage:
6
- #
5
+ # @example Usage
7
6
  # {{ entry.frontmatter.any_available_frontmatter_key }}
8
7
  #
9
8
  class FrontmatterDrop < Liquid::Drop
@@ -18,8 +17,8 @@ module Lifer::Builder::HTML::FromLiquid::Drops
18
17
  def to_s = frontmatter.to_json
19
18
 
20
19
  # Dynamically define Liquid accessors based on the Lifer settings object.
21
- # For example, to get a collections URI strategy:
22
20
  #
21
+ # @example Get a collection's URI strategy.
23
22
  # {{ settings.my_collection.uri_strategy }}
24
23
  #
25
24
  # @param arg [String] The name of a collection.
@@ -2,6 +2,7 @@ module Lifer::Builder::HTML::FromLiquid::Drops
2
2
  # This drop allows users to access the current Lifer project settings from
3
3
  # Liquid templates. Example:
4
4
  #
5
+ # @example Usage
5
6
  # {{ settings.my_collection.uri_strategy }}
6
7
  #
7
8
  class SettingsDrop < Liquid::Drop
@@ -15,8 +16,8 @@ module Lifer::Builder::HTML::FromLiquid::Drops
15
16
  def to_s = settings.to_json
16
17
 
17
18
  # Dynamically define Liquid accessors based on the Lifer settings object.
18
- # For example, to get a collections URI strategy:
19
19
  #
20
+ # @example Get a collections URI strategy:
20
21
  # {{ settings.my_collection.uri_strategy }}
21
22
  #
22
23
  # @param arg [String] The name of a collection.
@@ -1,8 +1,7 @@
1
1
  # This module provides Liquid filters to be used within Liquid templates.
2
2
  # In many cases these utilities exist to be pseudo-compatible with Jekyll.
3
3
  #
4
- # For example, a filter (in a Liquid template):
5
- #
4
+ # @example A filter in a Liquid template.
6
5
  # {{ entry.date | date_to_xmlschema }}
7
6
  #
8
7
  module Lifer::Builder::HTML::FromLiquid::Filters
@@ -17,10 +16,9 @@ module Lifer::Builder::HTML::FromLiquid::Filters
17
16
 
18
17
  # Transforms a string to kabab-case.
19
18
  #
20
- # For example:
19
+ # @example Result
20
+ # handleize("hello_there") #=> "hello-there"
21
21
  #
22
- # Before: hello_there
23
- # After: hello-there
24
22
  # @param input [String] A string.
25
23
  # @return [String] The transformed string.
26
24
  def handleize(input) = Util.handleize(input)
@@ -11,8 +11,7 @@ class Lifer::Builder::HTML::FromLiquid
11
11
  # frontmatter when we didn't need to. Maybe in the long run this was a bad
12
12
  # call? I don't know.
13
13
  #
14
- # Example usage (from a Liquid template):
15
- #
14
+ # @example Usage from a Liquid template.
16
15
  # {% layout "path/to/my_liquid_layout_template" %}
17
16
  #
18
17
  # (The required `endlayout` tag will be appended to the end of the file
@@ -74,7 +74,7 @@ class Lifer::Builder::HTML < Lifer::Builder
74
74
  # For the given collection, ensure all required directories and
75
75
  # subdirectories exist so the entry output can be safely written to.
76
76
  #
77
- # @param entry [Lifer::Collection] A collection.
77
+ # @param collection [Lifer::Collection] A collection.
78
78
  # @return [void]
79
79
  def generate_output_directories_for(collection)
80
80
  directories = collection.entries
@@ -1,6 +1,9 @@
1
1
  require "fileutils"
2
2
  require "rss"
3
3
 
4
+ # FIXME: Can this feed builder just take a type for Atom feeds instead of us
5
+ # creating a separate builder?
6
+
4
7
  # Builds a simple, UTF-8, RSS 2.0[1] feed using the Ruby standard library's RSS
5
8
  # features.
6
9
  #
@@ -26,6 +29,8 @@ require "rss"
26
29
  #
27
30
  # - `count:` - The limit of RSS feed items that should be included in the
28
31
  # output document. Leave unset or set to `0` to include all entries.
32
+ # - `format:` - The RSS format to build with. Either `rss` or `atom` are
33
+ # supported. `rss` is the default format.
29
34
  # - `managing_editor:` - the contents of the `<managingEditor>` node of the
30
35
  # RSS document. When unset, Lifer builds a valid `<managingEditor>` value
31
36
  # using the collection or root `author` value and a null email address to
@@ -47,10 +52,27 @@ class Lifer::Builder::RSS < Lifer::Builder
47
52
  #
48
53
  DEFAULT_MANAGING_EDITOR_EMAIL = "editor@null.invalid"
49
54
 
55
+ # All of the available formats that this builder can build. Where the keys
56
+ # are formats accepted as input in configuration files and the values are
57
+ # the formats that the RSS builder will output.
58
+ #
59
+ FORMATS = {atom: "atom", rss: "rss2.0"}
60
+
61
+ # The default format for this RSS feed builder. Where the key is the format
62
+ # accepted as input in configuration files and the value is the format that
63
+ # the RSS builder will output.
64
+
65
+ # The name of the format type, as needed by `RSS::Maker`, used by default by
66
+ # this feed builder.
67
+ #
68
+ DEFAULT_MAkER_FORMAT_NAME = FORMATS[:rss]
69
+
70
+
50
71
  self.name = :rss
51
72
  self.settings = [
52
73
  rss: [
53
74
  :count,
75
+ :format,
54
76
  :managing_editor,
55
77
  :url
56
78
  ]
@@ -69,6 +91,14 @@ class Lifer::Builder::RSS < Lifer::Builder
69
91
  end
70
92
  end
71
93
 
94
+ def feed_format(collection)
95
+ format = Lifer.setting(:rss, :format, collection:)&.to_sym
96
+
97
+ return FORMATS[format] if FORMATS.keys.include? format
98
+
99
+ DEFAULT_MAkER_FORMAT_NAME
100
+ end
101
+
72
102
  # Traverses and renders an RSS feed for feedable collection.
73
103
  #
74
104
  # @return [void]
@@ -150,8 +180,10 @@ class Lifer::Builder::RSS < Lifer::Builder
150
180
  end
151
181
  end
152
182
 
153
- # FIXME: Using the W3C feed validation checker[1], I found that RSS feed items
154
- # generated by Lifer are missing some recommended functionality. Reports
183
+ # @fixme Using the W3C feed validation checker[1], I found that RSS and Atom
184
+ # feed items generated by Lifer are missing some recommended functionality.
185
+ #
186
+ # RSS reports:
155
187
  #
156
188
  # > This feed is valid, but interoperability with the widest range of feed
157
189
  # > readers could be improved by implementing the following recommendations.
@@ -169,6 +201,14 @@ class Lifer::Builder::RSS < Lifer::Builder
169
201
  # related to our Markdown parser implementation than the RSS feed generation
170
202
  # itself.
171
203
  #
204
+ # Atom reports:
205
+ #
206
+ # > Two or more entries with the same value for <atom:updated>
207
+ # > (https://validator.w3.org/feed/docs/warning/DuplicateUpdated.html)
208
+ # >
209
+ # > Missing <atom:link> with rel="self".
210
+ # > (https://validator.w3.org/feed/docs/warning/MissingSelf.html)
211
+ #
172
212
  # [1]: https://validator.w3.org/feed/check.cgi
173
213
  #
174
214
  def rss_entry(rss_feed, lifer_entry)
@@ -185,7 +225,7 @@ class Lifer::Builder::RSS < Lifer::Builder
185
225
  end
186
226
  end
187
227
 
188
- # FIXME: Using the W3C feed validation checker[1], I found that RSS feeds
228
+ # @fixme Using the W3C feed validation checker[1], I found that RSS feeds
189
229
  # generated by Lifer are missing some recommended functionality. Reports:
190
230
  #
191
231
  # > Missing atom:link with rel="self"
@@ -196,20 +236,34 @@ class Lifer::Builder::RSS < Lifer::Builder
196
236
  def rss_feed_for(collection, &block)
197
237
  feed_object = nil
198
238
 
199
- ::RSS::Maker.make "rss2.0" do |feed|
239
+ ::RSS::Maker.make feed_format(collection) do |feed|
200
240
  feed.channel.description =
201
241
  Lifer.setting(:description, collection: collection) ||
202
242
  Lifer.setting(:site_title, collection: collection)
203
243
 
204
244
  feed.channel.language = Lifer.setting(:language, collection: collection)
205
245
 
206
- feed.channel.lastBuildDate = Time.now.to_s
207
-
208
- feed.channel.link = "%s/%s" % [
246
+ channel_link = "%s/%s" % [
209
247
  Lifer.setting(:global, :host),
210
- Lifer.setting(:rss, collection: collection)
248
+ Lifer.setting(:rss, :url, collection:)
211
249
  ]
212
250
 
251
+ # The W3C Atom validator claims that the <id> should be a "canonicalized"
252
+ # URL with a slash at the end.
253
+ #
254
+ channel_link = channel_link + "/" unless channel_link.end_with?("/")
255
+
256
+ feed.channel.lastBuildDate = Time.now.to_s
257
+ feed.channel.link = channel_link
258
+
259
+ # Additional channel fields for Atom format feeds.
260
+ #
261
+ if feed_format(collection) == "atom"
262
+ feed.channel.author = Lifer.setting(:author, collection: collection)
263
+ feed.channel.id = channel_link
264
+ feed.channel.updated = Time.now.to_s
265
+ end
266
+
213
267
  feed.channel.managingEditor = managing_editor(collection)
214
268
  feed.channel.title = Lifer.setting(:title, collection: collection)
215
269
  feed.channel.webMaster =
data/lib/lifer/builder.rb CHANGED
@@ -18,7 +18,8 @@ class Lifer::Builder
18
18
  # Every builder class must have execute method. This is the entrypoint for
19
19
  # instantiating *and* executing any builder.
20
20
  #
21
- # @param root [string] An absolute path to the Lifer project root directory.
21
+ # @param root [string] An absolute path to the Lifer project root
22
+ # directory.
22
23
  # @return [NotImplementedError] A builder subclass must implement this
23
24
  # method.
24
25
  def execute(root:) = (raise NotImplementedError)
data/lib/lifer/config.rb CHANGED
@@ -33,7 +33,7 @@ class Lifer::Config
33
33
  # Provides "implicit settings" that may not be set anywhere but really do
34
34
  # require a value.
35
35
  #
36
- # FIXME: I don't think this really belongs here. But in some cases we need
36
+ # @fixme I don't think this really belongs here. But in some cases we need
37
37
  # to provide the implicit setting key and a default value when calling the
38
38
  # `#setting` method. It would be nicer if the HTML builder handled this,
39
39
  # somehow.
@@ -33,9 +33,8 @@ module Lifer::Dev
33
33
  [File.read(path)]
34
34
  end
35
35
 
36
- # FIXME:
37
- # It would be very nice to not manually manage this list of content types.
38
- # Is there a nice, dependency-free way to do this?
36
+ # @fixme It would be very nice to not manually manage this list of
37
+ # content types. Is there a nice, dependency-free way to do this?
39
38
  #
40
39
  def content_type
41
40
  case File.extname(path)
@@ -71,8 +71,8 @@ module Lifer::Dev
71
71
  # @private
72
72
  # On reload, we rebuild the Lifer project.
73
73
  #
74
- # FIXME:
75
- # Partial rebuilds would be a nice enhancement for performance reasons.
74
+ # @fixme Partial rebuilds would be a nice enhancement for performance
75
+ # reasons.
76
76
  #
77
77
  def reload!
78
78
  if @changes
@@ -84,7 +84,6 @@ module Lifer::Dev
84
84
 
85
85
  # @private
86
86
  # @return [Lifer::Dev::Router] Our dev server router.
87
- #
88
87
  def router
89
88
  return @router if @router && !test_mode?
90
89
 
@@ -7,9 +7,9 @@ class Lifer::Entry::HTML < Lifer::Entry
7
7
  self.input_extensions = ["html", "html.erb", "html.liquid"]
8
8
  self.output_extension = :html
9
9
 
10
- # FIXME: This could probably get more sophisticated, but at the moment HTML
11
- # entries don't have any way to provide metadata about themselves. So let's
12
- # just give them a default date to start.
10
+ # @fixme This could probably get more sophisticated, but at the moment HTML
11
+ # entries don't have any way to provide metadata about themselves. So let's
12
+ # just give them a default date to start.
13
13
  #
14
14
  # @return [Time] The publication date of the HTML entry.
15
15
  def date = Lifer::Entry::DEFAULT_DATE
@@ -6,11 +6,11 @@ require_relative "../utilities"
6
6
 
7
7
  # We should initialize each Markdown file in a Lifer project as a
8
8
  # `Lifer::Entry::Markdown` object. This class contains convenience methods for
9
- # parsing a Markdown file with frontmatter as a weblog post or article. Of course,
10
- # all frontmatter key-values will be available for users to render as they will in
11
- # their template files.
9
+ # parsing a Markdown file with frontmatter as a weblog post or article. Of
10
+ # course, all frontmatter key-values will be available for users to render as
11
+ # they will in their template files.
12
12
  #
13
- # FIXME: As we add other types of entries, especially ones that use frontmatter,
13
+ # @fixme As we add other types of entries, especially ones that use frontmatter,
14
14
  # it may make sense to pull some of these methods into a separate module.
15
15
  #
16
16
  class Lifer::Entry::Markdown < Lifer::Entry
@@ -86,15 +86,14 @@ class Lifer::Entry::Markdown < Lifer::Entry
86
86
  )
87
87
  end
88
88
 
89
- # FIXME:
90
- # This would be easier to test and more appropriate as a module method
91
- # takes text and options as arguments.
92
- #
93
89
  # If given a summary in the frontmatter of the entry, we can use this to
94
90
  # provide a summary. Otherwise, we can truncate the first paragraph and use
95
91
  # that as a summary, although that is a bit annoying. This is useful for
96
92
  # indexes and feeds and so on.
97
93
  #
94
+ # @fixme This would be easier to test and more appropriate as a module method
95
+ # takes text and options as arguments.
96
+ #
98
97
  # @return [String] A summary of the entry.
99
98
  def summary
100
99
  return frontmatter[:summary] if frontmatter[:summary]
@@ -119,9 +118,9 @@ class Lifer::Entry::Markdown < Lifer::Entry
119
118
 
120
119
  # The HTML representation of the Markdown entry as parsed by Kramdown.
121
120
  #
122
- # FIXME: Before converting a Kramdown document to Markdown, we chould
123
- # convert any relative URLs to absolute ones. This makes it more flexible to
124
- # use HTML output where ever we want, especially in RSS feeds where feed
121
+ # @fixme Before converting a Kramdown document to Markdown, we should convert
122
+ # any relative URLs to absolute ones. This makes it more flexible to use
123
+ # HTML output where ever we want, especially in RSS feeds where feed
125
124
  # readers may "wtf" a relative URL.
126
125
  #
127
126
  # @return [String] The HTML for the body of the entry.
@@ -7,9 +7,9 @@ class Lifer::Entry::TXT < Lifer::Entry
7
7
  self.input_extensions = ["txt"]
8
8
  self.output_extension = :txt
9
9
 
10
- # FIXME: This could probably get more sophisticated, but at the moment HTML
11
- # entries don't have any way to provide metadata about themselves. So let's
12
- # just give them a default date to start.
10
+ # @fixme This could probably get more sophisticated, but at the moment HTML
11
+ # entries don't have any way to provide metadata about themselves. So let's
12
+ # just give them a default date to start.
13
13
  #
14
14
  # @return [Time] The publication date of the HTML entry.
15
15
  def date = Lifer::Entry::DEFAULT_DATE
@@ -34,7 +34,7 @@ class Lifer::Entry::TXT < Lifer::Entry
34
34
  # While we don't actually output text to HTML, we need to implement this
35
35
  # method so that the RSS feed builder can add text files as feed entries.
36
36
  #
37
- # FIXME: Maybe the `#to_html` methods should be renamed, then?
37
+ # @fixme Maybe the `#to_html` methods should be renamed, then?
38
38
  #
39
39
  # @return [String] The output HTML (not actually HTML).
40
40
  def to_html = full_text
data/lib/lifer/entry.rb CHANGED
@@ -8,7 +8,7 @@ require "digest/sha1"
8
8
  # should implement. It also provides the entry generator for *all* entry
9
9
  # subclasses.
10
10
  #
11
- # FIXME: Markdown entries are able to provide metadata via frontmatter, but
11
+ # @fixme Markdown entries are able to provide metadata via frontmatter, but
12
12
  # other entry types do not currently support frontmatter. Should they? Or is
13
13
  # there some nicer way to provide entry metadata for non-Markdown files in
14
14
  # 2024?
@@ -48,13 +48,13 @@ class Lifer::Selection < Lifer::Collection
48
48
  raise NotImplementedError, I18n.t("selection.entries_not_implemented")
49
49
  end
50
50
 
51
- # FIXME:
52
- # Getting selection settings may actually need to be different than getting
53
- # collection settings. But for now let's just inherit the superclass method.
54
- #
55
51
  # A getter for selection settings. See `Lifer::Collection#setting` for more
56
52
  # information.
57
53
  #
54
+ # @fixme Getting selection settings may actually need to be different than
55
+ # getting collection settings. But for now let's just inherit the
56
+ # superclass method.
57
+ #
58
58
  # @return [String, Symbol, NilClass] The setting for the collection (or a
59
59
  # fallback setting, or a default setting).
60
60
  def setting(...)
@@ -1,8 +1,7 @@
1
1
  # This module provides simple finder methods to classes that need to keep track
2
2
  # of their descendant classes.
3
3
  #
4
- # Example usage:
5
- #
4
+ # @example Usage
6
5
  # class MyClass
7
6
  # included Lifer::Shared::FinderMethods
8
7
  # # ...
@@ -32,6 +32,13 @@ uri_strategy: simple
32
32
  ### uri_strategy: pretty
33
33
  ###
34
34
  ### layout_file: path/to/my_other_layout.html.erb
35
+ ###
36
+ ### my_with_fine_grained_rss_settings:
37
+ ### rss
38
+ ### count: 99
39
+ ### format: rss
40
+ ### managing_editor: editor@example.com (Managing Editor)
41
+ ### url: custom.xml
35
42
 
36
43
  # Selections
37
44
  #
@@ -14,16 +14,15 @@ module Lifer::Utilities
14
14
  end
15
15
 
16
16
  # Given a string path, classify it into a namespaced Ruby constant. If the
17
- # constant does not exist, we raise a helpful error. For example:
17
+ # constant does not exist, we raise a helpful error.
18
18
  #
19
- # Given: my/class_name/that_exists
20
- # Result: My::ClassName::ThatExists
19
+ # @example Result
20
+ # classify("my/class_name/that_exists") #=> My::ClassName::ThatExists
21
21
  #
22
- # FIXME:
23
- # Note that this method is currently a bit naive. It cannot politely
24
- # transform classes with many caps in them (i.e. `URIStrategy`) without
25
- # being given an exact match (`URIStrategy`) or a broken-looking one
26
- # (`u_r_i_strategy`).
22
+ # @fixme Note that this method is currently a bit naive. It cannot politely
23
+ # transform classes with many caps in them (i.e. `URIStrategy`) without
24
+ # being given an exact match (`URIStrategy`) or a broken-looking one
25
+ # (`u_r_i_strategy`).
27
26
  #
28
27
  # @param string_constant [String] A string that maps to a Ruby constant.
29
28
  # @return [Class, Module]
data/lib/lifer/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lifer
2
- VERSION = "0.6.1"
2
+ VERSION = "0.7.0"
3
3
  end
data/lib/lifer.rb CHANGED
@@ -63,7 +63,7 @@ module Lifer
63
63
 
64
64
  # A set of all entries currently in the project.
65
65
  #
66
- # FIXME: Do we need this as well as `Lifer.manifest`?
66
+ # @fixme Do we need this as well as `Lifer.manifest`?
67
67
  #
68
68
  # @return [Set] All entries.
69
69
  def entry_manifest = brain.entry_manifest
@@ -85,7 +85,7 @@ module Lifer
85
85
 
86
86
  # A set of all entries currently in the project.
87
87
  #
88
- # FIXME: Do we need this as well as `Lifer.manifest`?
88
+ # @fixme Do we need this as well as `Lifer.manifest`?
89
89
  #
90
90
  # @return [Set] All entries.
91
91
  def manifest = brain.manifest
@@ -99,8 +99,7 @@ module Lifer
99
99
  # Register new settings so that they are "safe" and can be read from a Lifer
100
100
  # configuration file. Unregistered settings are ignored.
101
101
  #
102
- # Example usage:
103
- #
102
+ # @example Usage
104
103
  # register_settings(
105
104
  # :hidden,
106
105
  # :birthday,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lifer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - benjamin wil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-02 00:00:00.000000000 Z
11
+ date: 2025-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -207,8 +207,8 @@ licenses:
207
207
  - MIT
208
208
  metadata:
209
209
  allowed_push_host: https://rubygems.org
210
- homepage_uri: https://github.com/benjaminwil/lifer/blob/0.6.1/README.md
211
- source_code_uri: https://github.com/benjaminwil/lifer/tree/0.6.1
210
+ homepage_uri: https://github.com/benjaminwil/lifer/blob/0.7.0/README.md
211
+ source_code_uri: https://github.com/benjaminwil/lifer/tree/0.7.0
212
212
  changelog_uri: https://github.com/benjaminwil/lifer/blob/main/CHANGELOG.md
213
213
  post_install_message:
214
214
  rdoc_options: []