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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eredor/version.rb +1 -1
  3. data/lib/eredor.rb +96 -3
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 15c1d4fafd9ce4bb8c38fdab4c657392cdb8af9ef2a1179eb1d615948062604a
4
- data.tar.gz: 2ce2e3ce4769c37e0e41ddd1da9e0bc2222c1a16f29dec4c42cf8a04e870c6e8
3
+ metadata.gz: a4d71c085a6c5161a99c59ff88dc83cf024abd1d71ddc259ed6416546f98d0f9
4
+ data.tar.gz: 99cbf359ce2aaad64850be06c52d259f19646cdcb9484a899ced64dce6c56c6c
5
5
  SHA512:
6
- metadata.gz: cda31701aaae451ce87c7abb7661164e0952a62180d74abe967126fb737127553352a0edfc274f703396eec4f0f97841028d5bd46e715d0227b728d1e5237f30
7
- data.tar.gz: 4b4f5d92c2025c212fb5026c9c7f9df3b0e7241ecf585d08c882dc4e025808e6fa9877d3de365e6f6b7d8bf1bbd06249b1c62403959f8b96f212982ce1e348bf
6
+ metadata.gz: 5906e61700d7303b309a3d6a04bd45cb4af787fb7ba6c0527acc42dc6bbdf3070f1f6e5537efd69b4ab2e62d38b40a68e160a2461288dfaad23e93840930af80
7
+ data.tar.gz: d68fdc74f35c0c396e0eb9dfac7513670e57dee1508f21d78951dca4ba9909bb3ebb86b882e25d187a1d73ecae2cda847f436cd29957c08e8dbc308a9b9516e4
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Eredor
4
- VERSION = "0.2.1"
4
+ VERSION = "0.3.0"
5
5
  end
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/#{controller_name}/#{file}.html.erb")
101
+ File.read("./app/views/#{class_name}/#{file}.html.erb")
98
102
  end
99
103
 
100
- def controller_name
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.2.1
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.7.2
49
+ rubygems_version: 3.6.9
50
50
  specification_version: 4
51
51
  summary: Minimal classes for small web applications
52
52
  test_files: []