formatted_url 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ /pkg
2
+ /tmp
data/.travis.yml ADDED
@@ -0,0 +1,2 @@
1
+ rvm:
2
+ 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'rake'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ url_formatter (0.0.2)
5
+ youtube_id
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ rake (0.9.2.2)
11
+ youtube_id (0.0.3)
12
+
13
+ PLATFORMS
14
+ ruby
15
+
16
+ DEPENDENCIES
17
+ rake
18
+ url_formatter!
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ FormattedURL
2
+ =============
3
+ [![Build Status](https://secure.travis-ci.org/philss/url_formatter.png?branch=master "Build Status")](http://travis-ci.org/philss/url_formatter)
4
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/philss/formatted_url)
5
+
6
+ The easiest way to get formatted URLs.
7
+
8
+ Example:
9
+
10
+ ```ruby
11
+ FormattedURL.url("http://www.youtube.com/watch?v=RchTlF4aKGs", :embed)
12
+ # => "http://youtube.com/embed/RchTlF4aKGs"
13
+ ```
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ task :default => :test
5
+
6
+ desc 'Run tests'
7
+ Rake::TestTask.new(:test) do |t|
8
+ t.libs << 'lib'
9
+ t.libs << 'test'
10
+ t.pattern = 'test/**/*_test.rb'
11
+ t.verbose = true
12
+ end
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "formatted_url"
3
+ s.summary = "Formatted URLs."
4
+ s.files = `git ls-files`.split("\n")
5
+ s.test_files = `git ls-files -- {test}/*`.split("\n")
6
+ s.require_path = ['lib']
7
+ s.version = '0.0.3'
8
+ s.add_dependency('youtube_id')
9
+
10
+ s.author = "Philip Sampaio Silva"
11
+ s.email = "philip.sampaio@gmail.com"
12
+ s.required_ruby_version = '>= 1.9.3'
13
+
14
+ end
@@ -0,0 +1,34 @@
1
+
2
+ module FormattedURL
3
+ module Strategies
4
+ # Default strategy to manage
5
+ # paths. Returns the +path+ by
6
+ # default
7
+ class DefaultURLStrategy
8
+
9
+ # The URL path
10
+ attr_reader :path
11
+
12
+ # Formats +path+ for a given +format+
13
+ def self.url(path, format)
14
+ new(path).send(format)
15
+ end
16
+
17
+ # Receives URL +path+
18
+ def initialize(path)
19
+ @path = path
20
+ end
21
+
22
+ # Returns +path+ by default
23
+ def default
24
+ path
25
+ end
26
+
27
+ # Returns default path when
28
+ # receive unknown message
29
+ def method_missing(*args)
30
+ default
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ require 'youtube_id'
2
+ require File.expand_path('../default_url_strategy', __FILE__)
3
+
4
+ module FormattedURL
5
+ module Strategies
6
+ # Youtube Strategy to work with embed
7
+ # and short formats
8
+ class YoutubeURLStrategy < DefaultURLStrategy
9
+
10
+ # Short path from youtube
11
+ def short
12
+ "http://youtu.be/#{youtube_id}"
13
+ end
14
+
15
+ # Embed format should be
16
+ # used only with iframes
17
+ def embed
18
+ "http://youtube.com/embed/#{youtube_id}"
19
+ end
20
+
21
+ private
22
+
23
+ def youtube_id # :nodoc:
24
+ YoutubeID.from(self.path)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../strategies/default_url_strategy', __FILE__)
2
+ require File.expand_path('../strategies/youtube_url_strategy', __FILE__)
3
+
4
+ module FormattedURL
5
+ # Setting the strategies
6
+ # TODO: Configurable strategies
7
+ STRATEGIES = {
8
+ :youtube => Strategies::YoutubeURLStrategy,
9
+ :default => Strategies::DefaultURLStrategy
10
+ }
11
+ # Returns strategy based on source
12
+ # which is a Symbol
13
+ #
14
+ # Example:
15
+ #
16
+ # FormattedURL.strategy(:youtube)
17
+ # => Strategies::YoutubeURLStrategy
18
+ def self.strategy(source)
19
+ STRATEGIES[source]
20
+ end
21
+
22
+ # Namespace for URL Strategies
23
+ module Strategies
24
+ end
25
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../strategies', __FILE__)
2
+
3
+ module FormattedURL
4
+ # Find URL source
5
+ class URLSourceResolver
6
+ # The URL path
7
+ attr_accessor :path
8
+ # Working format
9
+ attr_reader :format
10
+
11
+ # Receives the +path+ for URL
12
+ # and +format+ to work with
13
+ def initialize(path, format = :default)
14
+ @path = path
15
+ @format = format
16
+ end
17
+
18
+ # Defines url source
19
+ def source
20
+ STRATEGIES.each_key do |key|
21
+ if clean_url.include? key.to_s
22
+ return key
23
+ end
24
+ end
25
+ return :default
26
+ end
27
+
28
+ # Returns the final formatted URL
29
+ def url
30
+ STRATEGIES[source].url(path, format)
31
+ end
32
+
33
+ private
34
+
35
+ # URL without "dot"
36
+ def clean_url
37
+ @path.gsub('.','')
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module FormattedURL
2
+ VERSION = "0.0.2".freeze
3
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../formatted_url/url_source_resolver', __FILE__)
2
+
3
+ # FormattedURL provides an easy way
4
+ # to catch URL in differents formats
5
+ # Working with Youtube URLs, you can get the
6
+ # short, embed and default format
7
+ module FormattedURL
8
+ # Format url acording to it's source
9
+ #
10
+ ## Examples:
11
+ #
12
+ # FormattedURL.url("http://www.youtube.com/watch?v=RchTlF4aKGs", :embed)
13
+ # => "http://youtube.com/embed/RchTlF4aKGs"
14
+ def self.url(path, format = :default)
15
+ URLSourceResolver.new(path, format).url
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ class DefaultURLStrategyTest < Test::Unit::TestCase
4
+ def setup
5
+ @strategy = FormattedURL::Strategies::DefaultURLStrategy
6
+ end
7
+
8
+ def test_default_url_always_return_same_url
9
+ [:default, :short, :embed].each do |format|
10
+ assert_equal(@strategy.url('http://google.com',format), 'http://google.com')
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class DefaultURLTest < Test::Unit::TestCase
4
+ def setup
5
+ @base_url = 'http://google.com'
6
+ @youtube_url = 'http://www.youtube.com/watch?v=bNlNZ2T9EeY'
7
+ end
8
+
9
+ def test_default_url_returns_always_the_same
10
+ assert_equal(FormattedURL.url(@base_url, :default) ,@base_url)
11
+ [:short, :embed, :default].each do |format|
12
+ assert_equal(FormattedURL.url(@base_url, format) ,@base_url)
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.expand_path('../../lib/formatted_url',__FILE__)
@@ -0,0 +1,16 @@
1
+ require 'test_helper'
2
+
3
+ class URLSourceResolverTest < Test::Unit::TestCase
4
+ def setup
5
+ @resolver = FormattedURL::URLSourceResolver.new('http://youtube.com')
6
+ end
7
+
8
+ def test_find_youtube_as_source
9
+ assert_equal(:youtube, @resolver.source)
10
+ end
11
+
12
+ def test_default_source_for_url
13
+ @resolver.path = "http://google.com"
14
+ assert_equal(:default, @resolver.source)
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+
3
+ class URLStrategyTest < Test::Unit::TestCase
4
+ def test_youtube_strategy
5
+ assert_equal(FormattedURL::Strategies::YoutubeURLStrategy, FormattedURL.strategy(:youtube))
6
+ end
7
+
8
+ def test_default_strategy
9
+ assert_equal(FormattedURL::Strategies::DefaultURLStrategy, FormattedURL.strategy(:default))
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class YoutubeURLStrategyTest < Test::Unit::TestCase
4
+ def setup
5
+ @strategy = FormattedURL::Strategies::YoutubeURLStrategy
6
+ @url = 'http://www.youtube.com/watch?v=bNlNZ2T9EeY'
7
+ @url2 = 'http://www.youtube.com/watch?v=XXXdDDASDFw'
8
+ end
9
+
10
+ def test_default_url_returns_the_same
11
+ assert_equal(@url, @strategy.url(@url,:default))
12
+ end
13
+
14
+ def test_short_url
15
+ assert_equal('http://youtu.be/bNlNZ2T9EeY', @strategy.url(@url, :short))
16
+ assert_equal('http://youtu.be/XXXdDDASDFw', @strategy.url(@url2, :short))
17
+ end
18
+
19
+ def test_embed_url
20
+ assert_equal('http://youtube.com/embed/bNlNZ2T9EeY', @strategy.url(@url, :embed))
21
+ end
22
+
23
+ def test_unknown_format_returns_default
24
+ assert_equal(@url, @strategy.url(@url,:other_format))
25
+ end
26
+
27
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: formatted_url
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Philip Sampaio Silva
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: youtube_id
16
+ requirement: &15928500 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *15928500
25
+ description:
26
+ email: philip.sampaio@gmail.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - .gitignore
32
+ - .travis.yml
33
+ - Gemfile
34
+ - Gemfile.lock
35
+ - README.md
36
+ - Rakefile
37
+ - formatted_url.gemspec
38
+ - lib/formatted_url.rb
39
+ - lib/formatted_url/strategies.rb
40
+ - lib/formatted_url/strategies/default_url_strategy.rb
41
+ - lib/formatted_url/strategies/youtube_url_strategy.rb
42
+ - lib/formatted_url/url_source_resolver.rb
43
+ - lib/formatted_url/version.rb
44
+ - test/default_url_strategy_test.rb
45
+ - test/default_url_test.rb
46
+ - test/test_helper.rb
47
+ - test/url_source_resolver_test.rb
48
+ - test/url_strategy_test.rb
49
+ - test/youtube_url_strategy_test.rb
50
+ homepage:
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.9.3
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 1.8.10
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: Formatted URLs.
74
+ test_files: []
75
+ has_rdoc: