tweet_sanitizer 0.1.0.beta1 → 0.2.1
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 +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
|
+
[](https://badge.fury.io/rb/tweet_sanitizer)
|
3
|
+
[](https://github.com/sue445/tweet_sanitizer/actions?query=workflow%3Atest)
|
4
|
+
[](https://codeclimate.com/github/sue445/tweet_sanitizer)
|
5
|
+
[](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: []
|