Commit 0e6a211

mo khan <mo@mokhan.ca>
2026-03-11 20:55:03
refactor: use dependency injection to provide rules
1 parent 316d203
Changed files (2)
lib/elelem/permissions.rb
@@ -8,10 +8,8 @@ module Elelem
       ".elelem/permissions.json"
     ].freeze
 
-    def initialize
-      @rules = LOAD_PATHS.reduce({}) do |rules, path|
-        rules.merge(load_config(File.expand_path(path)))
-      end
+    def initialize(rules: default_rules)
+      @rules = rules
     end
 
     def check(tool_name, args, terminal:)
@@ -41,5 +39,11 @@ module Elelem
 
       true
     end
+
+    def default_rules
+      LOAD_PATHS.reduce({}) do |rules, path|
+        rules.merge(load_config(File.expand_path(path)))
+      end
+    end
   end
 end
spec/elelem/permissions_spec.rb
@@ -14,11 +14,9 @@ RSpec.describe Elelem::Permissions do
     end
 
     context "with deny policy" do
-      it "raises an error" do
-        permissions = described_class.new
-        permissions.instance_variable_set(:@rules, { write: :deny })
-        expect { permissions.check("write", {}, terminal: terminal) }.to raise_error(/Permission denied/)
-      end
+      subject { described_class.new(rules: { write: :deny }) }
+
+      it { expect { subject.check("write", {}, terminal: terminal) }.to raise_error(/Permission denied/) }
     end
 
     context "with ask policy in non-TTY mode" do