tweet_sanitizer 0.1.0.beta1 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.coveralls.yml +1 -0
- data/.github/workflows/test.yml +111 -0
- data/CHANGELOG.md +23 -0
- data/Gemfile +7 -0
- data/README.md +81 -5
- data/bin/console +2 -0
- data/lib/tweet_sanitizer/twitter_extension.rb +21 -0
- data/lib/tweet_sanitizer/version.rb +1 -1
- data/lib/tweet_sanitizer.rb +29 -10
- data/tweet_sanitizer.gemspec +12 -2
- metadata +64 -16
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4c5714c30ff280753252d5c0a6bfe3365b329199edb2d670190d069e9ff7820b
|
4
|
+
data.tar.gz: 0157a784bc6b12391389d14a34a27f41b61805cefbbc272b2e3d1a1066e0fbe3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18982482212aa7c854803a6770bb14b9d8990e9581fe7f3d27bc6896fd9645c6c408512d1b4e859d3c2c654095f7ce2ea7acb7e85686e542f49cdbdfb751f4d6
|
7
|
+
data.tar.gz: 6f82ab38dfdc1bcd8046d2cd1f4c8b28f239d5e5d4dd7f6d4a4af8c943d06a5a41e02d0ec2ab4129347dd610bb5cd203a60f9b9ef1c72bf851c022ea8757df48
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
repo_token: kZmA3FzhK4Oou7s7aQPRcAW0e8RbRlzhD
|
@@ -0,0 +1,111 @@
|
|
1
|
+
name: test
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
pull_request:
|
8
|
+
types:
|
9
|
+
- opened
|
10
|
+
- synchronize
|
11
|
+
- reopened
|
12
|
+
schedule:
|
13
|
+
- cron: "0 10 * * 5" # JST 19:00 (Fri)
|
14
|
+
|
15
|
+
env:
|
16
|
+
CI: "true"
|
17
|
+
|
18
|
+
jobs:
|
19
|
+
test:
|
20
|
+
runs-on: ubuntu-latest
|
21
|
+
|
22
|
+
container: ${{ matrix.ruby }}
|
23
|
+
|
24
|
+
strategy:
|
25
|
+
fail-fast: false
|
26
|
+
|
27
|
+
matrix:
|
28
|
+
ruby:
|
29
|
+
- ruby:2.2
|
30
|
+
- ruby:2.3
|
31
|
+
- ruby:2.4
|
32
|
+
- ruby:2.5
|
33
|
+
- ruby:2.6
|
34
|
+
- ruby:2.7
|
35
|
+
- ruby:3.0
|
36
|
+
- rubylang/ruby:master-nightly-bionic
|
37
|
+
include:
|
38
|
+
- ruby: rubylang/ruby:master-nightly-bionic
|
39
|
+
allow_failures: "true"
|
40
|
+
|
41
|
+
steps:
|
42
|
+
- uses: actions/checkout@v2
|
43
|
+
|
44
|
+
|
45
|
+
- name: Cache vendor/bundle
|
46
|
+
uses: actions/cache@v1
|
47
|
+
id: cache_gem
|
48
|
+
with:
|
49
|
+
path: vendor/bundle
|
50
|
+
key: v1-gem-${{ runner.os }}-${{ matrix.ruby }}-${{ github.sha }}
|
51
|
+
restore-keys: |
|
52
|
+
v1-gem-${{ runner.os }}-${{ matrix.ruby }}-
|
53
|
+
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
54
|
+
|
55
|
+
- name: bundle update
|
56
|
+
run: |
|
57
|
+
set -xe
|
58
|
+
bundle config path vendor/bundle
|
59
|
+
bundle update --jobs $(nproc) --retry 3
|
60
|
+
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
61
|
+
|
62
|
+
- name: Setup Code Climate Test Reporter
|
63
|
+
uses: aktions/codeclimate-test-reporter@v1
|
64
|
+
with:
|
65
|
+
codeclimate-test-reporter-id: ${{ secrets.CC_TEST_REPORTER_ID }}
|
66
|
+
command: before-build
|
67
|
+
if: matrix.ruby >= 'ruby:2.4'
|
68
|
+
continue-on-error: true
|
69
|
+
|
70
|
+
- name: Run test
|
71
|
+
run: |
|
72
|
+
set -xe
|
73
|
+
bundle exec rspec
|
74
|
+
continue-on-error: ${{ matrix.allow_failures == 'true' }}
|
75
|
+
|
76
|
+
- name: Teardown Code Climate Test Reporter
|
77
|
+
uses: aktions/codeclimate-test-reporter@v1
|
78
|
+
with:
|
79
|
+
codeclimate-test-reporter-id: ${{ secrets.CC_TEST_REPORTER_ID }}
|
80
|
+
command: after-build
|
81
|
+
if: matrix.ruby >= 'ruby:2.4' && always()
|
82
|
+
continue-on-error: true
|
83
|
+
|
84
|
+
- name: Slack Notification (not success)
|
85
|
+
uses: lazy-actions/slatify@master
|
86
|
+
if: "! success()"
|
87
|
+
continue-on-error: true
|
88
|
+
with:
|
89
|
+
job_name: ${{ format('*build* ({0})', matrix.ruby) }}
|
90
|
+
type: ${{ job.status }}
|
91
|
+
icon_emoji: ":octocat:"
|
92
|
+
url: ${{ secrets.SLACK_WEBHOOK }}
|
93
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
94
|
+
|
95
|
+
notify:
|
96
|
+
needs:
|
97
|
+
- test
|
98
|
+
|
99
|
+
runs-on: ubuntu-latest
|
100
|
+
|
101
|
+
steps:
|
102
|
+
- name: Slack Notification (success)
|
103
|
+
uses: lazy-actions/slatify@master
|
104
|
+
if: always()
|
105
|
+
continue-on-error: true
|
106
|
+
with:
|
107
|
+
job_name: '*build*'
|
108
|
+
type: ${{ job.status }}
|
109
|
+
icon_emoji: ":octocat:"
|
110
|
+
url: ${{ secrets.SLACK_WEBHOOK }}
|
111
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
## Unreleased
|
2
|
+
[full changelog](https://github.com/sue445/tweet_sanitizer/compare/v0.2.1...master)
|
3
|
+
|
4
|
+
## v0.2.1
|
5
|
+
[full changelog](https://github.com/sue445/tweet_sanitizer/compare/v0.2.0...v0.2.1)
|
6
|
+
|
7
|
+
* Enable MFA requirement for gem releasing
|
8
|
+
* https://github.com/sue445/tweet_sanitizer/pull/32
|
9
|
+
|
10
|
+
## v0.2.0
|
11
|
+
[full changelog](https://github.com/sue445/tweet_sanitizer/compare/v0.1.1...v0.2.0)
|
12
|
+
|
13
|
+
* Add sanitize options
|
14
|
+
* https://github.com/sue445/tweet_sanitizer/pull/12
|
15
|
+
|
16
|
+
## v0.1.1
|
17
|
+
[full changelog](https://github.com/sue445/tweet_sanitizer/compare/v0.1.0...v0.1.1)
|
18
|
+
|
19
|
+
* Use original tweet instead of RT
|
20
|
+
* https://github.com/sue445/tweet_sanitizer/pull/10
|
21
|
+
|
22
|
+
## v0.1.0
|
23
|
+
* first release
|
data/Gemfile
CHANGED
@@ -4,3 +4,10 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in tweet_sanitizer.gemspec
|
6
6
|
gemspec
|
7
|
+
|
8
|
+
if Gem::Version.create(RUBY_VERSION) < Gem::Version.create("2.5.0")
|
9
|
+
group :test do
|
10
|
+
# NOTE: unparser v0.3.0+ requires Ruby 2.5+
|
11
|
+
gem "unparser", "< 0.3.0"
|
12
|
+
end
|
13
|
+
end
|
data/README.md
CHANGED
@@ -1,8 +1,30 @@
|
|
1
1
|
# TweetSanitizer
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/tweet_sanitizer.svg)](https://badge.fury.io/rb/tweet_sanitizer)
|
3
|
+
[![Build Status](https://github.com/sue445/tweet_sanitizer/workflows/test/badge.svg?branch=master)](https://github.com/sue445/tweet_sanitizer/actions?query=workflow%3Atest)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/sue445/tweet_sanitizer.png)](https://codeclimate.com/github/sue445/tweet_sanitizer)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/github/sue445/tweet_sanitizer/badge.svg?branch=master)](https://coveralls.io/github/sue445/tweet_sanitizer?branch=master)
|
2
6
|
|
3
|
-
|
7
|
+
This is extension of [twitter](https://github.com/sferik/twitter). Sanitize `Twitter::Tweet#text`
|
4
8
|
|
5
|
-
|
9
|
+
## Example
|
10
|
+
```ruby
|
11
|
+
tweet = @client.status("https://twitter.com/github/status/866677968608927744")
|
12
|
+
tweet.text
|
13
|
+
#=> "Introducing GitHub Marketplace, a new place to browse and buy integrations using your GitHub account.… https://t.co/dK0Tmcmm72"
|
14
|
+
```
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
using TweetSanitizer::TwitterExtension
|
18
|
+
|
19
|
+
extended_tweet = @client.status("https://twitter.com/github/status/866677968608927744", tweet_mode: "extended")
|
20
|
+
extended_tweet.sanitized_text
|
21
|
+
#=> "Introducing GitHub Marketplace, a new place to browse and buy integrations using your GitHub account. https://github.com/blog/2359-introducing-github-marketplace-and-more-tools-to-customize-your-workflow"
|
22
|
+
```
|
23
|
+
|
24
|
+
## Features
|
25
|
+
* Expand urls in `Twitter::Tweet#text` (e.g. `t.co` url -> original url)
|
26
|
+
* Remove media urls in `Twitter::Tweet#text`
|
27
|
+
* Unescape special html characters in `Twitter::Tweet#text` (e.g. `(> <)` -> `(> <)`)
|
6
28
|
|
7
29
|
## Installation
|
8
30
|
|
@@ -21,8 +43,62 @@ Or install it yourself as:
|
|
21
43
|
$ gem install tweet_sanitizer
|
22
44
|
|
23
45
|
## Usage
|
46
|
+
### Case 1. Use `TweetSanitizer::TwitterExtension` and `Twitter::Tweet#sanitized_text` (Recommended)
|
47
|
+
```ruby
|
48
|
+
using TweetSanitizer::TwitterExtension
|
49
|
+
|
50
|
+
extended_tweet = @client.status("https://twitter.com/github/status/866677968608927744", tweet_mode: "extended")
|
51
|
+
extended_tweet.sanitized_text
|
52
|
+
```
|
53
|
+
|
54
|
+
### Case 2. Use `TweetSanitizer.sanitize`
|
55
|
+
```ruby
|
56
|
+
extended_tweet = @client.status("https://twitter.com/github/status/866677968608927744", tweet_mode: "extended")
|
57
|
+
TweetSanitizer.sanitize(extended_tweet)
|
58
|
+
```
|
59
|
+
|
60
|
+
### :warning: Note
|
61
|
+
When you get `Twitter::Tweet` instance, pass `tweet_mode: "extended"` option to methods. (e.g. `Twitter::REST::Client#status`, `Twitter::REST::Client#search`)
|
24
62
|
|
25
|
-
|
63
|
+
Because `full_text` attribute is returned when **only** `tweet_mode=extended` is passed to Twitter API
|
64
|
+
|
65
|
+
See following.
|
66
|
+
|
67
|
+
https://dev.twitter.com/overview/api/upcoming-changes-to-tweets
|
68
|
+
|
69
|
+
### Options
|
70
|
+
Same to `Twitter::Tweet#sanitized_text` and `TweetSanitizer.sanitize`. (By default all are `true`)
|
71
|
+
|
72
|
+
* `use_retweeted_tweet` : Whether use original retweeted tweet if exists
|
73
|
+
* `expand_url` : Whether expand url in tweet (e.g. `t.co` url -> original url)
|
74
|
+
* `remove_media_url` : Whether remove media url in tweet
|
75
|
+
* `unescape` : Whether unescape in tweet (e.g. `(> <)` -> `(> <)`)
|
76
|
+
|
77
|
+
#### Example
|
78
|
+
|
79
|
+
```ruby
|
80
|
+
tweet = @client.status("https://twitter.com/github/status/900456141557080065", tweet_mode: "extended")
|
81
|
+
|
82
|
+
# all are false
|
83
|
+
tweet.sanitized_text(use_retweeted_tweet: false, expand_url: false, remove_media_url: false, unescape: false)
|
84
|
+
#=> "RT @GitHubEducation: Announcing two new GitHub Classroom features: Assignment Deadlines and Class Rosters: https://t.co/bNiJnlps5e https://…"
|
85
|
+
|
86
|
+
# Only use_retweeted_tweet is true
|
87
|
+
tweet.sanitized_text(use_retweeted_tweet: true, expand_url: false, remove_media_url: false, unescape: false)
|
88
|
+
#=> "Announcing two new GitHub Classroom features: Assignment Deadlines and Class Rosters: https://t.co/bNiJnlps5e https://t.co/C02G05tUvu"
|
89
|
+
|
90
|
+
# Only expand_url is true
|
91
|
+
tweet.sanitized_text(use_retweeted_tweet: false, expand_url: true, remove_media_url: false, unescape: false)
|
92
|
+
#=> "RT @GitHubEducation: Announcing two new GitHub Classroom features: Assignment Deadlines and Class Rosters: https://github.com/blog/2418-github-classroom-now-supports-deadlines-and-class-rosters https://…"
|
93
|
+
|
94
|
+
# Only remove_media_url is true
|
95
|
+
tweet.sanitized_text(use_retweeted_tweet: false, expand_url: false, remove_media_url: true, unescape: false)
|
96
|
+
#=> "RT @GitHubEducation: Announcing two new GitHub Classroom features: Assignment Deadlines and Class Rosters: https://t.co/bNiJnlps5e https://…"
|
97
|
+
|
98
|
+
# all are true (default)
|
99
|
+
tweet.sanitized_text
|
100
|
+
#=> "Announcing two new GitHub Classroom features: Assignment Deadlines and Class Rosters: https://github.com/blog/2418-github-classroom-now-supports-deadlines-and-class-rosters"
|
101
|
+
```
|
26
102
|
|
27
103
|
## Development
|
28
104
|
|
@@ -33,13 +109,13 @@ vi .env
|
|
33
109
|
```
|
34
110
|
|
35
111
|
```ruby
|
36
|
-
[1] pry(main)> @client.status("https://twitter.com/sue445/status/896748477262082049")
|
112
|
+
[1] pry(main)> @client.status("https://twitter.com/sue445/status/896748477262082049", tweet_mode: "extended")
|
37
113
|
=> #<Twitter::Tweet id=896748477262082049>
|
38
114
|
```
|
39
115
|
|
40
116
|
## Contributing
|
41
117
|
|
42
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
118
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/sue445/tweet_sanitizer.
|
43
119
|
|
44
120
|
## License
|
45
121
|
|
data/bin/console
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module TweetSanitizer
|
2
|
+
module TwitterExtension
|
3
|
+
refine(Twitter::Tweet) do
|
4
|
+
# Sanitize tweet
|
5
|
+
# @param use_retweeted_tweet [Boolean] Whether use original retweeted tweet if exists
|
6
|
+
# @param expand_url [Boolean] Whether expand url in tweet (e.g. `t.co` url -> original url)
|
7
|
+
# @param remove_media_url [Boolean] Whether remove media url in tweet
|
8
|
+
# @param unescape [Boolean] Whether unescape in tweet (e.g. `(> <)` -> `(> <)`)
|
9
|
+
# @return [String]
|
10
|
+
def sanitized_text(use_retweeted_tweet: true, expand_url: true, remove_media_url: true, unescape: true)
|
11
|
+
TweetSanitizer.sanitize(
|
12
|
+
self,
|
13
|
+
use_retweeted_tweet: use_retweeted_tweet,
|
14
|
+
expand_url: expand_url,
|
15
|
+
remove_media_url: remove_media_url,
|
16
|
+
unescape: unescape,
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/tweet_sanitizer.rb
CHANGED
@@ -1,37 +1,56 @@
|
|
1
|
-
require "tweet_sanitizer/version"
|
2
1
|
require "twitter"
|
2
|
+
require "tweet_sanitizer/version"
|
3
|
+
require "tweet_sanitizer/twitter_extension"
|
3
4
|
|
4
5
|
module TweetSanitizer
|
6
|
+
# Sanitize tweet
|
5
7
|
# @param tweet [Twitter:Tweet]
|
8
|
+
# @param use_retweeted_tweet [Boolean] Whether use original retweeted tweet if exists
|
9
|
+
# @param expand_url [Boolean] Whether expand url in tweet (e.g. `t.co` url -> original url)
|
10
|
+
# @param remove_media_url [Boolean] Whether remove media url in tweet
|
11
|
+
# @param unescape [Boolean] Whether unescape in tweet (e.g. `(> <)` -> `(> <)`)
|
6
12
|
# @return [String]
|
7
|
-
def self.sanitize(tweet)
|
8
|
-
|
9
|
-
|
10
|
-
|
13
|
+
def self.sanitize(tweet, use_retweeted_tweet: true, expand_url: true, remove_media_url: true, unescape: true)
|
14
|
+
# Original RT status is exists in retweeted_status
|
15
|
+
if use_retweeted_tweet && tweet.attrs[:retweeted_status]
|
16
|
+
tweet = Twitter::Tweet.new(tweet.attrs[:retweeted_status])
|
17
|
+
end
|
18
|
+
|
19
|
+
text = tweet_full_text(tweet)
|
20
|
+
text = expand_urls_text(tweet, text) if expand_url
|
21
|
+
text = remove_media_urls_in_tweet(tweet, text) if remove_media_url
|
22
|
+
text = CGI.unescapeHTML(text) if unescape
|
11
23
|
text
|
12
24
|
end
|
13
25
|
|
14
26
|
# @param tweet [Twitter:Tweet]
|
27
|
+
# @param text [String]
|
15
28
|
# @return [String]
|
16
|
-
def self.expand_urls_text(tweet)
|
17
|
-
text = tweet.text.dup
|
29
|
+
def self.expand_urls_text(tweet, text)
|
18
30
|
return text unless tweet.uris?
|
19
31
|
|
20
|
-
tweet.uris.reverse.each_with_object(text) do |uri, expanded|
|
32
|
+
tweet.uris.reverse.each_with_object(text.dup) do |uri, expanded|
|
21
33
|
pos1 = uri.indices[0]
|
22
34
|
pos2 = uri.indices[1]
|
23
35
|
expanded[pos1, pos2-pos1] = uri.expanded_url
|
24
36
|
end
|
25
37
|
end
|
26
38
|
|
39
|
+
# @param tweet [Twitter:Tweet]
|
40
|
+
# @return [String] `full_text` attribute if exist
|
41
|
+
def self.tweet_full_text(tweet)
|
42
|
+
# NOTE: Twitter::Tweet#full_text doesn't returns full_text attribute
|
43
|
+
# https://github.com/sferik/twitter/blob/v6.1.0/lib/twitter/tweet.rb#L37-L44
|
44
|
+
tweet.attrs[:full_text] || tweet.text
|
45
|
+
end
|
46
|
+
|
27
47
|
# @param tweet [Twitter:Tweet]
|
28
48
|
# @param text [String]
|
29
49
|
# @return [String]
|
30
50
|
def self.remove_media_urls_in_tweet(tweet, text)
|
31
|
-
text = text.dup
|
32
51
|
return text unless tweet.media?
|
33
52
|
|
34
|
-
tweet.media.each_with_object(text) do |media, t|
|
53
|
+
tweet.media.each_with_object(text.dup) do |media, t|
|
35
54
|
t.gsub!(media.url, "")
|
36
55
|
t.strip!
|
37
56
|
end
|
data/tweet_sanitizer.gemspec
CHANGED
@@ -14,6 +14,13 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = "https://github.com/sue445/tweet_sanitizer"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
19
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/master/CHANGELOG.md"
|
20
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
21
|
+
|
22
|
+
spec.required_ruby_version = ">= 2.1.0"
|
23
|
+
|
17
24
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
25
|
f.match(%r{^(test|spec|features)/})
|
19
26
|
end
|
@@ -23,10 +30,13 @@ Gem::Specification.new do |spec|
|
|
23
30
|
|
24
31
|
spec.add_dependency "twitter"
|
25
32
|
|
26
|
-
spec.add_development_dependency "bundler", "
|
33
|
+
spec.add_development_dependency "bundler", ">= 1.15"
|
34
|
+
spec.add_development_dependency "coveralls"
|
27
35
|
spec.add_development_dependency "dotenv"
|
28
36
|
spec.add_development_dependency "pry-byebug"
|
29
|
-
spec.add_development_dependency "rake", "
|
37
|
+
spec.add_development_dependency "rake", ">= 10.0"
|
30
38
|
spec.add_development_dependency "rspec", "~> 3.0"
|
31
39
|
spec.add_development_dependency "rspec-parameterized"
|
40
|
+
spec.add_development_dependency "simplecov"
|
41
|
+
spec.add_development_dependency "unparser", ">= 0.4.5"
|
32
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tweet_sanitizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sue445
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: twitter
|
@@ -28,16 +28,30 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.15'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.15'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: coveralls
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: dotenv
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,14 +84,14 @@ dependencies:
|
|
70
84
|
name: rake
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- - "
|
87
|
+
- - ">="
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '10.0'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- - "
|
94
|
+
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '10.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
@@ -108,6 +122,34 @@ dependencies:
|
|
108
122
|
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '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'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: unparser
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.4.5
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.4.5
|
111
153
|
description: sanitize tweet
|
112
154
|
email:
|
113
155
|
- sue445@sue445.net
|
@@ -115,10 +157,12 @@ executables: []
|
|
115
157
|
extensions: []
|
116
158
|
extra_rdoc_files: []
|
117
159
|
files:
|
160
|
+
- ".coveralls.yml"
|
118
161
|
- ".env.example"
|
162
|
+
- ".github/workflows/test.yml"
|
119
163
|
- ".gitignore"
|
120
164
|
- ".rspec"
|
121
|
-
-
|
165
|
+
- CHANGELOG.md
|
122
166
|
- Gemfile
|
123
167
|
- LICENSE.txt
|
124
168
|
- README.md
|
@@ -126,13 +170,18 @@ files:
|
|
126
170
|
- bin/console
|
127
171
|
- bin/setup
|
128
172
|
- lib/tweet_sanitizer.rb
|
173
|
+
- lib/tweet_sanitizer/twitter_extension.rb
|
129
174
|
- lib/tweet_sanitizer/version.rb
|
130
175
|
- tweet_sanitizer.gemspec
|
131
176
|
homepage: https://github.com/sue445/tweet_sanitizer
|
132
177
|
licenses:
|
133
178
|
- MIT
|
134
|
-
metadata:
|
135
|
-
|
179
|
+
metadata:
|
180
|
+
homepage_uri: https://github.com/sue445/tweet_sanitizer
|
181
|
+
source_code_uri: https://github.com/sue445/tweet_sanitizer
|
182
|
+
changelog_uri: https://github.com/sue445/tweet_sanitizer/blob/master/CHANGELOG.md
|
183
|
+
rubygems_mfa_required: 'true'
|
184
|
+
post_install_message:
|
136
185
|
rdoc_options: []
|
137
186
|
require_paths:
|
138
187
|
- lib
|
@@ -140,16 +189,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
189
|
requirements:
|
141
190
|
- - ">="
|
142
191
|
- !ruby/object:Gem::Version
|
143
|
-
version:
|
192
|
+
version: 2.1.0
|
144
193
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
194
|
requirements:
|
146
|
-
- - "
|
195
|
+
- - ">="
|
147
196
|
- !ruby/object:Gem::Version
|
148
|
-
version:
|
197
|
+
version: '0'
|
149
198
|
requirements: []
|
150
|
-
|
151
|
-
|
152
|
-
signing_key:
|
199
|
+
rubygems_version: 3.2.22
|
200
|
+
signing_key:
|
153
201
|
specification_version: 4
|
154
202
|
summary: sanitize tweet
|
155
203
|
test_files: []
|