ronin 0.2.2 → 0.2.3

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.
Files changed (98) hide show
  1. data/History.txt +53 -0
  2. data/Manifest.txt +26 -18
  3. data/README.txt +12 -19
  4. data/Rakefile +9 -9
  5. data/TODO.txt +5 -5
  6. data/lib/ronin/cacheable.rb +246 -0
  7. data/lib/ronin/database/database.rb +21 -3
  8. data/lib/ronin/database/exceptions/invalid_config.rb +1 -1
  9. data/lib/ronin/environment.rb +5 -2
  10. data/lib/ronin/extensions.rb +2 -0
  11. data/lib/ronin/{models.rb → extensions/array.rb} +19 -6
  12. data/lib/ronin/extensions/ip_addr.rb +127 -0
  13. data/lib/ronin/{objectify/exceptions/object_context_not_found.rb → extensions/kernel.rb} +14 -3
  14. data/lib/ronin/extensions/uri/query_params.rb +4 -2
  15. data/lib/ronin/formatting/extensions/binary/integer.rb +6 -0
  16. data/lib/ronin/formatting/extensions/binary/string.rb +14 -12
  17. data/lib/ronin/formatting/extensions/text/string.rb +37 -19
  18. data/lib/ronin/has_license.rb +4 -2
  19. data/lib/ronin/model.rb +0 -1
  20. data/lib/ronin/network/extensions/http/net.rb +30 -3
  21. data/lib/ronin/network/extensions/telnet/net.rb +0 -18
  22. data/lib/ronin/network/http/exceptions/unknown_request.rb +1 -1
  23. data/lib/ronin/platform/exceptions/extension_not_found.rb +1 -1
  24. data/lib/ronin/platform/exceptions/overlay_cached.rb +1 -1
  25. data/lib/ronin/platform/exceptions/overlay_not_found.rb +1 -1
  26. data/lib/ronin/platform/extension.rb +18 -3
  27. data/lib/ronin/platform/extension_cache.rb +7 -1
  28. data/lib/ronin/platform/object_cache.rb +13 -12
  29. data/lib/ronin/platform/overlay.rb +14 -6
  30. data/lib/ronin/platform/overlay_cache.rb +11 -5
  31. data/lib/ronin/product.rb +20 -3
  32. data/lib/ronin/ronin.rb +0 -15
  33. data/lib/ronin/rpc/exceptions/response_missing.rb +1 -1
  34. data/lib/ronin/sessions/esmtp.rb +1 -10
  35. data/lib/ronin/{objectify.rb → sessions/exceptions.rb} +3 -3
  36. data/lib/ronin/{objectify/exceptions/unknown_object_context.rb → sessions/exceptions/variable_missing.rb} +4 -4
  37. data/lib/ronin/sessions/http.rb +3 -10
  38. data/lib/ronin/sessions/imap.rb +1 -10
  39. data/lib/ronin/sessions/pop3.rb +1 -9
  40. data/lib/ronin/sessions/session.rb +11 -21
  41. data/lib/ronin/sessions/smtp.rb +1 -10
  42. data/lib/ronin/sessions/tcp.rb +10 -13
  43. data/lib/ronin/sessions/telnet.rb +2 -17
  44. data/lib/ronin/sessions/udp.rb +6 -11
  45. data/lib/ronin/static/finders.rb +24 -0
  46. data/lib/ronin/ui/command_line/command_line.rb +41 -21
  47. data/lib/ronin/ui/command_line/commands/help.rb +7 -3
  48. data/lib/ronin/ui/command_line/commands/ls.rb +1 -1
  49. data/lib/ronin/ui/command_line/commands/rm.rb +1 -1
  50. data/lib/ronin/ui/command_line/exceptions/unknown_command.rb +1 -1
  51. data/lib/ronin/ui/diagnostics.rb +12 -5
  52. data/lib/ronin/ui/hexdump/extensions/file.rb +3 -1
  53. data/lib/ronin/ui/hexdump/hexdump.rb +1 -1
  54. data/lib/ronin/ui/verbose.rb +14 -0
  55. data/lib/ronin/version.rb +1 -1
  56. data/spec/cacheable_spec.rb +150 -0
  57. data/spec/classes/cacheable_model.rb +15 -0
  58. data/spec/classes/licensed_model.rb +12 -0
  59. data/spec/code/classes/thing.rb +13 -0
  60. data/spec/code/reference_spec.rb +1 -14
  61. data/spec/extensions/array_spec.rb +34 -0
  62. data/spec/extensions/ip_addr_spec.rb +44 -0
  63. data/spec/extensions/kernel_spec.rb +19 -0
  64. data/spec/extensions/uri/query_params_spec.rb +8 -0
  65. data/spec/formatting/binary/string_spec.rb +1 -1
  66. data/spec/formatting/digest/string_spec.rb +84 -0
  67. data/spec/formatting/http/string_spec.rb +84 -0
  68. data/spec/formatting/text/string_spec.rb +51 -0
  69. data/spec/has_license_spec.rb +29 -0
  70. data/spec/helpers/cacheable.rb +7 -0
  71. data/spec/helpers/contexts/ronin_cacheable_model.rb +13 -0
  72. data/spec/helpers/database.rb +5 -0
  73. data/spec/platform/helpers/overlays/hello/lib/init.rb +1 -0
  74. data/spec/platform/helpers/overlays/hello/lib/stuff/another_test.rb +6 -0
  75. data/spec/platform/helpers/overlays/hello/lib/stuff/test.rb +4 -0
  76. data/spec/platform/overlay_cache_spec.rb +1 -1
  77. data/spec/platform/overlay_spec.rb +28 -0
  78. data/spec/product_spec.rb +7 -0
  79. data/spec/sessions/classes/test_session.rb +11 -0
  80. data/spec/sessions/classes/uses_test_session.rb +10 -0
  81. data/spec/sessions/session_spec.rb +13 -44
  82. data/spec/spec_helper.rb +0 -5
  83. data/spec/static/{helpers → classes}/static_class.rb +0 -0
  84. data/spec/static/helpers/static.rb +0 -1
  85. data/spec/static/static_spec.rb +1 -0
  86. metadata +44 -35
  87. data/lib/ronin/objectify/exceptions.rb +0 -25
  88. data/lib/ronin/objectify/objectify.rb +0 -240
  89. data/lib/ronin/target.rb +0 -44
  90. data/lib/ronin/ui/command_line/param_parser.rb +0 -93
  91. data/spec/formatting/digest_spec.rb +0 -54
  92. data/spec/formatting/http_spec.rb +0 -53
  93. data/spec/formatting/text_spec.rb +0 -40
  94. data/spec/helpers.rb +0 -0
  95. data/spec/objectify/objectify_spec.rb +0 -31
  96. data/spec/target_spec.rb +0 -16
  97. data/spec/ui/command_line/helpers/example_command.rb +0 -21
  98. data/spec/ui/command_line/param_parser_spec.rb +0 -49
data/spec/spec_helper.rb CHANGED
@@ -3,10 +3,5 @@ gem 'rspec', '>=1.1.3'
3
3
  require 'spec'
4
4
 
5
5
  require 'ronin/version'
6
- require 'ronin/database'
7
6
 
8
7
  include Ronin
9
-
10
- require 'helpers'
11
-
12
- Database.setup(:adapter => 'sqlite3', :database => ':memory:')
File without changes
@@ -1,5 +1,4 @@
1
1
  require 'ronin/static'
2
- require 'static/helpers/static_class'
3
2
 
4
3
  STATIC_DIRS = [
5
4
  File.expand_path(File.join(File.dirname(__FILE__),'static1')),
@@ -2,6 +2,7 @@ require 'ronin/static/static'
2
2
 
3
3
  require 'spec_helper'
4
4
  require 'static/helpers/static'
5
+ require 'static/classes/static_class'
5
6
 
6
7
  describe Static do
7
8
  it "should list static directories" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ronin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-26 00:00:00 -07:00
12
+ date: 2009-05-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -23,64 +23,64 @@ dependencies:
23
23
  version: 1.2.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: dm-core
26
+ name: extlib
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.9
33
+ version: 0.9.12
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: data_objects
36
+ name: dm-core
37
37
  type: :runtime
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.9.9
43
+ version: 0.9.11
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: do_sqlite3
46
+ name: data_objects
47
47
  type: :runtime
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 0.9.9
53
+ version: 0.9.11
54
54
  version:
55
55
  - !ruby/object:Gem::Dependency
56
- name: dm-types
56
+ name: do_sqlite3
57
57
  type: :runtime
58
58
  version_requirement:
59
59
  version_requirements: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.9.9
63
+ version: 0.9.11
64
64
  version:
65
65
  - !ruby/object:Gem::Dependency
66
- name: dm-serializer
66
+ name: dm-types
67
67
  type: :runtime
68
68
  version_requirement:
69
69
  version_requirements: !ruby/object:Gem::Requirement
70
70
  requirements:
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.9.9
73
+ version: 0.9.11
74
74
  version:
75
75
  - !ruby/object:Gem::Dependency
76
- name: dm-aggregates
76
+ name: dm-serializer
77
77
  type: :runtime
78
78
  version_requirement:
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 0.9.9
83
+ version: 0.9.11
84
84
  version:
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: dm-validations
@@ -90,7 +90,7 @@ dependencies:
90
90
  requirements:
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: 0.9.9
93
+ version: 0.9.11
94
94
  version:
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: dm-predefined
@@ -110,7 +110,7 @@ dependencies:
110
110
  requirements:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 0.1.0
113
+ version: 0.1.1
114
114
  version:
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: parameters
@@ -120,7 +120,7 @@ dependencies:
120
120
  requirements:
121
121
  - - ">="
122
122
  - !ruby/object:Gem::Version
123
- version: 0.1.3
123
+ version: 0.1.5
124
124
  version:
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: contextify
@@ -160,7 +160,7 @@ dependencies:
160
160
  requirements:
161
161
  - - ">="
162
162
  - !ruby/object:Gem::Version
163
- version: 1.11.0
163
+ version: 1.12.2
164
164
  version:
165
165
  description: Ronin is a Ruby platform designed for information security and data exploration tasks. Ronin allows for the rapid development and distribution of code over many of the common Source-Code-Management (SCM) systems.
166
166
  email:
@@ -207,12 +207,15 @@ files:
207
207
  - lib/ronin/extensions.rb
208
208
  - lib/ronin/extensions/meta.rb
209
209
  - lib/ronin/extensions/meta/object.rb
210
+ - lib/ronin/extensions/kernel.rb
211
+ - lib/ronin/extensions/array.rb
210
212
  - lib/ronin/extensions/hash.rb
211
213
  - lib/ronin/extensions/uri.rb
212
214
  - lib/ronin/extensions/uri/query_params.rb
213
215
  - lib/ronin/extensions/uri/http.rb
214
216
  - lib/ronin/extensions/string.rb
215
217
  - lib/ronin/extensions/file.rb
218
+ - lib/ronin/extensions/ip_addr.rb
216
219
  - lib/ronin/formatting.rb
217
220
  - lib/ronin/formatting/digest.rb
218
221
  - lib/ronin/formatting/binary.rb
@@ -276,6 +279,8 @@ files:
276
279
  - lib/ronin/rpc/console.rb
277
280
  - lib/ronin/rpc/shell.rb
278
281
  - lib/ronin/sessions.rb
282
+ - lib/ronin/sessions/exceptions.rb
283
+ - lib/ronin/sessions/exceptions/variable_missing.rb
279
284
  - lib/ronin/sessions/session.rb
280
285
  - lib/ronin/sessions/tcp.rb
281
286
  - lib/ronin/sessions/udp.rb
@@ -295,14 +300,8 @@ files:
295
300
  - lib/ronin/has_license.rb
296
301
  - lib/ronin/arch.rb
297
302
  - lib/ronin/os.rb
298
- - lib/ronin/target.rb
299
303
  - lib/ronin/product.rb
300
- - lib/ronin/objectify.rb
301
- - lib/ronin/objectify/exceptions.rb
302
- - lib/ronin/objectify/exceptions/object_context_not_found.rb
303
- - lib/ronin/objectify/exceptions/unknown_object_context.rb
304
- - lib/ronin/objectify/objectify.rb
305
- - lib/ronin/models.rb
304
+ - lib/ronin/cacheable.rb
306
305
  - lib/ronin/environment.rb
307
306
  - lib/ronin/platform.rb
308
307
  - lib/ronin/platform/tasks/spec.rb
@@ -333,7 +332,6 @@ files:
333
332
  - lib/ronin/ui/command_line/exceptions/unknown_command.rb
334
333
  - lib/ronin/ui/command_line/command.rb
335
334
  - lib/ronin/ui/command_line/options.rb
336
- - lib/ronin/ui/command_line/param_parser.rb
337
335
  - lib/ronin/ui/command_line/commands/console.rb
338
336
  - lib/ronin/ui/command_line/commands/add.rb
339
337
  - lib/ronin/ui/command_line/commands/install.rb
@@ -346,21 +344,27 @@ files:
346
344
  - lib/ronin/ronin.rb
347
345
  - lib/ronin/version.rb
348
346
  - tasks/spec.rb
349
- - spec/helpers.rb
350
347
  - spec/spec_helper.rb
348
+ - spec/classes/licensed_model.rb
349
+ - spec/classes/cacheable_model.rb
350
+ - spec/helpers/database.rb
351
+ - spec/helpers/cacheable.rb
352
+ - spec/helpers/contexts/ronin_cacheable_model.rb
353
+ - spec/static/classes/static_class.rb
351
354
  - spec/static/helpers/static1/one.txt
352
355
  - spec/static/helpers/static1/dir/two.txt
353
356
  - spec/static/helpers/static2/dir/two.txt
354
357
  - spec/static/helpers/static.rb
355
- - spec/static/helpers/static_class.rb
356
358
  - spec/static/finders_spec.rb
357
359
  - spec/static/static_spec.rb
358
360
  - spec/arch_spec.rb
359
361
  - spec/author_spec.rb
360
362
  - spec/translators/translator_spec.rb
361
- - spec/objectify/objectify_spec.rb
363
+ - spec/extensions/kernel_spec.rb
364
+ - spec/extensions/array_spec.rb
362
365
  - spec/extensions/hash_spec.rb
363
366
  - spec/extensions/string_spec.rb
367
+ - spec/extensions/ip_addr_spec.rb
364
368
  - spec/extensions/uri/http_spec.rb
365
369
  - spec/extensions/uri/query_params_spec.rb
366
370
  - spec/formatting/binary/helpers/hexdumps.rb
@@ -386,16 +390,20 @@ files:
386
390
  - spec/formatting/binary/helpers/hexdumps/od_repeated.txt
387
391
  - spec/formatting/binary/integer_spec.rb
388
392
  - spec/formatting/binary/string_spec.rb
389
- - spec/formatting/digest_spec.rb
390
- - spec/formatting/http_spec.rb
391
- - spec/formatting/text_spec.rb
393
+ - spec/formatting/digest/string_spec.rb
394
+ - spec/formatting/http/string_spec.rb
395
+ - spec/formatting/text/string_spec.rb
396
+ - spec/code/classes/thing.rb
392
397
  - spec/code/reference_spec.rb
393
398
  - spec/code/symbol_table_spec.rb
394
399
  - spec/license_spec.rb
400
+ - spec/has_license_spec.rb
395
401
  - spec/path_spec.rb
396
402
  - spec/os_spec.rb
397
403
  - spec/product_spec.rb
398
- - spec/target_spec.rb
404
+ - spec/cacheable_spec.rb
405
+ - spec/sessions/classes/test_session.rb
406
+ - spec/sessions/classes/uses_test_session.rb
399
407
  - spec/sessions/session_spec.rb
400
408
  - spec/platform/helpers/overlays.rb
401
409
  - spec/platform/helpers/overlays.yaml.erb
@@ -404,6 +412,9 @@ files:
404
412
  - spec/platform/helpers/overlays/test2/ronin.xml
405
413
  - spec/platform/helpers/overlays/test2/test/extension.rb
406
414
  - spec/platform/helpers/overlays/hello/ronin.xml
415
+ - spec/platform/helpers/overlays/hello/lib/init.rb
416
+ - spec/platform/helpers/overlays/hello/lib/stuff/test.rb
417
+ - spec/platform/helpers/overlays/hello/lib/stuff/another_test.rb
407
418
  - spec/platform/helpers/overlays/hello/hello/extension.rb
408
419
  - spec/platform/helpers/overlays/random/ronin.xml
409
420
  - spec/platform/helpers/overlays/random/random/extension.rb
@@ -414,8 +425,6 @@ files:
414
425
  - spec/platform/platform_spec.rb
415
426
  - spec/platform/ronin_spec.rb
416
427
  - spec/ui/verbose_spec.rb
417
- - spec/ui/command_line/helpers/example_command.rb
418
- - spec/ui/command_line/param_parser_spec.rb
419
428
  - spec/ronin_spec.rb
420
429
  - static/ronin/platform/overlay.xsl
421
430
  has_rdoc: true
@@ -1,25 +0,0 @@
1
- #
2
- #--
3
- # Ronin - A Ruby platform designed for information security and data
4
- # exploration tasks.
5
- #
6
- # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
- #
8
- # This program is free software; you can redistribute it and/or modify
9
- # it under the terms of the GNU General Public License as published by
10
- # the Free Software Foundation; either version 2 of the License, or
11
- # (at your option) any later version.
12
- #
13
- # This program is distributed in the hope that it will be useful,
14
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- # GNU General Public License for more details.
17
- #
18
- # You should have received a copy of the GNU General Public License
19
- # along with this program; if not, write to the Free Software
20
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
- #
23
-
24
- require 'ronin/exceptions/unknown_object_context'
25
- require 'ronin/exceptions/object_context_not_found'
@@ -1,240 +0,0 @@
1
- #
2
- #--
3
- # Ronin - A Ruby platform designed for information security and data
4
- # exploration tasks.
5
- #
6
- # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
- #
8
- # This program is free software; you can redistribute it and/or modify
9
- # it under the terms of the GNU General Public License as published by
10
- # the Free Software Foundation; either version 2 of the License, or
11
- # (at your option) any later version.
12
- #
13
- # This program is distributed in the hope that it will be useful,
14
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- # GNU General Public License for more details.
17
- #
18
- # You should have received a copy of the GNU General Public License
19
- # along with this program; if not, write to the Free Software
20
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
- #
23
-
24
- require 'ronin/objectify/exceptions/unknown_object_context'
25
- require 'ronin/objectify/exceptions/object_context_not_found'
26
- require 'ronin/extensions/meta'
27
- require 'ronin/model'
28
-
29
- require 'contextify'
30
- require 'parameters'
31
-
32
- module Ronin
33
- module Objectify
34
- include DataMapper::Types
35
-
36
- def self.included(base)
37
- base.module_eval do
38
- include Contextify
39
- include Parameters
40
- include Ronin::Model
41
-
42
- # Path to the object context
43
- property :object_path, String
44
-
45
- # Modification timestamp of the object context
46
- property :object_timestamp, EpochTime
47
-
48
- metaclass_def(:objectify) do |name|
49
- name = name.to_s
50
-
51
- self.contextify name
52
-
53
- Objectify.object_contexts[name] = self
54
-
55
- meta_def(:load_object) do |path,*attributes|
56
- Objectify.load_object(self.context_name,path,*attributes)
57
- end
58
-
59
- meta_def(:cache) do |path,*args|
60
- load_object(path,*args).cache
61
- end
62
-
63
- meta_def(:mirror) do |path,*args|
64
- path = File.expand_path(path)
65
- existing_obj = first(:object_path => path)
66
-
67
- if existing_obj
68
- return existing_obj.mirror
69
- else
70
- return cache(path,*args)
71
- end
72
- end
73
-
74
- meta_def(:search) do |*attribs|
75
- all(*attribs).map { |obj| obj.load_object }
76
- end
77
-
78
- # define Ronin-level object loader method
79
- Ronin.module_eval %{
80
- def ronin_load_#{name}(path,*args,&block)
81
- new_obj = #{self}.load_object(path,*args)
82
-
83
- block.call(new_obj) if block
84
- return new_obj
85
- end
86
- }
87
- end
88
- end
89
- end
90
-
91
- #
92
- # Returns the Hash of all defined object-contexts.
93
- #
94
- def Objectify.object_contexts
95
- @@ronin_object_contexts ||= {}
96
- end
97
-
98
- #
99
- # Returns +true+ if there is an object-context defined with the
100
- # specified _name_, returns +false+ otherwise.
101
- #
102
- def Objectify.is_object_context?(name)
103
- Objectify.object_contexts.has_key?(name.to_sym)
104
- end
105
-
106
- #
107
- # Loads the object context of the specified _name_ and from the
108
- # specified _path_ with the given _attributes_. If no object contexts
109
- # were defined with the specified _name_, an UnknownObjectContext
110
- # exception will be raised.
111
- #
112
- # Objectify.load_object(:note,'/path/to/my_notes.rb')
113
- # # => #<Note:...>
114
- #
115
- def Objectify.load_object(name,path,*attributes,&block)
116
- name = name.to_s
117
-
118
- unless Objectify.is_object_context?(name)
119
- raise(UnknownObjectContext,"unknown object context #{name.dump}",caller)
120
- end
121
-
122
- path = File.expand_path(path)
123
-
124
- unless File.file?(path)
125
- raise(ObjectContextNotFound,"object context #{path.dump} does not exist",caller)
126
- end
127
-
128
- new_obj = Contextify.load_context(name,path,*attributes)
129
- new_obj.object_path = path
130
-
131
- block.call(new_obj) if block
132
- return new_obj
133
- end
134
-
135
- #
136
- # Loads all object contexts from the specified _path_ returning an
137
- # +Array+ of loaded object contexts. If a _block_ is given, it will
138
- # be passed each loaded object context.
139
- #
140
- # Objectify.load_contexts('/path/to/misc_contexts.rb') # => [...]
141
- #
142
- def Objectify.load_objects(path,&block)
143
- path = File.expand_path(path)
144
-
145
- unless File.file?(path)
146
- raise(ObjectContextNotFound,"object context #{path.dump} does not exist",caller)
147
- end
148
-
149
- return Contextify.load_contexts(path) do |new_obj|
150
- new_obj.object_path = path
151
-
152
- block.call(new_obj) if block
153
- end
154
- end
155
-
156
- #
157
- # Cache all objects loaded from the specified _path_.
158
- #
159
- def Objectify.cache_objects(path)
160
- Objectify.load_objects(path).each do |obj|
161
- obj.cache
162
- end
163
-
164
- return nil
165
- end
166
-
167
- #
168
- # Loads a new object from the file pointed to by the +object_path+
169
- # property.
170
- #
171
- def load_object
172
- primary_keys = {}
173
-
174
- key_properties.each do |prop|
175
- primary_keys[prop.name] = attribute_get(prop.name)
176
- end
177
-
178
- new_obj = self.class.load_object(self.object_path,primary_keys)
179
- end
180
-
181
- #
182
- # Returns +true+ if the file pointed to by the +object_path+
183
- # property is missing, returns +false+ otherwise.
184
- #
185
- def missing?
186
- if self.object_path
187
- return !(File.file?(self.object_path))
188
- end
189
-
190
- return false
191
- end
192
-
193
- #
194
- # Returns +true+ if the +object_timestamp+ property is older than
195
- # the modification time on the file pointed to by the +object_path+
196
- # property, returns +false+ otherwise.
197
- #
198
- def stale?
199
- if self.object_timestamp
200
- return File.mtime(self.object_path) > self.object_timestamp
201
- end
202
-
203
- return false
204
- end
205
-
206
- #
207
- # Sets the +object_timestamp+ property to the modification time of the
208
- # file pointed to by the +object_path+ property and saves the object.
209
- #
210
- def cache
211
- if self.object_path
212
- self.object_timestamp = File.mtime(self.object_path)
213
- return save
214
- end
215
-
216
- return false
217
- end
218
-
219
- #
220
- # If the file pointed to by the +object_path+ property is missing, the
221
- # object will be destroyed. If the object has not been changed and
222
- # is stale?, a newly loaded object from the file pointed to by the
223
- # +object_path+ property will be cached.
224
- #
225
- def mirror
226
- if self.object_path
227
- unless File.file?(self.object_path)
228
- return destroy
229
- else
230
- if (!(dirty?) && stale?)
231
- destroy
232
- return load_object.cache
233
- end
234
- end
235
- end
236
-
237
- return false
238
- end
239
- end
240
- end