lib/abak-flow/repository.rb in abak-flow-1.0.10 vs lib/abak-flow/repository.rb in abak-flow-1.1.0
- old
+ new
@@ -1,65 +1,50 @@
# coding: utf-8
-require "i18n"
-require "ruler"
-require "forwardable"
module Abak::Flow
class Repository
- include Ruler
extend Forwardable
- REMOTES = [:origin, :upstream].freeze
+ REMOTES = %w{origin upstream}.map(&:freeze)
- def_delegators :@manager, :git
+ def initialize
+ @_errors = Hash.new
- attr_reader :errors
-
- def initialize(manager)
- @manager = manager
- @errors = []
-
- configure!
+ create_public_instance_methods
end
- def ready?
- @errors = []
+ def valid?
+ @_errors = Hash.new
+ @_errors["origin"] = ['not_set'] if origin.nil?
+ @_errors["upstream"] = ['not_set'] if upstream.nil?
- multi_ruleset do
- fact(:origin_not_setup) { origin.nil? }
- fact(:upstream_not_setup) { upstream.nil? }
-
- rule([:origin_not_setup]) { @errors << I18n.t("repository.errors.origin_not_setup") }
- rule([:upstream_not_setup]) { @errors << I18n.t("repository.errors.upstream_not_setup") }
- end
-
- @errors.empty? ? true : false
+ @_errors.empty?
end
- def display_name
- I18n.t("repository.name")
+ def errors
+ ErrorsPresenter.new(self, @_errors)
end
private
- def configure!
+
+ def create_public_instance_methods
remotes = Hash[fetch_remotes_from_git]
+
REMOTES.each do |name|
define_singleton_method(name) { remotes[name] }
end
end
def fetch_remotes_from_git
- git.remotes.
- select { |remote| REMOTES.include?(remote.name.to_sym) }.
- map { |remote| create_remote(remote) }.
- compact
+ Manager.git.remotes.select { |remote| REMOTES.include?(remote.name) }
+ .map { |remote| create_remote(remote) }.compact
end
def create_remote(remote)
matches = /.+.github\.com[\:|\/](?<owner>.+)\/(?<project>.+).git/.match(remote.url)
if !matches.nil? && matches.captures.length == 2
- [remote.name.to_sym, Remote.new(matches[:owner], matches[:project], remote)]
+ [remote.name, Remote.new(matches[:owner], matches[:project], remote)]
end
end
class Remote < Struct.new(:owner, :project, :repo)
def to_s