ottoman_orm 0.0.2
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 +7 -0
- data/lib/ottoman_orm/core_ext/object/blank.rb +6 -0
- data/lib/ottoman_orm/core_ext/object.rb +1 -0
- data/lib/ottoman_orm/core_ext.rb +3 -0
- data/lib/ottoman_orm/datastore.rb +44 -0
- data/lib/ottoman_orm/error.rb +5 -0
- data/lib/ottoman_orm/model.rb +129 -0
- data/lib/ottoman_orm/representation.rb +15 -0
- data/lib/ottoman_orm/version.rb +5 -0
- data/lib/ottoman_orm.rb +26 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 56a607951929d96a8f091da04d65e4be2993faaa
|
4
|
+
data.tar.gz: abf2d5e30659b81d608d36ad641befcceb8c9732
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 18f22ac4a42bc0d59affb17b95ab8895b370a52a251f92e0b65a8c2baa72e234ad452e75ec562f8c02bdd8463be762005d9903faf52604f619c2f74e25456482
|
7
|
+
data.tar.gz: e60c627b4a9638b5d2cba6aefc6ee28b6c9a1ec63a258fdd9305d8c7ec24bc03230fe24b033cc67fa91c40f4a665727bcad8af7b662f3def95c052fd4c566752
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'ottoman_orm/core_ext/object/blank'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module OttomanORM
|
2
|
+
class Datastore
|
3
|
+
|
4
|
+
attr_accessor :client
|
5
|
+
|
6
|
+
def initialize parameters
|
7
|
+
self.connect parameters
|
8
|
+
end
|
9
|
+
|
10
|
+
def create name, data
|
11
|
+
execute_sproc(name + '_create', data)
|
12
|
+
end
|
13
|
+
|
14
|
+
def get name, id
|
15
|
+
execute_sproc(name + '_get', id).values()
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_by_field name, field, value
|
19
|
+
execute_sproc(name + '_get_by_' + field, value).values()
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def connect parameters
|
25
|
+
config = YAML.load_file(File.join('config', 'ottoman_orm.yml'))[parameters[:mode]]
|
26
|
+
|
27
|
+
@client = PG::Connection.new(
|
28
|
+
:host => config['host'],
|
29
|
+
:port => config['port'],
|
30
|
+
:dbname => config['dbname'],
|
31
|
+
:user => config['user'],
|
32
|
+
:password => config['password']
|
33
|
+
)
|
34
|
+
end; alias :reconnect! :connect
|
35
|
+
|
36
|
+
def execute_sproc(sproc, args)
|
37
|
+
@client.exec(build_query_string(sproc, args))
|
38
|
+
end
|
39
|
+
|
40
|
+
def build_query_string(sproc, args)
|
41
|
+
query_string = 'select ' + sproc + '(\'' + args + '\')'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module OttomanORM
|
2
|
+
class Model
|
3
|
+
# representation methods
|
4
|
+
include OttomanORM::Representation
|
5
|
+
|
6
|
+
# internal references
|
7
|
+
attr_accessor :_id
|
8
|
+
|
9
|
+
# attributes list
|
10
|
+
@@_attributes = []
|
11
|
+
|
12
|
+
# Initializes a new model with the given +params+.
|
13
|
+
#
|
14
|
+
# class Person
|
15
|
+
# include OttomanORM::Model
|
16
|
+
# attr_accessor :name, :age
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# person = Person.new(name: 'bob', age: '18')
|
20
|
+
# person.name # => "bob"
|
21
|
+
# person.age # => 18
|
22
|
+
def initialize(params={})
|
23
|
+
params.each do |attr, value|
|
24
|
+
self.public_send("#{attr}=", value)
|
25
|
+
end if params
|
26
|
+
|
27
|
+
super()
|
28
|
+
end
|
29
|
+
|
30
|
+
# attributes
|
31
|
+
def self.attribute *names
|
32
|
+
names.each { |name| @@_attributes << name }
|
33
|
+
class_eval { attr_accessor *names }
|
34
|
+
end
|
35
|
+
class << self; alias :attributes :attribute; end
|
36
|
+
|
37
|
+
def attributes
|
38
|
+
@@_attributes
|
39
|
+
end
|
40
|
+
|
41
|
+
# object creation
|
42
|
+
def self.create data
|
43
|
+
self.new(data).save
|
44
|
+
end
|
45
|
+
|
46
|
+
# Indicates if the model is persisted. Default is +false+.
|
47
|
+
#
|
48
|
+
# class Person
|
49
|
+
# include OttomanORM::Model
|
50
|
+
# attr_accessor :id, :name
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# person = Person.new(id: 1, name: 'bob')
|
54
|
+
# person.persisted? # => false
|
55
|
+
def persisted?
|
56
|
+
!new_record?
|
57
|
+
end
|
58
|
+
|
59
|
+
def new_record?
|
60
|
+
@_id.blank?
|
61
|
+
end
|
62
|
+
|
63
|
+
def id
|
64
|
+
@_id
|
65
|
+
end
|
66
|
+
|
67
|
+
# validations
|
68
|
+
def run_validations
|
69
|
+
true
|
70
|
+
end
|
71
|
+
|
72
|
+
# save record
|
73
|
+
def save
|
74
|
+
return false unless run_validations
|
75
|
+
create_or_update
|
76
|
+
end
|
77
|
+
|
78
|
+
def create_or_update
|
79
|
+
new_record? ? create_record : update_record
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_record
|
83
|
+
@_id = OttomanORM.client.create self.class.name, self.to_json
|
84
|
+
self
|
85
|
+
end
|
86
|
+
|
87
|
+
def update_record
|
88
|
+
OttomanORM.client.update @_id, self.to_hash
|
89
|
+
self
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.fetch name, id
|
93
|
+
# r = []
|
94
|
+
# OttomanORM.client.get(id).each_pair do |key, value|
|
95
|
+
# if v[0].is_a?(Hash)
|
96
|
+
# instance = new(value[0].extract!(*@@_attributes))
|
97
|
+
# instance._id = key
|
98
|
+
# r << instance
|
99
|
+
# end
|
100
|
+
# end
|
101
|
+
# r.empty? ? nil : r.length == 1 ? r[0] : r
|
102
|
+
OttomanORM.client.get name, id
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.fetch_by_field name, field, value
|
106
|
+
OttomanORM.client.get_by_field name, field, value
|
107
|
+
end
|
108
|
+
|
109
|
+
# update record
|
110
|
+
def update_attribute attribute, value
|
111
|
+
public_send("#{attribute}=", value)
|
112
|
+
save
|
113
|
+
end
|
114
|
+
|
115
|
+
def update_attributes attributes
|
116
|
+
return if attributes.blank?
|
117
|
+
attributes.stringify_keys.each_pair do |attribute, value|
|
118
|
+
public_send("#{attribute}=", value)
|
119
|
+
end
|
120
|
+
save
|
121
|
+
end
|
122
|
+
|
123
|
+
# delete record
|
124
|
+
def delete
|
125
|
+
OttomanORM.client.delete(@_id) unless new_record?
|
126
|
+
freeze
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
data/lib/ottoman_orm.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'pg'
|
2
|
+
require 'yaml'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
require 'ottoman_orm/datastore'
|
6
|
+
require 'ottoman_orm/error'
|
7
|
+
require 'ottoman_orm/representation'
|
8
|
+
require 'ottoman_orm/model'
|
9
|
+
require 'ottoman_orm/version'
|
10
|
+
require 'ottoman_orm/core_ext'
|
11
|
+
|
12
|
+
module OttomanORM
|
13
|
+
@@client = nil
|
14
|
+
|
15
|
+
def self.connect parameters = {}
|
16
|
+
@@client = Datastore.new(parameters)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.client
|
20
|
+
@@client
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.hello
|
24
|
+
'hello'
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ottoman_orm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Craig McCown
|
8
|
+
- Spencer Applegate
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-10-04 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A lightweight ORM for Sinatra with PostgreSQL -- longer description
|
15
|
+
email: spencer@thotpod.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/ottoman_orm/core_ext/object/blank.rb
|
21
|
+
- lib/ottoman_orm/core_ext/object.rb
|
22
|
+
- lib/ottoman_orm/core_ext.rb
|
23
|
+
- lib/ottoman_orm/datastore.rb
|
24
|
+
- lib/ottoman_orm/error.rb
|
25
|
+
- lib/ottoman_orm/model.rb
|
26
|
+
- lib/ottoman_orm/representation.rb
|
27
|
+
- lib/ottoman_orm/version.rb
|
28
|
+
- lib/ottoman_orm.rb
|
29
|
+
homepage: https://github.com/Thotpod/ottoman-orm
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.1.5
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: A lightweight ORM for Sinatra with PostgreSQL
|
53
|
+
test_files: []
|