Module: DynamicLinks

Defined in:
lib/dynamic_links/redis_config.rb,
lib/dynamic_links.rb,
lib/dynamic_links/engine.rb,
lib/dynamic_links/logger.rb,
lib/dynamic_links/version.rb,
lib/dynamic_links/shortener.rb,
lib/dynamic_links/validator.rb,
lib/dynamic_links/async/locker.rb,
app/models/dynamic_links/client.rb,
lib/dynamic_links/configuration.rb,
lib/dynamic_links/error_classes.rb,
lib/dynamic_links/strategy_factory.rb,
app/jobs/dynamic_links/application_job.rb,
app/jobs/dynamic_links/shorten_url_job.rb,
app/models/dynamic_links/shortened_url.rb,
app/models/dynamic_links/application_record.rb,
app/helpers/dynamic_links/application_helper.rb,
app/mailers/dynamic_links/application_mailer.rb,
app/jobs/dynamic_links/generate_short_links_job.rb,
app/controllers/dynamic_links/redirects_controller.rb,
app/controllers/dynamic_links/application_controller.rb,
lib/dynamic_links/shortening_strategies/md5_strategy.rb,
lib/dynamic_links/shortening_strategies/base_strategy.rb,
lib/dynamic_links/shortening_strategies/mock_strategy.rb,
lib/dynamic_links/shortening_strategies/crc32_strategy.rb,
app/controllers/dynamic_links/v1/short_links_controller.rb,
lib/dynamic_links/shortening_strategies/sha256_strategy.rb,
lib/dynamic_links/shortening_strategies/nano_id_strategy.rb,
lib/generators/dynamic_links/add_kgs_migration_generator.rb,
lib/dynamic_links/shortening_strategies/redis_counter_strategy.rb

Overview

Schema Information

Table name: dynamic_links_shortened_urls

id         :bigint           not null, primary key
client_id  :bigint
url        :string(2083)     not null
short_url  :string(10)       not null
expires_at :datetime
created_at :datetime         not null
updated_at :datetime         not null

Indexes

index_dynamic_links_shortened_urls_on_client_id  (client_id)
index_dynamic_links_shortened_urls_on_short_url  (short_url) UNIQUE

Defined Under Namespace

Modules: ApplicationHelper, Async, Generators, ShorteningStrategies Classes: ApplicationController, ApplicationJob, ApplicationMailer, ApplicationRecord, Client, Configuration, ConfigurationError, Engine, GenerateShortLinksJob, InvalidURIError, Logger, MissingDependency, RedirectsController, RedisConfig, ShortenUrlJob, ShortenedUrl, Shortener, ShorteningFailed, StrategyFactory, Validator

Constant Summary collapse

VERSION =
"0.2.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject



44
45
46
# File 'lib/dynamic_links.rb', line 44

def configuration
  @configuration ||= Configuration.new
end

Class Method Details

.configure {|configuration| ... } ⇒ Object

Yields:



48
49
50
# File 'lib/dynamic_links.rb', line 48

def configure
  yield(configuration)
end

.generate_short_url(original_url, client) ⇒ Object

mimic Firebase Dynamic Links API



65
66
67
68
69
70
71
72
73
# File 'lib/dynamic_links.rb', line 65

def self.generate_short_url(original_url, client)
  short_link = shorten_url(original_url, client)

  {
    shortLink: short_link,
    previewLink: "#{short_link}?preview=true",
    warning: []
  }
end

.resolve_short_url(short_link) ⇒ Object



75
76
77
# File 'lib/dynamic_links.rb', line 75

def self.resolve_short_url(short_link)
  DynamicLinks::ShortenedUrl.find_by(short_url: short_link)&.url
end

.shorten_url(url, client, async: DynamicLinks.configuration.async_processing) ⇒ Object

Raises:



53
54
55
56
57
58
59
60
61
62
# File 'lib/dynamic_links.rb', line 53

def self.shorten_url(url, client, async: DynamicLinks.configuration.async_processing)
  raise InvalidURIError, 'Invalid URL' unless Validator.valid_url?(url)

  shortener = Shortener.new
  if async
    shortener.shorten_async(client, url)
  else
    shortener.shorten(client, url)
  end
end