middleman-twitter-oembed 0.1.0
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/.gitignore +11 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +6 -0
- data/README.md +78 -0
- data/Rakefile +21 -0
- data/fixtures/basic-app/config.rb +1 -0
- data/fixtures/basic-app/source/index.html.erb +5 -0
- data/lib/middleman-twitter-oembed.rb +7 -0
- data/lib/middleman-twitter-oembed/extension.rb +46 -0
- data/lib/middleman-twitter-oembed/helpers.rb +19 -0
- data/lib/middleman-twitter-oembed/interface.rb +47 -0
- data/lib/middleman-twitter-oembed/version.rb +5 -0
- data/lib/middleman_extension.rb +2 -0
- data/middleman-twitter-oembed.gemspec +32 -0
- metadata +186 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cf104be4b9895b313d987752c3c99fa96f00b974
|
4
|
+
data.tar.gz: 905e1d36b4a0a35e04d4c6bf206f6a8c229069f0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef6f428322f4c236b1fdf621e6f8a663db2aeb3b0964a79246fa16b0f6f5fc65149743f16deb98d05682ceca8624d56eb1d4dcfdac26dc3b5827e321fb4843d4
|
7
|
+
data.tar.gz: 568a4a6d0ce31252fa92088f2aa6e554c2020b055965feaad2efd3af2fbdfc6edddedac15b183405133c150ec81ed0d9d634f4ff7276bf05c29063ce34ab1d0d
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
[](http://badge.fury.io/rb/middleman-twitter-oembed)
|
2
|
+
[](https://travis-ci.org/atarukodaka/middleman-twitter-oembed)
|
3
|
+
[](https://coveralls.io/r/atarukodaka/middleman-twitter-oembed)
|
4
|
+
[](https://codeclimate.com/github/atarukodaka/middleman-twitter-oembed)
|
5
|
+
|
6
|
+
|
7
|
+
## Middleman::TwitterOembed
|
8
|
+
|
9
|
+
An extension to render and/or convert twitter stauts id into e-Embed status.
|
10
|
+
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
gem 'middleman-twitter-oembed'
|
18
|
+
```
|
19
|
+
|
20
|
+
And then execute:
|
21
|
+
|
22
|
+
$ bundle
|
23
|
+
|
24
|
+
Or install it yourself as:
|
25
|
+
|
26
|
+
$ gem install middleman-twitter-oembed
|
27
|
+
|
28
|
+
## Usage
|
29
|
+
|
30
|
+
in config.rb:
|
31
|
+
|
32
|
+
activate :twitter_oembed
|
33
|
+
|
34
|
+
### convert before rendering
|
35
|
+
|
36
|
+
on default, twitter url(like 'http://twitter.com/foo/123456789') will be converted to twitter box before rendering.
|
37
|
+
|
38
|
+
You can change the regex to match:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
activate :twitter_oembed do |twitter|
|
42
|
+
twitter.convert_regex = %r{\[\[twitter: *(\d+)\]\]}
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
If you don't want to convert, set false for enable_convert option:
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
activate :twitter_oembed do |twitter|
|
50
|
+
twitter.enable_convert = false
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
### helper
|
55
|
+
|
56
|
+
in *.erb:
|
57
|
+
|
58
|
+
```
|
59
|
+
<%= twitter_oembed('123456789') %>
|
60
|
+
|
61
|
+
or
|
62
|
+
|
63
|
+
<%= twitter_oembed_by_url('http://twitter.com/foo/status/123456789') %>
|
64
|
+
```
|
65
|
+
|
66
|
+
## Development
|
67
|
+
|
68
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
69
|
+
|
70
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
71
|
+
|
72
|
+
## Contributing
|
73
|
+
|
74
|
+
1. Fork it ( https://github.com/atarukodaka/middleman-twitter-oembed/fork )
|
75
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
76
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
77
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
78
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rake/clean'
|
3
|
+
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
require 'middleman-core'
|
6
|
+
|
7
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
8
|
+
ENV["TEST"] = "true"
|
9
|
+
|
10
|
+
exempt_tags = ""
|
11
|
+
exempt_tags << "--tags ~@nojava " if RUBY_PLATFORM == "java"
|
12
|
+
exempt_tags << "--tags ~@three_one " unless ::Middleman::VERSION.match(/^3\.1\./)
|
13
|
+
|
14
|
+
t.cucumber_opts = "--color --tags ~@wip #{exempt_tags} --strict --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'}"
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'rake/clean'
|
18
|
+
|
19
|
+
desc "Run tests, both RSpec and Cucumber"
|
20
|
+
#task :test => [:spec, :cucumber]
|
21
|
+
task :test => [:cucumber]
|
@@ -0,0 +1 @@
|
|
1
|
+
activate :twitter_oembed
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'middleman-twitter-oembed/helpers'
|
2
|
+
require 'middleman-twitter-oembed/interface'
|
3
|
+
|
4
|
+
module Middleman
|
5
|
+
module TwitterOembed
|
6
|
+
class Extension < Middleman::Extension
|
7
|
+
option :enable_convert, true
|
8
|
+
option :convert_regex, %r{^https?://twitter.com/[a-zA-Z0-9_]+/status/(\d+)$}
|
9
|
+
option :omit_script, false
|
10
|
+
option :use_cache, true
|
11
|
+
option :cache_dir, ".caches/twitter_oembed"
|
12
|
+
|
13
|
+
self.defined_helpers = [::Middleman::TwitterOembed::Helpers]
|
14
|
+
|
15
|
+
attr_reader :interface
|
16
|
+
|
17
|
+
def initialize(app, options_hash={}, &block)
|
18
|
+
super
|
19
|
+
#app.set :twitter_oembed_settings, options
|
20
|
+
|
21
|
+
opts = {
|
22
|
+
use_cache: options.use_cache,
|
23
|
+
cache_dir: options.cache_dir,
|
24
|
+
omit_script: options.omit_script
|
25
|
+
}
|
26
|
+
@interface = Middleman::TwitterOembed::Interface.new(opts)
|
27
|
+
|
28
|
+
extension = self
|
29
|
+
app.before_render do |body|
|
30
|
+
extension.convert(body)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def convert(body)
|
35
|
+
return unless options.enable_convert
|
36
|
+
|
37
|
+
#regex = %r{https?://twitter.com/[a-zA-Z0-9_]+/status/(\d+)}
|
38
|
+
regex = options.convert_regex
|
39
|
+
body.gsub(regex){
|
40
|
+
res = @interface.get_tweet($1)
|
41
|
+
res['html']
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end ## class Extension
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Middleman::TwitterOembed
|
2
|
+
module Helpers
|
3
|
+
def twitter_oembed(status_id)
|
4
|
+
ext = extensions[:twitter_oembed]
|
5
|
+
res = ext.interface.get_tweet(status_id)
|
6
|
+
res['html']
|
7
|
+
end
|
8
|
+
alias_method :twitter_oembed_by_status_id, :twitter_oembed
|
9
|
+
|
10
|
+
def twitter_oembed_by_url(url)
|
11
|
+
regex = %r{https?://twitter.com/[a-zA-Z0-9_]+/status/(\d+)}
|
12
|
+
url =~ regex
|
13
|
+
status_id = $1
|
14
|
+
logger.debug url
|
15
|
+
logger.debug status_id
|
16
|
+
twitter_oembed(status_id)
|
17
|
+
end
|
18
|
+
end ## module Helpers
|
19
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Middleman::TwitterOembed
|
2
|
+
class Interface
|
3
|
+
include ERB::Util
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@use_cache = options[:use_cache] || true
|
7
|
+
@cache_dir = options[:cache_dir] || "./caches/twitter_oembed"
|
8
|
+
@omit_script = options[:omit_script] || false
|
9
|
+
|
10
|
+
@result_cache = {}
|
11
|
+
end
|
12
|
+
def get_tweet(status_id)
|
13
|
+
return @result_cache[status_id] if @result_cache.has_key?(status_id)
|
14
|
+
return @result_cache[status_id] = load_cache(status_id) if @use_cache && File.exist?(cache_filename(status_id))
|
15
|
+
|
16
|
+
url = "https://api.twitter.com/1/statuses/oembed.json?id=#{h(status_id)}"
|
17
|
+
url += "&omit_script=true" if @omit_script
|
18
|
+
begin
|
19
|
+
require 'open-uri'
|
20
|
+
require 'json'
|
21
|
+
|
22
|
+
res = JSON.parse(open(url).read)
|
23
|
+
## yet to rescue
|
24
|
+
end
|
25
|
+
|
26
|
+
@result_cache[status_id] = res
|
27
|
+
save_cache(status_id, res) if @use_cache
|
28
|
+
|
29
|
+
return res
|
30
|
+
end
|
31
|
+
private
|
32
|
+
def cache_filename(status_id)
|
33
|
+
File.join(@cache_dir, status_id)
|
34
|
+
end
|
35
|
+
def load_cache(status_id)
|
36
|
+
Marshal.load(File.read(cache_filename(status_id)))
|
37
|
+
end
|
38
|
+
def save_cache(status_id, res)
|
39
|
+
dir = File.dirname(cache_filename(status_id))
|
40
|
+
|
41
|
+
require 'fileutils'
|
42
|
+
FileUtils.mkdir_p(dir) unless File.exists?(dir)
|
43
|
+
File.open(cache_filename(status_id), 'wb'){|f| f.write(Marshal.dump(res))}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'middleman-twitter-oembed/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "middleman-twitter-oembed"
|
8
|
+
spec.version = Middleman::TwitterOembed::VERSION
|
9
|
+
spec.authors = ["Ataru Kodaka"]
|
10
|
+
spec.email = ["ataru.kodaka@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{An extension for middleman to render twittr oembed status}
|
13
|
+
spec.description = %q{An extension for middleman to render twittr oembed status}
|
14
|
+
spec.homepage = "http://github.com/atarukodaka/middleman-twitter-oembed"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency("middleman-core", "~> 3.2")
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "cucumber", "~> 1.3"
|
27
|
+
spec.add_development_dependency "aruba", "~> 0.6"
|
28
|
+
spec.add_development_dependency "therubyracer", "~>0.12"
|
29
|
+
spec.add_development_dependency "pry-byebug", "~>3.1"
|
30
|
+
spec.add_development_dependency "rb-readline", "~>0.5"
|
31
|
+
spec.add_development_dependency "middleman-pry", "~>0.0"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-twitter-oembed
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ataru Kodaka
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: middleman-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cucumber
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.3'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.3'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: aruba
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.6'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.6'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: therubyracer
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.12'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.12'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rb-readline
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.5'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.5'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: middleman-pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0.0'
|
139
|
+
description: An extension for middleman to render twittr oembed status
|
140
|
+
email:
|
141
|
+
- ataru.kodaka@gmail.com
|
142
|
+
executables: []
|
143
|
+
extensions: []
|
144
|
+
extra_rdoc_files: []
|
145
|
+
files:
|
146
|
+
- ".gitignore"
|
147
|
+
- ".travis.yml"
|
148
|
+
- CHANGELOG.md
|
149
|
+
- Gemfile
|
150
|
+
- README.md
|
151
|
+
- Rakefile
|
152
|
+
- fixtures/basic-app/config.rb
|
153
|
+
- fixtures/basic-app/source/index.html.erb
|
154
|
+
- lib/middleman-twitter-oembed.rb
|
155
|
+
- lib/middleman-twitter-oembed/extension.rb
|
156
|
+
- lib/middleman-twitter-oembed/helpers.rb
|
157
|
+
- lib/middleman-twitter-oembed/interface.rb
|
158
|
+
- lib/middleman-twitter-oembed/version.rb
|
159
|
+
- lib/middleman_extension.rb
|
160
|
+
- middleman-twitter-oembed.gemspec
|
161
|
+
homepage: http://github.com/atarukodaka/middleman-twitter-oembed
|
162
|
+
licenses:
|
163
|
+
- MIT
|
164
|
+
metadata: {}
|
165
|
+
post_install_message:
|
166
|
+
rdoc_options: []
|
167
|
+
require_paths:
|
168
|
+
- lib
|
169
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '0'
|
179
|
+
requirements: []
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 2.4.6
|
182
|
+
signing_key:
|
183
|
+
specification_version: 4
|
184
|
+
summary: An extension for middleman to render twittr oembed status
|
185
|
+
test_files: []
|
186
|
+
has_rdoc:
|