xamplr 1.9.2 → 1.9.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.
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 9
4
- :patch: 2
4
+ :patch: 3
5
5
  :build:
@@ -44,6 +44,11 @@ module Xampl
44
44
  return self
45
45
  end
46
46
 
47
+ # this element has been realised
48
+ def note_realised
49
+ return self
50
+ end
51
+
47
52
  # replacing the original
48
53
 
49
54
  def note_replacing(original)
@@ -144,11 +144,13 @@ module Xampl
144
144
  # Normally we'd expect to see the representation in the @format format, but
145
145
  # that isn't necessarily the case. Try to work out what the format might be...
146
146
 
147
+ xampl = nil
147
148
  if representation =~ /^</ then
148
- return XamplObject.realise_from_xml_string(representation, target)
149
+ xampl = XamplObject.realise_from_xml_string(representation, target)
149
150
  else
150
- XamplObject.from_ruby(representation, target)
151
+ xampl = XamplObject.from_ruby(representation, target)
151
152
  end
153
+ return xampl.note_realised
152
154
  end
153
155
 
154
156
  def write(xampl)
@@ -333,6 +335,7 @@ module Xampl
333
335
  end
334
336
 
335
337
  require "xamplr/persisters/simple"
338
+ require "xamplr/persisters/dumb"
336
339
  require "xamplr/persisters/in-memory"
337
340
  require "xamplr/persisters/filesystem"
338
341
 
@@ -134,6 +134,8 @@ module Xampl
134
134
  end
135
135
 
136
136
  def read(klass, pid, target=nil)
137
+ #return nil unless pid
138
+
137
139
  # puts "#{File.basename(__FILE__)} #{__LINE__} READ:: klass: #{klass} pid: #{pid} target: [[#{target}]], PM: #{ self }"
138
140
 
139
141
  xampl, target = read_from_cache(klass, pid, target)
@@ -0,0 +1,48 @@
1
+ module Xampl
2
+
3
+ class DumbPersister < Persister
4
+
5
+ def initialize(name=nil, format=nil)
6
+ super(name, format)
7
+
8
+ @module_map = {}
9
+ @cache = {}
10
+ end
11
+
12
+ def DumbPersister.kind
13
+ :dumb
14
+ end
15
+
16
+ def kind
17
+ DumbPersister.kind
18
+ end
19
+
20
+ def sync_done
21
+ end
22
+
23
+ def has_changed(xampl)
24
+ throw :mixed_persisters unless self == xampl.persister
25
+ end
26
+
27
+ def cache(xampl)
28
+ xampl
29
+ end
30
+
31
+ def uncache(xampl)
32
+ end
33
+
34
+ def clear_cache
35
+ end
36
+
37
+ def write(xampl)
38
+ return true
39
+ end
40
+
41
+ def read(klass, pid, target=nil)
42
+ return nil
43
+ end
44
+ end
45
+
46
+ Xampl.register_persister_kind(DumbPersister)
47
+ end
48
+
@@ -1,9 +1,13 @@
1
1
  module Xampl
2
2
 
3
3
  require 'fileutils'
4
+ require 'set'
5
+ require 'json'
6
+ require 'yaml'
7
+
4
8
  require 'tokyocabinet'
9
+
5
10
  require 'xamplr/persisters/caching'
6
- require 'set'
7
11
 
8
12
  # require 'ruby-prof'
9
13
 
@@ -472,6 +476,7 @@ module Xampl
472
476
  end
473
477
 
474
478
  def write(xampl)
479
+
475
480
  raise XamplException.new(:no_index_so_no_persist) unless xampl.get_the_index
476
481
 
477
482
  expunging = self.expunged.include?(xampl)
@@ -541,23 +546,12 @@ module Xampl
541
546
  xampl_hash = primary_description.merge(xampl_hash)
542
547
  end
543
548
 
544
- note_errors("TC[[#{ @filename }]]:: write error: %s\n") do
545
- if Xampl.raw_persister_options[:write_through] then
546
- FileUtils.mkdir_p(place_dir) unless File.exist?(place_dir)
547
- file_place = "#{ @files_dir }/#{ place }"
548
- File.open(file_place, "w") do |out|
549
- out.write xampl_hash['xampl']
550
- if :sync == Xampl.raw_persister_options[:write_through] then
551
- out.fsync
552
- if $is_darwin then
553
- out.fcntl(51, 0) # Attempt an F_FULLFSYNC fcntl to commit data to disk (darwin *ONLY*)
554
- end
555
- end
556
- end
557
-
558
- end
559
- @tc_db.put(place, xampl_hash)
549
+ index_info = {}
550
+ if primary_description && 0 < primary_description.size then
551
+ index_info[:primary] = xampl_hash.dup
552
+ index_info[:primary].delete('xampl')
560
553
  end
554
+ index_info[:secondary] = []
561
555
 
562
556
  #TODO -- smarter regarding when to delete (e.g. mentions)
563
557
  if xampl.should_schedule_delete? and xampl.scheduled_for_deletion_at then
@@ -577,6 +571,7 @@ module Xampl
577
571
 
578
572
  secondary_descriptions.each do | secondary_description |
579
573
  description = secondary_description.merge(xampl_hash)
574
+ index_info[:secondary] << secondary_description
580
575
 
581
576
  note_errors("TC[[#{ @filename }]]:: write error: %s\n") do
582
577
  pk = @tc_db.genuid
@@ -585,6 +580,30 @@ module Xampl
585
580
  end
586
581
  end
587
582
 
583
+ note_errors("TC[[#{ @filename }]]:: write error: %s\n") do
584
+ if Xampl.raw_persister_options[:write_through] then
585
+ FileUtils.mkdir_p(place_dir) unless File.exist?(place_dir)
586
+ file_place = "#{ @files_dir }/#{ place }"
587
+ File.open(file_place, "w") do |out|
588
+ out.write xampl_hash['xampl']
589
+ if :sync == Xampl.raw_persister_options[:write_through] then
590
+ out.fsync
591
+ if $is_darwin then
592
+ out.fcntl(51, 0) # Attempt an F_FULLFSYNC fcntl to commit data to disk (darwin *ONLY*)
593
+ end
594
+ end
595
+ end
596
+ if index_info[:primary] && 0 < index_info[:secondary].size then
597
+ file_place += ".idx"
598
+ File.open(file_place, "w") do |out|
599
+ out.write index_info.to_yaml
600
+ end
601
+ end
602
+ end
603
+
604
+ @tc_db.put(place, xampl_hash)
605
+ end
606
+
588
607
  @write_count = @write_count + 1
589
608
  xampl.changes_accepted
590
609
  end
@@ -607,6 +626,7 @@ module Xampl
607
626
  # puts "#{ __FILE__ }:#{ __LINE__ } [#{__method__}] READ REP"
608
627
  open_tc_db
609
628
  end
629
+
610
630
  place = File.join(klass.name.split("::"), pid)
611
631
 
612
632
  meta = @tc_db[place]
data/xamplr.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{xamplr}
8
- s.version = "1.9.2"
8
+ s.version = "1.9.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bob Hutchison"]
12
- s.date = %q{2010-01-20}
12
+ s.date = %q{2010-02-01}
13
13
  s.description = %q{xamplr is the ruby version of xampl.}
14
14
  s.email = %q{hutch@recursive.ca}
15
15
  s.extra_rdoc_files = [
@@ -44,6 +44,7 @@ Gem::Specification.new do |s|
44
44
  "lib/xamplr/persister.rb",
45
45
  "lib/xamplr/persisters/caches.rb",
46
46
  "lib/xamplr/persisters/caching.rb",
47
+ "lib/xamplr/persisters/dumb.rb",
47
48
  "lib/xamplr/persisters/filesystem.rb",
48
49
  "lib/xamplr/persisters/in-memory.rb",
49
50
  "lib/xamplr/persisters/simple.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xamplr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.2
4
+ version: 1.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Hutchison
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-20 00:00:00 -05:00
12
+ date: 2010-02-01 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -69,6 +69,7 @@ files:
69
69
  - lib/xamplr/persister.rb
70
70
  - lib/xamplr/persisters/caches.rb
71
71
  - lib/xamplr/persisters/caching.rb
72
+ - lib/xamplr/persisters/dumb.rb
72
73
  - lib/xamplr/persisters/filesystem.rb
73
74
  - lib/xamplr/persisters/in-memory.rb
74
75
  - lib/xamplr/persisters/simple.rb