dato 0.3.8 → 0.3.9

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
  SHA1:
3
- metadata.gz: 891d66575da4adc07c30e50a32fbd58a1c4aa220
4
- data.tar.gz: ac0d03088779bd0951f89ba7b0c5280580974212
3
+ metadata.gz: 4a049988df0dbd7359ffb3ba6c1d6636d4a65e2b
4
+ data.tar.gz: 59de0d31929d6732e26aabe60bebb26e123652ed
5
5
  SHA512:
6
- metadata.gz: 9d58c57016a7f4df7579dd47d209c6ee15bd64833d4344ca2e839a2aea1ab5b5d4e29399064fe51d9b822bc7d8c2f695cf465cd7ba9d8bc95d96f41b9e3ded2d
7
- data.tar.gz: b4ee25de9041b0f1fc66b70f3d73cfaefcddfa3f4a6d4fbcc1292792998679c2d0a7a5aca0b868eabbb0b623940940df4ba4b4784d9fecad0437180605f03ea0
6
+ metadata.gz: cd26bb40b37068991ba945e8dc2622170c312a7bbc449ef3736bc13bb59ff925d14f4899e2c0016c0614cbe30c2cd416db00bb438030b4cb92338a8b744569a2
7
+ data.tar.gz: 50b9b91829ff3004f2a3c2b2b34b6850ea9a0627cee86653c1f0cc2d7f291efcec3a187454353b1e77c9acd33815787277e3ee5f1efcfd02a02933354fe62f38
@@ -45,4 +45,5 @@ Gem::Specification.new do |spec|
45
45
  spec.add_runtime_dependency 'cacert'
46
46
  spec.add_runtime_dependency 'dotenv'
47
47
  spec.add_runtime_dependency 'pusher-client'
48
+ spec.add_runtime_dependency 'listen'
48
49
  end
@@ -3,6 +3,9 @@ require 'thor'
3
3
  require 'dato/dump/runner'
4
4
  require 'dato/dump/ssg_detector'
5
5
  require 'dato/migrate_slugs/runner'
6
+ require 'dato/watch/site_change_watcher'
7
+ require 'listen'
8
+ require 'thread'
6
9
 
7
10
  module Dato
8
11
  class Cli < Thor
@@ -11,8 +14,10 @@ module Dato
11
14
  desc 'dump', 'dumps DatoCMS content into local files'
12
15
  option :config, default: 'dato.config.rb'
13
16
  option :token, default: ENV['DATO_API_TOKEN'], required: true
17
+ option :watch, default: false, type: :boolean
14
18
  def dump
15
19
  config_file = File.expand_path(options[:config])
20
+ watch_mode = options[:watch]
16
21
 
17
22
  client = Dato::Site::Client.new(
18
23
  options[:token],
@@ -22,7 +27,46 @@ module Dato
22
27
  }
23
28
  )
24
29
 
25
- Dump::Runner.new(config_file, client).run
30
+ if watch_mode
31
+ site_id = client.request(:get, '/site')['data']['id']
32
+
33
+ semaphore = Mutex.new
34
+
35
+ thread_safe_dump(semaphore, config_file, client)
36
+
37
+ Dato::Watch::SiteChangeWatcher.new(site_id).connect do
38
+ thread_safe_dump(semaphore, config_file, client)
39
+ end
40
+
41
+ watch_config_file(config_file) do
42
+ thread_safe_dump(semaphore, config_file, client)
43
+ end
44
+
45
+ sleep
46
+ else
47
+ Dump::Runner.new(config_file, client).run
48
+ end
49
+ end
50
+
51
+ desc 'check', 'checks the presence of a DatoCMS token'
52
+ def check
53
+ exit 0 if ENV['DATO_API_TOKEN']
54
+
55
+ say 'Site token is not specified!'
56
+ token = ask "Please paste your DatoCMS site read-only API token:\n>"
57
+
58
+ if !token || token.empty?
59
+ puts 'Missing token'
60
+ exit 1
61
+ end
62
+
63
+ File.open('.env', 'a') do |file|
64
+ file.puts "DATO_API_TOKEN=#{token}"
65
+ end
66
+
67
+ say 'Token added to .env file.'
68
+
69
+ exit 0
26
70
  end
27
71
 
28
72
  desc 'migrate-slugs', 'migrates a Site so that it uses slug fields'
@@ -38,5 +82,21 @@ module Dato
38
82
 
39
83
  MigrateSlugs::Runner.new(client, options[:skip_id_prefix]).run
40
84
  end
85
+
86
+ no_tasks do
87
+ def watch_config_file(config_file, &block)
88
+ Listen.to(
89
+ File.dirname(config_file),
90
+ only: /#{Regexp.quote(File.basename(config_file))}/,
91
+ &block
92
+ ).start
93
+ end
94
+
95
+ def thread_safe_dump(semaphore, config_file, client)
96
+ semaphore.synchronize do
97
+ Dump::Runner.new(config_file, client).run
98
+ end
99
+ end
100
+ end
41
101
  end
42
102
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Dato
3
- VERSION = '0.3.8'
3
+ VERSION = '0.3.9'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dato
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Verna
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-07 00:00:00.000000000 Z
11
+ date: 2017-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -346,6 +346,20 @@ dependencies:
346
346
  - - ">="
347
347
  - !ruby/object:Gem::Version
348
348
  version: '0'
349
+ - !ruby/object:Gem::Dependency
350
+ name: listen
351
+ requirement: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - ">="
354
+ - !ruby/object:Gem::Version
355
+ version: '0'
356
+ type: :runtime
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - ">="
361
+ - !ruby/object:Gem::Version
362
+ version: '0'
349
363
  description: Ruby client for DatoCMS API
350
364
  email:
351
365
  - s.verna@cantierecreativo.net