vkhater-social_stream-linkser 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/.gitignore +14 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +5 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +6 -0
  6. data/Rakefile +26 -0
  7. data/app/assets/javascripts/linkser.js.erb +63 -0
  8. data/app/assets/javascripts/social_stream-linkser.js +2 -0
  9. data/app/assets/stylesheets/linkser.css.scss +68 -0
  10. data/app/assets/stylesheets/social_stream-linkser.css +3 -0
  11. data/app/controllers/links_controller.rb +3 -0
  12. data/app/controllers/linkser_controller.rb +20 -0
  13. data/app/models/link.rb +47 -0
  14. data/app/views/links/_error.html.erb +4 -0
  15. data/app/views/links/_link.html.erb +37 -0
  16. data/app/views/links/_link_preview.html.erb +34 -0
  17. data/app/views/links/create.js.erb +15 -0
  18. data/app/views/links/destroy.js.erb +1 -0
  19. data/app/views/links/show.html.erb +10 -0
  20. data/config/locales/en.yml +14 -0
  21. data/config/locales/es.yml +14 -0
  22. data/config/routes.rb +3 -0
  23. data/db/migrate/20111129100618_create_social_stream_linkser.rb +21 -0
  24. data/db/migrate/20111219122952_add_width_height_to_link.rb +15 -0
  25. data/lib/generators/social_stream/linkser/install_generator.rb +24 -0
  26. data/lib/social_stream-linkser.rb +16 -0
  27. data/lib/social_stream/linkser/engine.rb +7 -0
  28. data/lib/social_stream/linkser/version.rb +5 -0
  29. data/lib/social_stream/migrations/linkser.rb +9 -0
  30. data/social_stream-linkser.gemspec +26 -0
  31. data/spec/dummy/Rakefile +7 -0
  32. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  33. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  34. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  35. data/spec/dummy/config.ru +4 -0
  36. data/spec/dummy/config/application.rb +45 -0
  37. data/spec/dummy/config/boot.rb +10 -0
  38. data/spec/dummy/config/database.yml +22 -0
  39. data/spec/dummy/config/environment.rb +5 -0
  40. data/spec/dummy/config/environments/development.rb +25 -0
  41. data/spec/dummy/config/environments/production.rb +49 -0
  42. data/spec/dummy/config/environments/test.rb +37 -0
  43. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  44. data/spec/dummy/config/initializers/devise.rb +176 -0
  45. data/spec/dummy/config/initializers/inflections.rb +10 -0
  46. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  47. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  48. data/spec/dummy/config/initializers/session_store.rb +8 -0
  49. data/spec/dummy/config/locales/en.yml +5 -0
  50. data/spec/dummy/config/navigation.rb +0 -0
  51. data/spec/dummy/config/relations.yml +39 -0
  52. data/spec/dummy/config/routes.rb +60 -0
  53. data/spec/dummy/db/.gitkeep +0 -0
  54. data/spec/dummy/documents/documents/000/000/001/original.pdf +157 -0
  55. data/spec/dummy/documents/documents/000/000/002/original.pdf +157 -0
  56. data/spec/dummy/documents/documents/000/000/003/original.pdf +157 -0
  57. data/spec/dummy/documents/documents/000/000/004/original.pdf +157 -0
  58. data/spec/dummy/documents/documents/000/000/005/original.pdf +157 -0
  59. data/spec/dummy/documents/documents/000/000/006/original.pdf +157 -0
  60. data/spec/dummy/documents/documents/000/000/007/original.pdf +157 -0
  61. data/spec/dummy/documents/documents/000/000/008/original.pdf +157 -0
  62. data/spec/dummy/documents/documents/000/000/009/original.pdf +157 -0
  63. data/spec/dummy/documents/documents/000/000/010/original.pdf +157 -0
  64. data/spec/dummy/documents/pictures/000/000/011/original.png +0 -0
  65. data/spec/dummy/documents/pictures/000/000/011/thumb.png +0 -0
  66. data/spec/dummy/documents/pictures/000/000/011/thumb0.png +0 -0
  67. data/spec/dummy/documents/pictures/000/000/012/original.png +0 -0
  68. data/spec/dummy/documents/pictures/000/000/012/thumb.png +0 -0
  69. data/spec/dummy/documents/pictures/000/000/012/thumb0.png +0 -0
  70. data/spec/dummy/documents/pictures/000/000/013/original.png +0 -0
  71. data/spec/dummy/documents/pictures/000/000/013/thumb.png +0 -0
  72. data/spec/dummy/documents/pictures/000/000/013/thumb0.png +0 -0
  73. data/spec/dummy/documents/pictures/000/000/014/original.png +0 -0
  74. data/spec/dummy/documents/pictures/000/000/014/thumb.png +0 -0
  75. data/spec/dummy/documents/pictures/000/000/014/thumb0.png +0 -0
  76. data/spec/dummy/documents/pictures/000/000/015/original.png +0 -0
  77. data/spec/dummy/documents/pictures/000/000/015/thumb.png +0 -0
  78. data/spec/dummy/documents/pictures/000/000/015/thumb0.png +0 -0
  79. data/spec/dummy/documents/pictures/000/000/016/original.png +0 -0
  80. data/spec/dummy/documents/pictures/000/000/016/thumb.png +0 -0
  81. data/spec/dummy/documents/pictures/000/000/016/thumb0.png +0 -0
  82. data/spec/dummy/documents/pictures/000/000/017/original.png +0 -0
  83. data/spec/dummy/documents/pictures/000/000/017/thumb.png +0 -0
  84. data/spec/dummy/documents/pictures/000/000/017/thumb0.png +0 -0
  85. data/spec/dummy/documents/pictures/000/000/018/original.png +0 -0
  86. data/spec/dummy/documents/pictures/000/000/018/thumb.png +0 -0
  87. data/spec/dummy/documents/pictures/000/000/018/thumb0.png +0 -0
  88. data/spec/dummy/documents/pictures/000/000/019/original.png +0 -0
  89. data/spec/dummy/documents/pictures/000/000/019/thumb.png +0 -0
  90. data/spec/dummy/documents/pictures/000/000/019/thumb0.png +0 -0
  91. data/spec/dummy/documents/pictures/000/000/020/original.png +0 -0
  92. data/spec/dummy/documents/pictures/000/000/020/thumb.png +0 -0
  93. data/spec/dummy/documents/pictures/000/000/020/thumb0.png +0 -0
  94. data/spec/dummy/public/404.html +26 -0
  95. data/spec/dummy/public/422.html +26 -0
  96. data/spec/dummy/public/500.html +26 -0
  97. data/spec/dummy/public/favicon.ico +0 -0
  98. data/spec/dummy/public/javascripts/application.js +2 -0
  99. data/spec/dummy/public/javascripts/controls.js +965 -0
  100. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  101. data/spec/dummy/public/javascripts/effects.js +1123 -0
  102. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  103. data/spec/dummy/public/javascripts/rails.js +191 -0
  104. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  105. data/spec/dummy/script/rails +6 -0
  106. data/spec/integration/navigation_spec.rb +9 -0
  107. data/spec/socialstream_linkser_spec.rb +7 -0
  108. data/spec/spec_helper.rb +48 -0
  109. data/spec/support/cancan.rb +1 -0
  110. data/spec/support/db.rb +8 -0
  111. data/spec/support/devise.rb +4 -0
  112. data/spec/support/mock.rb +4 -0
  113. data/vendor/assets/javascripts/jquery.jplayer.js +78 -0
  114. data/vendor/assets/stylesheets/jplayer.blue.monday.css +448 -0
  115. data/vendor/assets/stylesheets/jplayer.blue.monday.jpg +0 -0
  116. data/vendor/assets/stylesheets/jplayer.blue.monday.video.play.hover.png +0 -0
  117. data/vendor/assets/stylesheets/jplayer.blue.monday.video.play.png +0 -0
  118. data/vendor/assets/stylesheets/jquery.lightbox.css +101 -0
  119. data/vendor/assets/stylesheets/pbar-ani.gif +0 -0
  120. metadata +242 -0
@@ -0,0 +1,14 @@
1
+ .bundle/
2
+ log/*.log
3
+ pkg/
4
+ spec/dummy/db/*.sqlite3
5
+ spec/dummy/log/*.log
6
+ spec/dummy/tmp/
7
+ *.DS_Store
8
+ Gemfile.lock
9
+ .project
10
+ .idea/*
11
+ app/views/*/.tmp_*
12
+ **.*swp
13
+ .idea
14
+ spec/dummy/db/*sqlite3-journal
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'social_stream-base', :path => '../base'
4
+
5
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright 2011 Universidad Politécnica de Madrid
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,6 @@
1
+ = Social Stream Linkser
2
+
3
+ Social Stream Linkser provides {Linkser}[https://github.com/ging/linkser/] support in
4
+ {Social Stream}[http://social-stream.dit.upm.es/], the core for building social
5
+ network websites.
6
+
@@ -0,0 +1,26 @@
1
+ # encoding: UTF-8
2
+ require 'bundler/gem_tasks'
3
+
4
+ require 'rdoc/task'
5
+
6
+ require 'rspec/core'
7
+ require 'rspec/core/rake_task'
8
+
9
+ RSpec::Core::RakeTask.new(:spec)
10
+
11
+ task :default => :spec
12
+
13
+ Rake::RDocTask.new(:rdoc) do |rdoc|
14
+ rdoc.rdoc_dir = 'rdoc'
15
+ rdoc.title = 'SocialStream Linkser'
16
+ rdoc.options << '--line-numbers' << '--inline-source'
17
+ rdoc.rdoc_files.include('README.rdoc')
18
+ rdoc.rdoc_files.include('lib/**/*.rb')
19
+ end
20
+
21
+ # Modify this gem's tags
22
+ class Bundler::GemHelper
23
+ def version_tag
24
+ "linkser#{version}"
25
+ end
26
+ end
@@ -0,0 +1,63 @@
1
+ var SocialStream = SocialStream || {};
2
+ SocialStream.Linkser = SocialStream.Linkser || {};
3
+ SocialStream.Linkser.initiate = function() {
4
+ $.preloadImages("assets/loading.gif");
5
+ var urlDetect = function() {
6
+ this.currentValue = $("#input_activities").val();
7
+ if(this.lastValue == null)
8
+ this.lastValue = "";
9
+
10
+ var regexp = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/
11
+ if(regexp.test($("#input_activities").val())) {
12
+ $("#link_url").val($("#input_activities").val());
13
+ $("#link_loaded").val(false);
14
+ $("#new_post").attr("action", "/links");
15
+ if(this.currentValue != this.lastValue) {
16
+ $("#link_preview").html($('<img>').attr('src', 'assets/loading.gif').addClass('loading'));
17
+ this.lastValue = this.currentValue;
18
+ var url = this.currentValue;
19
+ var urlDetect = this;
20
+ $.ajax({
21
+ type : "GET",
22
+ url : "/linkser_parse?url=" + url,
23
+ success : function(html) {
24
+ if($("#input_activities").val() == url) {//Only show if input value is still the same
25
+ $("#link_preview").html(html);
26
+ $("#link_loaded").val(true);
27
+ }
28
+ },
29
+ error : function(xhr, ajaxOptions, thrownError) {
30
+ if($("#input_activities").val() == url) {//Only show if input value is still the same
31
+ $("#link_preview").html($('<div>').addClass('loading').html("<%= I18n.t('link.errors.loading') %> " + url));
32
+ }
33
+ }
34
+ });
35
+ }
36
+ $("#link_preview").show();
37
+ } else {
38
+ $("#new_post").attr("action", "/posts");
39
+ $("#link_preview").hide();
40
+ $("#link_preview").html("");
41
+ $("#link_url").val("");
42
+ }
43
+ }
44
+ if($("#new_post").length) {
45
+ $("#input_activities").change(urlDetect).keyup(urlDetect);
46
+ $("#new_post").append($('<input>').attr('type', 'hidden').attr('name', 'link[owner_id]').attr('id', 'link_owner_id').val($("#post_owner_id").val()));
47
+ $("#new_post").append($('<input>').attr('type', 'hidden').attr('name', 'link[url]').attr('id', 'link_url'));
48
+ $("#new_post").append($('<input>').attr('type', 'hidden').attr('name', 'link[loaded]').attr('id', 'link_loaded').val(false));
49
+ $("#new_post").append($('<div>').attr('id', 'link_preview').css('display', 'none'));
50
+ }
51
+ }
52
+
53
+ SocialStream.Linkser.openCallback = function(id,url,w,h){
54
+ var height='353';
55
+ if(w>0 && h>0) {
56
+ height=470*h/w;
57
+ }
58
+ $("#" + id).html($('<iframe>').attr('src',url).attr('width','470').attr('height',height));
59
+ }
60
+
61
+ $(function(){
62
+ SocialStream.Linkser.initiate();
63
+ });
@@ -0,0 +1,2 @@
1
+ //= require_tree .
2
+
@@ -0,0 +1,68 @@
1
+ @import "colors";
2
+
3
+ #link_preview {
4
+ width: 510px;
5
+ height: 120px;
6
+ border: 1px solid $auxiliar-color;
7
+ margin: 5px auto;
8
+ }
9
+
10
+ #link_preview img.loading{
11
+ margin: auto;
12
+ margin-top: 40px;
13
+ }
14
+ #link_preview div.loading{
15
+ margin: auto;
16
+ margin-top: 50px;
17
+ }
18
+ #link_preview img.link_error{
19
+ margin: auto;
20
+ margin-top: 40px;
21
+ }
22
+ #link_preview div.link_error{
23
+ margin: auto;
24
+ margin-top: 5px;
25
+ }
26
+ .link {
27
+ position: relative;
28
+ padding: 10px;
29
+ }
30
+ .link .thumbnail, .link .thumbnail img{
31
+ position: relative;
32
+ float: left;
33
+ max-height: 100px;
34
+ max-width: 120px;
35
+ margin-right:10px;
36
+ }
37
+ .link .thumbnail img.play_button{
38
+ position: absolute;
39
+ bottom: 2px;
40
+ left: 2px;
41
+ opacity:0.6;
42
+ filter:alpha(opacity=60); /* For IE8 and earlier */
43
+ }
44
+ .link .thumbnail img.play_button:hover{
45
+ opacity:0.8;
46
+ filter:alpha(opacity=80); /* For IE8 and earlier */
47
+ }
48
+ .link .info{
49
+ float: left;
50
+ width: 360px;
51
+ text-align: left;
52
+ }
53
+ .activity_objects .link .info{
54
+ width: 320px;
55
+ }
56
+ .link .info .title{
57
+ font-weight: bold;
58
+ margin-bottom: 3px;
59
+ }
60
+ .link .info .url{
61
+ text-decoration: underline;
62
+ margin-bottom: 5px;
63
+ }
64
+ .link .info .description{
65
+ }
66
+ .link iframe{
67
+ border: 0;
68
+ }
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require_tree .
3
+ */
@@ -0,0 +1,3 @@
1
+ class LinksController < ApplicationController
2
+ include SocialStream::Controllers::Objects
3
+ end
@@ -0,0 +1,20 @@
1
+ class LinkserController < ApplicationController
2
+ def index
3
+ if params[:url].present?
4
+ url = params[:url]
5
+ begin
6
+ o = Linkser.parse url, {:max_images => 1}
7
+ if o.is_a? Linkser::Objects::HTML
8
+ link = Link.new
9
+ link.fill o
10
+ render :partial => "links/link_preview", :locals => {:link => link}
11
+ return
12
+ end
13
+ rescue
14
+ render :partial => "links/error", :locals => {:message => I18n.t("link.errors.loading") + " " + url.to_s}
15
+ return
16
+ end
17
+ end
18
+ render :partial => "links/error", :locals => {:message => I18n.t("link.errors.only_webs")}
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ class Link < ActiveRecord::Base
2
+ include SocialStream::Models::Object
3
+
4
+ validates_presence_of :url
5
+
6
+ attr_accessor :loaded
7
+
8
+ before_create :check_loaded
9
+
10
+ define_index do
11
+ indexes title
12
+ indexes description
13
+ indexes url
14
+
15
+ has created_at
16
+ end
17
+
18
+ def fill linkser_object
19
+ self.title = linkser_object.title if linkser_object.title
20
+ self.description = linkser_object.description if linkser_object.description
21
+ self.url = linkser_object.last_url
22
+ r = linkser_object.resource
23
+ if r and r.type and r.url
24
+ self.callback_url = r.url
25
+ end
26
+ self.width = r.width if r and r.width
27
+ self.height = r.height if r and r.height
28
+ if linkser_object.ogp and linkser_object.ogp.image
29
+ self.image = linkser_object.ogp.image
30
+ elsif linkser_object.images and linkser_object.images.first
31
+ self.image = linkser_object.images.first.url
32
+ end
33
+ end
34
+
35
+ def check_loaded
36
+ if !self.loaded.eql? "true" and self.title.nil? and self.description.nil? and self.image.nil?
37
+ begin
38
+ o = Linkser.parse self.url, {:max_images => 1}
39
+ if o.is_a? Linkser::Objects::HTML
40
+ self.fill o
41
+ end
42
+ rescue
43
+ end
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,4 @@
1
+ <%= image_tag "btn/error.png", :class => "link_error" %>
2
+ <div class="link_error">
3
+ <%= message %>
4
+ </div>
@@ -0,0 +1,37 @@
1
+ <%= div_for link, :class => 'content_size' do %>
2
+ <% if link.image %>
3
+ <div class="thumbnail">
4
+ <% if link.callback_url %>
5
+ <%= link_to image_tag(link.image),"javascript:void(0)" %>
6
+ <%= link_to image_tag("btn/btn_play.png", :class => "play_button"),"javascript:void(0)" %>
7
+ <%= javascript_tag do %>
8
+ $("#link_<%= link.id.to_s %> img").each(function(){
9
+ $(this).click(function(){
10
+ SocialStream.Linkser.openCallback("link_<%= link.id.to_s %>", "<%= link.callback_url %>", "<%= link.width %>", "<%= link.height %>");
11
+ });
12
+ });
13
+
14
+ <% end %>
15
+ <% else %>
16
+ <%= link_to image_tag(link.image),link.url, :target => "_blank" %>
17
+ <% end %>
18
+ </div>
19
+ <% end %>
20
+ <div class="info">
21
+ <% if link.title %>
22
+ <div class="title">
23
+ <%= link.title %>
24
+ </div>
25
+ <% end %>
26
+ <div class="url">
27
+ <%= link_to link.url, link.url, :target => "_blank" %>
28
+ </div>
29
+ <% if link.description %>
30
+ <div class="description">
31
+ <%= auto_link(link.description) %>
32
+ </div>
33
+ <% end %>
34
+ </div>
35
+ <% end %>
36
+
37
+ <br class="clearfloat">
@@ -0,0 +1,34 @@
1
+ <%= div_for link, :class => 'content_size' do %>
2
+ <% if link.image %>
3
+ <div class="thumbnail">
4
+ <%= image_tag(link.image)%>
5
+ <%= hidden_field_tag "link[image]", link.image %>
6
+ </div>
7
+ <% end %>
8
+ <div class="info">
9
+ <% if link.title %>
10
+ <div class="title">
11
+ <%= link.title %>
12
+ <%= hidden_field_tag "link[title]", link.title %>
13
+ </div>
14
+ <% end %>
15
+ <div class="url">
16
+ <%= auto_link(link.url) %>
17
+ </div>
18
+ <% if link.description %>
19
+ <div class="description">
20
+ <%= auto_link(link.description) %>
21
+ <%= hidden_field_tag "link[description]", link.description %>
22
+ </div>
23
+ <% end %>
24
+ <% if link.callback_url %>
25
+ <%= hidden_field_tag "link[callback_url]", link.callback_url %>
26
+ <% end %>
27
+ <% if link.width %>
28
+ <%= hidden_field_tag "link[width]", link.width %>
29
+ <% end %>
30
+ <% if link.height %>
31
+ <%= hidden_field_tag "link[height]", link.height %>
32
+ <% end %>
33
+ </div>
34
+ <% end %>
@@ -0,0 +1,15 @@
1
+ //Display the new post
2
+ $("#wall").prepend("<%= escape_javascript(render @link.post_activity) %>");
3
+
4
+ setActivityPrivacyTooltips("<%= escape_javascript dom_id(@link.post_activity) %>");
5
+
6
+ unblock_all_forms();
7
+
8
+ $("#link_preview").hide();
9
+ $("#link_preview").html("");
10
+ $("#link_loaded").val(false);
11
+ $("#link_preview").html("");
12
+ $("#link_url").val("");
13
+
14
+
15
+
@@ -0,0 +1 @@
1
+ <%=render(:partial => 'objects/destroy') %>
@@ -0,0 +1,10 @@
1
+ <% content_for :javascript do %>
2
+ var message_hash = window.location.hash.match(/^.*activity_(\d+).*$/);
3
+ if (message_hash && message_hash > 0){
4
+ $.scrollTo('#activity_' + message_hash[1] ,1500,{axis:'y'});
5
+ }
6
+ <% end %>
7
+
8
+ <%= render :partial => 'objects/show',
9
+ :locals => { :object => @link } %>
10
+
@@ -0,0 +1,14 @@
1
+ en:
2
+ linkser:
3
+ title: "Linkser"
4
+ link:
5
+ confirm_delete: "Delete link?"
6
+ errors:
7
+ loading: "Error loading"
8
+ only_webs: "Only webpages are supported"
9
+ form:
10
+ title: "Link"
11
+ input: "Write the web address"
12
+ name: "link"
13
+ one: "a link"
14
+ title: "Links"
@@ -0,0 +1,14 @@
1
+ es:
2
+ linkser:
3
+ title: "Linkser"
4
+ link:
5
+ confirm_delete: "¿Borrar enlace?"
6
+ errors:
7
+ loading: "Error cargando"
8
+ only_webs: "Solo puedes compartir págnas web"
9
+ form:
10
+ title: "Enlace"
11
+ input: "Escribe una dirección"
12
+ name: "enlace"
13
+ one: "una enlace"
14
+ title: "Enlaces"
@@ -0,0 +1,3 @@
1
+ Rails.application.routes.draw do
2
+ match 'linkser_parse' => 'linkser#index', :as => :linkser_parse
3
+ end