middleman-dato 0.5.24 → 0.6.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
  SHA1:
3
- metadata.gz: 8ea2407f7c1f9ac3fcaca5adcb47bc2f6ac3785f
4
- data.tar.gz: 98d081e1bb716dad649277d023d8acb389b1e1ff
3
+ metadata.gz: fccad677bb46da054f82c529dc8110920e000eaf
4
+ data.tar.gz: c7e2494548c6bd5b2df136be13c07cfe5bce10ee
5
5
  SHA512:
6
- metadata.gz: ca3280632ab6d349820407a098d57a53369a7e142dedeabc6009109104c55582da26f9c15fd9104711c1f8e61f1c71d80678baaed1fcd3700d47d13e8ffe7885
7
- data.tar.gz: 58f973e3e4490aa575518e4b86f006bf940a9daf3397d701f00292531774d1596ecfa95c9e96e1396dff73b3d79d634f12367e22e55c594a85bf2a92b4d7deb2
6
+ metadata.gz: 62252d9f6e85a376f73a453a55ea1b054194903ca50fd54400082264c063d3490900ddab413c68f518731291f355c801368150940b02d41a176513ea3ac39aa5
7
+ data.tar.gz: 8d3b64ca62c474b8b44fb38447d363eb699308e3fe23835c5efd6a4dc122956a763849be2098925a993b870fbef2cd0dd3b14d0f21d674fbfead1866ddda0d25
@@ -1,13 +1,57 @@
1
1
  # frozen_string_literal: true
2
2
  require 'middleman-core'
3
3
  require 'middleman-core/version'
4
- require 'semantic'
5
4
  require 'dato/site/client'
6
5
  require 'dato/local/loader'
7
6
  require 'middleman_dato/meta_tags_builder'
8
7
  require 'middleman_dato/meta_tags/favicon'
8
+ require 'pusher-client'
9
9
 
10
10
  module MiddlemanDato
11
+ class Watcher
12
+ include Singleton
13
+ attr_reader :event_queue
14
+
15
+ def initialize
16
+ PusherClient.logger.level = Logger::WARN
17
+ @site_id = nil
18
+ @apps = []
19
+ end
20
+
21
+ def watch(app, loader, site_id)
22
+ @app = app
23
+ @loader = loader
24
+
25
+ if site_id != @site_id
26
+ if @socket && @socket.connected
27
+ @apps = []
28
+ @socket.disconnect
29
+ end
30
+
31
+ @apps = [ app.object_id ]
32
+ @site_id = site_id
33
+ @socket = PusherClient::Socket.new('75e6ef0fe5d39f481626', secure: true)
34
+ @socket.subscribe("site-#{site_id}")
35
+ @socket.bind('site:change') do
36
+ print "DatoCMS content changed, refreshing data..."
37
+ @loader.load
38
+ puts " done!"
39
+ @app.sitemap.rebuild_resource_list!(:touched_dato_content)
40
+ end
41
+ @socket.connect(true)
42
+ else
43
+ @apps[@apps.size - 1] = app.object_id
44
+ end
45
+ end
46
+
47
+ def shutdown(app)
48
+ if @socket && @socket.connected && @apps == [ app.object_id ]
49
+ @socket.disconnect
50
+ end
51
+ @apps.delete(app.object_id)
52
+ end
53
+ end
54
+
11
55
  class MiddlemanExtension < ::Middleman::Extension
12
56
  attr_reader :loader
13
57
 
@@ -16,9 +60,8 @@ module MiddlemanDato
16
60
  option :api_base_url, 'https://site-api.datocms.com', 'Site API host'
17
61
  option :base_url, nil, 'Website base URL'
18
62
 
19
- if Semantic::Version.new(Middleman::VERSION).major >= 4
20
- expose_to_config dato: :dato
21
- end
63
+ expose_to_config dato: :dato_collector
64
+ expose_to_application dato_items_repo: :items_repo
22
65
 
23
66
  def initialize(app, options_hash = {}, &block)
24
67
  super
@@ -26,13 +69,16 @@ module MiddlemanDato
26
69
  @loader = loader = Dato::Local::Loader.new(client)
27
70
  @loader.load
28
71
 
29
- app.before do
30
- loader.load if !build? && !ENV.fetch('DISABLE_DATO_REFRESH', false)
31
- true
72
+ app.after_configuration do
73
+ if !app.build?
74
+ Watcher.instance.watch(app, loader, loader.items_repo.site.id)
75
+ end
32
76
  end
33
77
 
34
- if Semantic::Version.new(Middleman::VERSION).major <= 3
35
- app.send :include, InstanceMethods
78
+ app.before_shutdown do
79
+ if !app.build?
80
+ Watcher.instance.shutdown(app)
81
+ end
36
82
  end
37
83
  end
38
84
 
@@ -47,7 +93,13 @@ module MiddlemanDato
47
93
  )
48
94
  end
49
95
 
50
- def dato
96
+ def dato_collector
97
+ app.extensions[:collections].live_collector do |app, resources|
98
+ app.dato_items_repo
99
+ end
100
+ end
101
+
102
+ def items_repo
51
103
  loader.items_repo
52
104
  end
53
105
 
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module MiddlemanDato
3
- VERSION = '0.5.24'
3
+ VERSION = '0.6.0'
4
4
  end
@@ -22,8 +22,8 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.add_development_dependency('coveralls')
24
24
 
25
- s.add_runtime_dependency('middleman-core', ['>= 3.3.12'])
26
- s.add_runtime_dependency('dato', ['>= 0.1.22'])
27
- s.add_runtime_dependency('semantic')
25
+ s.add_runtime_dependency('middleman-core', ['>= 4.1.10'])
26
+ s.add_runtime_dependency('dato', ['>= 0.2.4'])
28
27
  s.add_runtime_dependency('activesupport')
28
+ s.add_runtime_dependency('pusher-client')
29
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-dato
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.24
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Verna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-04 00:00:00.000000000 Z
11
+ date: 2016-11-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coveralls
@@ -30,30 +30,30 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.3.12
33
+ version: 4.1.10
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 3.3.12
40
+ version: 4.1.10
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: dato
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.22
47
+ version: 0.2.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.22
54
+ version: 0.2.4
55
55
  - !ruby/object:Gem::Dependency
56
- name: semantic
56
+ name: activesupport
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: activesupport
70
+ name: pusher-client
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="