model 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in model.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,95 @@
1
+ require "model/version"
2
+
3
+ module Model
4
+ def self.extended(base)
5
+ class << base
6
+ attr_accessor :instances, :callbacks
7
+ end
8
+
9
+ base.instance_eval do
10
+ attr_accessor :id
11
+
12
+ define_method :save do
13
+ if self.callback(:before_save)
14
+ self.id = self.class.last.id + 1 rescue 1
15
+ self.class.instances << self
16
+ self.callback(:after_save)
17
+ return true
18
+ end
19
+
20
+ return false
21
+ end
22
+
23
+ define_method :validate_uniqueness_of do |hash|
24
+ field = hash[:value]
25
+ scope_field = hash[:args] && hash[:args][:scope] ? hash[:args][:scope] : nil
26
+
27
+ if scope_field
28
+ result = self.class.all.select { |x| x.send(field) == self.send(field) && x.send(scope_field) == self.send(scope_field) }.count == 0
29
+ else
30
+ result = self.class.all.select { |x| x.send(field) == self.send(field) }.count == 0
31
+ end
32
+
33
+ result
34
+ end
35
+
36
+ define_method :callback do |c|
37
+ ok = true
38
+ self.class.callbacks[c].each do |key, value|
39
+ if value
40
+ ok &&= !(self.send(key, value) === false)
41
+ else
42
+ ok &&= !(self.send(key) === false)
43
+ end
44
+ end
45
+
46
+ ok
47
+ end
48
+ end
49
+
50
+ base.instances = []
51
+ base.callbacks = {:before_create => {}, :after_create => {}, :before_save => {}, :after_save => {}}
52
+
53
+ base.callbacks.each do |key, value|
54
+ define_method key do |method|
55
+ self.callbacks[key].merge!({method => nil})
56
+ end
57
+ end
58
+ end
59
+
60
+ def find(hash)
61
+ results = self.instances
62
+
63
+ hash.each do |key, value|
64
+ results = results.select { |r| r.send(key) == value }
65
+ end
66
+
67
+ results
68
+ end
69
+
70
+ def all
71
+ self.instances
72
+ end
73
+
74
+ def destroy_all
75
+ self.instances = []
76
+ end
77
+
78
+ def last
79
+ self.instances.sort! { |a,b| a.id <=> b.id}
80
+ self.instances.last
81
+ end
82
+
83
+ def create(*args)
84
+ s = self.new(*args)
85
+
86
+ if s.callback(:before_create)
87
+ s.save
88
+ s.callback(:after_create)
89
+ end
90
+ end
91
+
92
+ def validate_uniqueness_of(field, hash = nil)
93
+ self.callbacks[:before_create].merge!({:validate_uniqueness_of => {:value => field, :args => hash}})
94
+ end
95
+ end
@@ -0,0 +1,3 @@
1
+ module Model
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "model/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "model"
7
+ s.version = Model::VERSION
8
+ s.authors = ["Piotr Paweł Dębosz"]
9
+ s.email = ["piotr.debosz@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Model}
12
+ s.description = %q{Model}
13
+
14
+ s.rubyforge_project = "model"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: model
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Piotr Paweł Dębosz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-15 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Model
15
+ email:
16
+ - piotr.debosz@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - Rakefile
24
+ - lib/model.rb
25
+ - lib/model/version.rb
26
+ - model.gemspec
27
+ homepage: ''
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project: model
47
+ rubygems_version: 1.8.10
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: Model
51
+ test_files: []