webring-rails 1.4.4 → 1.5.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: 447748a2ca051ec5cfdbdb2939c09a30c8b57e2a47fff7aabd8f32cea100cc0c
4
- data.tar.gz: 6644675f77cd307363543cc56b183152e4a42adb1121844834da943e430ba993
3
+ metadata.gz: fab197d616f0b7c93d8689e4873d66fc86c186af7401dbd7237ba00cfeef5dcf
4
+ data.tar.gz: 9770538896f190f67b28d796b3ec58618cedb4a763f42833d610253754b8ce34
5
5
  SHA512:
6
- metadata.gz: a2b3855e306305947af1fc114b30005e8ed551f070f7cacd67d5719f9517b915fcbe6a3bf266f4acf187c6345f636f513a6ee0a6ebaea5ea8d1b4d8a20c40ac5
7
- data.tar.gz: 771bdf593b8310ae9a0c18b957ed3f6f896e26b7277b85da26e36bd03c7f86bcb736430a73df8c45f039150eb8dfd7f3616b8b0c1427706fd7ebfd50238c216c
6
+ metadata.gz: a5827a69ce17c27f9f3ecdfb7c5bcf295e49dd2a2b3466698cc51287c77d888df2de53d6ac4eaa0b69818fb1528161a6ad13973339c17f20f0819ca430258181
7
+ data.tar.gz: 62e1d083641d38151c2787c992cccbc652ee090fb6075462f38ccfab3bce64c8dd5aa7a21710b2ddde676fedabdc4ff0b29bf7efeae7819271406df32aebfd84
@@ -31,9 +31,9 @@ module Webring
31
31
  # PATCH/PUT /webring/members/1
32
32
  def update
33
33
  if member.update(member_params)
34
- redirect_to admin_panel_member_path(member), notice: 'Member was successfully updated.'
34
+ update_success_response
35
35
  else
36
- render :edit, status: :unprocessable_entity
36
+ update_error_response
37
37
  end
38
38
  end
39
39
 
@@ -46,6 +46,20 @@ module Webring
46
46
 
47
47
  private
48
48
 
49
+ def update_success_response
50
+ respond_to do |format|
51
+ format.html { redirect_to admin_panel_member_path(member), notice: 'Member was successfully updated.' }
52
+ format.json { head :ok }
53
+ end
54
+ end
55
+
56
+ def update_error_response
57
+ respond_to do |format|
58
+ format.html { render :edit, status: :unprocessable_entity }
59
+ format.json { render json: { status: 'error', errors: member.errors }, status: :unprocessable_entity }
60
+ end
61
+ end
62
+
49
63
  def members
50
64
  @members ||= Member.all.order(created_at: :desc)
51
65
  end
@@ -55,7 +69,7 @@ module Webring
55
69
  end
56
70
 
57
71
  def member_params
58
- params.require(:member).permit(:name, :url, :description)
72
+ params.require(:member).permit(:name, :url, :description, :status)
59
73
  end
60
74
  end
61
75
  end
@@ -35,7 +35,7 @@ module Webring
35
35
  end
36
36
 
37
37
  def find_member
38
- @member = Webring::Member.find_by(uid: permitted_params[:source_member_uid])
38
+ @member = Webring::Member.active.find_by(uid: permitted_params[:source_member_uid])
39
39
  return if @member
40
40
 
41
41
  render_member_not_found
@@ -43,13 +43,13 @@ module Webring
43
43
 
44
44
  def check_member_exists
45
45
  member_uid = permitted_params[:source_member_uid]
46
- return unless member_uid.present? && !Webring::Member.exists?(uid: member_uid)
46
+ return unless member_uid.present? && !Webring::Member.active.exists?(uid: member_uid)
47
47
 
48
48
  render_member_not_found
49
49
  end
50
50
 
51
51
  def ensure_members_exist
52
- return if Webring::Member.exists?
52
+ return if Webring::Member.active.exists?
53
53
 
54
54
  render plain: 'No members in the webring', status: :not_found
55
55
  end
@@ -4,55 +4,57 @@ module Webring
4
4
  # Find the next member in the webring after the current one
5
5
  # If current member is the last, return the first member (ring concept)
6
6
  def find_next(source_member_uid)
7
- source_member = find_by(uid: source_member_uid)
8
- return first_member_by_creation unless source_member
7
+ source_member = active.find_by(uid: source_member_uid)
8
+ return first_active_member_by_creation unless source_member
9
9
 
10
- find_next_member(source_member) || first_member_by_creation
10
+ find_next_active_member(source_member) || first_active_member_by_creation
11
11
  end
12
12
 
13
13
  # Find the previous member in the webring before the current one
14
14
  # If current member is the first, return the last member (ring concept)
15
15
  def find_previous(source_member_uid)
16
- source_member = find_by(uid: source_member_uid)
17
- return last_member_by_creation unless source_member
16
+ source_member = active.find_by(uid: source_member_uid)
17
+ return last_active_member_by_creation unless source_member
18
18
 
19
- find_previous_member(source_member) || last_member_by_creation
19
+ find_previous_active_member(source_member) || last_active_member_by_creation
20
20
  end
21
21
 
22
22
  # Find a random member, excluding the current one if provided
23
23
  # If current member is the only one, return it
24
24
  def find_random(source_member_uid: nil)
25
- return order('RANDOM()').first if source_member_uid.blank?
25
+ return active.order('RANDOM()').first if source_member_uid.blank?
26
26
 
27
27
  # Use exists? check to avoid loading records when not needed
28
- excluded_scope = where.not(uid: source_member_uid)
28
+ excluded_scope = active.where.not(uid: source_member_uid)
29
29
 
30
30
  if excluded_scope.exists?
31
31
  excluded_scope.order('RANDOM()').first
32
32
  else
33
- # if only one member exists (the current one), return it
34
- find_by(uid: source_member_uid)
33
+ # if only one active member exists (the current one), return it
34
+ active.find_by(uid: source_member_uid)
35
35
  end
36
36
  end
37
37
 
38
38
  private
39
39
 
40
- def first_member_by_creation
41
- order(created_at: :asc).first
40
+ def first_active_member_by_creation
41
+ active.order(created_at: :asc).first
42
42
  end
43
43
 
44
- def last_member_by_creation
45
- order(created_at: :desc).first
44
+ def last_active_member_by_creation
45
+ active.order(created_at: :desc).first
46
46
  end
47
47
 
48
- def find_next_member(source_member)
49
- where('created_at > ?', source_member.created_at)
48
+ def find_next_active_member(source_member)
49
+ active
50
+ .where('created_at > ?', source_member.created_at)
50
51
  .order(created_at: :asc)
51
52
  .first
52
53
  end
53
54
 
54
- def find_previous_member(source_member)
55
- where('created_at < ?', source_member.created_at)
55
+ def find_previous_active_member(source_member)
56
+ active
57
+ .where('created_at < ?', source_member.created_at)
56
58
  .order(created_at: :desc)
57
59
  .first
58
60
  end
@@ -4,6 +4,9 @@ module Webring
4
4
 
5
5
  UID_LENGTH = 16 # 32-character hex string
6
6
 
7
+ # :active?, :disabled? -- :active!, :disabled!
8
+ enum :status, { active: 0, disabled: 1 }
9
+
7
10
  self.filter_attributes += %i[uid]
8
11
 
9
12
  validates :url, presence: true, uniqueness: true
@@ -5,6 +5,7 @@ class CreateWebringMembers < ActiveRecord::Migration<%= "[#{Rails::VERSION::MAJO
5
5
  t.string :name, null: false
6
6
  t.string :url, null: false
7
7
  t.text :description, null: false
8
+ t.integer :status, null: false, default: 0
8
9
 
9
10
  t.index :uid, unique: true
10
11
  t.index :name, unique: true
@@ -4,6 +4,9 @@ module Webring
4
4
 
5
5
  UID_LENGTH = 16 # 32-character hex string
6
6
 
7
+ # :active?, :disabled? -- :active!, :disabled!
8
+ enum :status, { active: 0, disabled: 1 }
9
+
7
10
  self.filter_attributes += %i[uid]
8
11
 
9
12
  validates :url, presence: true, uniqueness: true
@@ -35,7 +35,7 @@ module Webring
35
35
  end
36
36
 
37
37
  def find_member
38
- @member = Webring::Member.find_by(uid: permitted_params[:source_member_uid])
38
+ @member = Webring::Member.active.find_by(uid: permitted_params[:source_member_uid])
39
39
  return if @member
40
40
 
41
41
  render_member_not_found
@@ -43,13 +43,13 @@ module Webring
43
43
 
44
44
  def check_member_exists
45
45
  member_uid = permitted_params[:source_member_uid]
46
- return unless member_uid.present? && !Webring::Member.exists?(uid: member_uid)
46
+ return unless member_uid.present? && !Webring::Member.active.exists?(uid: member_uid)
47
47
 
48
48
  render_member_not_found
49
49
  end
50
50
 
51
51
  def ensure_members_exist
52
- return if Webring::Member.exists?
52
+ return if Webring::Member.active.exists?
53
53
 
54
54
  render plain: 'No members in the webring', status: :not_found
55
55
  end
@@ -57,5 +57,12 @@ module Webring
57
57
  def render_member_not_found
58
58
  render plain: 'Member not found', status: :not_found
59
59
  end
60
+
61
+ def set_cors_headers
62
+ headers['Access-Control-Allow-Origin'] = '*'
63
+ headers['Access-Control-Allow-Methods'] = 'GET, OPTIONS'
64
+ headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept'
65
+ headers['Access-Control-Max-Age'] = '86400'
66
+ end
60
67
  end
61
68
  end
@@ -1,3 +1,3 @@
1
1
  module Webring
2
- VERSION = '1.4.4'.freeze
2
+ VERSION = '1.5.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webring-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.4
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Shkoda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-06-10 00:00:00.000000000 Z
11
+ date: 2025-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails