lapis_lazuli 0.7.0 → 0.8.0

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: c231db7a9cb304150e2ca2eccf956be02c367482
4
- data.tar.gz: 3eb2d929510b34cfd70f2e944eb2590b6059f6e6
3
+ metadata.gz: ed6ca8f1aa232bdc2014087496286902cae4f061
4
+ data.tar.gz: 8a9b24b75b4e148bd4b84531174c199ff76004e4
5
5
  SHA512:
6
- metadata.gz: cede96cad3beb40c9a3f331c47cc930906ccd707283b393aaddccd4d713120233b3e01c4b3d7f15dbf1f117fde4b1c9d3593f1ae43d8189b2d6316345d2e4b16
7
- data.tar.gz: d941873ef4a11ef98524f994c931b0acea5348dc261b6392dddabdff7212b1d678b91a311b18fbe1d21cd58c986100e386e88de270299093e6b0c580b28a9915
6
+ metadata.gz: 8d35e57fbe11bb803d15019b5e564aa96bdd5b9b6c27ab98364419475747b818777120cf3551aec7dbbccf0413fa09fd32ead27d915cea89f662f22828871b05
7
+ data.tar.gz: e1f684eb9fec6bc62e9a04e6e301d6c1f4949d931adf1e7cc799d77ae841aec8ae34779fd5278f0894a1cebef91e7b86a04d49d8a445edb15bbcb1be7199454a
@@ -19,6 +19,12 @@ module LapisLazuli
19
19
  @objects = {}
20
20
  end
21
21
 
22
+ ##
23
+ # Number of objects stored in the Runtime
24
+ def length
25
+ return @objects.keys.length
26
+ end
27
+
22
28
  def has?(name)
23
29
  return @objects.has_key? name
24
30
  end
@@ -49,6 +55,12 @@ module LapisLazuli
49
55
  return obj
50
56
  end
51
57
 
58
+ ##
59
+ # Remove an object from the Runtime
60
+ def unset(name)
61
+ @objects.delete(name)
62
+ end
63
+
52
64
  def get(name)
53
65
  return @objects[name]
54
66
  end
@@ -57,6 +69,22 @@ module LapisLazuli
57
69
  private
58
70
  def self.destroy(world, name, destructor)
59
71
  Proc.new do
72
+ # Try to run destroy on the object itself
73
+ obj = Runtime.instance.get(name)
74
+
75
+ #world.log.debug("Destroying #{name}")
76
+
77
+ # Do not destroy the logger until everything else has been stopped
78
+ if name == :logger and Runtime.instance.length > 1
79
+ #world.log.debug("This is the logger, wait until everything is closed")
80
+ break
81
+ end
82
+ Runtime.instance.unset(name)
83
+
84
+ if obj.respond_to?(:destroy)
85
+ obj.send(:destroy, world)
86
+ break
87
+ end
60
88
  # If a destructor is given, call that.
61
89
  if not destructor.nil?
62
90
  return destructor.call(world)
@@ -76,12 +104,6 @@ module LapisLazuli
76
104
  return world.send(name).destroy(world)
77
105
  end
78
106
 
79
- # Try to run destroy on the object itself
80
- obj = Runtime.get(name)
81
- if obj.respond_to? :destroy
82
- return obj.send(:destroy)
83
- end
84
-
85
107
  # If the object has stream/socket functions close ends the connection
86
108
  if obj.respond_to? :close
87
109
  return obj.send(:close)
@@ -9,8 +9,14 @@ module LapisLazuli
9
9
  ##
10
10
  # Simple storage class
11
11
  class Storage
12
+ # The name of this storage container
13
+ @name
12
14
  @data
13
- def initialize
15
+
16
+ ##
17
+ # Initialize the storage with an optional name
18
+ def initialize(name=nil)
19
+ @name = name
14
20
  @data = {}
15
21
  end
16
22
 
@@ -28,7 +34,13 @@ module LapisLazuli
28
34
 
29
35
  ##
30
36
  # Write all stored data to file
31
- def writeToFile(filename)
37
+ def writeToFile(filename=nil)
38
+ if filename.nil? && @name.nil?
39
+ raise "Need a filename"
40
+ elsif filename.nil?
41
+ filename = "#{@name}.json"
42
+ end
43
+
32
44
  # Make storage directory
33
45
  dir = File.dirname(filename)
34
46
  begin
@@ -41,17 +53,47 @@ module LapisLazuli
41
53
 
42
54
  File.open(filename, 'w') { |file|
43
55
  # Write the JSON to the file
44
- file.write(@data.to_json)
56
+ file.puts(@data.to_json)
45
57
  }
46
58
  end
47
59
 
48
60
  ##
49
61
  # This will be called during the destruction of the world
50
62
  def destroy(world)
51
- filename = world.config("storage_dir", ".#{File::SEPARATOR}storage") +
52
- File::SEPARATOR +
53
- world.time[:timestamp] +
54
- ".json"
63
+ # No data to write
64
+ if @data.keys.length == 0
65
+ world.log.debug("Storage '#{@name}' is empty")
66
+ return
67
+ end
68
+
69
+ filename = nil
70
+
71
+ # If we have a name
72
+ if !@name.nil?
73
+ # Check the environment for a filename
74
+ env_value = world.env("#{@name}_file", nil)
75
+ if !env_value.nil?
76
+ filename = env_value
77
+ end
78
+ end
79
+ # Otherwise, generate a name
80
+ if filename.nil?
81
+ # Folder to store in
82
+ filename += world.config("storage_dir", ".#{File::SEPARATOR}storage") + File::SEPARATOR
83
+
84
+ # Filename
85
+ if @name.nil?
86
+ # Use current timestamp and the object_id of the data
87
+ filename += world.time[:timestamp] + "_" + @data.object_id
88
+ else
89
+ # Use the given name
90
+ filename += @name
91
+ end
92
+
93
+ # JSON file extension
94
+ filename += ".json"
95
+ end
96
+
55
97
  world.log.debug("Writing storage to: #{filename}")
56
98
  self.writeToFile(filename)
57
99
  end
@@ -6,5 +6,5 @@
6
6
  # All rights reserved.
7
7
  #
8
8
  module LapisLazuli
9
- VERSION = "0.7.0"
9
+ VERSION = "0.8.0"
10
10
  end
@@ -51,9 +51,29 @@ module WorldModule
51
51
  b = Runtime.instance.set_if(self, :browser) do
52
52
  # Add LL to the arguments for the browser
53
53
  LapisLazuli::Browser.set_world(self)
54
-
54
+
55
55
  # Create & return a new browser object
56
- LapisLazuli::Browser.new(*args)
56
+ brow = LapisLazuli::Browser.new(*args)
57
+
58
+ metadata = Runtime.instance.get(:metadata)
59
+ if metadata
60
+ metadata.set(
61
+ "browser",
62
+ {
63
+ "name" => brow.driver.capabilities[:browser_name],
64
+ "version" => brow.driver.capabilities[:version],
65
+ "platform" => brow.driver.capabilities[:platform],
66
+ }
67
+ )
68
+ end
69
+
70
+ sessionid = brow.driver.capabilities["webdriver.remote.sessionid"]
71
+
72
+ if !sessionid.nil?
73
+ metadata.set("sessionid", sessionid)
74
+ end
75
+
76
+ brow
57
77
  end
58
78
 
59
79
  if not b.is_open?
@@ -7,6 +7,8 @@
7
7
  #
8
8
 
9
9
  require "lapis_lazuli/options"
10
+ require "lapis_lazuli/storage"
11
+ require "lapis_lazuli/runtime"
10
12
 
11
13
  module LapisLazuli
12
14
  module WorldModule
@@ -52,6 +54,18 @@ module WorldModule
52
54
  warn "Could not load configuration from: #{Config.config_file}"
53
55
  @config = {}
54
56
  end
57
+
58
+ @metadata = Runtime.instance.set_if(self, :metadata) do
59
+ log.debug "Creating metadata storage"
60
+ Storage.new("metadata")
61
+ end
62
+ end
63
+
64
+ def metadata
65
+ if @metadata.nil?
66
+ raise "No metadata available"
67
+ end
68
+ return @metadata
55
69
  end
56
70
 
57
71
 
@@ -179,7 +193,7 @@ module WorldModule
179
193
  # ll.config("test.google.url") => "www.google.com"
180
194
  #
181
195
  # Raises error if traversing the object is impossible
182
- def config(variable=false, default=nil)
196
+ def config(variable=false, default=(no_default_set=true;nil))
183
197
  # Make sure the configured configuration is loaded, if possible
184
198
  init
185
199
 
@@ -199,7 +213,7 @@ module WorldModule
199
213
 
200
214
  # Otherwise try to find it in the configuration object
201
215
  variable.split(".").each do |part|
202
- if default.nil? and result.nil?
216
+ if no_default_set == true && result.nil?
203
217
  raise "Unknown configuration variable '#{variable}' and no default given!"
204
218
  end
205
219
  break if result.nil?
@@ -214,7 +228,7 @@ module WorldModule
214
228
  if default.nil? and result.nil?
215
229
  if CONFIG_OPTIONS.has_key? variable
216
230
  return CONFIG_OPTIONS[variable][0]
217
- else
231
+ elsif no_default_set == true
218
232
  raise "Unknown configuration variable '#{variable}' and no default given!"
219
233
  end
220
234
  else
@@ -306,7 +320,6 @@ module WorldModule
306
320
  # Variables like:
307
321
  # var_from_env("remote.url","http://test.test")
308
322
  if var.is_a? String and
309
- var.include? "." and
310
323
  not default.is_a? Hash
311
324
 
312
325
  # Env variables cannot contain a . replace them by _
@@ -377,7 +390,6 @@ module WorldModule
377
390
 
378
391
  return value
379
392
  end
380
-
381
393
  end # module Config
382
394
  end # module WorldModule
383
395
  end # module LapisLazuli
@@ -86,7 +86,7 @@ module WorldModule
86
86
 
87
87
  # Include URL if we have a browser
88
88
  if self.has_browser?
89
- message += " (#{self.browser.url})"
89
+ message += " [ #{self.browser.url} ]"
90
90
  end
91
91
 
92
92
  # Add the groups to the message
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lapis_lazuli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Onno Steenbergen
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-05-06 00:00:00.000000000 Z
14
+ date: 2015-05-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler