Class: SycLink::Designer

Inherits:
Object
  • Object
show all
Includes:
Infrastructure
Defined in:
lib/syclink/designer.rb

Overview

Creates a designer that acts as a proxy between the user and the website. The designer will create a website with the provided title.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Infrastructure

#copy_file_if_missing, #create_directory_if_missing, #html_file, #load_config, #yaml_file

Instance Attribute Details

#websiteObject

The website the designer is working on



16
17
18
# File 'lib/syclink/designer.rb', line 16

def website
  @website
end

Instance Method Details

Adds a link based on the provided arguments to the website



24
25
26
# File 'lib/syclink/designer.rb', line 24

def add_link(url, args = {})
  website.add_link(Link.new(url, args))
end

Reads arguments from a CSV file and creates links accordingly. The links are added to the websie



30
31
32
33
34
35
36
37
# File 'lib/syclink/designer.rb', line 30

def add_links_from_file(file)
  File.foreach(file) do |line|
    url, name, description, tag = line.split(';')
    website.add_link(Link.new(url, { name: name,
                                     description: description,
                                     tag: tag }))
  end
end

#create_website(directory, template_filename) ⇒ Object

Creates the html representation of the website. The website is saved to the directory with websites title and needs an erb-template where the links are integrated to. An example template can be found at templates/syclink.html.erb



88
89
90
91
92
93
# File 'lib/syclink/designer.rb', line 88

def create_website(directory, template_filename)
  template = File.read(template_filename)
  File.open(html_file(directory, website.title), 'w') do |f|
    f.puts website.to_html(template)
  end 
end

#delete_website(directory) ⇒ Object

Deletes the website if it already exists



78
79
80
81
82
# File 'lib/syclink/designer.rb', line 78

def delete_website(directory)
  if File.exists? yaml_file(directory, website.title)
    FileUtils.rm(yaml_file(directory, website.title)) 
  end
end

Finds links based on a search string



45
46
47
# File 'lib/syclink/designer.rb', line 45

def find_links(search)
  website.find_links(search)
end

List links contained in the website and optionally filter on attributes



40
41
42
# File 'lib/syclink/designer.rb', line 40

def list_links(args = {})
  website.list_links(args)
end

#load_website(website) ⇒ Object

Loads a website based on the provided YAML-file and asigns it to the designer to operate on



73
74
75
# File 'lib/syclink/designer.rb', line 73

def load_website(website)
  @website = YAML.load_file(website)
end

#new_website(title = "SYC LINK") ⇒ Object

Creates a new website where designer can operate on



19
20
21
# File 'lib/syclink/designer.rb', line 19

def new_website(title = "SYC LINK")
  @website = Website.new(title)
end

Deletes one or more links from the website. Returns the deleted links. Expects the links provided in an array



57
58
59
60
61
# File 'lib/syclink/designer.rb', line 57

def remove_links(urls)
  urls.map { |url| list_links({ url: url }) }.flatten.compact.each do |link|
    website.remove_link(link)
  end
end

#save_website(directory) ⇒ Object

Saves the website to the specified directory with the downcased name of the website and the extension ‘website’. The website is save as YAML



65
66
67
68
69
# File 'lib/syclink/designer.rb', line 65

def save_website(directory)
  File.open(yaml_file(directory, website.title), 'w') do |f|
    YAML.dump(website, f)
  end
end

Updates a link. The link is identified by the URL. If there is more than one link with the same URL, only the first link is updated



51
52
53
# File 'lib/syclink/designer.rb', line 51

def update_link(url, args)
  website.find_links(url).first.update(args)
end