pry-send_tweet.rb 0.12.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 537e0e6e65fc0bed50a05e83610b69f28f1cf85880aff4a9dbbab09bba3387f0
4
- data.tar.gz: 2f60bc834dc6791358b98c293e24c55c0b97a81518cfaa9ad10b6e12d3f62627
3
+ metadata.gz: 400374f90dfa63fbc17fb9f2b2676ad12c12d080da32d2cac65bd7a2494bcc5f
4
+ data.tar.gz: 1a436174c9e722ecaba2fe4536bc5cd49c9438e8c257e3165f55169ac83e3a83
5
5
  SHA512:
6
- metadata.gz: 10f2f3f901c2abee29dcbcb6afa4ad4ed576a8ba555b54b63eef3490b6985555106c52b379e1728e3fde52379b25987c153ad6f0f20b91225e1dacaf2596d556
7
- data.tar.gz: b284f42bdbd27f5717164e868f565c7a3a8d2720a5770096d0c8475c76f7cce9fc16e6a7434d37e55123b2bb7a1361da32511df400410e2a7e7e681e1ccd610a
6
+ metadata.gz: 0571355b013a36706a43cb78b44ea3ae1ee328af23e0aba6697280556b522d57fd48fe51b553c07830b3d3228462842f548395d636e0393eeaec99ea16ae33ab
7
+ data.tar.gz: b8c588b3816953a0bdcd5a7b1de5de7165472f315e292d9c022f4a577d469a0f712130dfeb296c90c39712d977e53373cada99225584c8b1defa571f5620edaf
@@ -1,5 +1,64 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v0.13.0
4
+
5
+ * Remove `Gemfile`, and the Bundler dependency.
6
+
7
+ * On the FreeBSD VM, runtime dependencies are installed as FreeBSD packages.
8
+
9
+ * Rethink fork + wait logic in `read-tweets`.
10
+
11
+ * Configure the default timezone on the FreeBSD VM to be CET (Central European Time).
12
+ This can be changed by `$VMTZ`. Please see the README for an example.
13
+
14
+ * `on-twitter --show-following` and `on-twitter --show-followers` accept an
15
+ optional regular expression that can filter through the result set.
16
+
17
+ * Implement `ruby vms/freebsd.rb --fresh`, for destroying an old VM and
18
+ spinning up a new one.
19
+
20
+ * Implement `time-ago-in-words` without patching the Time class.
21
+
22
+ * Remove `spec/`.
23
+
24
+ * Timestamps in the future or present are represented as '0 seconds' ago
25
+ in `lib/time-ago-in-words`.
26
+
27
+ * Replace 'time-lord' with 'time-ago-in-words'
28
+
29
+ * Print an error when unknown switches are passed to command
30
+
31
+ * Switch default editor to 'ee' on FreeBSD VM
32
+
33
+ * Add mitigation for RCE bug in apt-get to Dockerfile.
34
+
35
+ * `--delay`, and `--self-destruct` assume that a time such as 07:00, which
36
+ has past on the current day, was meant to mean 07:00, tomorrow.
37
+
38
+ * Install FreeBSD-12 with Vagrant due to unresolvable issues with the
39
+ HardenedBSD vagrant box.
40
+
41
+ * Replace `t.co` links with the expanded URL `t.co` redirects to.
42
+
43
+ * Collect status of system pager after sending `SIGKILL`.
44
+
45
+ * When translating text or a tweet, show the source and destination language.
46
+
47
+ * Add `read-tweets -sl=`, `read-tweets --source-lang=` for setting the source
48
+ language of the text or tweet being translated.
49
+
50
+ * Add `read-tweets -tx`, for translating a piece of text using the Yandex
51
+ translation API.
52
+
53
+ * Set CET (Central European Time) as the default timezone for the HardenedBSD VM.
54
+
55
+ * Implement a minimum box height of 8, but scale to a larger number if a tweet
56
+ or user bio is written using a lot of newlines.
57
+
58
+ * Remove the `config.box_height` option.
59
+
60
+ * Typo fix: rescue `Twitter::Error`, not `Timeout::Error`, when liking a tweet.
61
+
3
62
  ## v0.12.1
4
63
 
5
64
  * Correct multiple grammar errors found in the help output of all commands.
@@ -13,7 +72,7 @@
13
72
 
14
73
  ## v0.11.0
15
74
 
16
- * Apply a fix to tty-box for the `on-twitter --show-followers`, and
75
+ * Apply a fix to tty-box for the `on-twitter --show-followers`, and
17
76
  `on-twitter --show-following` commands.
18
77
 
19
78
  * Add unicode support by applying a fix - as a monkey patch - to the `tty-box`
data/README.md CHANGED
@@ -19,8 +19,9 @@
19
19
  * [Multi-tasking: tmux / screen](#multi-tasking)
20
20
  * [Install](#install)
21
21
  * [Rubygem](#install-rubygem)
22
- * [Docker](#install-docker)
23
- * [Vagrant (HardenedBSD)](#vagrant-hardenedbsd)
22
+ * [Virtual Machines](#vms)
23
+ * [FreeBSD](#vms-freebsd)
24
+ * [Screenshots](#screenshots)
24
25
  * [License](#license)
25
26
 
26
27
  ## <a id='Introduction'>Introduction</a>
@@ -29,19 +30,16 @@ A Twitter client for the Pry REPL.
29
30
 
30
31
  ## <a id='api-access'>API Access</a>
31
32
 
32
- Using the Twitter API requires a developer account.
33
- Follow the instructions at
34
- [https://developer.twitter.com](https://developer.twitter.com)
35
- if you haven't already
36
- setup access to the Twitter API.
33
+ Using the Twitter API requires a developer account.
34
+ Follow the instructions at [https://developer.twitter.com](https://developer.twitter.com)
35
+ if you haven't already setup access to the Twitter API.
37
36
 
38
37
  ## <a id='configuration'>Configuration (required)</a>
39
38
 
40
- The placeholder keys and tokens in the below example can be replaced
41
- by those from your developer account.
42
-
43
- pry-send_tweet.rb can be configured from a `.pryrc` file using Ruby, or
44
- through a YAML file located at `$HOME/.pry-send_tweet.yml`
39
+ The placeholder keys and tokens in the below example can be replaced
40
+ by those from your developer account. pry-send_tweet.rb can be configured from
41
+ a `.pryrc` file using Ruby, or through a YAML file located at
42
+ `$HOME/.pry-send_tweet.yml`
45
43
 
46
44
  __1. Ruby__
47
45
 
@@ -59,10 +57,8 @@ Pry.configure do |config|
59
57
  # Default is: 'pry-send_tweet.rb vX.Y.Z'.
60
58
  user_agent: 'Custom User-Agent',
61
59
  # Optional configuration
62
- # The width & height of a box that contains a tweet or user.
63
- # The default width is 100 and the default height is 8.
60
+ # The width of a box that contains a tweet or user. The default width is 100.
64
61
  box_width: 120,
65
- box_height: 10,
66
62
  # Optional configuration
67
63
  # A Yandex API key for translating tweets when using `read-tweets -x`.
68
64
  yandex_key: 'xxx',
@@ -85,7 +81,8 @@ access_token: '<access token>'
85
81
  access_token_secret: '<access token secret>'
86
82
  # Optional
87
83
  user_agent: 'Your User-Agent string'
88
- line_width: 120
84
+ # Optional
85
+ box_width: 120
89
86
  # Optional
90
87
  yandex_key: xxx
91
88
  yandex_lang: xx
@@ -95,17 +92,22 @@ yandex_lang: xx
95
92
 
96
93
  There are four commands added to Pry by this plugin, those commands are:
97
94
 
98
- * `send-tweet`
95
+ * `send-tweet`
99
96
  For sending tweets.
100
97
 
101
- * `read-tweets`
98
+ * `read-tweets`
102
99
  For reading tweets.
103
100
 
104
- * `twitter-action` (aliased as: `on-twitter`)
101
+ * `twitter-action` (aliased as: `on-twitter`)
105
102
  For performing misc actions on Twitter, such as following, unfollowing, etc.
106
103
 
107
- * `twitter-search`
108
- For searching Twitter.
104
+ * `twitter-search`
105
+ For searching Twitter.
106
+
107
+ Each command provides help, that can be shown by appending `--help` to the
108
+ command. Example:
109
+
110
+ [1] pry(main)> send-tweet --help
109
111
 
110
112
  ### <a id='sending-tweets'>Sending tweets</a>
111
113
 
@@ -123,33 +125,36 @@ There are four commands added to Pry by this plugin, those commands are:
123
125
  [1] pry(main)> send-tweet --file #{File.join ENV['HOME'], 'photos', 'image.jpg'}
124
126
 
125
127
 
128
+ * Send a tweet with multiple images attached:
129
+
130
+ [1] pry(main)> send-tweet --file #{%w[1.jpg 2.jpg 3.jpg].join(',')}
131
+
126
132
  * Reply to a tweet:
127
133
 
128
134
  [1] pry(main)> send-tweet --reply-to https://twitter.com/username/status/1
129
135
 
130
- * Send a tweet that will self-destruct after 70 seconds.
136
+ * Send a tweet that will self-destruct after 70 seconds.
131
137
  It's worth adding that if the Pry process exits this operation will be cancelled:
132
138
 
133
139
  [1] pry(main)> send-tweet --self-destruct=70
134
140
 
135
- * Send a tweet that will be published 70 seconds in the future.
136
- It's worth adding that if the Pry process exits, this operation will be cancelled:
141
+ * Send a tweet that will be published 70 seconds in the future.
142
+ It's worth adding that if the Pry process exits, this operation will be cancelled:
137
143
 
138
144
  [1] pry(main)> send-tweet --delay=70
139
145
 
140
- * Delay sending a tweet until 12AM, today. `--self-destruct` also supports this
146
+ * Delay sending a tweet until 12AM, today. `--self-destruct` also supports this
141
147
  syntax:
142
148
 
143
149
  [1] pry(main)> send-tweet --delay=00:00
144
150
 
145
151
  ### <a id='reading-tweets'>Reading tweets</a>
146
152
 
147
- By default the tweets displayed by the `read-tweets` command are automatically
153
+ By default the tweets displayed by the `read-tweets` command are automatically
148
154
  refreshed every 5 minutes.
149
155
 
150
- That can be changed to a custom interval by setting `Pry.config.twitter.refresh_interval`
151
- to a number of seconds, or to `false` if you want to disable this
152
- feature.
156
+ That can be changed to a custom interval by setting `Pry.config.twitter.refresh_interval`
157
+ to a number of seconds, or to `false` if you want to disable this feature.
153
158
 
154
159
  * Read recent tweets from your timeline:
155
160
 
@@ -176,18 +181,31 @@ feature.
176
181
  [1] pry(main)> read-tweets --replies github
177
182
 
178
183
  * Read a translated copy of a tweet, using the
179
- [Yandex translation API](https://translate.yandex.com/developers).
184
+ [Yandex translation API](https://translate.yandex.com/developers).
180
185
  The configuration instructions for Yandex are included in the [configuration section](#configuration).
181
186
 
182
- [1] pry(main) read-tweets -x https://twitter.com/user/status/1
187
+ [1] pry(main)> read-tweets -x https://twitter.com/user/status/1
183
188
 
184
- * Read 100 recent tweets instead of the default 200 recent tweets.
189
+ * Read a translated copy of a piece of text:
190
+
191
+ [1] pry(main)> read-tweets -tx='#{File.binread "persian.txt"}'
192
+ [2] pry(main)> read-tweets -tx='Guten Tag'
193
+ [3] pry(main)> read-tweets -tx='Hola'
194
+
195
+ * Sometimes Yandex cannot detect the language of the text or tweet being
196
+ translated, or it will guess the source language incorrectly. In case
197
+ this happens, the source language can be set explicitly:
198
+
199
+ [1] pry(main)> read-tweets --source-lang=fa -x https://url/to/farsi/tweet
200
+ [1] pry(main)> read-tweets --source-lang=sw -tx='Habari yako'
201
+
202
+ * Read 100 recent tweets instead of the default 200 recent tweets.
185
203
  **Tip:** `--count` can be combined with all of the options described above.
186
204
 
187
205
  [1] pry(main)> read-tweets --count 100
188
206
 
189
- * By default retweets are not displayed.
190
- To display retweets, pass the `--with-retweets` option.
207
+ * By default retweets are not displayed.
208
+ To display retweets, pass the `--with-retweets` option.
191
209
 
192
210
  [1] pry(main)> read-tweets --with-retweets
193
211
 
@@ -225,6 +243,15 @@ feature.
225
243
 
226
244
  [1] pry(main)> on-twitter --show-followers
227
245
 
246
+ * Show the tweeters who you follow:
247
+
248
+ [1] pry(main)> on-twitter --show-following
249
+
250
+ * Both `--show-following` and `--show-followers` accept an optional argument
251
+ that can be used to filter the result set.
252
+
253
+ [1] pry(main)> on-twitter --show-following=[0-9]$
254
+
228
255
  ### <a id='searching-twitter'>Searching Twitter</a>
229
256
 
230
257
  The `twitter-search` command can be used to search Twitter.
@@ -251,13 +278,13 @@ The `twitter-search` command can be used to search Twitter.
251
278
  # Your profiles bio will be updated after closing the editor.
252
279
  [1] pry(main)> on-twitter --set-profile-bio
253
280
 
254
- * Set the location visible on your profile:
281
+ * Set the location visible on your profile:
255
282
 
256
283
  # An editor opens (`_pry_.editor`), write your location then hit save &
257
284
  # close. Your profiles location will be updated after closing the editor.
258
285
  [1] pry(main)> on-twitter --set-profile-bio
259
286
 
260
- * Set the color (as a hex value) of links that appear on your profiles timeline:
287
+ * Set the color (as a hex value) of links that appear on your profiles timeline:
261
288
 
262
289
  [1] pry(main)> on-twitter --set-profile-link-color=#CC0000
263
290
 
@@ -280,7 +307,7 @@ The `twitter-search` command can be used to search Twitter.
280
307
 
281
308
  [1] pry(main)> on-twitter --suggested-lang=es --suggested-topics
282
309
 
283
- * View a list of suggested users from a given topic, optionally restricted to
310
+ * View a list of suggested users from a given topic, optionally restricted to
284
311
  Spanish:
285
312
 
286
313
  [1] pry(main)> on-twitter --suggested-lang=es --suggested-users=<topic>
@@ -299,11 +326,10 @@ The `twitter-search` command can be used to search Twitter.
299
326
 
300
327
  ### <a id='special-variable-_twitter_'>Sticky local variable: `_twitter_`</a>
301
328
 
302
- The local variable `_twitter_` is inserted into the active Binding, providing
303
- a programmable API accessible to Ruby code as well as a lower level of access to
304
- the Twitter API. It is meant for exploration, development, and debugging. The local
305
- variable is considered reserved, if another local variable of the same name is set
306
- in the same Binding, expect unusual behaviour.
329
+ The local variable `_twitter_` is inserted into the active Binding, providing
330
+ a programmable API accessible to Ruby code as well as a lower level of access to
331
+ the Twitter API. It is meant for exploration, development, and debugging.
332
+ The local variable is considered reserved.
307
333
 
308
334
  The local variable returns an instance of `Twitter::REST::Client`:
309
335
 
@@ -317,8 +343,8 @@ The local variable returns an instance of `Twitter::REST::Client`:
317
343
 
318
344
  ### <a id='tip'>Tip: Command Aliases</a>
319
345
 
320
- When there are Twitter accounts you read often, it can turn out to be faster
321
- to create command aliases for reading those accounts. An example follows, a
346
+ When there are Twitter accounts you read often, it can turn out to be faster
347
+ to create command aliases for reading those accounts. An example follows, a
322
348
  hyphen is included in the aliased commands to avoid collisions with Ruby code.
323
349
 
324
350
  ```ruby
@@ -329,47 +355,93 @@ Pry.commands.alias_command "prez-obama", "read-tweets -t barackobama"
329
355
 
330
356
  ## <a id='multi-tasking'>Multi-tasking: tmux / screen</a>
331
357
 
332
- To get the most out of `pry-send_tweet.rb` I use tmux to manage a pane for reading
333
- tweets and another for writing tweets. I've found this to be the best way since
358
+ To get the most out of `pry-send_tweet.rb` I use tmux to manage a pane for reading
359
+ tweets and another for writing tweets. I've found this to be the best way since
334
360
  a single shell does not allow for multi tasking but tmux and screen do.
335
361
 
336
- I use
337
- [tmuxinator](https://github.com/tmuxinator/tmuxinator)
338
- to manage my tmux sessions.
339
- The tmuxinator configurations I use for Docker / Vagrant are checked into the
340
- repo to use yourself or to act as inspiration for your own configuration:
362
+ I use [tmuxinator](https://github.com/tmuxinator/tmuxinator) to manage my tmux
363
+ sessions. The tmuxinator configuration I use is checked into the repo in the
364
+ hope that it might be useful to others.
341
365
 
342
- * [Docker](./samples/tmuxinator-docker.yml)
343
- * [Vagrant (HardenedBSD)](./samples/tmuxinator-vagrant.yml)
366
+ * [tmuxinator-vagrant.yml](./samples/tmuxinator-vagrant.yml)
344
367
 
368
+ ## <a id='vms'>Virtual Machines</a>
345
369
 
346
- ## <a id='install'>Install</a>
370
+ Before getting started with a Virtual Machine, download and install the
371
+ following tools if you didn't already, they're free:
347
372
 
348
- ### <a id='install-rubygem'>Rubygem</a>
373
+ * VirtualBox
374
+ * Vagrant
349
375
 
350
- $ gem install pry-send_tweet.rb
376
+ Next, configure access to the Twitter API by adding `.pryrc` file to the root of
377
+ the repository. That's covered in the [configuration](#configuration) section.
351
378
 
352
- ### <a id='install-docker'>Docker</a>
379
+ ### Shared space
353
380
 
354
- This method is how I use to install and use `pry-send_tweet.rb`, before switching
355
- to Vagrant. I still recommend giving Docker a try - especially if on Windows.
356
- The Docker container is configured to use Debian Linux, and `emacs` when
357
- performing tasks that use an editor:
381
+ While exploring, developing or tweeting on one of the available VMs sometimes
382
+ you want to bring files from the 'host' machine to the virtual machine, which
383
+ is known as the guest machine.
358
384
 
359
- $ git clone https://github.com/r-obert/pry-send_tweet.rb
360
- $ cd pry-send_tweet.rb
361
- $ ./dockerize.sh
385
+ __Syncing files__
386
+
387
+ `vagrant rsync-auto` can see edits made to the cloned repo on the host
388
+ machine and sync those changes back to the guest machine. To set this up, from
389
+ the root of the repo on the host machine run:
390
+
391
+ $ vagrant rsync-auto
362
392
 
363
- ### <a id='vagrant-hardenedbsd'>Vagrant (HardenedBSD)</a>
393
+ __Tweeting media__
364
394
 
365
- The other available option is to use Vagrant to spawn a
366
- VirtualBox [HardenedBSD](https://hardenedbsd.org) VM:
395
+ To tweet media such as an image or video from the VM, what I do is drop those
396
+ files into `/app/shared-space` and then reference `/app/shared-space` when
397
+ sharing them, eg `send-tweet -f /app/shared-space/photo.jpg`.
398
+
399
+ ### <a id='vms-freebsd'>FreeBSD</a>
400
+
401
+ [FreeBSD 12](https://freebsd.org) Virtual Machine
402
+
403
+ Vagrant will use Amazon to download the box image. Sometimes the download can be
404
+ slow, sometimes the download can stall..
405
+
406
+ Keep trying if this happens, a download should always resume from the point
407
+ where it finished. FreeBSD is worth the perseverance. :)
367
408
 
368
409
  $ git clone https://github.com/r-obert/pry-send_tweet.rb
369
410
  $ cd pry-send_tweet.rb
370
- $ vagrant up
371
- $ vagrant ssh -c 'cd /app && bundle exec pry -e "read-tweets"'
411
+ $ ruby vms/freebsd.rb
412
+
413
+ Screenshots __#1__, __#2__ in the [screenshots](#screenshots) section show the
414
+ type of experience to expect when running `ruby vms/freebsd.rb`.
415
+
416
+ A virtual machine can be destroyed and a new VM instance created by appending
417
+ the `--fresh` option:
418
+
419
+ $ ruby vms/freebsd.rb --fresh
420
+
421
+ The default time settings are set to CET (Central European Time). This can be
422
+ changed with an environment variable.
423
+
424
+ $ VMTZ=Asia/Tehran ruby vms/freebsd.rb
425
+
426
+ A complete list of time zones are available in the VM:
427
+
428
+ $ ls /usr/share/zoneinfo
429
+
430
+ ## <a id='install'>Install</a>
431
+
432
+ ### <a id='install-rubygem'>Rubygem</a>
433
+
434
+ $ gem install pry-send_tweet.rb
435
+
436
+ ## <a id='screenshots'>Screenshots</a>
437
+
438
+ __#1__ Running FreeBSD 12 with Vagrant, Tmux
439
+
440
+ ![FreeBSD-1](/art/44-e44743a5bb.jpg)
441
+
442
+ __#2__ Composing a tweet on FreeBSD 12 - with Vagrant, Tmux.
372
443
 
444
+ ![FreeBSD-2](/art/52-eec4df2edf.jpg)
373
445
 
374
446
  ## <a id='license'>License</a>
375
447
 
@@ -1,31 +1,46 @@
1
+ require 'shellwords'
2
+ insert_root_path = ->(tmux_conf) {
3
+ conf = YAML.load(tmux_conf)
4
+ conf['root'] = '/app'
5
+ YAML.dump(conf)
6
+ }
7
+
1
8
  Vagrant.configure("2") do |config|
2
- config.vm.box = "roboxes/hardenedbsd11"
9
+ config.vm.box = "generic/freebsd12"
3
10
  config.vm.synced_folder Dir.getwd, "/app", type: "rsync"
4
11
 
5
12
  config.vm.provider "virtualbox" do |vb|
6
13
  vb.memory = "1024"
7
14
  end
8
15
 
16
+ # Install useful packages
9
17
  cmds = [
10
- "sudo ASSUME_ALWAYS_YES=true pkg install zsh",
11
- "sudo ASSUME_ALWAYS_YES=true pkg install emacs",
12
- "sudo chsh -s zsh vagrant",
13
- "echo '#{File.binread('./samples/hardenedbsd-zshrc')}' > /home/vagrant/.zshrc"
18
+ "sudo pkg install -y zsh tmux",
19
+ "sudo chsh -s zsh vagrant"
14
20
  ]
15
21
  config.vm.provision "shell", inline: cmds.join(' && ')
16
22
 
17
- # Install Ruby
23
+ # Configure date & time
24
+ zone = ENV.key?('VMTZ') ? ENV['VMTZ'] : 'CET'
18
25
  cmds = [
19
- "sudo ASSUME_ALWAYS_YES=true pkg install ruby",
20
- "sudo ASSUME_ALWAYS_YES=true pkg install devel/ruby-gems",
21
- "sudo ASSUME_ALWAYS_YES=true pkg install rubygem-bundler"
26
+ "cp /usr/share/zoneinfo/#{zone} /etc/localtime"
22
27
  ]
23
28
  config.vm.provision "shell", inline: cmds.join(' && ')
24
29
 
25
- # Install app dependencies
30
+ # Insert files into VM
31
+ tmux_conf = insert_root_path.call File.binread('./samples/tmuxinator-vagrant.yml')
32
+ cmds = [
33
+ "echo '#{File.binread('./samples/freebsd-zshrc')}' > /home/vagrant/.zshrc",
34
+ "mkdir -p /home/vagrant/.config/tmuxinator",
35
+ "echo #{Shellwords.shellescape(tmux_conf)} > /home/vagrant/.config/tmuxinator/pry_send_tweet.yml"
36
+ ]
37
+ config.vm.provision "shell", inline: cmds.join(' && ')
38
+
39
+ # Install Ruby
40
+ # Install pry-send_tweet dependencies (..as FreeBSD packages)
26
41
  cmds = [
27
- "cd /app",
28
- "bundle install"
42
+ "sudo pkg install -y ruby rubygem-tmuxinator rubygem-pry rubygem-twitter " \
43
+ "rubygem-tty-box rubygem-unicode-display_width"
29
44
  ]
30
45
  config.vm.provision "shell", inline: cmds.join(' && ')
31
46
  end
Binary file
Binary file
@@ -27,7 +27,8 @@ class Pry
27
27
  require 'cgi'
28
28
  require 'timeout'
29
29
  require 'yaml'
30
- require 'time-lord'
30
+ require 'time-ago-in-words'
31
+ require_relative 'pry/pager/system_pager'
31
32
  require_relative 'pry/send_tweet/tty-box'
32
33
  require_relative 'pry/send_tweet/renderers/tweet_renderer'
33
34
  require_relative 'pry/send_tweet/renderers/user_renderer'
@@ -37,6 +38,7 @@ class Pry
37
38
  require_relative 'pry/send_tweet/commands/read_tweets'
38
39
  require_relative 'pry/send_tweet/commands/twitter_search'
39
40
  require_relative 'pry/send_tweet/commands/twitter_action'
41
+ require_relative 'pry/send_tweet/version'
40
42
 
41
43
  # @api private
42
44
  def self.merge_yaml_file!(config, path)
@@ -0,0 +1,25 @@
1
+ class Pry::Pager::SystemPager
2
+ def pid
3
+ pager.pid
4
+ end
5
+
6
+ def fork
7
+ pager
8
+ nil
9
+ end
10
+
11
+ def fast_exit!
12
+ Process.kill 'SIGKILL', pid
13
+ Process.wait pid
14
+ end
15
+
16
+ private
17
+ # Patch to avoid spawning a shell when launching the pager.
18
+ def pager
19
+ @pager ||= begin
20
+ ary = self.class.default_pager.split(' ')
21
+ io = IO.popen(ary, 'w')
22
+ io.tap{|io| io.sync = true}
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,7 @@
1
+ class Pry::Slop
2
+ DEFAULT_OPTIONS.merge!(strict: true)
3
+ end
4
+
1
5
  class Pry::SendTweet::BaseCommand < Pry::ClassCommand
2
6
  include Pry::SendTweet::TweetRenderer
3
7
  include Pry::SendTweet::UserRenderer
@@ -19,7 +23,7 @@ class Pry::SendTweet::BaseCommand < Pry::ClassCommand
19
23
  private
20
24
 
21
25
  def box_height
22
- _pry_.config.twitter.box_height || Pry::SendTweet::DEFAULT_BOX_HEIGHT
26
+ Pry::SendTweet::DEFAULT_BOX_HEIGHT
23
27
  end
24
28
 
25
29
  def box_width
@@ -22,13 +22,17 @@ class Pry::SendTweet::ReadTweets < Pry::SendTweet::BaseCommand
22
22
  o.on 'r=', 'replies=', 'A username whose replies you want to read.'
23
23
  o.on 'm', 'mentions', 'Read tweets that @mention you.'
24
24
  o.on 'x=', 'translate=', 'Translate a tweet.'
25
+ o.on 'tx=', nil, 'Translate a string of text.'
26
+ o.on 'sl=', 'source-lang=', '[optional] The source language of the ' \
27
+ 'text or tweet being translated'
25
28
  o.on 'w', 'with-retweets', 'Include retweets.'
26
29
  end
27
30
 
28
31
  def process
29
32
  super
30
33
  case
31
- when opts.present?('translate') then translate_tweet(opts['translate'])
34
+ when opts.present?('translate') then translate_tweet(opts['x'], opts['sl'])
35
+ when opts.present?('tx') then translate_text(opts['tx'], opts['sl'])
32
36
  when opts.present?('replies') then show_replies(user: opts['replies'])
33
37
  when opts.present?('likes') then show_likes(user: opts['likes'])
34
38
  when opts.present?('mentions') then show_mentions
@@ -2,14 +2,47 @@ module Pry::SendTweet::ReadTweets::TranslateActions
2
2
  YANDEX_ENDPOINT = "https://translate.yandex.net/api/v1.5/tr.json/translate?" \
3
3
  "key=%{key}&text=%{text}&lang=%{lang}"
4
4
 
5
- def translate_tweet(tweet_url)
5
+ LANGUAGE_STRINGS = {
6
+ 'ar' => 'Arabic (العربية)',
7
+ 'en' => 'English',
8
+ 'de' => 'German (Deutsch)',
9
+ 'pt' => 'Portuguese (Portuguesa)',
10
+ 'fa' => 'Farsi (دریافت)',
11
+ 'ja' => 'Japanese (日本語)',
12
+ 'he' => 'Hebrew (עברית)',
13
+ 'ga' => 'Irish (Gaeilge)',
14
+ 'es' => 'Spanish (Español)',
15
+ 'it' => 'Italinao (italiano)',
16
+ 'nl' => 'Dutch (Nederlands)',
17
+ 'ru' => 'Russian (русский)',
18
+ 'uk' => 'Ukranian (країнська)',
19
+ 'ko' => 'Korean (한국어)',
20
+ 'fr' => 'French (Français)',
21
+ 'da' => 'Danish (dansk)',
22
+ 'yi' => 'Yiddish (ייִדיש)',
23
+ 'sw' => 'Swahili'
24
+ }
25
+
26
+ def translate_tweet(tweet_url, source_language)
6
27
  tweet = twitter.status(tweet_url)
7
- uri_endpoint = __build_yandex_endpoint(tweet)
28
+ uri_endpoint = __build_yandex_endpoint(tweet, source_language)
29
+ res = Net::HTTP.get_response(uri_endpoint)
30
+ case res
31
+ when Net::HTTPOK
32
+ tweet.attrs[:full_text] = __translated_text_from(res)
33
+ render_tweets [tweet], title: "#{__translation_map(res)}: "
34
+ else
35
+ raise Pry::CommandError, "Bad response from Yandex (#{res.class})"
36
+ end
37
+ end
38
+
39
+ def translate_text(text, source_language)
40
+ uri_endpoint = __build_yandex_endpoint(text, source_language)
8
41
  res = Net::HTTP.get_response(uri_endpoint)
9
42
  case res
10
43
  when Net::HTTPOK
11
- tweet.attrs[:full_text] = JSON.parse(res.body)["text"][0]
12
- render_tweets [tweet], title: "Translated tweet"
44
+ _pry_.output.puts "#{__translation_map(res)}: \n" \
45
+ "#{__translated_text_from(res)}"
13
46
  else
14
47
  raise Pry::CommandError, "Bad response from Yandex (#{res.class})"
15
48
  end
@@ -18,14 +51,37 @@ module Pry::SendTweet::ReadTweets::TranslateActions
18
51
  private
19
52
 
20
53
  # @api private
21
- def __build_yandex_endpoint(tweet)
54
+ def __translation_map(res)
55
+ b = JSON.parse(res.body)
56
+ from, to = b['lang'].split('-')
57
+ from = LANGUAGE_STRINGS[from] || from
58
+ to = LANGUAGE_STRINGS[to] || to
59
+ "#{from} => #{to}"
60
+ end
61
+
62
+ # @api private
63
+ def __translated_text_from(res)
64
+ JSON.parse(res.body)["text"][0]
65
+ end
66
+
67
+ # @api private
68
+ def __build_yandex_endpoint(tweet, source_language)
22
69
  URI.parse format(YANDEX_ENDPOINT,
23
- lang: _pry_.config.twitter.yandex_lang || "en",
24
- key: __yandex_key,
25
- text: URI.encode_www_form_component(__read_tweet_body(tweet))
70
+ lang: URI.encode_www_form_component(__yandex_lang_param(source_language)),
71
+ key: URI.encode_www_form_component(__yandex_key),
72
+ text: URI.encode_www_form_component(
73
+ Twitter::Tweet === tweet ? __read_tweet_body(tweet) : tweet
74
+ )
26
75
  )
27
76
  end
28
77
 
78
+ # @api private
79
+ def __yandex_lang_param(source_language)
80
+ from = source_language ? "#{source_language}-" : ""
81
+ to = _pry_.config.twitter.yandex_lang || "en"
82
+ from + to
83
+ end
84
+
29
85
  # @api private
30
86
  def __yandex_key
31
87
  k = _pry_.config.twitter.yandex_key
@@ -33,6 +89,6 @@ module Pry::SendTweet::ReadTweets::TranslateActions
33
89
  raise Pry::CommandError,
34
90
  "fatal: _pry_.config.twitter.yandex_key is nil, false or empty"
35
91
  end
36
- URI.encode_www_form_component(k)
92
+ k
37
93
  end
38
94
  end
@@ -127,9 +127,10 @@ class Pry::SendTweet::SendTweet < Pry::SendTweet::BaseCommand
127
127
  sleep_seconds = Integer(str)
128
128
  elsif str =~ /\A\d{2}:\d{2}\z/ || str =~ /\A\d{2}:\d{2}:\d{2}\z/
129
129
  time_obj = Time.parse(str)
130
+ time_obj += 3600*24 if time_obj <= Time.now
130
131
  sleep_seconds = Integer(time_obj - Time.now)
131
132
  else
132
- raise Pry::CommandError, "The argument --delay='#{str}' is not " \
133
+ raise Pry::CommandError, "--delay='#{str}' or --self-destruct='#{str}' is not " \
133
134
  "something I understand."
134
135
  end
135
136
  [time_obj, sleep_seconds]
@@ -91,8 +91,8 @@ class Pry::SendTweet::TwitterAction < Pry::SendTweet::BaseCommand
91
91
  when opts.present?('suggested-users') then suggested_users(opts['suggested-users'])
92
92
  when opts.present?('mute-user') then mute_user(opts['mute-user'])
93
93
  when opts.present?('unmute-user') then unmute_user(opts['unmute-user'])
94
- when opts.present?('show-followers') then show_followers
95
- when opts.present?('show-following') then show_following
94
+ when opts.present?('show-followers') then show_followers(opts['show-followers'])
95
+ when opts.present?('show-following') then show_following(opts['show-following'])
96
96
  end
97
97
  end
98
98
 
@@ -23,8 +23,9 @@ module Pry::SendTweet::TwitterAction::FollowActions
23
23
  page_error(e)
24
24
  end
25
25
 
26
- def show_followers
27
- followers = twitter.followers(follow_request_options)
26
+ def show_followers(pattern)
27
+ followers = Array twitter.followers(follow_request_options)
28
+ __follow_filter!(followers, pattern) if pattern
28
29
  page numbered_list("Followers", followers) {|follower, index|
29
30
  render_user(follower)
30
31
  }
@@ -32,8 +33,9 @@ module Pry::SendTweet::TwitterAction::FollowActions
32
33
  page_error(e)
33
34
  end
34
35
 
35
- def show_following
36
- followings = twitter.following(follow_request_options)
36
+ def show_following(pattern)
37
+ followings = Array twitter.following(follow_request_options)
38
+ __follow_filter!(followings, pattern) if pattern
37
39
  page numbered_list("Following", followings) {|following, index|
38
40
  render_user(following)
39
41
  }
@@ -43,6 +45,13 @@ module Pry::SendTweet::TwitterAction::FollowActions
43
45
 
44
46
  private
45
47
 
48
+ # @api private
49
+ def __follow_filter!(users, pattern)
50
+ users.select! do |u|
51
+ u.screen_name =~ /#{pattern}/
52
+ end
53
+ end
54
+
46
55
  # @api private
47
56
  def follow_request_options
48
57
  {skip_status: true, include_user_entities: true}
@@ -6,7 +6,7 @@ module Pry::SendTweet::TwitterAction::LikeActions
6
6
  else
7
7
  page_error "No tweets liked, are you sure you didn't already like those tweet(s) ..?"
8
8
  end
9
- rescue Timeout::Error => e
9
+ rescue Twitter::Error => e
10
10
  page_error(e)
11
11
  end
12
12
 
@@ -1,35 +1,27 @@
1
1
  module Pry::SendTweet::TweetRenderer
2
2
  include Timeout
3
+ include TimeAgoInWords
3
4
 
4
5
  def render_tweets(tweet_fetcher, title: nil, timeout: _pry_.config.twitter.refresh_interval)
5
- pid = nil
6
- timeout(__choose_render_interval(timeout)) {
6
+ pager = Pry::Pager::SystemPager.new(_pry_.output).tap(&:fork)
7
+ interval = __choose_render_interval(timeout)
8
+ timeout(interval) do
7
9
  tweets = __fetch_tweets(tweet_fetcher)
8
- pid = __fork_pager(title, tweets)
9
- Process.wait(pid)
10
- }
11
- rescue Interrupt
12
- __kill_pager!(pid)
10
+ tweets.empty? ? pager.write("No tweets to show.") :
11
+ pager.write(__render_tweets(title || "Twitter", tweets))
12
+ end
13
+ rescue Pry::Pager::StopPaging, Interrupt
14
+ pager.fast_exit!
13
15
  system 'reset'
14
16
  rescue Timeout::Error
15
- __kill_pager!(pid)
17
+ pager.fast_exit!
16
18
  system 'reset'
17
19
  retry
20
+ ensure
21
+ pager.close
18
22
  end
19
23
 
20
24
  private
21
- # @api private
22
- def __fork_pager(title, tweets)
23
- Kernel.fork do
24
- _pry_.pager.open do |pager|
25
- __trap_signal_in_fork(pager)
26
- tweets.empty? ? pager.write("No tweets to show.") :
27
- pager.write(__render_tweets(title || "Twitter", tweets))
28
-
29
- end
30
- end
31
- end
32
-
33
25
  # @api private
34
26
  def __render_tweets(title, tweets)
35
27
  title = bright_blue(bold((" " * 40) + title) + "\n\n")
@@ -39,11 +31,11 @@ module Pry::SendTweet::TweetRenderer
39
31
  # @api private
40
32
  def __render_tweet(tweet)
41
33
  contents = __read_tweet_body(tweet)
42
- TTY::Box.frame(height: box_height,
34
+ body = "#{tweet.url}\n--\n#{contents}\n"
35
+ height = body.lines.count > box_height ? body.lines.count : box_height
36
+ TTY::Box.frame(height: height,
43
37
  width: box_width,
44
- title: {top_left: __render_tweet_title(tweet)}) do
45
- "#{tweet.url}\n--\n#{contents}\n"
46
- end.to_s
38
+ title: {top_left: __render_tweet_title(tweet)}) {body}.to_s
47
39
  end
48
40
 
49
41
  # @api private
@@ -51,7 +43,7 @@ module Pry::SendTweet::TweetRenderer
51
43
  user, created_at = tweet.user, tweet.created_at.getlocal
52
44
  title = [
53
45
  bold("@#{user.screen_name}"),
54
- created_at.ago.in_words,
46
+ time_ago_in_words(created_at),
55
47
  created_at.strftime(time_format)
56
48
  ].join bright_blue(" | ")
57
49
  " #{title} "
@@ -59,8 +51,14 @@ module Pry::SendTweet::TweetRenderer
59
51
 
60
52
  # @api private
61
53
  def __read_tweet_body(tweet)
54
+ uris = tweet.uris
62
55
  text = tweet.attrs[:full_text] ? tweet.attrs[:full_text] :
63
56
  tweet.full_text
57
+ # 'text' might be a frozen string
58
+ text = text.dup
59
+ uris.each do |uri|
60
+ text.gsub!(uri.attrs[:url], uri.attrs[:expanded_url])
61
+ end
64
62
  CGI.unescapeHTML(text).strip
65
63
  end
66
64
 
@@ -82,22 +80,4 @@ module Pry::SendTweet::TweetRenderer
82
80
  timeout || (60*5)
83
81
  end
84
82
  end
85
-
86
- # @api private
87
- def __kill_pager!(pid)
88
- Process.kill('SIGINT', pid)
89
- Process.wait(pid) rescue nil
90
- end
91
-
92
- # @api private
93
- def __trap_signal_in_fork(pager)
94
- trap('SIGINT') {
95
- if Pry::Pager::SystemPager === pager
96
- syspager = pager.send(:pager)
97
- pid = syspager.pid
98
- Process.kill('SIGKILL', pid) rescue nil
99
- end
100
- Process.kill('SIGKILL', Process.pid)
101
- }
102
- end
103
83
  end
@@ -7,8 +7,9 @@ module Pry::SendTweet::UserRenderer
7
7
  #{bold("Following")} #{user.friends_count}
8
8
  #{user.description}
9
9
  USER
10
+ height = body.lines.count > box_height ? body.lines.count : box_height
10
11
  TTY::Box.frame(
11
- height: box_height,
12
+ height: height,
12
13
  width: box_width,
13
14
  title: {top_left: title}
14
15
  ) { body }.to_s
@@ -5,7 +5,6 @@
5
5
  module Pry::SendTweet::TTYPatch
6
6
  require 'tty-box'
7
7
  require 'unicode/display_width'
8
- require 'unicode/emoji'
9
8
  # Create a frame
10
9
  #
11
10
  # @api public
@@ -44,7 +43,7 @@ module Pry::SendTweet::TTYPatch
44
43
  unless content[i].nil?
45
44
  output << bg.(fg.(content[i]))
46
45
  plain_content = Pry::Helpers::Text.strip_color(content[i])
47
- content_size -= Unicode::DisplayWidth.of(plain_content, 1, {}, emoji: true)
46
+ content_size -= Unicode::DisplayWidth.of(plain_content, 1, {})
48
47
  end
49
48
  if style[:fg] || style[:bg] || !position # something to color
50
49
  output << bg.(fg.(' ' * content_size))
@@ -1,5 +1,5 @@
1
1
  class Pry
2
2
  module SendTweet
3
- VERSION = '0.12.1'
3
+ VERSION = '0.13.0'
4
4
  end
5
5
  end
@@ -0,0 +1,35 @@
1
+ module TimeAgoInWords
2
+ require 'time'
3
+ VERSION = "0.0.5"
4
+
5
+ module Units
6
+ Second = 1
7
+ Minute = Second * 60
8
+ Hour = Minute * 60
9
+ Day = Hour * 24
10
+ Week = Day * 7
11
+ Month = Week * 4
12
+ Year = Day * 365
13
+ Decade = Year * 10
14
+ Century = Decade * 10
15
+ Millennium = Century * 10
16
+ Eon = 1.0/0
17
+ end
18
+
19
+ module_function
20
+ def time_ago_in_words(time)
21
+ time_difference = Time.now.to_i - time.to_i
22
+ return "0 seconds ago" if time_difference <= 0
23
+ unit = get_unit(time_difference)
24
+ unit_rep = time_difference > 1 ? "#{unit.to_s.downcase}s" : unit.to_s.downcase
25
+ unit_difference = time_difference / Units.const_get(unit.capitalize)
26
+ "#{unit_difference} #{unit_rep} ago"
27
+ end
28
+
29
+ private
30
+ def get_unit(time_difference)
31
+ Units.constants.each_cons(2) do |con|
32
+ return con.first if (Units.const_get(con[0])...Units.const_get(con[1])) === time_difference
33
+ end
34
+ end
35
+ end
@@ -8,12 +8,17 @@ Gem::Specification.new do |spec|
8
8
  spec.description = spec.summary
9
9
  spec.homepage = "https://github.com/r-obert/pry-send_tweet.rb"
10
10
  spec.licenses = ["MIT"]
11
- spec.require_paths = ["lib"]
12
- spec.files = Dir["Vagrantfile", "Dockerfile", "Gemfile", "samples/*", "*.{txt,gemspec,md,sh}", "lib/**/*.rb"]
11
+ spec.require_paths = ["lib", "lib/time-ago-in-words/lib"]
12
+ spec.files = Dir[
13
+ "*file",
14
+ "art/*",
15
+ "vms/*",
16
+ "samples/*",
17
+ "*.{txt,gemspec,md,sh}",
18
+ "lib/**/*.rb"
19
+ ]
13
20
  spec.add_runtime_dependency "pry", "~> 0.12"
14
21
  spec.add_runtime_dependency "twitter", "~> 6.0"
15
- spec.add_runtime_dependency "time-lord", "~> 1.0"
16
22
  spec.add_runtime_dependency "tty-box", "= 0.3.0"
17
23
  spec.add_runtime_dependency "unicode-display_width", "~> 1.4"
18
- spec.add_runtime_dependency "unicode-emoji", "~> 1.1"
19
24
  end
@@ -0,0 +1,5 @@
1
+ export EDITOR="ee"
2
+ export PAGER="less"
3
+ export LANG="en_US.UTF-8"
4
+ export LC_ALL="en_US.UTF-8"
5
+ export RUBYLIB='/app/lib:/app/lib/time-ago-in-words/lib'
@@ -1,16 +1,11 @@
1
- name: bsd_send_tweets
1
+ name: pry_send_tweet
2
2
  root: /path/to/pry-send_tweet.rb
3
3
 
4
- on_project_start:
5
- - vagrant up
6
-
7
4
  windows:
8
5
  - twitter:
9
6
  layout: even-horizontal
10
7
  panes:
11
- - vagrant ssh -c 'source ~/.zshrc && cd /app && bundle exec pry -e read-tweets'
12
- - vagrant ssh -c 'source ~/.zshrc && cd /app && bundle exec pry'
8
+ - source ~/.zshrc && cd /app && pry -r pry-send_tweet -e read-tweets
9
+ - source ~/.zshrc && cd /app && pry -r pry-send_tweet
13
10
  - sh:
14
- - vagrant ssh
15
- - sync:
16
- - vagrant rsync-auto
11
+ -
@@ -0,0 +1,15 @@
1
+ def run(*cmd)
2
+ Process.wait Kernel.spawn(*cmd)
3
+ if !$?.success?
4
+ raise cmd.join(' ') + " failed."
5
+ end
6
+ end
7
+
8
+ ARGV.each do |argument|
9
+ case argument
10
+ when '--fresh' then run('vagrant', 'destroy', '--force')
11
+ end
12
+ end
13
+
14
+ run 'vagrant', 'up'
15
+ run 'vagrant', 'ssh', '-c', 'tmuxinator start pry_send_tweet'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pry-send_tweet.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.1
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Gleeson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-19 00:00:00.000000000 Z
11
+ date: 2019-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '6.0'
41
- - !ruby/object:Gem::Dependency
42
- name: time-lord
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: tty-box
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +66,6 @@ dependencies:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '1.4'
83
- - !ruby/object:Gem::Dependency
84
- name: unicode-emoji
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'
97
69
  description: A Twitter client for the Pry REPL.
98
70
  email: trebor.g@protonmail.com
99
71
  executables: []
@@ -101,13 +73,13 @@ extensions: []
101
73
  extra_rdoc_files: []
102
74
  files:
103
75
  - CHANGELOG.md
104
- - Dockerfile
105
- - Gemfile
106
76
  - LICENSE.txt
107
77
  - README.md
108
78
  - Vagrantfile
109
- - dockerize.sh
79
+ - art/44-e44743a5bb.jpg
80
+ - art/52-eec4df2edf.jpg
110
81
  - lib/pry-send_tweet.rb
82
+ - lib/pry/pager/system_pager.rb
111
83
  - lib/pry/send_tweet/commands/base_command.rb
112
84
  - lib/pry/send_tweet/commands/paging/paging_support.rb
113
85
  - lib/pry/send_tweet/commands/read_tweets.rb
@@ -125,10 +97,11 @@ files:
125
97
  - lib/pry/send_tweet/renderers/user_renderer.rb
126
98
  - lib/pry/send_tweet/tty-box.rb
127
99
  - lib/pry/send_tweet/version.rb
100
+ - lib/time-ago-in-words/lib/time-ago-in-words.rb
128
101
  - pry-send_tweet.gemspec
129
- - samples/hardenedbsd-zshrc
130
- - samples/tmuxinator-docker.yml
102
+ - samples/freebsd-zshrc
131
103
  - samples/tmuxinator-vagrant.yml
104
+ - vms/freebsd.rb
132
105
  homepage: https://github.com/r-obert/pry-send_tweet.rb
133
106
  licenses:
134
107
  - MIT
@@ -137,6 +110,7 @@ post_install_message:
137
110
  rdoc_options: []
138
111
  require_paths:
139
112
  - lib
113
+ - lib/time-ago-in-words/lib
140
114
  required_ruby_version: !ruby/object:Gem::Requirement
141
115
  requirements:
142
116
  - - ">="
data/Dockerfile DELETED
@@ -1,41 +0,0 @@
1
- FROM ruby:2.6.0-stretch
2
-
3
- # Add regular user
4
- RUN groupadd -g 999 appuser
5
- RUN useradd -d /home/appuser -r -u 999 -g appuser appuser
6
- RUN mkdir -p /home/appuser
7
- WORKDIR /home/appuser/
8
-
9
- # Bundle
10
- ADD Gemfile pry-send_tweet.gemspec /home/appuser/
11
- ADD lib /home/appuser/lib/
12
- RUN gem install bundler
13
- # FIXME: During 'bundle install', i got: Could not find gem 'buftok (~> 0.2.0)'
14
- # Installing twitter as a gem first fixes that.
15
- RUN gem install twitter
16
- RUN bundle install
17
-
18
- # Install packages
19
- RUN apt-get update
20
- RUN apt-get install -y --no-install-recommends locales emacs24-nox less
21
-
22
- # Configure locale
23
- RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
24
- RUN locale-gen
25
- RUN echo 'Europe/Zurich' > /etc/timezone
26
- RUN rm /etc/localtime
27
- RUN dpkg-reconfigure -f noninteractive tzdata
28
- ENV LANG en_US.UTF-8
29
- ENV LANGUAGE en_US:en
30
- ENV LC_ALL en_US.UTF-8
31
-
32
- # Configure editor
33
- ENV EDITOR emacs
34
-
35
- # Add files to container
36
- ADD . /home/appuser/
37
-
38
- # Finally, drop root permissions to regular user
39
- RUN chown appuser /home/appuser
40
- RUN chown -R appuser /home/appuser/*
41
- USER appuser
data/Gemfile DELETED
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
- gem 'pry-auto_benching.rb'
4
- gem 'pry-doc'
5
- group :test do
6
- gem 'rspec'
7
- end
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
- docker build -t send_tweets .
3
- docker run -v $PWD/tweets/:/app/tweets -i -t send_tweets bundle exec pry
@@ -1,4 +0,0 @@
1
- export EDITOR="emacs"
2
- export PAGER="less"
3
- export LANG="en_US.UTF-8"
4
- export LC_ALL="en_US.UTF-8"
@@ -1,15 +0,0 @@
1
- name: send_tweets
2
- root: /path/to/pry/send/tweet
3
-
4
- on_project_start: docker build -t send_tweets .
5
-
6
- windows:
7
- - twitter:
8
- layout: even-horizontal
9
- panes:
10
- - docker run -v $PWD/tweets/:/app/tweets -i -t send_tweets bundle exec pry -e "read-tweets"
11
- - docker run -v $PWD/tweets/:/app/tweets -i -t send_tweets bundle exec pry
12
- - sh:
13
- - docker run -v $PWD/tweets/:/app/tweets -i -t send_tweets bash
14
-
15
- on_project_start: docker build -t send_tweets .