bible270 0.18.0 → 0.18.2

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: 7ba4b388cfe909e84f06899d72159471aab1a506154fc72854659d64320a3390
4
- data.tar.gz: ebcf629ca6a12f57bf87d72073115c9a4655cec15e018e9349813aaab11a2e41
3
+ metadata.gz: 93a410e7fe7730dd0b5aad9f1d0c2532999545ebfae26af4694d0199876c86c9
4
+ data.tar.gz: e1efd12217adfeaf0bc834173dd3dc0d582c6fe0075169ce1849b56158749f97
5
5
  SHA512:
6
- metadata.gz: 1b202223f06388e4b7f95d53b52f84cc84018ed7ac7ad8e49c48467525e7d76a0bd60185e46bd9b6223a83d7939666b6d7e7d6f1360ca625967452691d1fc528
7
- data.tar.gz: 8c0b363492837cf5fb715ad13effdee46829cb34dad426e2bbfa8b24c4834f61ea16b2411b5c2e0fc0098d6b0fa397e8fe0cee487a763670f75f8f9fbb2bbb6c
6
+ metadata.gz: 4665e5cdbe8e8ede757497e150e61b84255d6de40374f86cb043096336969ddd78053ff79ffecf61d19f7e5a5249c2999a79bf9e2bef8c30c1b4519883e6b63a
7
+ data.tar.gz: 89c03692d0c1dc038ce33c7c421b1d825da81843fdca7ace1edefabfb7b727f5b7ff061b92f3c5dda8e1c7c14c171904dee3142e3b61927eac4a0fad86b57609
data/CHANGELOG.md CHANGED
@@ -6,7 +6,30 @@ All notable changes to bible270. Format follows [Keep a Changelog](https://keepa
6
6
 
7
7
  See the changes since the last release:
8
8
 
9
- **[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.17.2...main)**
9
+ **[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.18.1...main)**
10
+
11
+ ## [0.18.1] - 2026-08-12
12
+
13
+ ### Changed
14
+
15
+ - increase reader avatar sizes across community, profile, admin, and reflection views
16
+
17
+ **[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.18.0...v0.18.1)**
18
+
19
+ ## [0.18.0] - 2026-08-10
20
+
21
+ ### Added
22
+
23
+ - `HEB/GRK` reading option with WLC links for the Old Testament, Psalms, and Proverbs, and mGNT links for the New Testament
24
+ - per-reader Bible Gateway or Blue Letter Bible source selection in Profile, with the same control available to admins
25
+ - `bible270:migrations:reconcile` task to safely align copied Bible270 and Active Storage schemas with local migration versions
26
+
27
+ ### Changed
28
+
29
+ - original-language reading labels now display `Hebrew` or `Greek` for the relevant passage
30
+ - passage-source preferences use an extensible string value, defaulting to Bible Gateway and preserving earlier Blue Letter Bible selections during migration
31
+
32
+ **[Full Changelog](https://github.com/avonderluft/bible270/compare/v0.17.2...v0.18.0)**
10
33
 
11
34
  ## [0.17.2] - 2026-08-08
12
35
 
@@ -390,6 +413,8 @@ This is the initial public release.
390
413
 
391
414
  * Email sign-in requires working Action Mailer delivery in the host application. Set `config.mailer_from`; delivery is inline by default, or set `email_sign_in_deliver_later` when a queue backend is available.
392
415
 
416
+ [0.18.1]: https://github.com/avonderluft/bible270/releases/tag/v0.18.1
417
+ [0.18.0]: https://github.com/avonderluft/bible270/releases/tag/v0.18.0
393
418
  [0.17.2]: https://github.com/avonderluft/bible270/releases/tag/v0.17.2
394
419
  [0.17.1]: https://github.com/avonderluft/bible270/releases/tag/v0.17.1
395
420
  [0.17.0]: https://github.com/avonderluft/bible270/releases/tag/v0.17.0
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Bible 270
2
2
 
3
- [![Gem Version](https://img.shields.io/gem/v/bible270)](https://rubygems.org/gems/bible270) [![Coverage Status](https://img.shields.io/coverallsCoverage/github/avonderluft/bible270?branch=main&cacheSeconds=300)](https://coveralls.io/github/avonderluft/bible270?branch=main) [![Downloads](https://img.shields.io/gem/dt/bible270)](https://rubygems.org/gems/bible270) [![GitHub Release Date - Published_At](https://img.shields.io/github/release-date/avonderluft/bible270?label=last%20release&color=seagreen)](https://github.com/avonderluft/bible270/releases)
3
+ [![Gem Version](https://img.shields.io/gem/v/bible270)](https://rubygems.org/gems/bible270) [![Coverage Status](https://coveralls.io/repos/github/avonderluft/bible270/badge.svg?branch=main&cache=20260812-1)](https://coveralls.io/github/avonderluft/bible270?branch=main) [![Downloads](https://img.shields.io/gem/dt/bible270)](https://rubygems.org/gems/bible270) [![GitHub Release Date - Published_At](https://img.shields.io/github/release-date/avonderluft/bible270?label=last%20release&color=seagreen)](https://github.com/avonderluft/bible270/releases)
4
4
 
5
5
  A mountable **Rails engine** that drops a 270-day (9 month) interactive Bible reading plan into any Rails app, built with [ComfortableMediaSurfer](https://github.com/shakacode/comfortable-media-surfer) CMS in mind. Readers tick off each day's readings, post reflections, and see how everyone else is getting on, much like the social plans on Bible.com.
6
6
 
data/Rakefile CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'bundler/gem_tasks' # provides build / install / release
4
4
  require 'rake/testtask'
5
- require 'coveralls/rake/task'
6
5
 
7
6
  Rake::TestTask.new(:test) do |t|
8
7
  t.libs << 'test' << 'lib'
@@ -10,6 +9,4 @@ Rake::TestTask.new(:test) do |t|
10
9
  t.warning = false
11
10
  end
12
11
 
13
- Coveralls::RakeTask.new
14
-
15
12
  task default: :test
@@ -138,7 +138,7 @@ module Bible270
138
138
  reader.avatar_url.presence
139
139
  end
140
140
 
141
- def b270_avatar(reader, size: 34)
141
+ def b270_avatar(reader, size: 72)
142
142
  src = b270_avatar_src(reader)
143
143
  if src
144
144
  image_tag src, class: 'b270-avatar', width: size, height: size, alt: reader.display_name
@@ -5,7 +5,7 @@
5
5
  <%= link_to 'Moderate reflections →', admin_comments_path %></p>
6
6
 
7
7
  <div class="b270-panel">
8
- <h2 class="b270-subhead">This run of the plan is <%= @enrollment_closed ? 'closed' : 'open' %> to new readers.</h2>
8
+ <h2 class="b270-subhead">This run of the plan is <%= @enrollment_closed ? 'closed' : 'open' %> to new readers.</h2>
9
9
  <% if @enrollment_closed %>
10
10
  <% if @enrollment_closed_at %>
11
11
  <p class="b270-startline">Enrollment closed
@@ -26,7 +26,7 @@
26
26
  <div class="b270-list">
27
27
  <% @readers.each do |reader| %>
28
28
  <div class="b270-li">
29
- <%= b270_avatar(reader, size: 34) %>
29
+ <%= b270_avatar(reader, size: 72) %>
30
30
  <div>
31
31
  <div class="name"><%= link_to reader.display_name, admin_reader_path(reader), style: 'text-decoration:none' %>
32
32
  <% if Bible270.config.admin?(reader) %> <span class="sub"><strong>[admin]</strong></span> <% end %>
@@ -16,7 +16,7 @@
16
16
  <%= form_with url: admin_reader_profile_path(@reader), method: :patch, class: "b270-emailform",
17
17
  html: { multipart: true } do %>
18
18
  <div class="b270-avatarrow">
19
- <%= b270_avatar(@reader, size: 64) %>
19
+ <%= b270_avatar(@reader, size: 72) %>
20
20
  <% if Bible270::Reader.avatar_uploads? %>
21
21
  <label class="b270-field" style="flex:1">
22
22
  <span>Picture</span>
@@ -7,7 +7,7 @@
7
7
  %>
8
8
  <% editing = @editing_comment_id.present? && @editing_comment_id == comment.id %>
9
9
  <div class="b270-comment <%= 'b270-reply' if reply %>" id="comment-<%= comment.id %>">
10
- <%= b270_avatar(comment.reader, size: reply ? 28 : 34) %>
10
+ <%= b270_avatar(comment.reader, size: reply ? 36 : 48) %>
11
11
  <div style="flex:1">
12
12
  <div class="b270-cmeta">
13
13
  <strong><%= link_to comment.reader.display_name, reader_path(comment.reader), style: "text-decoration:none" %></strong>
@@ -1,27 +1,37 @@
1
1
  <%# locals: (comment:) %>
2
2
  <%#
3
- One heart per like, each carrying its giver's name so a row of hearts is both
4
- the count and, on hover, the list of who.
5
-
6
- Your own like is not drawn in the row: the button is your heart, filled, and
7
- saying so. Drawing both gave a reader two hearts for one like.
3
+ Likes are summarized as a count followed by one heart. Hovering or focusing
4
+ the summary reveals every liker on a separate line.
8
5
  %>
9
6
  <%
10
7
  liked = signed_in? && comment.liked_by?(current_reader)
11
- others = signed_in? ? comment.likes.reject { |like| like.reader_id == current_reader.id } : comment.likes
8
+ likes = comment.likes
9
+ tooltip_id = "likers-#{comment.id}"
12
10
  %>
13
11
  <span class="b270-likes" id="likes-<%= comment.id %>">
14
- <% others.each do |like| %><span class="b270-heart"
15
- title="<%= like.reader.display_name %>"><%= Bible270::Comment::HEART %></span><% end %>
12
+ <% if likes.any? %>
13
+ <span class="b270-likecount"><%= likes.size %></span>
14
+ <% end %>
16
15
 
17
16
  <% if signed_in? %>
18
- <%= button_to like_comment_path(comment), method: :post, class: "b270-likebtn#{' liked' if liked}",
17
+ <%= button_to like_comment_path(comment), method: :post, class: "b270-likebtn#{' liked' if likes.any?}",
19
18
  form: { style: "display:inline", data: { turbo_stream: true } },
20
- aria: { label: liked ? "Take back your like" : "Like this reflection" },
21
- title: liked ? "You liked this — tap to take it back" : "Like this reflection" do %>
19
+ aria: {
20
+ label: liked ? "Take back your like" : "Like this reflection",
21
+ describedby: (tooltip_id if likes.any?)
22
+ } do %>
22
23
  <%= Bible270::Comment::HEART %>
23
24
  <% end %>
24
- <% elsif comment.likes.any? %>
25
- <span class="b270-likecount"><%= comment.likes.size %></span>
25
+ <% elsif likes.any? %>
26
+ <span class="b270-heart" tabindex="0" aria-label="<%= pluralize(likes.size, 'like') %>"
27
+ aria-describedby="<%= tooltip_id %>"><%= Bible270::Comment::HEART %></span>
28
+ <% end %>
29
+
30
+ <% if likes.any? %>
31
+ <span class="b270-liketooltip" id="<%= tooltip_id %>" role="tooltip">
32
+ <% likes.each do |like| %>
33
+ <span class="b270-liker"><%= like.reader.display_name %></span>
34
+ <% end %>
35
+ </span>
26
36
  <% end %>
27
37
  </span>
@@ -7,7 +7,7 @@
7
7
  <%= form_with url: profile_path, method: :patch, class: "b270-emailform",
8
8
  html: { multipart: true } do %>
9
9
  <div class="b270-avatarrow">
10
- <%= b270_avatar(current_reader, size: 64) %>
10
+ <%= b270_avatar(current_reader, size: 72) %>
11
11
  <% if Bible270::Reader.avatar_uploads? %>
12
12
  <label class="b270-field" style="flex:1">
13
13
  <span>Picture</span>
@@ -8,7 +8,7 @@
8
8
  <% @readers.each_with_index do |r, i| %>
9
9
  <div class="b270-li">
10
10
  <span class="rank"><%= i + 1 %></span>
11
- <%= b270_avatar(r, size: 40) %>
11
+ <%= b270_avatar(r, size: 72) %>
12
12
  <div>
13
13
  <div class="name"><%= link_to r.display_name, reader_path(r), style: "text-decoration:none" %></div>
14
14
  <div class="sub"><%= @days_completed[r.id] %> of <%= Bible270::Plan::DAYS %> days · joined <%= Bible270.local_time(r.created_at).strftime("%b %Y") %></div>
@@ -1,7 +1,7 @@
1
1
  <% content_for :title, "#{@reader.display_name} — #{Bible270.config.app_name}" %>
2
2
  <% content_for :hide_day_index, true %><%# this page has its own grid %>
3
3
  <div style="display:flex;align-items:center;gap:16px;margin-bottom:8px">
4
- <%= b270_avatar(@reader, size: 56) %>
4
+ <%= b270_avatar(@reader, size: 72) %>
5
5
  <div>
6
6
  <h1 style="margin:0"><%= @reader.display_name %></h1>
7
7
  <% if signed_in? && current_reader.id == @reader.id %>
@@ -26,4 +26,3 @@
26
26
  <% end %>
27
27
  </div>
28
28
  <p class="b270-gridnote">Dot indicates days with reflections.</p>
29
-
@@ -171,16 +171,21 @@
171
171
  .b270-mention{color:var(--teal);font-weight:600;text-decoration:none}
172
172
  .b270-mention:hover{text-decoration:underline}
173
173
  .b270-cactions{display:flex;align-items:center;gap:12px;margin-top:6px;flex-wrap:wrap}
174
- .b270-likes{display:inline-flex;align-items:center;gap:2px}
174
+ .b270-likes{display:inline-flex;align-items:center;gap:3px;position:relative}
175
175
  .b270-heart{font-size:13px;line-height:1;cursor:default}
176
- /* Same size as a heart in the row: the button is one of the hearts, not a
177
- control sitting beside them. Unliked, it is the same emoji desaturated
178
- visible against the paper, and hovering shows what clicking will give. */
176
+ /* The single heart is also the toggle for signed-in readers. It stays red
177
+ while anyone likes the reflection and returns to grey only at zero likes. */
179
178
  .b270-likebtn{background:none;border:0;padding:0 2px;font-size:13px;line-height:1;cursor:pointer;
180
179
  filter:grayscale(1);opacity:.5;transition:filter .12s,opacity .12s}
181
180
  .b270-likebtn:hover{filter:none;opacity:1}
182
181
  .b270-likebtn.liked{filter:none;opacity:1}
183
- .b270-likecount{font-size:11.5px;color:var(--faint);margin-left:2px}
182
+ .b270-likecount{font-size:11.5px;color:var(--faint)}
183
+ .b270-liketooltip{display:none;position:absolute;z-index:10;top:calc(100% + 6px);left:0;
184
+ min-width:max-content;padding:6px 9px;border:1px solid var(--line-soft);
185
+ border-radius:7px;background:var(--ink);color:var(--paper);font-size:12px;
186
+ line-height:1.45;box-shadow:0 3px 10px rgba(0,0,0,.14)}
187
+ .b270-likes:hover .b270-liketooltip,.b270-likes:focus-within .b270-liketooltip{display:block}
188
+ .b270-liker{display:block;white-space:nowrap}
184
189
  .b270-creply{margin-top:6px}
185
190
  .b270-cbody{margin:3px 0 0;white-space:pre-wrap}
186
191
  .b270-editform{margin-top:6px}
@@ -19,6 +19,7 @@ module Bible270
19
19
  'LSB' => { label: 'Legacy Standard Bible', short: 'Legacy Standard Version', gateway: 'LSB', blue_letter: 'lsb' },
20
20
  'ESV' => { label: 'English Standard Version', short: 'English Standard Version', gateway: 'ESV', blue_letter: 'esv' },
21
21
  'KJV' => { label: 'King James Version', short: 'King James Version', gateway: 'KJV', blue_letter: 'kjv' },
22
+ 'YLT' => { label: 'Young\'s Literal Translation', short: 'Young\'s Literal Translation', gateway: 'YLT', blue_letter: 'ylt' },
22
23
  'HEB/GRK' => { label: 'Hebrew and Greek', short: 'Hebrew and Greek', gateway: 'WLC', blue_letter: 'wlc/mgnt' }
23
24
  }.freeze
24
25
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bible270
4
- VERSION = '0.18.0'
4
+ VERSION = '0.18.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bible270
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.18.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew vonderLuft