dyoder-filebase 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dyoder-filebase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Yoder
data/lib/drivers/yaml.rb DELETED
@@ -1,33 +0,0 @@
1
- require 'yaml'
2
- require 'extensions/io'
3
- class Filebase
4
-
5
- class YAML
6
-
7
- def initialize( root )
8
- @root = root
9
- end
10
-
11
- def path( key )
12
- @root / key + '.yml'
13
- end
14
-
15
- def all
16
- Dir[ path('*') ].map { |file| YAML.load( File.read( file ) ) }
17
- end
18
-
19
- def find( key )
20
- ( ::YAML.load( File.read( path( key ) ) ) if File.exists?( path( key ) ) ) || nil
21
- end
22
-
23
- def save( key, object )
24
- File.write( path( key ), object.to_yaml )
25
- end
26
-
27
- def delete( key )
28
- FileUtils.remove( path( key ) )
29
- end
30
-
31
- end
32
-
33
- end
@@ -1,48 +0,0 @@
1
- module Attributes
2
-
3
- def initialize(hash = {} )
4
- attributes = hash
5
- end
6
-
7
- def attributes=( hash )
8
- # copy the hash, converting all keys to strings
9
- @attrs = hash.inject({}) { |h,p| k,v = p; h[k.to_s] = v; h }
10
- end
11
-
12
- def attributes
13
- @attrs ||= {}
14
- end
15
-
16
- def method_missing(name,*args)
17
- name = name.to_s
18
- if name =~/=$/ and args.length == 1
19
- set(name[0..-2], args[0] )
20
- else
21
- get(name)
22
- end
23
- end
24
-
25
- def [](name)
26
- get(name)
27
- end
28
-
29
- def []=(name,val)
30
- set(name,val)
31
- end
32
-
33
- def set(name, val)
34
- attributes[name.to_s] = val
35
- end
36
-
37
- def get(name)
38
- rval = attributes[name.to_s]
39
- rval.is_a?( Hash ) ? Attributes.new( rval ) : rval
40
- end
41
-
42
- def to_h
43
- @attrs
44
- end
45
-
46
- alias_method :to_hash, :to_h
47
-
48
- end
@@ -1,82 +0,0 @@
1
- require 'filebase/attributes'
2
-
3
- class Filebase
4
-
5
- Error = RuntimeError
6
-
7
- module Model
8
-
9
- def self.[]( path )
10
- Module.new do |mixin|
11
- ( class << mixin ; self ; end ).module_eval do
12
- define_method( :included ) do | model |
13
- model.module_eval do
14
- @db = Filebase.new( path )
15
- extend Mixins::ClassMethods ; include Attributes ; include Mixins::InstanceMethods
16
- end
17
- end
18
- end
19
- end
20
- end
21
-
22
- module Mixins
23
-
24
- module ClassMethods
25
- attr_accessor :db
26
- def create( assigns ) ; save( new( assigns ) ) ; end
27
- def all ; db.all.map { |attrs| new( attrs ) } ; end
28
- def find( key ) ; attrs = db.find( key ); new( attrs.merge( :key => key ) ) if attrs ; end
29
- def []( key ) ; find( key ) ; end
30
- def save( object )
31
- raise( Filebase::Error.new, 'attempted to save an object with nil key' ) if object.key.nil? or object.key.empty?
32
- db.save( object.key, object.to_h )
33
- end
34
- def delete( object )
35
- raise( Filebase::Error.new, 'attempted to delete an object with nil key' ) if object.key.nil? or object.key.empty?
36
- db.delete( object.key )
37
- end
38
- def has_one( name, options = {} )
39
- module_eval do
40
- define_method name do
41
- @has_one ||= {}
42
- options[:class] ||= Object.module_eval( name.to_s.camel_case )
43
- @has_one[name] ||= options[:class].find( get( name ) )
44
- end
45
- define_method( name.to_s + '=' ) do | val |
46
- @has_one ||= {}; @has_one[name] = nil
47
- set( name, String === val ? val : val.key )
48
- end
49
- end
50
- end
51
- def has_many( name, options = {} )
52
- module_eval do
53
- define_method( name ) do
54
- @has_many ||= {}
55
- options[:class] ||= Object.module_eval( name.to_s.camel_case )
56
- @has_many[name] ||= ( get( name ) || [] ).uniq.map { |key| options[:class].find( key ) }
57
- end
58
- # when we save, make sure to pick up any changes to the array
59
- (class<<self;self;end).module_eval do
60
- old_save = instance_method(:save)
61
- define_method :save do |object|
62
- object.set( name, object.send( name ).map{ |x| x.key }.uniq )
63
- old_save.bind(self).call(object)
64
- end
65
- end
66
- end
67
- end
68
- end
69
-
70
- module InstanceMethods
71
- def initialize( assigns ) ; super ; assign( assigns ) ; end
72
- def assign( assigns ) ; assigns.each { |k,v| self.send( "#{k}=", v ) }; self ; end
73
- def save ; self.class.save( self ) ; self; end
74
- def delete ; self.class.delete( self ) ; self ; end
75
- def ==(object) ; key == object.key ; end
76
- end
77
-
78
- end
79
-
80
- end
81
-
82
- end
data/lib/filebase.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'rubygems'
2
- require 'drivers/yaml'
3
- class Filebase
4
- class << self ; attr_accessor :storage ; end
5
- self.storage = YAML
6
- def initialize( root = '.', storage = nil )
7
- @storage = ( storage || Filebase.storage ).new( root )
8
- end
9
- # delegate everything to the storage object ...
10
- def method_missing( name,*args ) ; @storage.send( name, *args ) ; end
11
- end