sharing_tags 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/sharing_tags/init.js.coffee.erb +10 -0
- data/app/assets/javascripts/sharing_tags/share/base.js.coffee +38 -0
- data/app/assets/javascripts/sharing_tags/share/facebook.coffee +9 -44
- data/app/assets/javascripts/sharing_tags/share/vkontakte.js.coffee +13 -0
- data/app/assets/javascripts/sharing_tags/share.js.coffee +11 -8
- data/app/assets/javascripts/sharing_tags.js.coffee +2 -0
- data/app/views/sharing_tags/button/_line.html.slim +2 -0
- data/app/views/sharing_tags/meta/_open_graphs.html.slim +4 -0
- data/lib/generators/sharing_tags/install/install_generator.rb +45 -28
- data/lib/sharing_tags/action_view/asset_helper.rb +1 -1
- data/lib/sharing_tags/action_view/button_helper.rb +9 -2
- data/lib/sharing_tags/action_view/meta_helper.rb +1 -1
- data/lib/sharing_tags/context.rb +6 -0
- data/lib/sharing_tags/network.rb +13 -3
- data/lib/sharing_tags/version.rb +1 -1
- data/lib/sharing_tags.rb +1 -1
- data/sharing_tags.gemspec +1 -1
- data/spec/controllers/main_controller_spec.rb +2 -2
- data/spec/generators/install_generator_spec.rb +95 -13
- data/spec/helpers/asset_helper_spec.rb +1 -1
- data/spec/javascripts/fixtures/facebook.json +9 -2
- data/spec/javascripts/fixtures/vkontakte.json +8 -0
- data/spec/javascripts/sharing_tags/share/facebook_share_spec.coffee +25 -0
- data/spec/javascripts/sharing_tags/share/vkontakte_share_spec.coffee +31 -0
- data/spec/support/generator_support.rb +13 -0
- data/spec/views/meta_tags/facebook_meta_tags_erb_spec.rb +2 -0
- metadata +12 -5
- data/app/assets/javascripts/sharing_tags/init.js.coffee +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22ce4f33d58d62d83309ce208af04cb753687b29
|
4
|
+
data.tar.gz: 58c19bba59871eb7a2f5df143087d1e551ba4b1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74976814d96090a576b36759c90e90cedf0ae4250d11e22ec9d76fe89044133d4ff5a32449ffbfa2b72778bc8adda31a4ec0e8181a159a8b5eb9f0128fc34f26
|
7
|
+
data.tar.gz: d70c620e3a0169860137e5ce2d65050572439d7a46b271e236ead72aaf5644c5d2449a690fb34aa35676316bec960504f70f7675dd0ce2e47de18de2340628fa
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class @SharingTags.BaseShare
|
2
|
+
|
3
|
+
url: null
|
4
|
+
title: null
|
5
|
+
description: null
|
6
|
+
|
7
|
+
constructor: ({@url, @title, @description})->
|
8
|
+
@_assert_vars 'url'
|
9
|
+
|
10
|
+
_open_popup: (api_url, params)->
|
11
|
+
share_url = if params then "#{api_url}?#{$.param(params)}" else api_url
|
12
|
+
share_window = window.open share_url, 'Sharing', 'width=740,height=440'
|
13
|
+
|
14
|
+
clearInterval(@interval)
|
15
|
+
iteration = 0
|
16
|
+
@interval = setInterval((=>
|
17
|
+
iteration++
|
18
|
+
if @_checkSharing(share_url, share_window, iteration)
|
19
|
+
clearInterval @interval
|
20
|
+
jQuery("body").trigger("sharing_tags.shared") if jQuery
|
21
|
+
), 500)
|
22
|
+
|
23
|
+
_checkSharing: (share_url, share_window, iteration)=>
|
24
|
+
# console.log("check desktop sharing", share_url, share_window, iteration)
|
25
|
+
share_window?.closed || iteration >= 15
|
26
|
+
|
27
|
+
_after_callback: =>
|
28
|
+
jQuery?("body").trigger("sharing_tags.shared")
|
29
|
+
|
30
|
+
_assert_vars: (vars...)->
|
31
|
+
for var_name in vars
|
32
|
+
if ! @[var_name]
|
33
|
+
arguments_list = ''
|
34
|
+
arguments_list += " #{var_name}: '#{@[var_name]}'" for arg, val in vars
|
35
|
+
throw new SharingTags.Error("Error could not initialize sharing class, with params: #{arguments_list}")
|
36
|
+
|
37
|
+
_user_agent: ->
|
38
|
+
window.navigator?.userAgent
|
@@ -1,39 +1,3 @@
|
|
1
|
-
class @SharingTags.BaseShare
|
2
|
-
|
3
|
-
url: null
|
4
|
-
title: null
|
5
|
-
description: null
|
6
|
-
|
7
|
-
constructor: ({@url, @title, @description})->
|
8
|
-
@_assert_vars 'url'
|
9
|
-
|
10
|
-
_open_popup: (api_url, params)->
|
11
|
-
share_url = if params then "#{api_url}?#{$.param(params)}" else api_url
|
12
|
-
share_window = window.open share_url, 'Sharing', 'width=740,height=440'
|
13
|
-
|
14
|
-
clearInterval(@interval)
|
15
|
-
iteration = 0
|
16
|
-
@interval = setInterval((=>
|
17
|
-
iteration++
|
18
|
-
if @_checkSharing(share_url, share_window, iteration)
|
19
|
-
clearInterval @interval
|
20
|
-
jQuery("body").trigger("sharing_tags.shared") if jQuery
|
21
|
-
), 500)
|
22
|
-
|
23
|
-
_checkSharing: (share_url, share_window, iteration)=>
|
24
|
-
# console.log("check desktop sharing", share_url, share_window, iteration)
|
25
|
-
share_window?.closed || iteration >= 15
|
26
|
-
|
27
|
-
_after_callback: =>
|
28
|
-
jQuery?("body").trigger("sharing_tags.shared")
|
29
|
-
|
30
|
-
_assert_vars: (vars...)->
|
31
|
-
for var_name in vars
|
32
|
-
if ! @[var_name]
|
33
|
-
arguments_list = ''
|
34
|
-
arguments_list += " #{var_name}: '#{@[var_name]}'" for arg, val in vars
|
35
|
-
throw new SharingTags.Error("Error could not initialize sharing class, with params: #{arguments_list}")
|
36
|
-
|
37
1
|
class @SharingTags.FacebookShare extends @SharingTags.BaseShare
|
38
2
|
|
39
3
|
# available providers: sharer, fb_ui, dialog
|
@@ -44,7 +8,7 @@ class @SharingTags.FacebookShare extends @SharingTags.BaseShare
|
|
44
8
|
provider: null
|
45
9
|
|
46
10
|
constructor: ({@app_id, @return_url, @provider})->
|
47
|
-
@provider = @
|
11
|
+
@provider = @detect_provider() if !@provider
|
48
12
|
|
49
13
|
# todo: throw error for invalid provider
|
50
14
|
@constructor.init() if @provider is 'fb_ui' and not FB?
|
@@ -83,10 +47,11 @@ class @SharingTags.FacebookShare extends @SharingTags.BaseShare
|
|
83
47
|
@_open_popup("http://www.facebook.com/dialog/share", href: @url, redirect_uri: @return_url, app_id: @app_id, display: display)
|
84
48
|
|
85
49
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
50
|
+
detect_provider: ->
|
51
|
+
if @_user_agent().match('CriOS')
|
52
|
+
"sharer"
|
53
|
+
else if @app_id
|
54
|
+
if @return_url then "dialog"
|
55
|
+
else "fb_ui"
|
56
|
+
else
|
57
|
+
"sharer"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class @SharingTags.VkontakteShare extends @SharingTags.BaseShare
|
2
|
+
|
3
|
+
constructor: ({@url, @title, @description, @image})->
|
4
|
+
super
|
5
|
+
|
6
|
+
share: ->
|
7
|
+
@_open_popup(
|
8
|
+
"http://vk.com/share.php",
|
9
|
+
url: @url,
|
10
|
+
title: @title,
|
11
|
+
description: @description,
|
12
|
+
image: @image
|
13
|
+
)
|
@@ -9,6 +9,11 @@ class @SharingTags
|
|
9
9
|
|
10
10
|
class @Share
|
11
11
|
|
12
|
+
@line: ({url}, callback) ->
|
13
|
+
url = 'http://www.jetradar.co.th/promo/hotel?lang=th'
|
14
|
+
share_url = "http://line.me/R/msg/text/?#{encodeURIComponent(url)}"
|
15
|
+
@_share(null, force_url: share_url, callback)
|
16
|
+
|
12
17
|
@facebook: ({url, app_id}, callback) ->
|
13
18
|
if app_id
|
14
19
|
social_share = new SharingTags.FacebookShare url: url, app_id: app_id
|
@@ -20,13 +25,8 @@ class @SharingTags
|
|
20
25
|
@_share("http://twitter.com/intent/tweet", text: message, url: url, callback)
|
21
26
|
|
22
27
|
@vkontakte: ({title, url, message, image}, callback) ->
|
23
|
-
|
24
|
-
|
25
|
-
title: title,
|
26
|
-
description: message,
|
27
|
-
image: image,
|
28
|
-
callback
|
29
|
-
)
|
28
|
+
social_share = new SharingTags.VkontakteShare url: url, title: title, description: message, image: image
|
29
|
+
social_share.share()
|
30
30
|
|
31
31
|
@google: ({url}, callback) ->
|
32
32
|
@_share("https://plus.google.com/share", url: url, callback)
|
@@ -45,7 +45,10 @@ class @SharingTags
|
|
45
45
|
)
|
46
46
|
|
47
47
|
@_share: (api_url, params, callback) ->
|
48
|
-
share_url = if params
|
48
|
+
share_url = if params.force_url
|
49
|
+
params.force_url
|
50
|
+
else
|
51
|
+
if params then "#{api_url}?#{$.param(params)}" else api_url
|
49
52
|
share_window = window.open share_url, 'Sharing', 'width=740,height=440'
|
50
53
|
|
51
54
|
clearInterval(@interval)
|
@@ -19,3 +19,7 @@ meta property="og:type" content="website"
|
|
19
19
|
- if meta.image_size
|
20
20
|
meta property="og:image:width" content=meta.image_size.first
|
21
21
|
meta property="og:image:height" content=meta.image_size.last
|
22
|
+
|
23
|
+
- if meta.app_id
|
24
|
+
meta property="fb:app_id" content=meta.app_id
|
25
|
+
|
@@ -15,7 +15,6 @@ module SharingTags
|
|
15
15
|
desc: "Copy links partial"
|
16
16
|
|
17
17
|
def copy_initializer_file
|
18
|
-
|
19
18
|
if File.exists?("config/initializers/sharing_tags.rb")
|
20
19
|
say_skipped("create initializer sharing_tags.rb")
|
21
20
|
else
|
@@ -25,44 +24,47 @@ module SharingTags
|
|
25
24
|
|
26
25
|
def add_javascripts
|
27
26
|
source_file = "app/assets/javascripts/application.js"
|
28
|
-
|
29
|
-
|
30
|
-
# todo: move to method
|
31
|
-
if File.exists? source_file
|
32
|
-
original_js = File.binread(source_file)
|
33
|
-
|
34
|
-
update_application_js = ->(source) do
|
35
|
-
if original_js.include?(source)
|
36
|
-
skip_js = true
|
37
|
-
else
|
38
|
-
insert_into_file source_file, "\n//= require '#{source}'", :after => %r{\Z}
|
39
|
-
end
|
40
|
-
end
|
27
|
+
match_string = "sharing_tags"
|
41
28
|
|
42
|
-
|
43
|
-
|
44
|
-
else
|
45
|
-
skip_js = true
|
29
|
+
insert_into_file_if source_file, match_string, after: %r{\z} do
|
30
|
+
"\n//= require #{match_string}"
|
46
31
|
end
|
47
|
-
|
48
|
-
say_skipped("insert into #{source_file}") if skip_js
|
49
32
|
end
|
50
33
|
|
51
34
|
def add_styles
|
52
35
|
source_file = "app/assets/stylesheets/application.css"
|
36
|
+
match_string = "sharing_tags"
|
53
37
|
|
54
|
-
|
55
|
-
|
56
|
-
"\n *= require 'sharing_tags'\n\n"
|
57
|
-
end
|
58
|
-
else
|
59
|
-
say_skipped("insert into #{source_file}")
|
38
|
+
insert_into_file_if source_file, match_string, before: "*/" do
|
39
|
+
"*= require #{match_string}\n "
|
60
40
|
end
|
61
41
|
end
|
62
42
|
|
63
43
|
def add_layout
|
64
|
-
|
65
|
-
|
44
|
+
## slim
|
45
|
+
source_file = "app/views/layouts/application.html.slim"
|
46
|
+
render_meta_tags = "render_sharing_tags"
|
47
|
+
buttons_tags = "sharing_tags_buttons"
|
48
|
+
|
49
|
+
insert_into_file_if(source_file, render_meta_tags, before: "body") do
|
50
|
+
" \n = #{render_meta_tags}\n\n "
|
51
|
+
end
|
52
|
+
|
53
|
+
insert_into_file_if(source_file, buttons_tags, after: "body") do
|
54
|
+
"\n = #{buttons_tags}\n"
|
55
|
+
end
|
56
|
+
|
57
|
+
## erb
|
58
|
+
source_file = "app/views/layouts/application.html.erb"
|
59
|
+
insert_into_file_if(source_file, render_meta_tags, before: "</head>") do
|
60
|
+
" <%= #{render_meta_tags} %>\n"
|
61
|
+
end
|
62
|
+
|
63
|
+
insert_into_file_if(source_file, buttons_tags, after: "<body>") do
|
64
|
+
"\n <%= #{buttons_tags} %>\n"
|
65
|
+
end
|
66
|
+
|
67
|
+
## todo: haml
|
66
68
|
end
|
67
69
|
|
68
70
|
def display_post_install
|
@@ -74,6 +76,21 @@ module SharingTags
|
|
74
76
|
def say_skipped(message)
|
75
77
|
say_status("skipped", message, :yellow)
|
76
78
|
end
|
79
|
+
|
80
|
+
def insert_into_file_if(source_file, find_string, **insert_into_file_options, &insert_into_file_block)
|
81
|
+
source_file_path = File.expand_path(source_file, destination_root)
|
82
|
+
|
83
|
+
if File.exists? source_file_path
|
84
|
+
source_content = File.binread(source_file_path)
|
85
|
+
if not source_content.include? find_string
|
86
|
+
insert_into_file source_file, insert_into_file_options, &insert_into_file_block
|
87
|
+
else
|
88
|
+
say_skipped("insert #{find_string} into #{source_file}")
|
89
|
+
end
|
90
|
+
else
|
91
|
+
# say_skipped("not found #{source_file}")
|
92
|
+
end
|
93
|
+
end
|
77
94
|
end
|
78
95
|
end
|
79
96
|
end
|
@@ -3,8 +3,11 @@ module SharingTags::ActionView::ButtonHelper
|
|
3
3
|
def sharing_tags_buttons(*networks)
|
4
4
|
options = networks.extract_options!
|
5
5
|
networks = SharingTags::Network.lists if networks.empty?
|
6
|
-
|
7
|
-
|
6
|
+
|
7
|
+
# switching context
|
8
|
+
SharingTags.config.switch_context(*options[:context]) if options[:context].present?
|
9
|
+
|
10
|
+
render template: "sharing_tags/buttons.html.slim", locals: {networks: networks, options: options}
|
8
11
|
end
|
9
12
|
|
10
13
|
def link_to_facebook_share(name_or_options = nil, &block)
|
@@ -15,6 +18,10 @@ module SharingTags::ActionView::ButtonHelper
|
|
15
18
|
share_link_to name_or_options, :vkontakte, [:title, :description, :image], &block
|
16
19
|
end
|
17
20
|
|
21
|
+
def link_to_line_share(name_or_options = nil, &block)
|
22
|
+
share_link_to name_or_options, :line, [], &block
|
23
|
+
end
|
24
|
+
|
18
25
|
def link_to_google_share(name_or_options = nil, &block)
|
19
26
|
share_link_to name_or_options, :google, [], &block
|
20
27
|
end
|
data/lib/sharing_tags/context.rb
CHANGED
@@ -42,6 +42,12 @@ module SharingTags
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
def line(&block)
|
46
|
+
(@networks[:line] ||= Network.new(:line, self)).tap do |line|
|
47
|
+
line.instance_exec(&block) if block_given?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
45
51
|
def odnoklassniki(&block)
|
46
52
|
(@networks[:odnoklassniki] ||= Network.new(:odnoklassniki, self)).tap do |vkontakte|
|
47
53
|
vkontakte.instance_exec(&block) if block_given?
|
data/lib/sharing_tags/network.rb
CHANGED
@@ -6,9 +6,10 @@ module SharingTags
|
|
6
6
|
class Error < StandardError
|
7
7
|
end
|
8
8
|
|
9
|
-
NETWORKS = %i( facebook google twitter vkontakte odnoklassniki )
|
9
|
+
NETWORKS = %i( facebook google twitter vkontakte odnoklassniki line)
|
10
10
|
|
11
|
-
ATTRIBUTES = %i( share_url title description
|
11
|
+
ATTRIBUTES = %i( share_url title description page_url share_url_params link_params
|
12
|
+
image_url image digested_image digested_image_url )
|
12
13
|
|
13
14
|
attr_reader :name, :attributes
|
14
15
|
|
@@ -51,7 +52,7 @@ module SharingTags
|
|
51
52
|
new_image, size, content_type = arguments
|
52
53
|
|
53
54
|
if options[:digested] == false && !block_given?
|
54
|
-
block =
|
55
|
+
block = proc { without_digest_asset_url(new_image) }
|
55
56
|
end
|
56
57
|
|
57
58
|
# todo: add another class for storing image
|
@@ -68,6 +69,15 @@ module SharingTags
|
|
68
69
|
# todo: add image_size
|
69
70
|
# todo: add_image_type
|
70
71
|
|
72
|
+
def digested_image_url(*arguments, &block)
|
73
|
+
options = arguments.extract_options!
|
74
|
+
options.merge!(:digested => false)
|
75
|
+
|
76
|
+
wrap_block = proc { |*args| without_digest_asset_url(block.call(*args)) } if block_given?
|
77
|
+
image_url(*arguments, options, &wrap_block)
|
78
|
+
end
|
79
|
+
alias :digested_image :digested_image_url
|
80
|
+
|
71
81
|
def page_url(new_url = nil, &block)
|
72
82
|
attributes[:page_url] = store_value(new_url, &block)
|
73
83
|
end
|
data/lib/sharing_tags/version.rb
CHANGED
data/lib/sharing_tags.rb
CHANGED
data/sharing_tags.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'rails', '~> 4.0'
|
22
22
|
spec.add_dependency 'hashie', '~> 3.4'
|
23
|
-
spec.add_dependency 'slim', '~> 3.0'
|
23
|
+
spec.add_dependency 'slim-rails', '~> 3.0'
|
24
24
|
spec.add_dependency 'coffee-script', '~> 2.3'
|
25
25
|
spec.add_dependency 'non-stupid-digest-assets', '~> 1.0'
|
26
26
|
|
@@ -36,7 +36,7 @@ RSpec.describe MainController, :type => :controller do
|
|
36
36
|
it "expect render meta_tags" do
|
37
37
|
expect(response.status).to eq(200)
|
38
38
|
expect(response).to render_template(:index)
|
39
|
-
expect(response).to render_template('sharing_tags/meta_tags')
|
39
|
+
expect(response).to render_template('sharing_tags/meta_tags.html.slim')
|
40
40
|
end
|
41
41
|
|
42
42
|
it "expect update default data for facebook" do
|
@@ -95,7 +95,7 @@ RSpec.describe MainController, :type => :controller do
|
|
95
95
|
it "expect render meta_tags" do
|
96
96
|
expect(response.status).to eq(200)
|
97
97
|
expect(response).to render_template(:profile)
|
98
|
-
expect(response).to render_template('sharing_tags/meta_tags')
|
98
|
+
expect(response).to render_template('sharing_tags/meta_tags.html.slim')
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -32,30 +32,112 @@ describe SharingTags::Generators::InstallGenerator, type: :generator do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
describe 'assets' do
|
35
|
+
describe 'assets:javascripts' do
|
36
36
|
|
37
|
-
describe "
|
37
|
+
describe "application.js" do
|
38
|
+
let(:file_path) { "app/assets/javascripts/application.js" }
|
39
|
+
subject { file file_path }
|
40
|
+
|
41
|
+
before do
|
42
|
+
touch_file file_path
|
43
|
+
run_generator
|
44
|
+
end
|
45
|
+
|
46
|
+
it "expect added require sharing_tags " do
|
47
|
+
generator_command = '= require sharing_tags'
|
48
|
+
is_expected.to contain(generator_command)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "application.coffee" do
|
38
53
|
pending
|
39
54
|
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'assets:stylesheets' do
|
40
58
|
|
41
|
-
describe "
|
59
|
+
describe "application.css" do
|
60
|
+
let(:file_path) { "app/assets/stylesheets/application.css" }
|
61
|
+
subject { file file_path }
|
42
62
|
|
43
|
-
|
44
|
-
|
45
|
-
|
63
|
+
before do
|
64
|
+
create_file file_path, "/**/"
|
65
|
+
subject
|
66
|
+
run_generator
|
67
|
+
end
|
46
68
|
|
69
|
+
it "expect added require sharing_tags " do
|
70
|
+
generator_command = '= require sharing_tags'
|
71
|
+
is_expected.to contain(generator_command)
|
72
|
+
end
|
47
73
|
end
|
48
74
|
|
49
|
-
|
75
|
+
describe "application.sass" do
|
76
|
+
pending
|
77
|
+
end
|
50
78
|
|
51
|
-
|
79
|
+
describe "application.scss" do
|
80
|
+
pending
|
81
|
+
end
|
52
82
|
end
|
53
83
|
|
54
|
-
describe 'view' do
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
84
|
+
describe 'view:layouts' do
|
85
|
+
let(:file_path) { "app/views/layouts/application.html.slim" }
|
86
|
+
subject { file file_path }
|
87
|
+
|
88
|
+
describe "application.html.slim" do
|
89
|
+
let(:layout) { %{
|
90
|
+
html
|
91
|
+
header
|
92
|
+
title Some title
|
93
|
+
body
|
94
|
+
p Text block
|
95
|
+
} }
|
96
|
+
|
97
|
+
before do
|
98
|
+
create_file file_path, layout
|
99
|
+
run_generator
|
100
|
+
end
|
101
|
+
|
102
|
+
it "expect added render_sharing_tags " do
|
103
|
+
generator_command = '= render_sharing_tags'
|
104
|
+
is_expected.to contain(generator_command)
|
105
|
+
end
|
106
|
+
|
107
|
+
# it { is_expected.to have_correct_syntax }
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "application.html.erb" do
|
111
|
+
before do
|
112
|
+
create_file file_path, layout
|
113
|
+
run_generator
|
114
|
+
end
|
115
|
+
|
116
|
+
subject { file file_path }
|
117
|
+
|
118
|
+
let(:layout) { %{
|
119
|
+
<html>
|
120
|
+
<head>
|
121
|
+
<title>Some title</title>
|
122
|
+
</head>
|
123
|
+
<body>
|
124
|
+
<p>Text block</p>
|
125
|
+
</body>
|
126
|
+
</html>
|
127
|
+
} }
|
128
|
+
let(:file_path) { "app/views/layouts/application.html.erb" }
|
129
|
+
|
130
|
+
it "expect added render_sharing_tags " do
|
131
|
+
generator_command = '<%= render_sharing_tags %>'
|
132
|
+
is_expected.to contain(generator_command)
|
133
|
+
end
|
134
|
+
|
135
|
+
it { is_expected.to have_correct_syntax }
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "application.html.haml" do
|
139
|
+
pending
|
140
|
+
end
|
59
141
|
end
|
60
142
|
|
61
143
|
describe "after install" do
|
@@ -18,7 +18,7 @@ RSpec.describe SharingTags::ActionView::AssetHelper, :type => :helper do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "expect return non digested url" do
|
21
|
-
is_expected.to be_eql("http://test.host/image_path/image.png")
|
21
|
+
is_expected.to be_eql("http://test.host/images/image_path/image.png")
|
22
22
|
end
|
23
23
|
|
24
24
|
it "add to non digest gem" do
|
@@ -3,8 +3,7 @@
|
|
3
3
|
"url": "http://full.url",
|
4
4
|
"title": "Title full",
|
5
5
|
"description": "Description",
|
6
|
-
"app_id": "123"
|
7
|
-
"return_url": "http://return.url"
|
6
|
+
"app_id": "123"
|
8
7
|
},
|
9
8
|
|
10
9
|
"partial": {
|
@@ -13,6 +12,14 @@
|
|
13
12
|
"description": "Description"
|
14
13
|
},
|
15
14
|
|
15
|
+
"returned": {
|
16
|
+
"url": "http://full.url",
|
17
|
+
"title": "Title full",
|
18
|
+
"description": "Description",
|
19
|
+
"app_id": "123",
|
20
|
+
"return_url": "http://return.url"
|
21
|
+
},
|
22
|
+
|
16
23
|
"fb_ui": {
|
17
24
|
"url": "http://fb_ui.url",
|
18
25
|
"app_id": "123",
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#=require sharing_tags/share
|
2
|
+
#=require sharing_tags/share/base
|
2
3
|
#=require sharing_tags/share/facebook
|
3
4
|
|
4
5
|
fixture.preload("facebook.json")
|
@@ -155,3 +156,27 @@ describe "SharingTags.FacebookShare", ->
|
|
155
156
|
@share._fb_ui()
|
156
157
|
expect(@share.constructor.init).toHaveBeenCalled()
|
157
158
|
expect(@share._fb_ui).toHaveBeenCalled()
|
159
|
+
|
160
|
+
describe "#detect_provider", ->
|
161
|
+
|
162
|
+
it "expect to receive sharer provider for iOS Chrome browser", ->
|
163
|
+
@share = new subject(@fb_fixture.full)
|
164
|
+
ios_chrome_agent = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3"
|
165
|
+
spyOn(@share, "_user_agent").andReturn ios_chrome_agent
|
166
|
+
|
167
|
+
expect(@share.detect_provider()).toBe "sharer"
|
168
|
+
|
169
|
+
it "expect to receive fb_ui provider for sharing with app_id params", ->
|
170
|
+
@share = new subject(@fb_fixture.full)
|
171
|
+
expect(@share.app_id).toBeDefined()
|
172
|
+
expect(@share.detect_provider()).toBe "fb_ui"
|
173
|
+
|
174
|
+
it "expect to receive dialog provider for sharing with app_id and return url params", ->
|
175
|
+
@share = new subject(@fb_fixture.returned)
|
176
|
+
expect(@share.app_id).toBeDefined()
|
177
|
+
expect(@share.return_url).toBeDefined()
|
178
|
+
expect(@share.detect_provider()).toBe "dialog"
|
179
|
+
|
180
|
+
it "expect to receive fb_ui provider for sharing with app_id params", ->
|
181
|
+
@share = new subject(@fb_fixture.partial)
|
182
|
+
expect(@share.detect_provider()).toBe "sharer"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#=require sharing_tags/share
|
2
|
+
#=require sharing_tags/share/base
|
3
|
+
#=require sharing_tags/share/vkontakte
|
4
|
+
|
5
|
+
fixture.preload("vkontakte.json")
|
6
|
+
|
7
|
+
describe "SharingTags.VkontakteShare", ->
|
8
|
+
|
9
|
+
subject = SharingTags.VkontakteShare
|
10
|
+
|
11
|
+
beforeEach ->
|
12
|
+
@vk_fixture = fixture.load("vkontakte.json")[0]
|
13
|
+
|
14
|
+
it "expect defined class", ->
|
15
|
+
expect( SharingTags ).toBeDefined()
|
16
|
+
expect( SharingTags.VkontakteShare ).toBeDefined()
|
17
|
+
|
18
|
+
describe "#share", ->
|
19
|
+
beforeEach ->
|
20
|
+
@vk = @vk_fixture.full
|
21
|
+
@share = new subject(@vk)
|
22
|
+
|
23
|
+
it "expect open popup", ->
|
24
|
+
spyOn(@share, "_open_popup")
|
25
|
+
|
26
|
+
@share.share()
|
27
|
+
expect(@share._open_popup).toHaveBeenCalled()
|
28
|
+
expect(@share._open_popup).toHaveBeenCalledWith(
|
29
|
+
"http://vk.com/share.php",
|
30
|
+
jasmine.objectContaining(url: @vk.url, image: @vk.image, title: @vk.title, description: @vk.description)
|
31
|
+
)
|
@@ -1,5 +1,18 @@
|
|
1
1
|
module GeneratorSupport
|
2
2
|
|
3
|
+
def create_file(file_path, content = '')
|
4
|
+
full_file_path = File.expand_path(file_path, destination_root)
|
5
|
+
FileUtils.mkdir_p File.dirname(full_file_path)
|
6
|
+
File.write full_file_path, content
|
7
|
+
end
|
8
|
+
|
9
|
+
def touch_file(file_path)
|
10
|
+
full_file_path = File.expand_path(file_path, destination_root)
|
11
|
+
|
12
|
+
FileUtils.mkdir_p File.dirname(full_file_path)
|
13
|
+
FileUtils.touch full_file_path
|
14
|
+
end
|
15
|
+
|
3
16
|
def cleanup_destination_root
|
4
17
|
FileUtils.rm_rf destination_root
|
5
18
|
end
|
@@ -13,6 +13,7 @@ RSpec.describe "sharing_tags/meta_tags", :type => :view do
|
|
13
13
|
description "Facebook description"
|
14
14
|
page_url "http://a.b"
|
15
15
|
image_url "http://img.jpg", "100x200", "image/jpeg"
|
16
|
+
app_id "12345"
|
16
17
|
end
|
17
18
|
end
|
18
19
|
end
|
@@ -26,6 +27,7 @@ RSpec.describe "sharing_tags/meta_tags", :type => :view do
|
|
26
27
|
expect(rendered).to have_tag "meta", with: {property: "og:image:width", content: "100"}
|
27
28
|
expect(rendered).to have_tag "meta", with: {property: "og:image:height",content: "200"}
|
28
29
|
expect(rendered).to have_tag "meta", with: {property: "og:url", content: "http://a.b"}
|
30
|
+
expect(rendered).to have_tag "meta", with: {property: "fb:app_id", content: "12345"}
|
29
31
|
end
|
30
32
|
end
|
31
33
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sharing_tags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anatoliy Kovalchuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: slim
|
42
|
+
name: slim-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
@@ -287,14 +287,17 @@ files:
|
|
287
287
|
- app/assets/images/sharing_tags/icons/twitter.svg
|
288
288
|
- app/assets/images/sharing_tags/icons/vkontakte.svg
|
289
289
|
- app/assets/javascripts/sharing_tags.js.coffee
|
290
|
-
- app/assets/javascripts/sharing_tags/init.js.coffee
|
290
|
+
- app/assets/javascripts/sharing_tags/init.js.coffee.erb
|
291
291
|
- app/assets/javascripts/sharing_tags/links.js.coffee
|
292
292
|
- app/assets/javascripts/sharing_tags/share.js.coffee
|
293
|
+
- app/assets/javascripts/sharing_tags/share/base.js.coffee
|
293
294
|
- app/assets/javascripts/sharing_tags/share/facebook.coffee
|
295
|
+
- app/assets/javascripts/sharing_tags/share/vkontakte.js.coffee
|
294
296
|
- app/assets/stylesheets/sharing_tags.css.sass
|
295
297
|
- app/assets/stylesheets/sharing_tags/icons.css.sass
|
296
298
|
- app/views/sharing_tags/button/_facebook.html.slim
|
297
299
|
- app/views/sharing_tags/button/_google.html.slim
|
300
|
+
- app/views/sharing_tags/button/_line.html.slim
|
298
301
|
- app/views/sharing_tags/button/_odnoklassniki.html.slim
|
299
302
|
- app/views/sharing_tags/button/_twitter.html.slim
|
300
303
|
- app/views/sharing_tags/button/_vkontakte.html.slim
|
@@ -382,7 +385,9 @@ files:
|
|
382
385
|
- spec/helpers/button_helper_spec.rb
|
383
386
|
- spec/helpers/meta_tags_helper_spec.rb
|
384
387
|
- spec/javascripts/fixtures/facebook.json
|
388
|
+
- spec/javascripts/fixtures/vkontakte.json
|
385
389
|
- spec/javascripts/sharing_tags/share/facebook_share_spec.coffee
|
390
|
+
- spec/javascripts/sharing_tags/share/vkontakte_share_spec.coffee
|
386
391
|
- spec/javascripts/sharing_tags/sharing_tags_spec.coffee
|
387
392
|
- spec/javascripts/spec_helper.coffee
|
388
393
|
- spec/models/configuration_spec.rb
|
@@ -414,7 +419,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
414
419
|
version: '0'
|
415
420
|
requirements: []
|
416
421
|
rubyforge_project:
|
417
|
-
rubygems_version: 2.
|
422
|
+
rubygems_version: 2.4.5
|
418
423
|
signing_key:
|
419
424
|
specification_version: 4
|
420
425
|
summary: Generate sharing tags for different contexts
|
@@ -479,7 +484,9 @@ test_files:
|
|
479
484
|
- spec/helpers/button_helper_spec.rb
|
480
485
|
- spec/helpers/meta_tags_helper_spec.rb
|
481
486
|
- spec/javascripts/fixtures/facebook.json
|
487
|
+
- spec/javascripts/fixtures/vkontakte.json
|
482
488
|
- spec/javascripts/sharing_tags/share/facebook_share_spec.coffee
|
489
|
+
- spec/javascripts/sharing_tags/share/vkontakte_share_spec.coffee
|
483
490
|
- spec/javascripts/sharing_tags/sharing_tags_spec.coffee
|
484
491
|
- spec/javascripts/spec_helper.coffee
|
485
492
|
- spec/models/configuration_spec.rb
|