aweplug 1.0.0.a9 → 1.0.0.a10
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.
- checksums.yaml +7 -0
- data/aweplug.gemspec +3 -1
- data/lib/aweplug/extensions/asciidoc_example.rb +59 -10
- data/lib/aweplug/extensions/kramdown_quickstart.rb +60 -7
- data/lib/aweplug/handlers/synthetic_handler.rb +33 -2
- data/lib/aweplug/helpers/{git_commit_metadata.rb → git_metadata.rb} +14 -1
- data/lib/aweplug/helpers/kramdown_metadata.rb +17 -0
- data/lib/aweplug/helpers/searchisko.rb +49 -0
- data/lib/aweplug/helpers/vimeo.rb +127 -0
- data/lib/aweplug/version.rb +1 -1
- data/lib/aweplug.rb +1 -0
- metadata +49 -42
- data/lib/aweplug/extensions/identities.rb +0 -187
- data/lib/aweplug/extensions/identity/confluence.rb +0 -107
- data/lib/aweplug/extensions/identity/github.rb +0 -230
- data/lib/aweplug/extensions/identity/gravatar.rb +0 -117
- data/lib/aweplug/extensions/identity/jbosscommunity.rb +0 -35
- data/spec/aweplug/extensions/identity/collector_spec.rb +0 -24
- data/spec/aweplug/extensions/identity/github_spec.rb +0 -7
- data/spec/aweplug/extensions/identity/storage_spec.rb +0 -24
- data/spec/support/aweplug/extensions/identity/crawler_examples.rb +0 -13
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c04c6ec9e220206a3579c3973bd7dd1b06696780
|
4
|
+
data.tar.gz: 12d68c7c2e2170dc143f8ab25c142e3cdfa64519
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8f96a65b787979b3c99e2bc47a43c9cd4628b88eb6078cbe75b6b948739782af9531f5561162292bbb7910981af19cd625eec641a72cbbac3d419b966725ae8b
|
7
|
+
data.tar.gz: 76e11caad4592d9d3393cc73ab21515d1ea3d83730983960ad3fcf5fcc0e84e163b706738e7b0dd993bfd77163ce9fea39bd48f7004c442e229b342bd33efa11
|
data/aweplug.gemspec
CHANGED
@@ -21,8 +21,10 @@ Gem::Specification.new do |gem|
|
|
21
21
|
|
22
22
|
#gem.add_dependency 'awestruct', '>= 0.5.1'
|
23
23
|
gem.add_dependency 'octokit', '>= 1.24.0'
|
24
|
-
gem.add_dependency 'faraday', '>= 0.8.7'
|
24
|
+
gem.add_dependency 'faraday', '>= 0.8.7', '< 0.9.0'
|
25
25
|
gem.add_dependency 'faraday_middleware', '>= 0.9.0'
|
26
|
+
gem.add_dependency 'curb', '~> 0.8.5'
|
27
|
+
gem.add_dependency 'oauth', '~> 0.3.6'
|
26
28
|
|
27
29
|
gem.add_development_dependency 'guard-rspec', '~> 3.0.0'
|
28
30
|
gem.add_development_dependency 'rake', '~> 10.0.4'
|
@@ -1,25 +1,73 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'asciidoctor'
|
3
|
-
require 'aweplug/helpers/
|
3
|
+
require 'aweplug/helpers/git_metadata'
|
4
4
|
require 'aweplug/helpers/searchisko'
|
5
5
|
require 'json'
|
6
6
|
require 'pry'
|
7
7
|
|
8
8
|
module Aweplug::Extensions
|
9
|
+
# Public: An awestruct extension for guides / examples written in AsciiDoc.
|
10
|
+
# Files with the .asciidoc or .adoc extension are considered to be
|
11
|
+
# AsciiDoc files. This extension makes use of asciidoctor to
|
12
|
+
# render the files.
|
13
|
+
#
|
14
|
+
# Example
|
15
|
+
#
|
16
|
+
# extension Aweplug::Extensions::AsciidocExample({...})
|
9
17
|
class AsciidocExample
|
10
18
|
include Aweplug::Helper::Git::Commit::Metadata
|
19
|
+
include Aweplug::Helper::Git::Repository
|
11
20
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
# Public: Initialization method, used in the awestruct pipeline.
|
22
|
+
#
|
23
|
+
# opts - A Hash of options, some being required, some not (default: {}).
|
24
|
+
# :repository - The String name of the directory
|
25
|
+
# containing the repository (required).
|
26
|
+
# :directory - The String directory name, within the
|
27
|
+
# :respository, containing the files
|
28
|
+
# (required).
|
29
|
+
# :layout - The String name of the layout to use,
|
30
|
+
# omitting the extension (required).
|
31
|
+
# :output_dir - The String or Pathname of the output
|
32
|
+
# directory for the files (required).
|
33
|
+
# :additional_excludes - An Array of Strings containing
|
34
|
+
# additional base file names to exclude
|
35
|
+
# (default: []).
|
36
|
+
# :recurse_subdirectories - Boolean flag indicating to continue
|
37
|
+
# searching subdirectories (default:
|
38
|
+
# true).
|
39
|
+
# :additional_metadata_keys - An Array of String keys from the
|
40
|
+
# AsciiDoc metadata to include in the
|
41
|
+
# searchisko payload (default: []).
|
42
|
+
# :site_variable - String name of the key within the site
|
43
|
+
# containing additional metadata about
|
44
|
+
# the guide (default: value of
|
45
|
+
# :output_dir).
|
46
|
+
# Returns the created extension.
|
47
|
+
def initialize(opts = {})
|
48
|
+
required_keys = [:repository, :directory, :layout, :output_dir, :site_variable]
|
49
|
+
opts = {additional_excludes: [], recurse_subdirectories: true,
|
50
|
+
additional_metadata_keys: [], site_variable: opts[:output_dir]}.merge opts
|
51
|
+
missing_required_keys = required_keys - opts.keys
|
52
|
+
|
53
|
+
raise ArgumentError.new "Missing required arguments #{missing_required_keys.join ', '}" unless missing_required_keys.empty?
|
54
|
+
|
55
|
+
@repo = opts[:repository]
|
56
|
+
@output_dir = Pathname.new opts[:output_dir]
|
57
|
+
@layout = opts[:layout]
|
58
|
+
@recurse_subdirectories = opts[:recurse_subdirectories]
|
59
|
+
@additional_metadata_keys = opts[:additional_metadata_keys]
|
60
|
+
@additional_excludes = opts[:additional_excludes]
|
61
|
+
@directory = File.join opts[:repository], opts[:directory]
|
62
|
+
@site_variable = opts[:site_variable]
|
21
63
|
end
|
22
64
|
|
65
|
+
# Internal: Execute method required by awestruct. Called during the
|
66
|
+
# pipeline execution. No return.
|
67
|
+
#
|
68
|
+
# site - The site instance from awestruct.
|
69
|
+
#
|
70
|
+
# Returns nothing.
|
23
71
|
def execute site
|
24
72
|
searchisko = Aweplug::Helpers::Searchisko.new({:base_url => site.dcp_base_url,
|
25
73
|
:authenticate => true,
|
@@ -41,6 +89,7 @@ module Aweplug::Extensions
|
|
41
89
|
metadata = {:author => doc.author, :commits => commit_info(@repo, path),
|
42
90
|
:title => doc.doctitle, :tags => doc.attributes['tags'],
|
43
91
|
:toc => doc.sections.inject([]) {|result, elm| result << {:id => elm.id, :text => elm.title}; result},
|
92
|
+
:github_repo_url => repository_url(@repo),
|
44
93
|
# Will need to strip html tags for summary
|
45
94
|
:summary => doc.sections.first.render}
|
46
95
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'kramdown'
|
3
|
-
require 'aweplug/helpers/
|
3
|
+
require 'aweplug/helpers/git_metadata'
|
4
4
|
require 'aweplug/helpers/kramdown_metadata'
|
5
5
|
require 'aweplug/helpers/searchisko'
|
6
6
|
require 'json'
|
@@ -8,15 +8,49 @@ require 'json'
|
|
8
8
|
module Aweplug
|
9
9
|
module Extensions
|
10
10
|
module Kramdown
|
11
|
+
# Public: An awestruct extension for guides / examples written in AsciiDoc.
|
12
|
+
# Files with the .asciidoc or .adoc extension are considered to be
|
13
|
+
# AsciiDoc files. This extension makes use of asciidoctor to
|
14
|
+
# render the files.
|
15
|
+
#
|
16
|
+
# Example
|
17
|
+
#
|
18
|
+
# extension Aweplug::Extensions::AsciidocExample({...})
|
11
19
|
class Quickstart
|
12
20
|
include Aweplug::Helper::Git::Commit::Metadata
|
21
|
+
include Aweplug::Helper::Git::Repository
|
13
22
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
23
|
+
# Public: Initialization method, used in the awestruct pipeline.
|
24
|
+
#
|
25
|
+
# opts - A Hash of options, some being required, some not (default: {}).
|
26
|
+
# :repository - The String name of the directory containing
|
27
|
+
# the repository (required).
|
28
|
+
# :layout - The String name of the layout to use,
|
29
|
+
# omitting the extension (required).
|
30
|
+
# :output_dir - The String or Pathname of the output
|
31
|
+
# directory for the files (required).
|
32
|
+
# :site_variable - String name of the key within the site
|
33
|
+
# containing additional metadata about
|
34
|
+
# the guide (default: value of
|
35
|
+
# :output_dir).
|
36
|
+
# Returns the created extension.
|
37
|
+
def initialize opts = {}
|
38
|
+
required_keys = [:repository, :layout, :output_dir, :site_variable]
|
39
|
+
missing_required_keys = required_keys - opts.keys
|
40
|
+
|
41
|
+
raise ArgumentError.new "Missing required arguments #{missing_required_keys.join ', '}" unless missing_required_keys.empty?
|
42
|
+
@repo = opts[:repository]
|
43
|
+
@output_dir = Pathname.new opts[:output_dir]
|
44
|
+
@layout = opts[:layout]
|
45
|
+
@site_variable = opts[:site_variable] || opts[:output_dir]
|
18
46
|
end
|
19
47
|
|
48
|
+
# Internal: Execute method required by awestruct. Called during the
|
49
|
+
# pipeline execution. No return.
|
50
|
+
#
|
51
|
+
# site - The Site instance from awestruct.
|
52
|
+
#
|
53
|
+
# Returns nothing.
|
20
54
|
def execute site
|
21
55
|
# Not sure if it's better to do this once per class,
|
22
56
|
# once per site, or once per invocation
|
@@ -30,6 +64,7 @@ module Aweplug
|
|
30
64
|
|
31
65
|
metadata = extract_metadata(file)
|
32
66
|
metadata[:commits] = commit_info @repo, Pathname.new(file)
|
67
|
+
metadata[:github_repo_url] = repository_url @repo
|
33
68
|
converted_html = metadata.delete :converted
|
34
69
|
|
35
70
|
page.send 'metadata=', metadata
|
@@ -62,6 +97,15 @@ module Aweplug
|
|
62
97
|
end
|
63
98
|
end
|
64
99
|
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
# Private: Makes use of the sepcial Kramdown parser in aweplug to pull
|
104
|
+
# out metadata from the README files.
|
105
|
+
#
|
106
|
+
# file - The String file path (relative or absolute) to parse.
|
107
|
+
#
|
108
|
+
# Returns a Hash of the metadata retrieved.
|
65
109
|
def extract_metadata(file)
|
66
110
|
document = parse_kramdown(file)
|
67
111
|
toc = ::Kramdown::Converter::Toc.convert(document.root)
|
@@ -75,6 +119,12 @@ module Aweplug
|
|
75
119
|
metadata
|
76
120
|
end
|
77
121
|
|
122
|
+
# Private: Adds the Page to the site.
|
123
|
+
#
|
124
|
+
# site - The Site from awestruct.
|
125
|
+
# file - The String file path (relative or absolute) to parse.
|
126
|
+
#
|
127
|
+
# Returns the newly constructed Page
|
78
128
|
def add_to_site(site, file)
|
79
129
|
page_path = Pathname.new file
|
80
130
|
page = site.engine.load_site_page file
|
@@ -84,8 +134,11 @@ module Aweplug
|
|
84
134
|
page
|
85
135
|
end
|
86
136
|
|
87
|
-
|
88
|
-
|
137
|
+
# Private: Parses the file through Kramdown.
|
138
|
+
#
|
139
|
+
# file - The String file path (relative or absolute) to parse.
|
140
|
+
#
|
141
|
+
# Returns the parsed Kramdown Document.
|
89
142
|
def parse_kramdown(file)
|
90
143
|
::Kramdown::Document.new File.readlines(file).join, :input => 'QuickStartParser'
|
91
144
|
end
|
@@ -2,10 +2,24 @@ require 'awestruct/handlers/base_handler'
|
|
2
2
|
require 'pathname'
|
3
3
|
|
4
4
|
module Aweplug
|
5
|
+
# Public: Additional handlers for awestruct. Any handler here must extend
|
6
|
+
# Awestruct::Handlers::BaseHandler.
|
5
7
|
module Handlers
|
8
|
+
# Public: An awestruct handler used to create a page which has no file
|
9
|
+
# backing it.
|
10
|
+
#
|
11
|
+
# Examples
|
12
|
+
#
|
13
|
+
# Aweplug::Handlers::SyntheticHandler(site, content, output_path)
|
14
|
+
# # => <Aweplug::Handlers::Synthetic:0x...>"
|
6
15
|
class SyntheticHandler < Awestruct::Handlers::BaseHandler
|
7
16
|
attr_reader :path
|
8
17
|
|
18
|
+
# Public: Initializer for the handler.
|
19
|
+
#
|
20
|
+
# site - awestruct Site object.
|
21
|
+
# content - Content for the page, must respond to t_s.
|
22
|
+
# path - output Path or String location for the generated page.
|
9
23
|
def initialize site, content, path
|
10
24
|
super(site)
|
11
25
|
@content = content
|
@@ -19,18 +33,35 @@ module Aweplug
|
|
19
33
|
end
|
20
34
|
end
|
21
35
|
|
36
|
+
# Public: Returns the mtime for this instance
|
37
|
+
#
|
38
|
+
# page - Ignored, kept for compat with other handlers.
|
39
|
+
#
|
40
|
+
# Returns the Integer timestamp of when this object was created.
|
22
41
|
def input_mtime(page)
|
23
42
|
@input_mtime
|
24
43
|
end
|
25
44
|
|
45
|
+
# Public: Returns the rendered verison of @content.
|
46
|
+
#
|
47
|
+
# context - Ignored, kept for compatibility.
|
48
|
+
# with_layouts - Ignored, kept for compatibility.
|
49
|
+
#
|
50
|
+
# Returns @content.to_s.
|
26
51
|
def rendered_content(context, with_layouts)
|
27
|
-
@content
|
52
|
+
@content.to_s
|
28
53
|
end
|
29
54
|
|
55
|
+
# Public: Returns @content.to_s.
|
56
|
+
#
|
57
|
+
# Returns @content.to_s.
|
30
58
|
def raw_content
|
31
|
-
@content
|
59
|
+
@content.to_s
|
32
60
|
end
|
33
61
|
|
62
|
+
# Public: Calculates and returns the path of @path relative to site.dir.
|
63
|
+
#
|
64
|
+
# Returns String path of @path calculated relative to site.dir.
|
34
65
|
def relative_source_path
|
35
66
|
# Copied from file_handler.rb in awestruct
|
36
67
|
begin
|
@@ -4,11 +4,23 @@ require 'json'
|
|
4
4
|
module Aweplug
|
5
5
|
module Helper
|
6
6
|
module Git
|
7
|
+
module Repository
|
8
|
+
# Public: Returns the URL for the git repository.
|
9
|
+
#
|
10
|
+
# repo_root - The directory (relative to the site base) containing the
|
11
|
+
# git repository.
|
12
|
+
# remote_name - Name of the remote to retrieve, defaults to 'origin'
|
13
|
+
#
|
14
|
+
# Returns a string containing the URL of the git remote repository
|
15
|
+
def repository_url(repo_root, remote_name='origin')
|
16
|
+
Open3.capture2(%Q[git --git-dir=#{repo_root}/.git config --get remote.#{remote_name}.url]).first.chomp[0..-5]
|
17
|
+
end
|
18
|
+
end
|
7
19
|
module Commit
|
8
20
|
module Metadata
|
9
21
|
# Public: Retrieves commit information from the git repo containing the file.
|
10
22
|
#
|
11
|
-
# repo_root - The directory (relative to the site base) containing
|
23
|
+
# repo_root - The directory (relative to the site base) containing the git repo
|
12
24
|
# file_path - Path to the file being processed, relative to the site base
|
13
25
|
#
|
14
26
|
# Returns an array of commit info as json values
|
@@ -21,3 +33,4 @@ module Aweplug
|
|
21
33
|
end
|
22
34
|
end
|
23
35
|
end
|
36
|
+
|
@@ -3,7 +3,16 @@ require 'kramdown/parser/kramdown'
|
|
3
3
|
|
4
4
|
module Kramdown
|
5
5
|
module Parser
|
6
|
+
# Public: A Kramdown parser specific for the JBoss Quickstart format. See
|
7
|
+
# http://kramdown.gettalong.org/parser/kramdown.html for more information.
|
6
8
|
class QuickStartParser < Kramdown::Parser::Kramdown
|
9
|
+
|
10
|
+
# Private: Initializer for the Parser.
|
11
|
+
#
|
12
|
+
# source - String source of the document.
|
13
|
+
# options - Hash of options, see
|
14
|
+
# http://kramdown.gettalong.org/parser/kramdown.html for list
|
15
|
+
# of supported options.
|
7
16
|
def initialize source, options
|
8
17
|
super
|
9
18
|
@block_parsers.unshift :author_metadata
|
@@ -23,6 +32,7 @@ module Kramdown
|
|
23
32
|
HEADER_ID=/(?:[ \t]+\{#([A-Za-z][\w:-]*)\})?/
|
24
33
|
SETEXT_HEADER_START = /^(#{OPT_SPACE}[^ \t].*?)#{HEADER_ID}[ \t]*?\n(=)+\s*?\n/
|
25
34
|
|
35
|
+
# Internal: Parses the title to add to the metadata Hash.
|
26
36
|
def parse_title_hack_metadata
|
27
37
|
return false if !after_block_boundary?
|
28
38
|
|
@@ -40,42 +50,49 @@ module Kramdown
|
|
40
50
|
end
|
41
51
|
define_parser(:title_hack_metadata, SETEXT_HEADER_START)
|
42
52
|
|
53
|
+
# Internal: Parses the author to add to the metadata Hash.
|
43
54
|
def parse_author_metadata
|
44
55
|
@src.pos += @src.matched_size
|
45
56
|
@root.options[:metadata][:author] = @src[2].rstrip
|
46
57
|
end
|
47
58
|
define_parser(:author_metadata, /^(Author:)#{OPT_SPACE}(.*?)\s*?\n/)
|
48
59
|
|
60
|
+
# Internal: Parses the level to add to the metadata Hash.
|
49
61
|
def parse_level_metadata
|
50
62
|
@src.pos += @src.matched_size
|
51
63
|
@root.options[:metadata][:level] = @src[2].rstrip
|
52
64
|
end
|
53
65
|
define_parser(:level_metadata, /^(Level:)#{OPT_SPACE}(.*?)\s*?\n/)
|
54
66
|
|
67
|
+
# Internal: Parses the technologies to add to the metadata Hash.
|
55
68
|
def parse_technologies_metadata
|
56
69
|
@src.pos += @src.matched_size
|
57
70
|
@root.options[:metadata][:technologies] = @src[2].rstrip
|
58
71
|
end
|
59
72
|
define_parser(:technologies_metadata, /^(Technologies:)#{OPT_SPACE}(.*?)\s*?\n/)
|
60
73
|
|
74
|
+
# Internal: Parses the target_product to add to the metadata Hash.
|
61
75
|
def parse_target_product_metadata
|
62
76
|
@src.pos += @src.matched_size
|
63
77
|
@root.options[:metadata][:target_product] = @src[2].rstrip
|
64
78
|
end
|
65
79
|
define_parser(:target_product_metadata, /^(Target Product:)#{OPT_SPACE}(.*?)\s*?\n/)
|
66
80
|
|
81
|
+
# Internal: Parses the source URL to add to the metadata Hash.
|
67
82
|
def parse_source_metadata
|
68
83
|
@src.pos += @src.matched_size
|
69
84
|
@root.options[:metadata][:source] = @src[2][1..-2].rstrip
|
70
85
|
end
|
71
86
|
define_parser(:source_metadata, /^(Source:)#{OPT_SPACE}(.*?)\s*?\n/)
|
72
87
|
|
88
|
+
# Internal: Parses the summary to add to the metadata Hash.
|
73
89
|
def parse_summary_metadata
|
74
90
|
@src.pos += @src.matched_size
|
75
91
|
@root.options[:metadata][:summary] = @src[2].rstrip
|
76
92
|
end
|
77
93
|
define_parser(:summary_metadata, /^(Summary:)#{OPT_SPACE}(.*?)\s*?\n/)
|
78
94
|
|
95
|
+
# Internal: Parses the product to add to the metadata Hash.
|
79
96
|
def parse_product_metadata
|
80
97
|
@src.pos += @src.matched_size
|
81
98
|
@root.options[:metadata][:product] = @src[2].rstrip
|
@@ -14,6 +14,8 @@ module Aweplug::Helpers
|
|
14
14
|
# :logging - Boolean to log responses
|
15
15
|
# :raise_error - Boolean flag if 404 and 500 should raise exceptions
|
16
16
|
# :adapter - faraday adapter to use, defaults to :net_http
|
17
|
+
#
|
18
|
+
# Returns a new instance of Searchisko.
|
17
19
|
def initialize opts={}
|
18
20
|
@faraday = Faraday.new(:url => opts[:base_url]) do |builder|
|
19
21
|
if opts[:authenticate]
|
@@ -30,18 +32,65 @@ module Aweplug::Helpers
|
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
35
|
+
# Public: Performs a GET search against the Searchisko instance using
|
36
|
+
# provided parameters.
|
37
|
+
#
|
38
|
+
# params - Hash of parameters to use as query string. See
|
39
|
+
# http://docs.jbossorg.apiary.io/#searchapi for more information
|
40
|
+
# about parameters and how they affect the search.
|
41
|
+
#
|
42
|
+
# Example
|
43
|
+
#
|
44
|
+
# searchisko.search {:query => 'Search query'}
|
45
|
+
# # => {...}
|
46
|
+
#
|
47
|
+
# Returns the String result of the search.
|
33
48
|
def search params = {}
|
34
49
|
get '/search', params
|
35
50
|
end
|
36
51
|
|
52
|
+
# Public: Makes an HTTP GET to host/v1/rest/#{path} and returns the
|
53
|
+
# result from the Faraday request.
|
54
|
+
#
|
55
|
+
# path - String containing the rest of the path.
|
56
|
+
# params - Hash containing query string parameters.
|
57
|
+
#
|
58
|
+
# Example
|
59
|
+
#
|
60
|
+
# searchisko.get 'feed', {:query => 'Search Query'}
|
61
|
+
# # => Faraday Response Object
|
62
|
+
#
|
63
|
+
# Returns the Faraday Response for the request.
|
37
64
|
def get path, params = {}
|
38
65
|
@faraday.get "/v1/rest/" + path, params
|
39
66
|
end
|
40
67
|
|
68
|
+
# Public: Posts content to Searchisko.
|
69
|
+
#
|
70
|
+
# content_type - String of the Searchisko sys_content_type for the content
|
71
|
+
# being posted.
|
72
|
+
# content_id - String of the Searchisko sys_content_id for the content.
|
73
|
+
# params - Hash containing the content to push.
|
74
|
+
#
|
75
|
+
# Examples
|
76
|
+
#
|
77
|
+
# searchisko.push_content 'jbossdeveloper_bom', id, content_hash
|
78
|
+
# # => Faraday Response
|
79
|
+
#
|
80
|
+
# Returns a Faraday Response from the POST.
|
41
81
|
def push_content content_type, content_id, params = {}
|
42
82
|
post "/content/#{content_type}/#{content_id}", params
|
43
83
|
end
|
44
84
|
|
85
|
+
# Public: Perform an HTTP POST to Searchisko.
|
86
|
+
#
|
87
|
+
# path - String containing the rest of the path.
|
88
|
+
# params - Hash containing the POST body.
|
89
|
+
#
|
90
|
+
# Examples
|
91
|
+
#
|
92
|
+
# searchisko.post "rating/#{searchisko_document_id}", {rating: 3}
|
93
|
+
# # => Faraday Response
|
45
94
|
def post path, params = {}
|
46
95
|
@faraday.post do |req|
|
47
96
|
req.url "/v1/rest/" + path
|
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'oauth'
|
2
|
+
|
3
|
+
module Aweplug
|
4
|
+
module Helpers
|
5
|
+
module Vimeo
|
6
|
+
|
7
|
+
# Public: Embeds videos from vimeo inside a div. Retrieves the title
|
8
|
+
# and video cast from vimeo using the authenticated API.
|
9
|
+
# TODO Builds follow links (blog, facebook, twitter, linkedin) for any
|
10
|
+
# video cast, using the DCP .
|
11
|
+
#
|
12
|
+
# url - the URL of the vimeo page for the video to display
|
13
|
+
#
|
14
|
+
# Returns the html snippet
|
15
|
+
#
|
16
|
+
def vimeo(url)
|
17
|
+
id = video_id(url)
|
18
|
+
title = video_title(id)
|
19
|
+
out = %Q[<div class="embedded-media">] +
|
20
|
+
%Q[<h4>#{title}</h4>] +
|
21
|
+
%Q[<iframe src="//player.vimeo.com/video/#{id}\?title=0&byline=0&portrait=0&badge=0&color=2664A2" width="500" height="313" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen}></iframe>]
|
22
|
+
cast = video_cast(id)
|
23
|
+
cast.each do |c|
|
24
|
+
out += %Q[<div class="follow-links">] +
|
25
|
+
%Q[<span class="title">Follow #{first_name(c.realname)}</span>] +
|
26
|
+
%Q[<a><i class="icon-rss"></i></a>] +
|
27
|
+
%Q[<a><i class="icon-facebook"></i></a>] +
|
28
|
+
%Q[<a><i class="icon-twitter"></i></a>] +
|
29
|
+
%Q[<a><i class="icon-linkedin"></i></a>] +
|
30
|
+
%Q[</div>]
|
31
|
+
end
|
32
|
+
out + %Q[</div>]
|
33
|
+
end
|
34
|
+
|
35
|
+
# Internal: Extracts a firstname from a full name
|
36
|
+
#
|
37
|
+
# full_name - the full name, e.g. Pete Muir
|
38
|
+
def first_name(full_name)
|
39
|
+
full_name.split[0]
|
40
|
+
end
|
41
|
+
|
42
|
+
# Internal: Extracts a Vimeo video id from a Vimeo video URL
|
43
|
+
#
|
44
|
+
# url - the url of the video
|
45
|
+
def video_id(url)
|
46
|
+
url.match(/^.*\/(\d*)$/)[1]
|
47
|
+
end
|
48
|
+
|
49
|
+
# Internal: Retrieves a video title using the Vimeo API
|
50
|
+
#
|
51
|
+
# video_id - the id of the video to fetch the title for
|
52
|
+
def video_title(video_id)
|
53
|
+
body = exec_method "vimeo.videos.getInfo", video_id
|
54
|
+
if body
|
55
|
+
JSON.parse(body)["video"][0]["title"]
|
56
|
+
else
|
57
|
+
"Unable to fetch video info from vimeo"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# Internal: Retrieves the cast of a video using the Vimeo API
|
62
|
+
#
|
63
|
+
# video_id - the id of the video to fetch the title for
|
64
|
+
def video_cast(video_id)
|
65
|
+
body = exec_method "vimeo.videos.getCast", video_id
|
66
|
+
cast = []
|
67
|
+
if body
|
68
|
+
JSON.parse(body)["cast"]["member"].each do |c|
|
69
|
+
cast << OpenStruct.new(c)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
cast
|
73
|
+
end
|
74
|
+
|
75
|
+
# Internal: Execute a method against the Vimeo API
|
76
|
+
#
|
77
|
+
# method - the API method to execute
|
78
|
+
# video_id - the id of the video to execute the method for
|
79
|
+
#
|
80
|
+
# Returns JSON retreived from the Vimeo API
|
81
|
+
def exec_method(method, video_id)
|
82
|
+
if access_token
|
83
|
+
query = "http://vimeo.com/api/rest/v2?method=#{method}&video_id=#{video_id}&format=json"
|
84
|
+
access_token.get(query).body
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Internal: Obtains an OAuth::AcccessToken for the Vimeo API, using the
|
89
|
+
# vimeo_client_id and vimeo_access_token defined in site/config.yml and
|
90
|
+
# vimeo_client_secret and vimeo_access_token_secret defined in environment
|
91
|
+
# variables
|
92
|
+
#
|
93
|
+
# Returns an OAuth::AccessToken for the Vimeo API
|
94
|
+
def access_token
|
95
|
+
if @access_token
|
96
|
+
@access_token
|
97
|
+
else
|
98
|
+
if not ENV['vimeo_client_secret']
|
99
|
+
puts 'Cannot fetch video info from vimeo, vimeo_client_secret is missing from environment variables'
|
100
|
+
return
|
101
|
+
end
|
102
|
+
if not site.vimeo_client_id
|
103
|
+
puts 'Cannot fetch video info vimeo, vimeo_client_id is missing from _config/site.yml'
|
104
|
+
return
|
105
|
+
end
|
106
|
+
if not ENV['vimeo_access_token_secret']
|
107
|
+
puts 'Cannot fetch video info from vimeo, vimeo_access_token_secret is missing from environment variables'
|
108
|
+
return
|
109
|
+
end
|
110
|
+
if not site.vimeo_access_token
|
111
|
+
puts 'Cannot fetch video info from vimeo, vimeo_access_token is missing from _config/site.yml'
|
112
|
+
return
|
113
|
+
end
|
114
|
+
consumer = OAuth::Consumer.new(site.vimeo_client_id, ENV['vimeo_client_secret'],
|
115
|
+
{ :site => "https://vimeo.com",
|
116
|
+
:scheme => :header
|
117
|
+
})
|
118
|
+
# now create the access token object from passed values
|
119
|
+
token_hash = { :oauth_token => site.vimeo_access_token,
|
120
|
+
:oauth_token_secret => ENV['vimeo_access_token_secret']
|
121
|
+
}
|
122
|
+
OAuth::AccessToken.from_hash(consumer, token_hash )
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
data/lib/aweplug/version.rb
CHANGED