eredor 0.2.1 → 0.3.0
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 +4 -4
- data/lib/eredor/version.rb +1 -1
- data/lib/eredor.rb +96 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a4d71c085a6c5161a99c59ff88dc83cf024abd1d71ddc259ed6416546f98d0f9
|
|
4
|
+
data.tar.gz: 99cbf359ce2aaad64850be06c52d259f19646cdcb9484a899ced64dce6c56c6c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5906e61700d7303b309a3d6a04bd45cb4af787fb7ba6c0527acc42dc6bbdf3070f1f6e5537efd69b4ab2e62d38b40a68e160a2461288dfaad23e93840930af80
|
|
7
|
+
data.tar.gz: d68fdc74f35c0c396e0eb9dfac7513670e57dee1508f21d78951dca4ba9909bb3ebb86b882e25d187a1d73ecae2cda847f436cd29957c08e8dbc308a9b9516e4
|
data/lib/eredor/version.rb
CHANGED
data/lib/eredor.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: false
|
|
2
2
|
|
|
3
|
+
require "pg"
|
|
4
|
+
require "dotenv/load"
|
|
3
5
|
require_relative "eredor/version"
|
|
6
|
+
require "singleton"
|
|
4
7
|
|
|
5
8
|
module Eredor
|
|
6
9
|
class Error < StandardError; end
|
|
@@ -81,8 +84,9 @@ module Eredor
|
|
|
81
84
|
class BaseController
|
|
82
85
|
attr_reader :params
|
|
83
86
|
|
|
84
|
-
def initialize(params)
|
|
87
|
+
def initialize(params, data_mapper)
|
|
85
88
|
@params = params
|
|
89
|
+
instance_variable_set("@#{class_name}_mapper", data_mapper)
|
|
86
90
|
end
|
|
87
91
|
|
|
88
92
|
def render(file)
|
|
@@ -94,12 +98,101 @@ module Eredor
|
|
|
94
98
|
private
|
|
95
99
|
|
|
96
100
|
def get_view(file)
|
|
97
|
-
File.read("./app/views/#{
|
|
101
|
+
File.read("./app/views/#{class_name}/#{file}.html.erb")
|
|
98
102
|
end
|
|
99
103
|
|
|
100
|
-
def
|
|
104
|
+
def class_name
|
|
101
105
|
controller = self.class.name.to_s
|
|
102
106
|
controller.gsub(/Controller/, "").downcase
|
|
103
107
|
end
|
|
104
108
|
end
|
|
109
|
+
|
|
110
|
+
class PostgresDatabase
|
|
111
|
+
# include Singleton
|
|
112
|
+
def self.connect
|
|
113
|
+
connection = PG.connect(ENV["DATABASE_URL"])
|
|
114
|
+
connection.type_map_for_results = PG::BasicTypeMapForResults.new(connection)
|
|
115
|
+
connection
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
class DataAccessObject
|
|
120
|
+
def initialize(table, connection)
|
|
121
|
+
@connection = connection
|
|
122
|
+
@table_name = table
|
|
123
|
+
|
|
124
|
+
raise ArgumentError, "Table name can't be nil" if @table_name.nil?
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def all
|
|
128
|
+
@connection.exec("SELECT * FROM #{@table_name}")
|
|
129
|
+
rescue PG::Error => e
|
|
130
|
+
"Query error: #{e}"
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def where(field)
|
|
134
|
+
@connection.exec_params("SELECT * FROM #{@table_name} WHERE #{field.keys.first} = $1", [field.values.first])
|
|
135
|
+
rescue PG::Error => e
|
|
136
|
+
"Query error: #{e}"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def save(data)
|
|
140
|
+
placeholder = (1..data.size).map { |i| "$#{i}" }.join ", "
|
|
141
|
+
@connection.exec_params("INSERT INTO #{@table_name} (#{data.keys.join(", ")})
|
|
142
|
+
VALUES (#{placeholder})", data.values)
|
|
143
|
+
rescue PG::Error => e
|
|
144
|
+
"Query error: #{e}"
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def update(data)
|
|
148
|
+
placeholder = (1..data.size).map { |i| "$#{i}" }.join ", "
|
|
149
|
+
@connection.exec_params("UPDATE #{@table_name} SET #{data.keys.join ", "} = #{placeholder}", data.values)
|
|
150
|
+
rescue PG::Error => e
|
|
151
|
+
"Query error: #{e}"
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def destroy(field)
|
|
155
|
+
@connection.exec_params("DELETE FROM #{@table_name} WHERE #{field.keys.first} = $1", [field.values.first])
|
|
156
|
+
rescue PG::Error => e
|
|
157
|
+
"Query error: #{e}"
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
class Repository
|
|
162
|
+
def initialize(data_access_object)
|
|
163
|
+
@dao = data_access_object
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def all
|
|
167
|
+
@dao.all.map do |row|
|
|
168
|
+
{
|
|
169
|
+
id: row["id"],
|
|
170
|
+
title: row["title"],
|
|
171
|
+
description: row["description"],
|
|
172
|
+
created_at: row["created_at"],
|
|
173
|
+
updated_at: row["updated_at"]
|
|
174
|
+
}
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def get_by(field)
|
|
179
|
+
@dao.where(field).each do |row|
|
|
180
|
+
row.each_pair do |key, value|
|
|
181
|
+
@post[key.to_sym] = value
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def save(data)
|
|
187
|
+
@dao.save(data)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def update(data)
|
|
191
|
+
@dao.update(data)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def destroy(field)
|
|
195
|
+
@dao.destroy(field)
|
|
196
|
+
end
|
|
197
|
+
end
|
|
105
198
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: eredor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Guilherme Ribeiro
|
|
@@ -46,7 +46,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
requirements: []
|
|
49
|
-
rubygems_version: 3.
|
|
49
|
+
rubygems_version: 3.6.9
|
|
50
50
|
specification_version: 4
|
|
51
51
|
summary: Minimal classes for small web applications
|
|
52
52
|
test_files: []
|