rave 0.1.2-java
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.
- data/bin/rave +28 -0
- data/lib/commands/appcfg.rb +9 -0
- data/lib/commands/create.rb +153 -0
- data/lib/commands/server.rb +8 -0
- data/lib/commands/task.rb +156 -0
- data/lib/commands/usage.rb +19 -0
- data/lib/commands/war.rb +28 -0
- data/lib/exceptions.rb +20 -0
- data/lib/ext/logger.rb +7 -0
- data/lib/gems.yaml +9 -0
- data/lib/jars/appengine-api-1.0-sdk-1.3.0.jar +0 -0
- data/lib/mixins/controller.rb +72 -0
- data/lib/mixins/data_format.rb +206 -0
- data/lib/mixins/logger.rb +19 -0
- data/lib/mixins/object_factory.rb +87 -0
- data/lib/mixins/time_utils.rb +19 -0
- data/lib/models/annotation.rb +148 -0
- data/lib/models/blip.rb +305 -0
- data/lib/models/component.rb +42 -0
- data/lib/models/context.rb +174 -0
- data/lib/models/document.rb +9 -0
- data/lib/models/element.rb +113 -0
- data/lib/models/event.rb +230 -0
- data/lib/models/operation.rb +79 -0
- data/lib/models/range.rb +14 -0
- data/lib/models/robot.rb +79 -0
- data/lib/models/user.rb +62 -0
- data/lib/models/wave.rb +45 -0
- data/lib/models/wavelet.rb +269 -0
- data/lib/ops/blip_ops.rb +233 -0
- data/lib/rave.rb +28 -0
- metadata +135 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
module Rave
|
2
|
+
module Models
|
3
|
+
# An element within a document.
|
4
|
+
# (abstract factory)
|
5
|
+
class Element < Component
|
6
|
+
include Rave::Mixins::ObjectFactory
|
7
|
+
|
8
|
+
JAVA_CLASS = "com.google.wave.api.FormElement"
|
9
|
+
|
10
|
+
def initialize(properties = {})
|
11
|
+
super(:id => '') # TODO: Don't actually have IDs, as such. Bad inheritance from Component?
|
12
|
+
@properties = properties
|
13
|
+
end
|
14
|
+
|
15
|
+
# Gets the value of an element property.
|
16
|
+
def get(key, default = nil)
|
17
|
+
if @properties.has_key? key
|
18
|
+
@properties[key]
|
19
|
+
else
|
20
|
+
default
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Sets the value of an element property.
|
25
|
+
def set(key, value)
|
26
|
+
@properties[key] = value
|
27
|
+
end
|
28
|
+
|
29
|
+
# Alias for #set(key, value)
|
30
|
+
alias_method :[]=, :set
|
31
|
+
|
32
|
+
# Alias for #get(key)
|
33
|
+
alias_method :[], :get
|
34
|
+
|
35
|
+
def to_json # :nodoc:
|
36
|
+
{
|
37
|
+
'javaClass' => JAVA_CLASS,
|
38
|
+
'properties' => @properties,
|
39
|
+
'type' => type,
|
40
|
+
}.to_json
|
41
|
+
end
|
42
|
+
|
43
|
+
# A Google Gadget element within a document.
|
44
|
+
class Gadget < Element
|
45
|
+
factory_register 'GADGET'
|
46
|
+
|
47
|
+
def initialize(fields = {})
|
48
|
+
# Gadget has 'fields' rather than 'properties'.
|
49
|
+
super(fields)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# An image element within a document.
|
54
|
+
class Image < Element
|
55
|
+
factory_register 'IMAGE'
|
56
|
+
end
|
57
|
+
|
58
|
+
# An inline blip within a document.
|
59
|
+
class InlineBlip < Element
|
60
|
+
factory_register 'INLINE_BLIP'
|
61
|
+
|
62
|
+
# The blip contained within the element [Blip].
|
63
|
+
def blip # :nodoc:
|
64
|
+
@context.blips[@properties['blipId']]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# A form element within a document.
|
69
|
+
# (Abstract)
|
70
|
+
class Form < Element
|
71
|
+
# A button form element within a document.
|
72
|
+
class Button < Form
|
73
|
+
factory_register 'BUTTON'
|
74
|
+
end
|
75
|
+
|
76
|
+
# A check form element within a document.
|
77
|
+
class Check < Form
|
78
|
+
factory_register 'CHECK'
|
79
|
+
end
|
80
|
+
|
81
|
+
# A input form element within a document.
|
82
|
+
class Input < Form
|
83
|
+
factory_register 'INPUT'
|
84
|
+
end
|
85
|
+
|
86
|
+
# A password form element within a document.
|
87
|
+
class Password < Form
|
88
|
+
factory_register 'PASSWORD'
|
89
|
+
end
|
90
|
+
|
91
|
+
# A label form element within a document.
|
92
|
+
class Label < Form
|
93
|
+
factory_register 'LABEL'
|
94
|
+
end
|
95
|
+
|
96
|
+
# A radio button form element within a document.
|
97
|
+
class RadioButton < Form
|
98
|
+
factory_register 'RADIO_BUTTON'
|
99
|
+
end
|
100
|
+
|
101
|
+
# A radio button group form element within a document.
|
102
|
+
class RadioButtonGroup < Form
|
103
|
+
factory_register 'RADIO_BUTTON_GROUP'
|
104
|
+
end
|
105
|
+
|
106
|
+
# A text-area form element within a document.
|
107
|
+
class TextArea < Form
|
108
|
+
factory_register 'TEXTAREA'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
data/lib/models/event.rb
ADDED
@@ -0,0 +1,230 @@
|
|
1
|
+
module Rave
|
2
|
+
module Models
|
3
|
+
# Represents an event received from the server.
|
4
|
+
class Event
|
5
|
+
include Rave::Mixins::TimeUtils
|
6
|
+
include Rave::Mixins::ObjectFactory
|
7
|
+
|
8
|
+
BLIP_ID = 'blipId' # :nodoc:
|
9
|
+
|
10
|
+
# Time at which the event was created [Time]
|
11
|
+
def timestamp # :nodoc:
|
12
|
+
@timestamp.dup
|
13
|
+
end
|
14
|
+
|
15
|
+
# ID of the blip that caused the event, or root blip of the wavelet that caused the event [String]
|
16
|
+
def blip_id # :nodoc:
|
17
|
+
@properties[BLIP_ID].dup
|
18
|
+
end
|
19
|
+
|
20
|
+
# Wavelet that caused the event, or wavelet containing the blip that caused the event [Wavelet]
|
21
|
+
def wavelet # :nodoc:
|
22
|
+
@context.primary_wavelet
|
23
|
+
end
|
24
|
+
|
25
|
+
# The user that caused this event to be generated [User]
|
26
|
+
def modified_by # :nodoc:
|
27
|
+
@context.users[@modified_by_id]
|
28
|
+
end
|
29
|
+
|
30
|
+
# Blip that caused the event, or wavelet's root blip for wavelet events [Blip]
|
31
|
+
def blip # :nodoc:
|
32
|
+
@context.blips[@properties[BLIP_ID]]
|
33
|
+
end
|
34
|
+
|
35
|
+
#Options include:
|
36
|
+
# - :timestamp
|
37
|
+
# - :modified_by
|
38
|
+
# - :properties
|
39
|
+
# - :context
|
40
|
+
# Do not use Event.new from outside; instead use Event.create
|
41
|
+
def initialize(options = {}) # :nodoc:
|
42
|
+
@timestamp = time_from_json(options[:timestamp]) || Time.now
|
43
|
+
@modified_by_id = options[:modified_by] || User::NOBODY_ID
|
44
|
+
@properties = options[:properties] || {}
|
45
|
+
@context = options[:context]
|
46
|
+
|
47
|
+
raise ArgumentError.new(":context option required") if @context.nil?
|
48
|
+
|
49
|
+
add_user_ids([@modified_by_id])
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
# Add a series of user ids to the context, if they don't already exist.
|
54
|
+
def add_user_ids(user_ids) # :nodoc:
|
55
|
+
user_ids.each do |id|
|
56
|
+
@context.add_user(:id => id) unless @context.users[id]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Wavelet events
|
61
|
+
|
62
|
+
public
|
63
|
+
class WaveletBlipCreated < Event
|
64
|
+
factory_register 'WAVELET_BLIP_CREATED'
|
65
|
+
|
66
|
+
# Newly created blip [Blip]
|
67
|
+
def new_blip # :nodoc:
|
68
|
+
@context.blips[@properties['newBlipId']]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class WaveletBlipRemoved < Event
|
73
|
+
factory_register 'WAVELET_BLIP_REMOVED'
|
74
|
+
|
75
|
+
# ID for blip which has now been removed [String]
|
76
|
+
def removed_blip_id # :nodoc:
|
77
|
+
@properties['removedBlipId'].dup
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class WaveletParticipantsChanged < Event
|
82
|
+
factory_register 'WAVELET_PARTICIPANTS_CHANGED'
|
83
|
+
|
84
|
+
ADDED = 'participantsAdded' # :nodoc:
|
85
|
+
REMOVED = 'participantsRemoved' # :nodoc:
|
86
|
+
|
87
|
+
def initialize(options = {}) # :nodoc:
|
88
|
+
super(options)
|
89
|
+
|
90
|
+
add_user_ids(@properties[ADDED]) if @properties[ADDED]
|
91
|
+
add_user_ids(@properties[REMOVED]) if @properties[REMOVED]
|
92
|
+
end
|
93
|
+
|
94
|
+
# Array of participants added to the wavelet [Array of User]
|
95
|
+
def participants_added # :nodoc:
|
96
|
+
@properties[ADDED].map { |id| @context.users[id] }
|
97
|
+
end
|
98
|
+
|
99
|
+
# Array of participants removed from the wavelet [Array of User].
|
100
|
+
def participants_removed # :nodoc:
|
101
|
+
@properties[REMOVED].map { |id| @context.users[id] }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class WaveletSelfAdded < Event
|
106
|
+
factory_register 'WAVELET_SELF_ADDED'
|
107
|
+
end
|
108
|
+
|
109
|
+
class WaveletSelfRemoved < Event
|
110
|
+
factory_register 'WAVELET_SELF_REMOVED'
|
111
|
+
end
|
112
|
+
|
113
|
+
class WaveletTimestampChanged < Event
|
114
|
+
factory_register 'WAVELET_TIMESTAMP_CHANGED'
|
115
|
+
|
116
|
+
# Time that the wavelet was changed [Time]
|
117
|
+
def new_timestamp # :nodoc:
|
118
|
+
@properties['timestamp'].dup
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
class WaveletTitleChanged < Event
|
123
|
+
factory_register 'WAVELET_TITLE_CHANGED'
|
124
|
+
|
125
|
+
def new_title # :nodoc:
|
126
|
+
@properties['title'].dup
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
class WaveletVersionChanged < Event
|
131
|
+
factory_register 'WAVELET_VERSION_CHANGED'
|
132
|
+
|
133
|
+
def new_version # :nodoc:
|
134
|
+
@properties['version'].dup
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# Blip events
|
139
|
+
|
140
|
+
class BlipContributorsChanged < Event
|
141
|
+
factory_register 'BLIP_CONTRIBUTORS_CHANGED'
|
142
|
+
|
143
|
+
ADDED = 'contributorsAdded' # :nodoc:
|
144
|
+
REMOVED = 'contributorsRemoved' # :nodoc:
|
145
|
+
|
146
|
+
def initialize(options = {}) # :nodoc:
|
147
|
+
super(options)
|
148
|
+
|
149
|
+
add_user_ids(@properties[ADDED]) if @properties[ADDED]
|
150
|
+
add_user_ids(@properties[REMOVED]) if @properties[REMOVED]
|
151
|
+
end
|
152
|
+
|
153
|
+
# Array of contributors added to the wavelet [Array of User].
|
154
|
+
def contributors_added # :nodoc:
|
155
|
+
@properties[ADDED].map { |id| @context.users[id] }
|
156
|
+
end
|
157
|
+
|
158
|
+
# Array of contributors removed from the wavelet [Array of User].
|
159
|
+
def contributors_removed # :nodoc:
|
160
|
+
@properties[REMOVED].map { |id| @context.users[id] }
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
class BlipSubmitted < Event
|
165
|
+
factory_register 'BLIP_SUBMITTED'
|
166
|
+
end
|
167
|
+
|
168
|
+
# #blip will be nil, but #blip_id will give a sensible value.
|
169
|
+
class BlipDeleted < Event
|
170
|
+
factory_register 'BLIP_DELETED'
|
171
|
+
|
172
|
+
# ID of the blip that was deleted [String]
|
173
|
+
#-- This dummy method just added for the purposes of rdoc.
|
174
|
+
def blip_id # :nodoc:
|
175
|
+
super
|
176
|
+
end
|
177
|
+
|
178
|
+
def initialize(options = {}) # :nodoc:
|
179
|
+
super(options)
|
180
|
+
|
181
|
+
# Ensure a referenced blip is properly deleted. Destroyed blip won't exist.
|
182
|
+
blip.delete_me(false) if @properties[BLIP_ID] and blip
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# General events.
|
187
|
+
|
188
|
+
class DocumentChanged < Event
|
189
|
+
factory_register 'DOCUMENT_CHANGED'
|
190
|
+
end
|
191
|
+
|
192
|
+
class FormButtonClicked < Event
|
193
|
+
factory_register 'FORM_BUTTON_CLICKED'
|
194
|
+
|
195
|
+
# Name of button that was clicked.
|
196
|
+
def button # :nodoc:
|
197
|
+
@properties['button'].dup
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
# Generated when someone in the current wave creates a new wavelet (in a new wave).
|
202
|
+
class WaveletCreated < Event
|
203
|
+
factory_register 'WAVELET_CREATED'
|
204
|
+
end
|
205
|
+
|
206
|
+
class OperationError < Event
|
207
|
+
factory_register 'OPERATION_ERROR'
|
208
|
+
|
209
|
+
# Message describing what caused the error [String]
|
210
|
+
def message # :nodoc:
|
211
|
+
@properties['errorMessage'].dup
|
212
|
+
end
|
213
|
+
|
214
|
+
# Operation type that caused the error [String]
|
215
|
+
def operation_type # :nodoc:
|
216
|
+
# Format is "document.appendMarkup1260632282946" (number is timestamp)
|
217
|
+
@properties['operationId'] =~ /^(.+?)\d+$/
|
218
|
+
"#{$1.split(/(?=[A-Z])|\./).join('_').upcase}"
|
219
|
+
end
|
220
|
+
|
221
|
+
# Time of the err [String]
|
222
|
+
def operation_timestamp # :nodoc:
|
223
|
+
# Format is "document.appendMarkup1260632282946" (number is timestamp)
|
224
|
+
@properties['operationId'] =~ /(\d+)$/
|
225
|
+
time_from_json($1)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Rave
|
2
|
+
module Models
|
3
|
+
# Represents an operation to be applied on the server.
|
4
|
+
class Operation # :nodoc:
|
5
|
+
attr_reader :index, :property
|
6
|
+
|
7
|
+
def type; @type.dup; end
|
8
|
+
def wave_id; @wave_id.dup; end
|
9
|
+
def wavelet_id; @wavelet_id.dup; end
|
10
|
+
def blip_id; @blip_id.dup; end
|
11
|
+
|
12
|
+
JAVA_CLASS = 'com.google.wave.api.impl.OperationImpl' # :nodoc:
|
13
|
+
|
14
|
+
#Constants
|
15
|
+
# Types of operations
|
16
|
+
WAVELET_APPEND_BLIP = 'WAVELET_APPEND_BLIP'
|
17
|
+
WAVELET_ADD_PARTICIPANT = 'WAVELET_ADD_PARTICIPANT'
|
18
|
+
WAVELET_REMOVE_PARTICIPANT = 'WAVELET_REMOVE_PARTICIPANT'
|
19
|
+
WAVELET_CREATE = 'WAVELET_CREATE'
|
20
|
+
WAVELET_REMOVE_SELF = 'WAVELET_REMOVE_SELF'
|
21
|
+
WAVELET_DATADOC_SET = 'WAVELET_DATADOC_SET'
|
22
|
+
WAVELET_SET_TITLE = 'WAVELET_SET_TITLE'
|
23
|
+
BLIP_CREATE_CHILD = 'BLIP_CREATE_CHILD'
|
24
|
+
BLIP_DELETE = 'BLIP_DELETE'
|
25
|
+
DOCUMENT_ANNOTATION_DELETE = 'DOCUMENT_ANNOTATION_DELETE'
|
26
|
+
DOCUMENT_ANNOTATION_SET = 'DOCUMENT_ANNOTATION_SET'
|
27
|
+
DOCUMENT_ANNOTATION_SET_NORANGE = 'DOCUMENT_ANNOTATION_SET_NORANGE'
|
28
|
+
DOCUMENT_APPEND = 'DOCUMENT_APPEND' # Plain text
|
29
|
+
DOCUMENT_APPEND_MARKUP = 'DOCUMENT_APPEND_MARKUP' # HTML
|
30
|
+
DOCUMENT_APPEND_STYLED_TEXT = 'DOCUMENT_APPEND_STYLED_TEXT'
|
31
|
+
DOCUMENT_INSERT = 'DOCUMENT_INSERT'
|
32
|
+
DOCUMENT_DELETE = 'DOCUMENT_DELETE'
|
33
|
+
DOCUMENT_REPLACE = 'DOCUMENT_REPLACE'
|
34
|
+
DOCUMENT_ELEMENT_APPEND = 'DOCUMENT_ELEMENT_APPEND'
|
35
|
+
DOCUMENT_ELEMENT_DELETE = 'DOCUMENT_ELEMENT_DELETE'
|
36
|
+
DOCUMENT_ELEMENT_INSERT = 'DOCUMENT_ELEMENT_INSERT'
|
37
|
+
DOCUMENT_ELEMENT_INSERT_AFTER = 'DOCUMENT_ELEMENT_INSERT_AFTER'
|
38
|
+
DOCUMENT_ELEMENT_INSERT_BEFORE = 'DOCUMENT_ELEMENT_INSERT_BEFORE'
|
39
|
+
DOCUMENT_ELEMENT_REPLACE = 'DOCUMENT_ELEMENT_REPLACE'
|
40
|
+
DOCUMENT_INLINE_BLIP_APPEND = 'DOCUMENT_INLINE_BLIP_APPEND'
|
41
|
+
DOCUMENT_INLINE_BLIP_DELETE = 'DOCUMENT_INLINE_BLIP_DELETE'
|
42
|
+
DOCUMENT_INLINE_BLIP_INSERT = 'DOCUMENT_INLINE_BLIP_INSERT'
|
43
|
+
DOCUMENT_INLINE_BLIP_INSERT_AFTER_ELEMENT = 'DOCUMENT_INLINE_BLIP_INSERT_AFTER_ELEMENT'
|
44
|
+
|
45
|
+
#Options include:
|
46
|
+
# - :type
|
47
|
+
# - :wave_id
|
48
|
+
# - :wavelet_id
|
49
|
+
# - :blip_id
|
50
|
+
# - :index
|
51
|
+
# - :property
|
52
|
+
def initialize(options = {})
|
53
|
+
@type = options[:type]
|
54
|
+
@wave_id = options[:wave_id]
|
55
|
+
@wavelet_id = options[:wavelet_id] || ''
|
56
|
+
@blip_id = options[:blip_id] || ''
|
57
|
+
@index = options[:index] || -1
|
58
|
+
@property = options[:property]
|
59
|
+
end
|
60
|
+
|
61
|
+
#Serialize the operation to json
|
62
|
+
def to_json
|
63
|
+
hash = {
|
64
|
+
'blipId' => @blip_id,
|
65
|
+
'index' => @index,
|
66
|
+
'waveletId' => @wavelet_id,
|
67
|
+
'waveId' => @wave_id,
|
68
|
+
'type' => @type,
|
69
|
+
'javaClass' => JAVA_CLASS
|
70
|
+
}
|
71
|
+
|
72
|
+
hash['property'] = @property unless @property.nil?
|
73
|
+
|
74
|
+
hash.to_json
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
data/lib/models/range.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Extend a standard Range so that it can be serialized easily
|
2
|
+
|
3
|
+
class Range # :nodoc:
|
4
|
+
JAVA_CLASS = 'com.google.wave.api.Range'
|
5
|
+
|
6
|
+
# Convert to a hash for sending in an operation.
|
7
|
+
def to_json
|
8
|
+
{
|
9
|
+
'javaClass' => JAVA_CLASS,
|
10
|
+
'start' => min,
|
11
|
+
'end' => max
|
12
|
+
}.to_json
|
13
|
+
end
|
14
|
+
end
|