Module: Wralph::Interfaces::ObjectiveRepository
- Defined in:
- lib/wralph/interfaces/objective_repository.rb
Class Method Summary collapse
- .adapter ⇒ Object
- .class_name_to_snake_case(class_name) ⇒ Object
- .download!(identifier) ⇒ Object
- .load_adapter ⇒ Object
- .load_custom_adapter(class_name) ⇒ Object
- .local_file_path(identifier) ⇒ Object
- .reset_adapter ⇒ Object
- .validate_adapter_interface(klass) ⇒ Object
Class Method Details
.adapter ⇒ Object
21 22 23 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 21 def self.adapter @adapter ||= load_adapter end |
.class_name_to_snake_case(class_name) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 61 def self.class_name_to_snake_case(class_name) # Convert CamelCase to snake_case # Insert underscore before capital letters (except the first one) # Then downcase everything class_name .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .downcase end |
.download!(identifier) ⇒ Object
9 10 11 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 9 def self.download!(identifier) adapter.download!(identifier) end |
.load_adapter ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 25 def self.load_adapter config = Config.load source = config.objective_repository.source case source when 'github_issues' Adapters::ObjectiveRepositories::GithubIssues when 'custom' load_custom_adapter(config.objective_repository.class_name) else raise "Unknown objective_repository source: #{source}" end end |
.load_custom_adapter(class_name) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 39 def self.load_custom_adapter(class_name) raise "class_name is required when source is 'custom'" if class_name.nil? || class_name.empty? # Convert class name to snake_case file path file_name = class_name_to_snake_case(class_name) adapter_file = File.join(Repo.wralph_dir, "#{file_name}.rb") raise "Custom adapter file not found: #{adapter_file}" unless File.exist?(adapter_file) # Load the file load adapter_file # Get the class constant begin klass = Object.const_get(class_name) validate_adapter_interface(klass) klass rescue NameError => e raise "Failed to load custom adapter class '#{class_name}': #{e.message}" end end |
.local_file_path(identifier) ⇒ Object
13 14 15 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 13 def self.local_file_path(identifier) adapter.local_file_path(identifier) end |
.reset_adapter ⇒ Object
17 18 19 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 17 def self.reset_adapter @adapter = nil end |
.validate_adapter_interface(klass) ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/wralph/interfaces/objective_repository.rb', line 71 def self.validate_adapter_interface(klass) required_methods = i[download! local_file_path] missing_methods = required_methods.reject { |method| klass.respond_to?(method) } return if missing_methods.empty? raise "Custom adapter class must implement: #{missing_methods.join(', ')}" end |