Skip to content
Snippets Groups Projects
Commit 8f3b6591 authored by Douglas Barbosa Alexandre's avatar Douglas Barbosa Alexandre
Browse files

Extract base mapper

parent cb8e9bb6
No related branches found
No related tags found
No related merge requests found
module Gitlab
module Import
module Github
module Mapper
class Base
def initialize(project, client)
@project = project
@client = client
end
def each
return enum_for(:each) unless block_given?
method = klass.to_s.underscore.pluralize
client.public_send(method).each do |raw|
yield(klass.new(attributes_for(raw)))
end
end
private
attr_reader :project, :client
def attributes_for
{}
end
def klass
raise NotImplementedError,
"#{self.class} does not implement #{__method__}"
end
end
end
end
end
end
Loading
Loading
@@ -2,29 +2,20 @@ module Gitlab
module Import
module Github
module Mapper
class Label
def initialize(project, client)
@project = project
@client = client
end
def each
return enum_for(:each) unless block_given?
client.labels.each do |raw|
label = ::Label.new(
project: project,
title: raw.name,
color: "##{raw.color}"
)
class Label < Base
private
 
yield(label)
end
def attributes_for(raw)
{
project: project,
title: raw.name,
color: "##{raw.color}"
}
end
 
private
attr_reader :project, :client
def klass
::Label
end
end
end
end
Loading
Loading
Loading
Loading
@@ -2,34 +2,25 @@ module Gitlab
module Import
module Github
module Mapper
class Milestone
def initialize(project, client)
@project = project
@client = client
end
def each
return enum_for(:each) unless block_given?
client.milestones.each do |raw|
milestone = ::Milestone.new(
iid: raw.number,
project: project,
title: raw.title,
description: raw.description,
due_date: raw.due_on,
state: raw.state == 'closed' ? 'closed' : 'active',
created_at: raw.created_at,
updated_at: raw.state == 'closed' ? raw.closed_at : raw.updated_at
)
class Milestone < Base
private
 
yield(milestone)
end
def attributes_for(raw)
{
iid: raw.number,
project: project,
title: raw.title,
description: raw.description,
due_date: raw.due_on,
state: raw.state == 'closed' ? 'closed' : 'active',
created_at: raw.created_at,
updated_at: raw.state == 'closed' ? raw.closed_at : raw.updated_at
}
end
 
private
attr_reader :project, :client
def klass
::Milestone
end
end
end
end
Loading
Loading
require 'spec_helper'
describe Gitlab::Import::Github::Mapper::Base, lib: true do
let(:project) { double }
let(:client) { double }
subject(:mapper) do
klass = Class.new(described_class)
klass.new(project, client)
end
describe '#each' do
context 'when klass is not implemented' do
it 'raises NotImplementedError' do
expect { mapper.each(&:to_s) }.to raise_error(NotImplementedError)
end
end
end
end
require 'spec_helper'
 
describe Gitlab::Import::Github::Mapper::Label, lib: true do
let(:project) { create(:empty_project) }
let(:project) { build(:empty_project) }
let(:client) { double(labels: response) }
 
let(:response) do
Loading
Loading
require 'spec_helper'
 
describe Gitlab::Import::Github::Mapper::Milestone, lib: true do
let(:project) { create(:empty_project) }
let(:project) { build(:empty_project) }
let(:client) { double(milestones: response) }
 
let(:response) do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment