seapig-rails 0.0.3 → 0.0.4

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: 23f1145dd4d6fb56d90fa41f44e2d652440f0d16
4
- data.tar.gz: aefcf64b92b67673f4720c88078ef71f146cc27e
3
+ metadata.gz: bb62d1753a2bd5140ae246bf3684fcb9ea0faccf
4
+ data.tar.gz: 90cd3b4c61da4f098dc4ec1b0fa84ee439d5e60f
5
5
  SHA512:
6
- metadata.gz: af39161ee44bff9348c655e384c6f01facd81a596efdbd5a0f5863a2fd22423a9cf265ef2316657a08fd4521755550b128137fd27213187eb000628e4bdc38f2
7
- data.tar.gz: 07f2aeba1327c29252b019ec3919c2afb1cce8031803dfa87d93a78279f748643266380b68ecebfee7dc325efc503b854e567a0b53124a4585e703776dea7ec5
6
+ metadata.gz: 3a8d72ef25ff1af569147db2734310934c66250962ef5b7c5ca57b3292a0282cd86289aa45cb4e8185a61f1f78fd9240fd0638d83caa535cd8fa2d5b89feeceb
7
+ data.tar.gz: 27473c18d6476877676269fe3ccfe852bfad81021c38d0e9d5e9246bd305441b00d60ddbc84a4ac3ec5398b5973b95941481c46525e9feb474e11c1fc6bf861f
@@ -12,20 +12,20 @@ class @SeapigServer
12
12
  connect: () ->
13
13
  @connected = false
14
14
 
15
- @socket = new WebSocket(@url,'SeaPig-0.0')
15
+ @socket = new WebSocket(@url)
16
16
 
17
17
  @socket.onerror = (error) =>
18
18
  console.log('Seapig socket error', error)
19
19
  @socket.close()
20
20
 
21
21
  @socket.onclose = () =>
22
- console.log('Seapig connection closed')
22
+ console.log('Seapig connection closed') if @options.debug
23
23
  for object_id, object of @slave_objects
24
24
  object.valid = false
25
25
  setTimeout((=>@connect()), 2000)
26
26
 
27
27
  @socket.onopen = () =>
28
- console.log('Seapig connection opened')
28
+ console.log('Seapig connection opened') if @options.debug
29
29
  @connected = true
30
30
  @socket.send(JSON.stringify(action: 'client-options-set', options: @options))
31
31
  for object_id, object of @slave_objects
@@ -1,12 +1,13 @@
1
1
  class @SeapigRouter
2
2
 
3
3
 
4
- constructor: (seapig_server, session_id, initial_state, debug = false)->
4
+ constructor: (seapig_server, session_id, initial_search, debug = false)->
5
5
  @seapig_server = seapig_server
6
6
  @session_id = session_id
7
7
  @debug = debug
8
+ @initial_search = initial_search
8
9
 
9
- @state = _.extend({session_id: @session_id, id: 0}, initial_state)
10
+ @state = {session_id: @session_id, id: 0}
10
11
 
11
12
  @session_data = @seapig_server.master('web-session-data-'+@session_id)
12
13
  @session_data.object.states = [ @state ]
@@ -51,27 +52,32 @@ class @SeapigRouter
51
52
  path_session_id = spl.shift()
52
53
  path_state_id = spl.shift()
53
54
  else
54
- path_session_id = @session_id
55
- path_state_id = 0
56
- spl = []
55
+ window.history.replaceState(@state,null,'/a/'+@session_id+'/0'+@initial_search)
56
+ return @location_changed()
57
57
 
58
- diff = []
58
+ total_diff = []
59
+ partial_diff = []
59
60
  while spl.length > 0
60
- diff.push([spl.shift(),spl.shift()])
61
+ total_diff.push([spl.shift(),spl.shift()])
61
62
  if window.location.search.length > 0
62
63
  for pair in window.location.search.split('?')[1].split('&')
63
- diff.push(pair.split('=',2))
64
- console.log('Parsed location: session_id:',path_session_id,' diff:', diff) if @debug
64
+ total_diff.push(pair.split('=',2))
65
+ partial_diff.push(pair.split('=',2))
66
+ console.log('Parsed location: session_id:',path_session_id,' partial_diff:', partial_diff) if @debug
65
67
 
66
68
  if path_session_id == @session_id
67
- @state_change(diff)
69
+ @state_change(partial_diff)
68
70
  else
69
71
  if @remote_state?
70
- @state_change_to_remote(diff)
72
+ @state_change_to_remote(total_diff)
71
73
  else
72
74
  @state_valid = false
73
- @remote_state = @seapig_server.slave('web-session-state-'+path_session_id+':'+path_state_id)
74
- @remote_state.onchange = ()=> @state_change_to_remote(diff)
75
+ if path_state_id == '0'
76
+ @remote_state = {object: {session_id: path_session_id, id: 0}}
77
+ @state_change_to_remote(total_diff)
78
+ else
79
+ @remote_state = @seapig_server.slave('web-session-state-'+path_session_id+':'+path_state_id)
80
+ @remote_state.onchange = ()=> @state_change_to_remote(total_diff)
75
81
 
76
82
 
77
83
  state_change_to_remote: (diff) ->
@@ -95,7 +101,7 @@ class @SeapigRouter
95
101
  @session_data.object.states.push(@state)
96
102
  @session_data.changed()
97
103
  if @remote_state?
98
- @remote_state.unlink()
104
+ @remote_state.unlink() if @remote_state.object.id > 0
99
105
  @remote_state = null
100
106
  @state_valid = true
101
107
  @state_changed()
@@ -103,10 +109,28 @@ class @SeapigRouter
103
109
 
104
110
  state_diff_apply: (state, diff)->
105
111
  for entry in diff
106
- if entry[0][0] == '-'
107
- delete state[entry[0][1..-1]]
112
+ address = entry[0]
113
+ value = entry[1]
114
+ add = (address[0] != '-')
115
+ hash = (address[address.length-1] != '~')
116
+ address = address[1..-1] if address[0] == '-'
117
+ address = address[0..-2] if address[address.length-1] == '~'
118
+ obj = state
119
+ spl = address.split('~')
120
+ for subobj,i in spl
121
+ if i < (spl.length-1)
122
+ obj[subobj] = {} if not obj[subobj]?
123
+ obj = obj[subobj]
124
+ if add
125
+ if hash
126
+ obj[spl[spl.length-1]] = value
127
+ else
128
+ obj[spl[spl.length-1]].push(value)
108
129
  else
109
- state[entry[0]] = entry[1]
130
+ if hash
131
+ delete obj[spl[spl.length-1]]
132
+ else
133
+ state[entry[0]].splice(_.indexOf(state[entry[0]], value),1)
110
134
  state
111
135
 
112
136
 
data/bin/seapig-notifier CHANGED
@@ -1,14 +1,17 @@
1
1
  #!/bin/env ruby
2
2
 
3
+ ENV['RAILS_ENV'] = 'production'
3
4
  require './config/environment.rb'
4
5
 
5
6
  require 'websocket-eventmachine-client'
6
7
  require 'json'
7
8
 
8
-
9
- Rails.application.eager_load!
10
9
  notifiers = Hash[*ActiveRecord::Base.descendants.select { |cls| cls.respond_to?('seapig_dependency_version') }.map { |notifier| [notifier.name,notifier] }.flatten ]
11
10
 
11
+ puts "Known notifiers:"
12
+ notifiers.keys.each { |notifier| puts " "+notifier }
13
+ puts
14
+
12
15
  $last_versions = {}
13
16
  $payloads = Queue.new
14
17
 
@@ -1,3 +1,3 @@
1
1
  module Seapig
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -12,8 +12,9 @@ class SeapigRouterSessionStateProducer < Producer
12
12
  version = Time.new.to_f
13
13
  p session_key, object_id
14
14
  session = SeapigRouterSession.find_by(key: session_key)
15
- data = SeapigRouterSessionState.find_by(seapig_router_session_id: session.id, state_id: state_id).state
16
- p data
15
+ state = SeapigRouterSessionState.find_by(seapig_router_session_id: session.id, state_id: state_id)
16
+ return [false, {SeapigRouterSessionState: SeapigRouterSessionState.seapig_dependency_version}] if not state
17
+ data = state.state
17
18
  [data, version]
18
19
  end
19
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seapig-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - yunta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-06 00:00:00.000000000 Z
11
+ date: 2016-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails