kamelopard 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/kamelopard/classes.rb +107 -1
- metadata +21 -42
data/lib/kamelopard/classes.rb
CHANGED
@@ -15,6 +15,35 @@ module Kamelopard
|
|
15
15
|
|
16
16
|
@@sequence = 0
|
17
17
|
@@id_prefix = ''
|
18
|
+
@@logger = nil
|
19
|
+
LogLevels = {
|
20
|
+
:debug => 0,
|
21
|
+
:info => 1,
|
22
|
+
:notice => 2,
|
23
|
+
:warn => 3,
|
24
|
+
:error => 4,
|
25
|
+
:fatal => 5
|
26
|
+
}
|
27
|
+
|
28
|
+
@@log_level = LogLevels[:notice]
|
29
|
+
|
30
|
+
# Sets a logging callback function. This function should expect three
|
31
|
+
# arguments. The first will be a log level (:debug, :info, :notice, :warn,
|
32
|
+
# :error, or :fatal); the second will be a module, categorizing the log
|
33
|
+
# entries generally; and the third will be the message
|
34
|
+
def Kamelopard.set_logger(l)
|
35
|
+
@@logger = l
|
36
|
+
end
|
37
|
+
|
38
|
+
def Kamelopard.set_log_level(lev)
|
39
|
+
raise "Unknown log level #{lev}" unless LogLevels.has_key? lev
|
40
|
+
@@log_level = LogLevels[lev]
|
41
|
+
end
|
42
|
+
|
43
|
+
def Kamelopard.log(level, mod, msg)
|
44
|
+
raise "Unknown log level #{level} for error message #{msg}" unless LogLevels.has_key? level
|
45
|
+
@@logger.call(level, mod, msg) unless @@logger.nil? or @@log_level > LogLevels[level]
|
46
|
+
end
|
18
47
|
|
19
48
|
def Kamelopard.get_document
|
20
49
|
DocumentHolder.instance.current_document
|
@@ -128,6 +157,12 @@ module Kamelopard
|
|
128
157
|
attr_accessor :kml_id
|
129
158
|
attr_reader :comment
|
130
159
|
|
160
|
+
# The master_only attribute determines whether this Object should be
|
161
|
+
# included in slave mode KML files, or not. It defaults to false,
|
162
|
+
# indicating the Object should be included in KML files of all types.
|
163
|
+
# Set it to true to ensure it shows up only in slave mode.
|
164
|
+
attr_reader :master_only
|
165
|
+
|
131
166
|
# This constructor looks for values in the options hash that match
|
132
167
|
# class attributes, and sets those attributes to the values in the
|
133
168
|
# hash. So a class with an attribute called :when can be set via the
|
@@ -135,6 +170,7 @@ module Kamelopard
|
|
135
170
|
# argument to the constructor.
|
136
171
|
def initialize(options = {})
|
137
172
|
@kml_id = "#{Kamelopard.id_prefix}#{self.class.name.gsub('Kamelopard::', '')}_#{ Kamelopard.get_next_id }"
|
173
|
+
@master_only = false
|
138
174
|
|
139
175
|
options.each do |k, v|
|
140
176
|
method = "#{k}=".to_sym
|
@@ -146,6 +182,64 @@ module Kamelopard
|
|
146
182
|
end
|
147
183
|
end
|
148
184
|
|
185
|
+
# If this is a master-only object, this function gets called internally
|
186
|
+
# in place of the object's original to_kml method
|
187
|
+
def _alternate_to_kml(*a)
|
188
|
+
if @master_only and DocumentHolder.instance.current_document.master_mode
|
189
|
+
Kamelopard.log(:info, 'master/slave', "Because this object is master_only, and we're in slave mode, we're not including object #{self.inspect}")
|
190
|
+
return ''
|
191
|
+
end
|
192
|
+
|
193
|
+
# XXX There must be a better way to do this, but I don't know what
|
194
|
+
# it is. Running "@original_to_kml_method.call(a)" when the
|
195
|
+
# original method expects multiple arguments interprets the
|
196
|
+
# argument as an array, not as a list of arguments. This of course
|
197
|
+
# makes sense, but I don't know how to get around it.
|
198
|
+
case @original_to_kml_method.parameters.size
|
199
|
+
when 0
|
200
|
+
return @original_to_kml_method.call
|
201
|
+
when 1
|
202
|
+
# XXX This bothers me, and I'm unconvinced the calls to
|
203
|
+
# functions with more than one parameter actually work. Why
|
204
|
+
# should I have to pass a[0][0] here and just a[0], a[1], etc.
|
205
|
+
# for larger numbers of parameters, if this were all correct?
|
206
|
+
return @original_to_kml_method.call(a[0][0])
|
207
|
+
when 2
|
208
|
+
return @original_to_kml_method.call(a[0], a[1])
|
209
|
+
when 3
|
210
|
+
return @original_to_kml_method.call(a[0], a[1], a[2])
|
211
|
+
else
|
212
|
+
raise "Unsupported number of arguments (#{@original_to_kml_method.arity}) in to_kml function #{@original_to_kml_method}. This is a bug"
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
# Changes whether this object is available in master style documents
|
217
|
+
# only, or in slave documents as well.
|
218
|
+
#
|
219
|
+
# More specifically, this method replaces the object's to_kml method
|
220
|
+
# with something that checks whether this object should be included in
|
221
|
+
# the KML output, based on whether it's master-only or not, and whether
|
222
|
+
# the document is in master or slave mode.
|
223
|
+
def master_only=(a)
|
224
|
+
# If this object is a master_only object, and we're printing in
|
225
|
+
# slave mode, this object shouldn't be included at all (to_kml
|
226
|
+
# should return an empty string)
|
227
|
+
if a != @master_only
|
228
|
+
@master_only = a
|
229
|
+
if a then
|
230
|
+
@original_to_kml_method = public_method(:to_kml)
|
231
|
+
define_singleton_method :to_kml, lambda { |*a| self._alternate_to_kml(a) }
|
232
|
+
else
|
233
|
+
define_singleton_method :to_kml, @original_to_kml_method
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
# This just makes the Ruby-ism question mark suffix work
|
239
|
+
def master_only?
|
240
|
+
return @master_only
|
241
|
+
end
|
242
|
+
|
149
243
|
# Adds an XML comment to this node. Handles HTML escaping the comment
|
150
244
|
# if needed
|
151
245
|
def comment=(cmnt)
|
@@ -573,8 +667,8 @@ module Kamelopard
|
|
573
667
|
w = XML::Node.new 'end'
|
574
668
|
w << @end
|
575
669
|
k << w
|
576
|
-
elem << k unless elem.nil?
|
577
670
|
end
|
671
|
+
elem << k unless elem.nil?
|
578
672
|
k
|
579
673
|
end
|
580
674
|
end
|
@@ -777,6 +871,7 @@ module Kamelopard
|
|
777
871
|
end
|
778
872
|
|
779
873
|
def styles_to_kml(elem)
|
874
|
+
raise "done here" if elem.class == Array
|
780
875
|
@styles.each do |a|
|
781
876
|
a.to_kml(elem) unless a.attached?
|
782
877
|
end
|
@@ -866,10 +961,17 @@ module Kamelopard
|
|
866
961
|
class Document < Container
|
867
962
|
attr_accessor :flyto_mode, :folders, :tours, :uses_xal, :vsr_actions
|
868
963
|
|
964
|
+
# Is this KML destined for a master LG node, or a slave? True if this
|
965
|
+
# is a master node. This defaults to true, so tours that don't need
|
966
|
+
# this function, and tours for non-LG targets, work normally.
|
967
|
+
attr_accessor :master_mode
|
968
|
+
|
869
969
|
def initialize(options = {})
|
870
970
|
@tours = []
|
871
971
|
@folders = []
|
872
972
|
@vsr_actions = []
|
973
|
+
@master_mode = false
|
974
|
+
Kamelopard.log(:info, 'Document', "Adding myself to the document holder")
|
873
975
|
DocumentHolder.instance << self
|
874
976
|
super
|
875
977
|
end
|
@@ -995,11 +1097,14 @@ module Kamelopard
|
|
995
1097
|
attr_reader :documents
|
996
1098
|
|
997
1099
|
def initialize(doc = nil)
|
1100
|
+
Kamelopard.log :debug, 'DocumentHolder', "document holder constructor"
|
998
1101
|
@documents = []
|
999
1102
|
@document_index = -1
|
1000
1103
|
if ! doc.nil?
|
1104
|
+
Kamelopard.log :info, 'DocumentHolder', "Constructor called with a doc. Adding it."
|
1001
1105
|
self.documents << doc
|
1002
1106
|
end
|
1107
|
+
Kamelopard.log :debug, 'DocumentHolder', "document holder constructor finished"
|
1003
1108
|
end
|
1004
1109
|
|
1005
1110
|
def document_index
|
@@ -1013,6 +1118,7 @@ module Kamelopard
|
|
1013
1118
|
def current_document
|
1014
1119
|
# Automatically create a Document if we don't already have one
|
1015
1120
|
if @documents.size <= 0
|
1121
|
+
Kamelopard.log :info, 'Document', "Doc doesn't exist... adding new one"
|
1016
1122
|
Document.new
|
1017
1123
|
@document_index = 0
|
1018
1124
|
end
|
metadata
CHANGED
@@ -1,74 +1,53 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: kamelopard
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 8
|
10
|
-
version: 0.0.8
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Joshua Tolley
|
14
9
|
- Szymon Guz
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
date: 2013-02-11 00:00:00 -07:00
|
20
|
-
default_executable:
|
13
|
+
date: 2013-02-11 00:00:00.000000000 Z
|
21
14
|
dependencies: []
|
22
|
-
|
23
|
-
|
24
|
-
email:
|
15
|
+
description: Various classes and functions used to ease development of KML files,
|
16
|
+
in particular for development of Google Earth tours
|
17
|
+
email:
|
25
18
|
- josh@endpoint.com
|
26
19
|
- szymon@endpoint.com
|
27
20
|
executables: []
|
28
|
-
|
29
21
|
extensions: []
|
30
|
-
|
31
22
|
extra_rdoc_files: []
|
32
|
-
|
33
|
-
files:
|
23
|
+
files:
|
34
24
|
- lib/kamelopard/geocode.rb
|
35
25
|
- lib/kamelopard/classes.rb
|
36
26
|
- lib/kamelopard/functions.rb
|
37
27
|
- lib/kamelopard/pointlist.rb
|
38
28
|
- lib/kamelopard.rb
|
39
|
-
has_rdoc: true
|
40
29
|
homepage: http://www.endpoint.com/services/liquid_galaxy
|
41
30
|
licenses: []
|
42
|
-
|
43
31
|
post_install_message:
|
44
32
|
rdoc_options: []
|
45
|
-
|
46
|
-
require_paths:
|
33
|
+
require_paths:
|
47
34
|
- lib
|
48
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
36
|
none: false
|
50
|
-
requirements:
|
51
|
-
- -
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
|
54
|
-
|
55
|
-
- 0
|
56
|
-
version: "0"
|
57
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
42
|
none: false
|
59
|
-
requirements:
|
60
|
-
- -
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
|
63
|
-
segments:
|
64
|
-
- 0
|
65
|
-
version: "0"
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
66
47
|
requirements: []
|
67
|
-
|
68
48
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
49
|
+
rubygems_version: 1.8.25
|
70
50
|
signing_key:
|
71
51
|
specification_version: 3
|
72
52
|
summary: Tools for building KML
|
73
53
|
test_files: []
|
74
|
-
|