Skip to content

Instantly share code, notes, and snippets.

@blaix
Created October 6, 2015 17:08
Show Gist options
  • Save blaix/b99f5ac6f3432dcc6918 to your computer and use it in GitHub Desktop.
Save blaix/b99f5ac6f3432dcc6918 to your computer and use it in GitHub Desktop.
require "liquid"
require "school/great_lesson/page_controller"
require "school/great_lesson/page_repository"
require "school/great_lesson/page_view"
require "school/great_lesson/page_template"
require "school/great_lesson/page_file_db"
require "school/great_lesson/paginator"
require "school/great_lesson/locates_pages_file"
require "school/great_lesson/locates_page_template"
require "school/great_lesson/parses_pages"
require "school/great_lesson/template_engines/erb"
require "school/great_lesson/urls"
module School
module GreatLesson
# Initialize GreatLesson objects with default dependencies.
#
# Example:
#
# Factory.page_controller
# # => #<PageController @repository=#<PageRepository> @view=#<PageView>>
module Factory
def self.page_controller(**kwargs)
kwargs[:repository] ||= page_repository
kwargs[:view] ||= page_view
PageController.new(**kwargs)
end
def self.page_repository(**kwargs)
kwargs[:db] ||= page_file_db
PageRepository.new(**kwargs)
end
def self.page_view(**kwargs)
kwargs[:template] ||= page_template
kwargs[:paginator] ||= paginator
PageView.new(**kwargs)
end
def self.paginator(**kwargs)
kwargs[:urls] ||= urls
Paginator.new(**kwargs)
end
def self.urls
URLs
end
def self.page_template(**kwargs)
kwargs[:locator] ||= locates_page_template
kwargs[:reader] ||= File
kwargs[:engine] ||= erb_template_engine
PageTemplate.new(**kwargs)
end
def self.erb_template_engine
TemplateEngines::ERB.new
end
def self.page_file_db(**kwargs)
kwargs[:locator] ||= locates_pages_file
kwargs[:reader] ||= File
kwargs[:parser] ||= parses_pages
PageFileDb.new(**kwargs)
end
def self.locates_pages_file
LocatesPagesFile.new
end
def self.locates_page_template
LocatesPageTemplate.new
end
def self.parses_pages
ParsesPages.new
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment