dev_orbit 0.0.2 → 0.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36450d6b5b14037522d0c711ad89d7ffb7f184054910f0b75913372647b448d2
4
- data.tar.gz: 10965b3d98928c4c0a5da6f1417bb5503276726f876202688100c744e6d3936a
3
+ metadata.gz: a9c02ba74434acb5637a4d93ecd37dc4883969ba36128bb001130d0b6dfbf087
4
+ data.tar.gz: 6c9eca9384cdb84eb9049d45acf25da3c05a421a75f083a2883f14fb8bef1a7e
5
5
  SHA512:
6
- metadata.gz: bef3e7efafbf38944a2c3b89a366502527a1263ef523748a28a01b3fe7e330f08335f5b2845d847c9996b7d99bc222e71841b04257846f1270008a393fa7d191
7
- data.tar.gz: de5fe855a40bce77bd853d9a61b933a708b96f1eb7eadbac27305ef34e815a50983428b8eaff59e1618cb4e36d213772115cc37d4ad8d01a1ee698002e9caf28
6
+ metadata.gz: e9870c95fc0e32a818528f2f0ceec830f781cf9193a63056760e30a71e94e6caa509953dfa9408cd27a3dff34003f02f5c1d030a79043d4c47cb2bd4d9606ca7
7
+ data.tar.gz: fde99905baf0e7a7faad0041c4256ad55713c2dc648e58af4590e18c25c16cf11739321176c36aee75049a249c3bf2ac423df6461a09e4541972198597facb79
data/.env.sample ADDED
@@ -0,0 +1,4 @@
1
+ ORBIT_API_KEY=
2
+ ORBIT_WORKSPACE_ID=
3
+ DEV_API_KEY=
4
+ DEV_USERNAME=
@@ -0,0 +1,25 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+ strategy:
12
+ matrix:
13
+ os: [ubuntu-latest, macos-latest]
14
+ ruby: [2.7, 3.0]
15
+ runs-on: ${{ matrix.os }}
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ - name: Install dependencies
23
+ run: bundle install
24
+ - name: Run tests
25
+ run: bundle exec rspec
data/CHANGELOG.md CHANGED
@@ -4,4 +4,25 @@
4
4
 
5
5
  ## [0.0.2] - 2021-03-09
6
6
 
7
- - Add a CLI to the gem to run the gem's operations
7
+ - Add a CLI to the gem to run the gem's operations
8
+
9
+ ## [0.0.3] - 2021-03-09
10
+
11
+ - Bug fix for the CLI functionality, now operational
12
+
13
+ ## [0.0.4] - 2021-03-10
14
+
15
+ - Bug fix for stripping the HTML from the DEV blog post comment body
16
+
17
+ ## [0.0.5] - 2021-03-10
18
+
19
+ - Print out Orbit API response
20
+
21
+ ## [0.0.6] - 2021-03-10
22
+
23
+ - Fix misnamed env var in client instantiation
24
+ - Add a sample `.env` file
25
+
26
+ ## [0.0.7] - 2021-03-12
27
+
28
+ - Check for valid JSON from API response before continuing
data/Gemfile.lock CHANGED
@@ -1,15 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dev_orbit (0.0.1)
4
+ dev_orbit (0.0.6)
5
+ actionview (~> 6.1)
5
6
  activesupport (~> 6.1)
6
7
  http (~> 4.4)
7
8
  json (~> 2.5)
9
+ thor (~> 1.1)
8
10
  zeitwerk (~> 2.4)
9
11
 
10
12
  GEM
11
13
  remote: https://rubygems.org/
12
14
  specs:
15
+ actionview (6.1.3)
16
+ activesupport (= 6.1.3)
17
+ builder (~> 3.1)
18
+ erubi (~> 1.4)
19
+ rails-dom-testing (~> 2.0)
20
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
13
21
  activesupport (6.1.3)
14
22
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
23
  i18n (>= 1.6, < 2)
@@ -19,13 +27,16 @@ GEM
19
27
  addressable (2.7.0)
20
28
  public_suffix (>= 2.0.2, < 5.0)
21
29
  ast (2.4.2)
30
+ builder (3.2.4)
22
31
  byebug (11.1.3)
23
32
  concurrent-ruby (1.1.8)
24
33
  crack (0.4.5)
25
34
  rexml
35
+ crass (1.0.6)
26
36
  diff-lcs (1.4.4)
27
37
  domain_name (0.5.20190701)
28
38
  unf (>= 0.0.5, < 1.0.0)
39
+ erubi (1.10.0)
29
40
  ffi (1.15.0)
30
41
  ffi-compiler (1.0.1)
31
42
  ffi (>= 1.0.0)
@@ -44,11 +55,22 @@ GEM
44
55
  i18n (1.8.9)
45
56
  concurrent-ruby (~> 1.0)
46
57
  json (2.5.1)
58
+ loofah (2.9.0)
59
+ crass (~> 1.0.2)
60
+ nokogiri (>= 1.5.9)
47
61
  minitest (5.14.4)
62
+ nokogiri (1.11.2-x86_64-darwin)
63
+ racc (~> 1.4)
48
64
  parallel (1.20.1)
49
65
  parser (3.0.0.0)
50
66
  ast (~> 2.4.1)
51
67
  public_suffix (4.0.6)
68
+ racc (1.5.2)
69
+ rails-dom-testing (2.0.3)
70
+ activesupport (>= 4.2.0)
71
+ nokogiri (>= 1.6)
72
+ rails-html-sanitizer (1.3.0)
73
+ loofah (~> 2.3)
52
74
  rainbow (3.0.0)
53
75
  rake (13.0.3)
54
76
  regexp_parser (2.1.1)
@@ -78,6 +100,7 @@ GEM
78
100
  rubocop-ast (1.4.1)
79
101
  parser (>= 2.7.1.5)
80
102
  ruby-progressbar (1.11.0)
103
+ thor (1.1.0)
81
104
  tzinfo (2.0.4)
82
105
  concurrent-ruby (~> 1.0)
83
106
  unf (0.1.4)
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # DEV.to Interactions to Orbit Workspace
2
2
 
3
+ ![Build Status](https://github.com/bencgreenberg/dev_orbit/workflows/CI/badge.svg)
3
4
  [![Gem Version](https://badge.fury.io/rb/dev_orbit.svg)](https://badge.fury.io/rb/dev_orbit)
4
5
  [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg)](code_of_conduct.md)
5
6
 
@@ -19,6 +20,15 @@ gem 'dev_orbit'
19
20
 
20
21
  To instantiate a DevOrbit client, you can either pass along your credentials for DEV and Orbit directly to the instantiation or retain them in your environment variables.
21
22
 
23
+ The following are the expected environment variables:
24
+
25
+ ```ruby
26
+ ORBIT_API_KEY
27
+ ORBIT_WORKSPACE_ID
28
+ DEV_API_KEY
29
+ DEV_USERNAME
30
+ ```
31
+
22
32
  With the credentials as environment variables:
23
33
 
24
34
  ```ruby
data/bin/dev_orbit CHANGED
@@ -22,5 +22,6 @@ require_relative '../scripts/check_comments'
22
22
 
23
23
  if check_comments
24
24
  puts "Checking for new DEV comments within the past day and posting them to your Orbit workspace..."
25
- %x[ ruby scripts/check_comments.rb ]
25
+ ARGV[0] = 'render'
26
+ DevOrbit::Scripts::CheckComments.start(ARGV)
26
27
  end
data/dev_orbit.gemspec CHANGED
@@ -23,16 +23,18 @@ Gem::Specification.new do |spec|
23
23
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
24
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
25
25
  end
26
- spec.bindir = "exe"
27
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
26
+ spec.bindir = "bin"
27
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
30
  # Uncomment to register a new dependency of your gem
31
31
  # spec.add_dependency "example-gem", "~> 1.0"
32
32
  spec.add_dependency "activesupport", "~> 6.1"
33
+ spec.add_dependency "actionview", "~> 6.1"
33
34
  spec.add_dependency "http", "~> 4.4"
34
35
  spec.add_dependency "json", "~> 2.5"
35
36
  spec.add_dependency "zeitwerk", "~> 2.4"
37
+ spec.add_dependency "thor", "~> 1.1"
36
38
  spec.add_development_dependency "rspec", "~> 3.4"
37
39
  spec.add_development_dependency "webmock", "~> 3.12"
38
40
 
@@ -29,7 +29,7 @@ module DevOrbit
29
29
 
30
30
  def initialize(params = {})
31
31
  @orbit_api_key = params.fetch(:orbit_api_key, ENV["ORBIT_API_KEY"])
32
- @orbit_workspace = params.fetch(:orbit_workspace, ENV["ORBIT_WORKSPACE"])
32
+ @orbit_workspace = params.fetch(:orbit_workspace, ENV["ORBIT_WORKSPACE_ID"])
33
33
  @dev_api_key = params.fetch(:dev_api_key, ENV["DEV_API_KEY"])
34
34
  @dev_username = params.fetch(:dev_username, ENV["DEV_USERNAME"])
35
35
  end
data/lib/dev_orbit/dev.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require "net/http"
4
4
  require "json"
5
5
  require "active_support/time"
6
+ require_relative "utils"
6
7
 
7
8
  module DevOrbit
8
9
  class Dev
@@ -18,6 +19,7 @@ module DevOrbit
18
19
 
19
20
  articles.each do |article|
20
21
  comments = get_article_comments(article["id"])
22
+
21
23
  next if comments.empty?
22
24
 
23
25
  DevOrbit::Orbit.call(
@@ -44,7 +46,7 @@ module DevOrbit
44
46
 
45
47
  response = https.request(request)
46
48
 
47
- JSON.parse(response.body)
49
+ JSON.parse(response.body) if DevOrbit::Utils.valid_json?(response.body)
48
50
  end
49
51
 
50
52
  def get_article_comments(id)
@@ -55,7 +57,8 @@ module DevOrbit
55
57
  request = Net::HTTP::Get.new(url)
56
58
 
57
59
  response = https.request(request)
58
- comments = JSON.parse(response.body)
60
+
61
+ comments = JSON.parse(response.body) if DevOrbit::Utils.valid_json?(response.body)
59
62
 
60
63
  filter_comments(comments)
61
64
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  require "net/http"
4
4
  require "json"
5
+ require "action_view"
6
+ require_relative "../utils"
5
7
 
6
8
  module DevOrbit
7
9
  module Interactions
@@ -29,7 +31,17 @@ module DevOrbit
29
31
  req["Content-Type"] = "application/json"
30
32
  req["Authorization"] = "Bearer #{@api_key}"
31
33
 
32
- req.body = {
34
+ req.body = construct_body
35
+
36
+ req.body = req.body.to_json
37
+
38
+ response = http.request(req)
39
+
40
+ JSON.parse(response.body) if DevOrbit::Utils.valid_json?(response.body)
41
+ end
42
+
43
+ def construct_body
44
+ hash = {
33
45
  activity: {
34
46
  activity_type: "dev:comment",
35
47
  key: "dev-comment-#{@id}",
@@ -48,17 +60,15 @@ module DevOrbit
48
60
  }
49
61
  }
50
62
 
51
- req.body[:activity][:member].merge!(twitter: @commenter[:twitter]) if @commenter[:twitter]
63
+ hash[:activity][:member].merge!(twitter: @commenter[:twitter]) if @commenter[:twitter]
52
64
 
53
- req.body[:activity][:member].merge!(github: @commenter[:github]) if @commenter[:github]
65
+ hash[:activity][:member].merge!(github: @commenter[:github]) if @commenter[:github]
54
66
 
55
- req.body = req.body.to_json
56
-
57
- response = http.request(req)
58
-
59
- JSON.parse(response.body)
67
+ hash
60
68
  end
61
69
 
70
+ private
71
+
62
72
  def construct_commenter(commenter)
63
73
  hash = {
64
74
  'name': commenter[:name],
@@ -77,7 +87,9 @@ module DevOrbit
77
87
  end
78
88
 
79
89
  def sanitize_comment(comment)
80
- comment.gsub!(/(<[^>]*>)|\n|\t/s) { " " }
90
+ comment = ActionView::Base.full_sanitizer.sanitize(comment)
91
+
92
+ comment.gsub("\n", " ")
81
93
  end
82
94
  end
83
95
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DevOrbit
4
+ class Utils
5
+ def self.valid_json?(string)
6
+ !JSON.parse(string).nil?
7
+ rescue JSON::ParserError
8
+ false
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DevOrbit
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.7"
5
5
  end
@@ -2,9 +2,16 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require "dev_orbit"
5
+ require "thor"
5
6
 
6
- client = DevOrbit::Client.new
7
-
8
- response = client.comments
9
-
10
- puts response
7
+ module DevOrbit
8
+ module Scripts
9
+ class CheckComments < Thor
10
+ desc "render", "check for new DEV comments and push them to Orbit"
11
+ def render
12
+ client = DevOrbit::Client.new
13
+ client.comments
14
+ end
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dev_orbit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Greenberg
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-09 00:00:00.000000000 Z
11
+ date: 2021-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '6.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionview
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '6.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: http
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '2.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: thor
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rspec
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -98,10 +126,15 @@ description: This gem integrates DEV blog interactions like comments, etc. into
98
126
  Orbit workspace
99
127
  email:
100
128
  - ben.greenberg@hey.com
101
- executables: []
129
+ executables:
130
+ - console
131
+ - dev_orbit
132
+ - setup
102
133
  extensions: []
103
134
  extra_rdoc_files: []
104
135
  files:
136
+ - ".env.sample"
137
+ - ".github/workflows/ci.yml"
105
138
  - ".gitignore"
106
139
  - ".rspec"
107
140
  - ".rubocop.yml"
@@ -121,6 +154,7 @@ files:
121
154
  - lib/dev_orbit/dev.rb
122
155
  - lib/dev_orbit/interactions/comment.rb
123
156
  - lib/dev_orbit/orbit.rb
157
+ - lib/dev_orbit/utils.rb
124
158
  - lib/dev_orbit/version.rb
125
159
  - scripts/check_comments.rb
126
160
  homepage: https://github.com/bencgreenberg/dev_orbit