aweplug 1.0.0.a16 → 1.0.0.a17
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/aweplug/cache/yaml_file_cache.rb +83 -80
- data/lib/aweplug/extensions/asciidoc_example.rb +106 -105
- data/lib/aweplug/extensions/kramdown_quickstart.rb +5 -0
- data/lib/aweplug/extensions/vimeo.rb +76 -0
- data/lib/aweplug/helpers/searchisko.rb +92 -89
- data/lib/aweplug/helpers/vimeo.rb +55 -46
- data/lib/aweplug/version.rb +1 -1
- metadata +4 -3
@@ -1,95 +1,98 @@
|
|
1
1
|
require 'yaml/store'
|
2
2
|
require 'fileutils'
|
3
3
|
|
4
|
-
module Aweplug
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
opts
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
4
|
+
module Aweplug
|
5
|
+
module Cache
|
6
|
+
# Public: A simple caching implementation.
|
7
|
+
# Internally it using a YAML::Store for a file backing. It also saves
|
8
|
+
# data in a hash for the life of the object. Any keys which are
|
9
|
+
# Strings are frozen before being used.
|
10
|
+
class YamlFileCache
|
11
|
+
# Public: Initialization method.
|
12
|
+
#
|
13
|
+
# opts - A Hash of options
|
14
|
+
# filename: Name of the File used for caching. Defaults to
|
15
|
+
# 'tmp/cache.store'.
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# store = Aweplug::Cache::YamlFileCache.new
|
20
|
+
# store.write('key', 'data')
|
21
|
+
# # => 'data'
|
22
|
+
# store.read('key')
|
23
|
+
# # => 'data'
|
24
|
+
#
|
25
|
+
# Returns a new instance of the cache.
|
26
|
+
def initialize(opts = {})
|
27
|
+
opts.merge!({filename: '_tmp/cache.store'})
|
28
|
+
FileUtils.mkdir_p(File.dirname opts[:filename])
|
29
|
+
@file_store = YAML::Store.new opts[:filename]
|
30
|
+
@memory_store = {}
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
33
|
+
# Public: Retrieves the data stored previously under the given key.
|
34
|
+
#
|
35
|
+
# key - key part of a key value pair
|
36
|
+
#
|
37
|
+
# Examples
|
38
|
+
#
|
39
|
+
# store.read('my_key')
|
40
|
+
# # => 'my_data'
|
41
|
+
#
|
42
|
+
# Returns the data associated with the key.
|
43
|
+
def read(key)
|
44
|
+
key.freeze if key.is_a? String
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
if @memory_store.has_key? key
|
47
|
+
@memory_store[key]
|
48
|
+
else
|
49
|
+
@file_store.transaction do
|
50
|
+
@memory_store[key] = @file_store[key]
|
51
|
+
end
|
52
|
+
@memory_store[key]
|
50
53
|
end
|
51
|
-
@memory_store[key]
|
52
54
|
end
|
53
|
-
end
|
54
55
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
56
|
+
# Public: Adds data to the cache.
|
57
|
+
#
|
58
|
+
# key - A key for the cache, strings or symbols should be used
|
59
|
+
# value - Data to store in the cache
|
60
|
+
#
|
61
|
+
# Examples
|
62
|
+
#
|
63
|
+
# store.write(:pi, 3.14)
|
64
|
+
# # => 3.14
|
65
|
+
#
|
66
|
+
# Returns the data just saved.
|
67
|
+
def write(key, value)
|
68
|
+
key.freeze if key.is_a? String
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
|
70
|
+
@memory_store[key] = value
|
71
|
+
@file_store.transaction do
|
72
|
+
@file_store[key] = value
|
73
|
+
end
|
72
74
|
end
|
73
|
-
end
|
74
75
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
76
|
+
# Public: Retreives the value from the cache, or the return of the Block.
|
77
|
+
#
|
78
|
+
# key - Key in the cache to retreive.
|
79
|
+
# block - The block to be evaluated for a default value.
|
80
|
+
#
|
81
|
+
# Examples
|
82
|
+
#
|
83
|
+
# store.fetch(key) { 'new data' }
|
84
|
+
# # => 'new data'
|
85
|
+
# store.write(key, 23)
|
86
|
+
# store.fetch(key) { 'new data' }
|
87
|
+
# # => 23
|
88
|
+
#
|
89
|
+
# Returns the value in the cache, or the default supplied from the block.
|
90
|
+
def fetch(key)
|
91
|
+
key.freeze if key.is_a? String
|
91
92
|
|
92
|
-
|
93
|
+
read(key) || yield.tap { |data| write(key, data) }
|
94
|
+
end
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
98
|
+
|
@@ -5,125 +5,126 @@ require 'aweplug/helpers/searchisko'
|
|
5
5
|
require 'json'
|
6
6
|
require 'pry'
|
7
7
|
|
8
|
-
module Aweplug
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
# extension Aweplug::Extensions::AsciidocExample({...})
|
17
|
-
class AsciidocExample
|
18
|
-
include Aweplug::Helper::Git::Commit::Metadata
|
19
|
-
include Aweplug::Helper::Git::Repository
|
20
|
-
|
21
|
-
# Public: Initialization method, used in the awestruct pipeline.
|
8
|
+
module Aweplug
|
9
|
+
module Extensions
|
10
|
+
# Public: An awestruct extension for guides / examples written in AsciiDoc.
|
11
|
+
# Files with the .asciidoc or .adoc extension are considered to be
|
12
|
+
# AsciiDoc files. This extension makes use of asciidoctor to
|
13
|
+
# render the files.
|
14
|
+
#
|
15
|
+
# Example
|
22
16
|
#
|
23
|
-
#
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
17
|
+
# extension Aweplug::Extensions::AsciidocExample({...})
|
18
|
+
class AsciidocExample
|
19
|
+
include Aweplug::Helper::Git::Commit::Metadata
|
20
|
+
include Aweplug::Helper::Git::Repository
|
52
21
|
|
53
|
-
|
22
|
+
# Public: Initialization method, used in the awestruct pipeline.
|
23
|
+
#
|
24
|
+
# opts - A Hash of options, some being required, some not (default: {}).
|
25
|
+
# :repository - The String name of the directory
|
26
|
+
# containing the repository (required).
|
27
|
+
# :directory - The String directory name, within the
|
28
|
+
# :respository, containing the files
|
29
|
+
# (required).
|
30
|
+
# :layout - The String name of the layout to use,
|
31
|
+
# omitting the extension (required).
|
32
|
+
# :output_dir - The String or Pathname of the output
|
33
|
+
# directory for the files (required).
|
34
|
+
# :additional_excludes - An Array of Strings containing
|
35
|
+
# additional base file names to exclude
|
36
|
+
# (default: []).
|
37
|
+
# :recurse_subdirectories - Boolean flag indicating to continue
|
38
|
+
# searching subdirectories (default:
|
39
|
+
# true).
|
40
|
+
# :additional_metadata_keys - An Array of String keys from the
|
41
|
+
# AsciiDoc metadata to include in the
|
42
|
+
# searchisko payload (default: []).
|
43
|
+
# :site_variable - String name of the key within the site
|
44
|
+
# containing additional metadata about
|
45
|
+
# the guide (default: value of
|
46
|
+
# :output_dir).
|
47
|
+
# Returns the created extension.
|
48
|
+
def initialize(opts = {})
|
49
|
+
required_keys = [:repository, :directory, :layout, :output_dir, :site_variable]
|
50
|
+
opts = {additional_excludes: [], recurse_subdirectories: true,
|
51
|
+
additional_metadata_keys: [], site_variable: opts[:output_dir]}.merge opts
|
52
|
+
missing_required_keys = required_keys - opts.keys
|
54
53
|
|
55
|
-
|
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]
|
63
|
-
end
|
54
|
+
raise ArgumentError.new "Missing required arguments #{missing_required_keys.join ', '}" unless missing_required_keys.empty?
|
64
55
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
:searchisko_username => ENV['dcp_user'],
|
75
|
-
:searchisko_password => ENV['dcp_password'],
|
76
|
-
:logger => site.profile == 'developement'})
|
77
|
-
Find.find @directory do |path|
|
78
|
-
Find.prune if File.directory?(path) && !@recurse_subdirectories
|
56
|
+
@repo = opts[:repository]
|
57
|
+
@output_dir = Pathname.new opts[:output_dir]
|
58
|
+
@layout = opts[:layout]
|
59
|
+
@recurse_subdirectories = opts[:recurse_subdirectories]
|
60
|
+
@additional_metadata_keys = opts[:additional_metadata_keys]
|
61
|
+
@additional_excludes = opts[:additional_excludes]
|
62
|
+
@directory = File.join opts[:repository], opts[:directory]
|
63
|
+
@site_variable = opts[:site_variable]
|
64
|
+
end
|
79
65
|
|
80
|
-
|
66
|
+
# Internal: Execute method required by awestruct. Called during the
|
67
|
+
# pipeline execution. No return.
|
68
|
+
#
|
69
|
+
# site - The site instance from awestruct.
|
70
|
+
#
|
71
|
+
# Returns nothing.
|
72
|
+
def execute site
|
73
|
+
searchisko = Aweplug::Helpers::Searchisko.new({:base_url => site.dcp_base_url,
|
74
|
+
:authenticate => true,
|
75
|
+
:searchisko_username => ENV['dcp_user'],
|
76
|
+
:searchisko_password => ENV['dcp_password'],
|
77
|
+
:logger => site.profile == 'developement'})
|
78
|
+
Find.find @directory do |path|
|
79
|
+
Find.prune if File.directory?(path) && !@recurse_subdirectories
|
81
80
|
|
82
|
-
|
81
|
+
next if File.directory?(path) # If it's a directory, start recursing
|
83
82
|
|
84
|
-
|
85
|
-
page.layout = @layout
|
86
|
-
page.output_path = File.join(@output_dir, File.basename(page.output_path))
|
83
|
+
Find.prune if File.extname(path) !~ /\.a(scii)?doc/ || @additional_excludes.include?(File.basename path)
|
87
84
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
:toc => doc.sections.inject([]) {|result, elm| result << {:id => elm.id, :text => elm.title}; result},
|
92
|
-
:github_repo_url => repository_url(@repo),
|
93
|
-
# Will need to strip html tags for summary
|
94
|
-
:summary => doc.sections.first.render}
|
85
|
+
page = site.engine.load_site_page path
|
86
|
+
page.layout = @layout
|
87
|
+
page.output_path = File.join(@output_dir, File.basename(page.output_path))
|
95
88
|
|
96
|
-
|
97
|
-
|
89
|
+
doc = Asciidoctor.load_file path
|
90
|
+
metadata = {:author => doc.author, :commits => commit_info(@repo, path),
|
91
|
+
:title => doc.doctitle, :tags => doc.attributes['tags'],
|
92
|
+
:toc => doc.sections.inject([]) {|result, elm| result << {:id => elm.id, :text => elm.title}; result},
|
93
|
+
:github_repo_url => repository_url(@repo),
|
94
|
+
# Will need to strip html tags for summary
|
95
|
+
:summary => doc.sections.first.render}
|
98
96
|
|
99
|
-
|
100
|
-
|
101
|
-
:sys_content_id => Digest::SHA1.hexdigest(metadata[:title])[0..7], # maybe change?
|
102
|
-
:sys_description => metadata[:summary],
|
103
|
-
:sys_content => doc.render,
|
104
|
-
:sys_url_view => "#{site.base_url}#{site.ctx_root.nil? ? '/' : '/' + site.ctx_root + '/'}#{page.output_path}",
|
105
|
-
:"sys_content_content-type" => 'text/html',
|
106
|
-
:sys_type => 'jbossdeveloper_example',
|
107
|
-
:sys_content_type => 'example',
|
108
|
-
:sys_content_provider => 'jboss-developer',
|
109
|
-
:contributors => metadata[:commits].collect { |c| c[:author] }.unshift(metadata[:author]).uniq,
|
110
|
-
:sys_created => metadata[:commits].collect { |c| DateTime.parse c[:date] }.last,
|
111
|
-
:sys_activity_dates => metadata[:commits].collect { |c| DateTime.parse c[:date] },
|
112
|
-
:sys_updated => metadata[:commits].collect { |c| DateTime.parse c[:date] }.first
|
113
|
-
}
|
97
|
+
page.send('metadata=', metadata)
|
98
|
+
site.pages << page
|
114
99
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
100
|
+
searchisko_hash = {
|
101
|
+
:sys_title => metadata[:title],
|
102
|
+
:sys_content_id => Digest::SHA1.hexdigest(metadata[:title])[0..7], # maybe change?
|
103
|
+
:sys_description => metadata[:summary],
|
104
|
+
:sys_content => doc.render,
|
105
|
+
:sys_url_view => "#{site.base_url}#{site.ctx_root.nil? ? '/' : '/' + site.ctx_root + '/'}#{page.output_path}",
|
106
|
+
:"sys_content_content-type" => 'text/html',
|
107
|
+
:sys_type => 'jbossdeveloper_example',
|
108
|
+
:sys_content_type => 'example',
|
109
|
+
:sys_content_provider => 'jboss-developer',
|
110
|
+
:contributors => metadata[:commits].collect { |c| c[:author] }.unshift(metadata[:author]).uniq,
|
111
|
+
:sys_created => metadata[:commits].collect { |c| DateTime.parse c[:date] }.last,
|
112
|
+
:sys_activity_dates => metadata[:commits].collect { |c| DateTime.parse c[:date] },
|
113
|
+
:sys_updated => metadata[:commits].collect { |c| DateTime.parse c[:date] }.first
|
114
|
+
}
|
119
115
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
116
|
+
@additional_metadata_keys.inject(searchisko_hash) do |hash, key|
|
117
|
+
hash[key.to_sym] = doc.attributes[key]
|
118
|
+
hash
|
119
|
+
end
|
120
|
+
|
121
|
+
unless site.profile =~ /development/
|
122
|
+
searchisko.push_content(searchisko_hash[:sys_type],
|
123
|
+
searchisko_hash[:sys_content_id],
|
124
|
+
searchisko_hash.to_json)
|
125
|
+
end
|
124
126
|
end
|
125
127
|
end
|
126
128
|
end
|
127
129
|
end
|
128
130
|
end
|
129
|
-
|
@@ -33,6 +33,8 @@ module Aweplug
|
|
33
33
|
# containing additional metadata about
|
34
34
|
# the guide (default: value of
|
35
35
|
# :output_dir).
|
36
|
+
# :excludes - Array of Strings containing additional
|
37
|
+
# directory names to exclude. Defaults to [].
|
36
38
|
# Returns the created extension.
|
37
39
|
def initialize opts = {}
|
38
40
|
required_keys = [:repository, :layout, :output_dir]
|
@@ -43,6 +45,7 @@ module Aweplug
|
|
43
45
|
@output_dir = Pathname.new opts[:output_dir]
|
44
46
|
@layout = opts[:layout]
|
45
47
|
@site_variable = opts[:site_variable] || opts[:output_dir]
|
48
|
+
@excludes = opts[:excludes] || []
|
46
49
|
end
|
47
50
|
|
48
51
|
# Internal: Execute method required by awestruct. Called during the
|
@@ -60,6 +63,8 @@ module Aweplug
|
|
60
63
|
:searchisko_password => ENV['dcp_password'],
|
61
64
|
:logger => site.profile == 'developement'})
|
62
65
|
Dir["#{@repo}/**/README.md"].each do |file|
|
66
|
+
next if @excludes.include?(File.dirname(file))
|
67
|
+
|
63
68
|
page = add_to_site site, file
|
64
69
|
|
65
70
|
metadata = extract_metadata(file)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'aweplug/helpers/vimeo'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Aweplug
|
5
|
+
module Extensions
|
6
|
+
module Video
|
7
|
+
# Public: Awestruct Extension which iterates over a site variable which
|
8
|
+
# contains vimeo URLs and creates pages out of them, also sends the info
|
9
|
+
# over to a searchisko instance for indexing.
|
10
|
+
class Vimeo
|
11
|
+
include Aweplug::Helpers::Vimeo
|
12
|
+
|
13
|
+
# Public: Creates a new instance of this Awestruct plugin.
|
14
|
+
#
|
15
|
+
# variable_name - Name of the variable in the Awestruct Site containing
|
16
|
+
# the list of vimeo videos.
|
17
|
+
# layout - Name of the layout to be used for the generated Pages.
|
18
|
+
#
|
19
|
+
# Returns a new instance of this extension.
|
20
|
+
def initialize variable_name, layout
|
21
|
+
@variable = variable_name
|
22
|
+
@layout = layout
|
23
|
+
end
|
24
|
+
|
25
|
+
def execute site
|
26
|
+
@site = site
|
27
|
+
searchisko = Aweplug::Helpers::Searchisko.new({:base_url => site.dcp_base_url,
|
28
|
+
:authenticate => true,
|
29
|
+
:searchisko_username => ENV['dcp_user'],
|
30
|
+
:searchisko_password => ENV['dcp_password'],
|
31
|
+
:logger => site.profile == 'developement'})
|
32
|
+
|
33
|
+
site[@variable].each do |url|
|
34
|
+
id = url.match(/^.*\/(\d*)$/)[1]
|
35
|
+
page_path = Pathname.new(File.join 'video', 'vimeo', "#{id}.html")
|
36
|
+
page = ::Awestruct::Page.new(site,
|
37
|
+
::Awestruct::Handlers::LayoutHandler.new(site,
|
38
|
+
::Awestruct::Handlers::TiltHandler.new(site,
|
39
|
+
::Aweplug::Handlers::SyntheticHandler.new(site, '', page_path))))
|
40
|
+
page.layout = @layout
|
41
|
+
page.output_path = File.join 'video', 'vimeo', id,'index.html'
|
42
|
+
video = Aweplug::Helpers::Vimeo::Video.new url, access_token, site
|
43
|
+
page.send('video=', video)
|
44
|
+
page.send('video_url=', url)
|
45
|
+
site.pages << page
|
46
|
+
|
47
|
+
unless video.fetch_info['title'].include? 'Unable to fetch'
|
48
|
+
searchisko_payload = {
|
49
|
+
:sys_type => 'jbossdeveloper_video',
|
50
|
+
:sys_content_provider => 'jboss-developer',
|
51
|
+
:sys_content_type => 'video',
|
52
|
+
:sys_content_id => video.id,
|
53
|
+
:sys_updated => video.modified_date,
|
54
|
+
:sys_contributors => video.cast,
|
55
|
+
:sys_activity_dates => [video.modified_date, video.upload_date],
|
56
|
+
:sys_created => video.upload_date,
|
57
|
+
:sys_title => video.title,
|
58
|
+
:sys_url_view => "http://vimeo.com/#{video.id}",
|
59
|
+
:sys_description => video.description,
|
60
|
+
:duration => video.duration,
|
61
|
+
:thumbnail => video.thumb_url,
|
62
|
+
:tag => video.tags
|
63
|
+
}
|
64
|
+
|
65
|
+
unless site.profile =~ /development/
|
66
|
+
searchisko.push_content(searchisko_payload[:sys_type],
|
67
|
+
searchisko_payload[:sys_content_id],
|
68
|
+
searchisko_payload.to_json)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -2,103 +2,106 @@ require 'faraday'
|
|
2
2
|
require 'faraday_middleware'
|
3
3
|
require 'aweplug/cache/yaml_file_cache'
|
4
4
|
|
5
|
-
module Aweplug
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
if opts[:
|
24
|
-
|
25
|
-
|
26
|
-
|
5
|
+
module Aweplug
|
6
|
+
module Helpers
|
7
|
+
# Public: A helper class for using Searchisko.
|
8
|
+
class Searchisko
|
9
|
+
# Public: Initialization of the object, keeps a Faraday connection cached.
|
10
|
+
#
|
11
|
+
# opts - symbol keyed hash. Current keys used:
|
12
|
+
# :base_url - base url for the searchisko instance
|
13
|
+
# :authenticate - boolean flag for authentication
|
14
|
+
# :searchisko_username - Username to use for auth
|
15
|
+
# :searchisko_password - Password to use for auth
|
16
|
+
# :logging - Boolean to log responses
|
17
|
+
# :raise_error - Boolean flag if 404 and 500 should raise exceptions
|
18
|
+
# :adapter - faraday adapter to use, defaults to :net_http
|
19
|
+
#
|
20
|
+
# Returns a new instance of Searchisko.
|
21
|
+
def initialize opts={}
|
22
|
+
@faraday = Faraday.new(:url => opts[:base_url]) do |builder|
|
23
|
+
if opts[:authenticate]
|
24
|
+
if opts[:searchisko_username] && opts[:searchisko_password]
|
25
|
+
builder.request :basic_auth, opts[:searchisko_username], opts[:searchisko_password]
|
26
|
+
else
|
27
|
+
$LOG.warn 'Missing username and / or password for searchisko'
|
28
|
+
end
|
27
29
|
end
|
30
|
+
builder.response :logger if opts[:logging]
|
31
|
+
builder.response :raise_error if opts[:raise_error]
|
32
|
+
builder.use FaradayMiddleware::Caching, Aweplug::Cache::YamlFileCache.new, {}
|
33
|
+
#builder.response :json, :content_type => /\bjson$/
|
34
|
+
builder.adapter opts[:adapter] || :net_http
|
28
35
|
end
|
29
|
-
builder.response :logger if opts[:logging]
|
30
|
-
builder.response :raise_error if opts[:raise_error]
|
31
|
-
builder.use FaradayMiddleware::Caching, Aweplug::Cache::YamlFileCache.new, {}
|
32
|
-
#builder.response :json, :content_type => /\bjson$/
|
33
|
-
builder.adapter opts[:adapter] || :net_http
|
34
36
|
end
|
35
|
-
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
38
|
+
# Public: Performs a GET search against the Searchisko instance using
|
39
|
+
# provided parameters.
|
40
|
+
#
|
41
|
+
# params - Hash of parameters to use as query string. See
|
42
|
+
# http://docs.jbossorg.apiary.io/#searchapi for more information
|
43
|
+
# about parameters and how they affect the search.
|
44
|
+
#
|
45
|
+
# Example
|
46
|
+
#
|
47
|
+
# searchisko.search {:query => 'Search query'}
|
48
|
+
# # => {...}
|
49
|
+
#
|
50
|
+
# Returns the String result of the search.
|
51
|
+
def search params = {}
|
52
|
+
get '/search', params
|
53
|
+
end
|
53
54
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
55
|
+
# Public: Makes an HTTP GET to host/v1/rest/#{path} and returns the
|
56
|
+
# result from the Faraday request.
|
57
|
+
#
|
58
|
+
# path - String containing the rest of the path.
|
59
|
+
# params - Hash containing query string parameters.
|
60
|
+
#
|
61
|
+
# Example
|
62
|
+
#
|
63
|
+
# searchisko.get 'feed', {:query => 'Search Query'}
|
64
|
+
# # => Faraday Response Object
|
65
|
+
#
|
66
|
+
# Returns the Faraday Response for the request.
|
67
|
+
def get path, params = {}
|
68
|
+
@faraday.get "/v1/rest/" + path, params
|
69
|
+
end
|
69
70
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
71
|
+
# Public: Posts content to Searchisko.
|
72
|
+
#
|
73
|
+
# content_type - String of the Searchisko sys_content_type for the content
|
74
|
+
# being posted.
|
75
|
+
# content_id - String of the Searchisko sys_content_id for the content.
|
76
|
+
# params - Hash containing the content to push.
|
77
|
+
#
|
78
|
+
# Examples
|
79
|
+
#
|
80
|
+
# searchisko.push_content 'jbossdeveloper_bom', id, content_hash
|
81
|
+
# # => Faraday Response
|
82
|
+
#
|
83
|
+
# Returns a Faraday Response from the POST.
|
84
|
+
def push_content content_type, content_id, params = {}
|
85
|
+
post "/content/#{content_type}/#{content_id}", params
|
86
|
+
end
|
86
87
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
88
|
+
# Public: Perform an HTTP POST to Searchisko.
|
89
|
+
#
|
90
|
+
# path - String containing the rest of the path.
|
91
|
+
# params - Hash containing the POST body.
|
92
|
+
#
|
93
|
+
# Examples
|
94
|
+
#
|
95
|
+
# searchisko.post "rating/#{searchisko_document_id}", {rating: 3}
|
96
|
+
# # => Faraday Response
|
97
|
+
def post path, params = {}
|
98
|
+
@faraday.post do |req|
|
99
|
+
req.url "/v1/rest/" + path
|
100
|
+
req.headers['Content-Type'] = 'application/json'
|
101
|
+
req.body = params
|
102
|
+
end
|
101
103
|
end
|
102
104
|
end
|
103
105
|
end
|
104
106
|
end
|
107
|
+
|
@@ -59,11 +59,12 @@ module Aweplug
|
|
59
59
|
#
|
60
60
|
# full_name - the full name, e.g. Pete Muir
|
61
61
|
def first_name(full_name)
|
62
|
-
full_name.split[0]
|
62
|
+
full_name.split[0] || full_name
|
63
63
|
end
|
64
64
|
|
65
65
|
# Internal: Data object to hold and parse values from the Vimeo API.
|
66
66
|
class Video
|
67
|
+
include Aweplug::Helpers::Vimeo
|
67
68
|
def initialize(url, access_token, site)
|
68
69
|
@id = url.match(/^.*\/(\d*)$/)[1]
|
69
70
|
@site = site
|
@@ -106,23 +107,42 @@ module Aweplug
|
|
106
107
|
end
|
107
108
|
end
|
108
109
|
end
|
109
|
-
out
|
110
|
+
out || ''
|
110
111
|
end
|
111
112
|
|
112
113
|
def author
|
113
114
|
if @cast[0]
|
114
115
|
@cast[0]
|
115
116
|
else
|
116
|
-
@cast =
|
117
|
+
@cast = OpenStruct.new({"realname" => "Unknown"})
|
117
118
|
end
|
118
119
|
end
|
119
120
|
|
120
121
|
def cast
|
121
|
-
@cast
|
122
|
+
@cast || ''
|
123
|
+
end
|
124
|
+
|
125
|
+
def modified_date
|
126
|
+
if @video["upload_date"]
|
127
|
+
DateTime.parse(@video["upload_date"]).strftime("%F %T")
|
128
|
+
else
|
129
|
+
"UNKOWN DATE"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def tags
|
134
|
+
if @video['tags'].is_a? Hash
|
135
|
+
@video['tags']['tag'].inject([]) do |result, element|
|
136
|
+
result << element['normalized']
|
137
|
+
result
|
138
|
+
end
|
139
|
+
else
|
140
|
+
''
|
141
|
+
end
|
122
142
|
end
|
123
143
|
|
124
144
|
def thumb_url
|
125
|
-
@thumb["_content"]
|
145
|
+
@thumb["_content"] || ''
|
126
146
|
end
|
127
147
|
|
128
148
|
def fetch_info
|
@@ -135,22 +155,27 @@ module Aweplug
|
|
135
155
|
end
|
136
156
|
|
137
157
|
def fetch_thumb_url
|
138
|
-
|
139
|
-
|
140
|
-
@thumb = JSON.parse(body)["thumbnails"]["thumbnail"][1]
|
158
|
+
if @video['thumbnails']
|
159
|
+
@thumb = @video["thumbnails"]["thumbnail"][1]
|
141
160
|
else
|
142
161
|
@thumb = {"_content" => ""}
|
143
162
|
end
|
144
163
|
end
|
145
164
|
|
146
165
|
def fetch_cast
|
147
|
-
body = exec_method "vimeo.videos.getCast", @id
|
148
166
|
@cast = []
|
149
|
-
if
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
167
|
+
if @video['cast']
|
168
|
+
cast = @video["cast"]
|
169
|
+
if cast['total'] != '1'
|
170
|
+
cast["member"].each do |c|
|
171
|
+
o = OpenStruct.new(c)
|
172
|
+
if o.username != "jbossdeveloper"
|
173
|
+
@cast << o
|
174
|
+
end
|
175
|
+
end
|
176
|
+
else
|
177
|
+
if cast['member']['username'] != 'jbossdeveloper'
|
178
|
+
@cast << OpenStruct.new(cast['member'])
|
154
179
|
end
|
155
180
|
end
|
156
181
|
end
|
@@ -163,44 +188,28 @@ module Aweplug
|
|
163
188
|
#
|
164
189
|
# Returns JSON retreived from the Vimeo API
|
165
190
|
def exec_method(method, video_id)
|
191
|
+
# TODO: Look at switching this to faraday
|
166
192
|
if access_token
|
167
193
|
query = "http://vimeo.com/api/rest/v2?method=#{method}&video_id=#{video_id}&format=json"
|
168
194
|
access_token.get(query).body
|
169
195
|
end
|
170
196
|
end
|
197
|
+
end
|
171
198
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
return
|
187
|
-
end
|
188
|
-
if not @site.vimeo_client_id
|
189
|
-
puts 'Cannot fetch video info vimeo, vimeo_client_id is missing from _config/site.yml'
|
190
|
-
return
|
191
|
-
end
|
192
|
-
if not ENV['vimeo_access_token_secret']
|
193
|
-
puts 'Cannot fetch video info from vimeo, vimeo_access_token_secret is missing from environment variables'
|
194
|
-
return
|
195
|
-
end
|
196
|
-
if not @site.vimeo_access_token
|
197
|
-
puts 'Cannot fetch video info from vimeo, vimeo_access_token is missing from _config/site.yml'
|
198
|
-
return
|
199
|
-
end
|
200
|
-
consumer = OAuth::Consumer.new(@site.vimeo_client_id, ENV['vimeo_client_secret'],
|
201
|
-
{ :site => "https://vimeo.com",
|
202
|
-
:scheme => :header
|
203
|
-
})
|
199
|
+
# Internal: Obtains an OAuth::AcccessToken for the Vimeo API, using the
|
200
|
+
# vimeo_client_id and vimeo_access_token defined in site/config.yml and
|
201
|
+
# vimeo_client_secret and vimeo_access_token_secret defined in environment
|
202
|
+
# variables
|
203
|
+
#
|
204
|
+
# site - Awestruct Site instance
|
205
|
+
#
|
206
|
+
# Returns an OAuth::AccessToken for the Vimeo API
|
207
|
+
def access_token
|
208
|
+
if @access_token
|
209
|
+
@access_token
|
210
|
+
else
|
211
|
+
if not ENV['vimeo_client_secret']
|
212
|
+
puts 'Cannot fetch video info from vimeo, vimeo_client_secret is missing from environment variables'
|
204
213
|
# now create the access token object from passed values
|
205
214
|
token_hash = { :oauth_token => @site.vimeo_access_token,
|
206
215
|
:oauth_token_secret => ENV['vimeo_access_token_secret']
|
data/lib/aweplug/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aweplug
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.a17
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-03-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: octokit
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- lib/aweplug/extensions/asciidoc_example.rb
|
167
167
|
- lib/aweplug/extensions/kramdown_quickstart.rb
|
168
168
|
- lib/aweplug/extensions/sections.rb
|
169
|
+
- lib/aweplug/extensions/vimeo.rb
|
169
170
|
- lib/aweplug/handlers/synthetic_handler.rb
|
170
171
|
- lib/aweplug/helpers/.gitkeep
|
171
172
|
- lib/aweplug/helpers/git_metadata.rb
|
@@ -190,7 +191,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
190
191
|
version: '0'
|
191
192
|
segments:
|
192
193
|
- 0
|
193
|
-
hash: -
|
194
|
+
hash: -3243289337858499691
|
194
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
196
|
none: false
|
196
197
|
requirements:
|