a_series_of_tubes 1.0.1 → 1.1.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/Gemfile.lock +3 -1
- data/a_series_of_tubes.gemspec +1 -0
- data/lib/a_series_of_tubes.rb +1 -1
- data/lib/a_series_of_tubes/tube_record.rb +7 -0
- data/lib/a_series_of_tubes/tube_record/db_connection.rb +56 -0
- data/lib/a_series_of_tubes/tube_record/sql_object.rb +109 -0
- data/lib/a_series_of_tubes/tube_support/core_extensions.rb +4 -0
- data/lib/a_series_of_tubes/version.rb +1 -1
- data/pkg/a_series_of_tubes-1.0.1.gem +0 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6e2bc8b5fdd1bb5083a61cf73298cc0e083c613
|
4
|
+
data.tar.gz: 70dc07303896122766efcbdf44c6c13e437d6b7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 169e88526725a607eab7f3f942752e41009148596c00eb15030f32f2351020c2dcbef7fca3b6ab9c0b52128d33478d7af7ba91c223a858608f88d99c4e54870c
|
7
|
+
data.tar.gz: 450a0f3d7009384f7fd92445fa9e735b7b3b46ca695c2d4d0d5d8e456212c24ad2af329dbb910348bd26c7e0871c414a8c785c9344a3079c4f0be7fdca491a4f
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
a_series_of_tubes (1.0
|
4
|
+
a_series_of_tubes (1.1.0)
|
5
5
|
json
|
6
6
|
rack
|
7
|
+
sqlite3
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
@@ -25,6 +26,7 @@ GEM
|
|
25
26
|
diff-lcs (>= 1.2.0, < 2.0)
|
26
27
|
rspec-support (~> 3.4.0)
|
27
28
|
rspec-support (3.4.1)
|
29
|
+
sqlite3 (1.3.11)
|
28
30
|
|
29
31
|
PLATFORMS
|
30
32
|
ruby
|
data/a_series_of_tubes.gemspec
CHANGED
data/lib/a_series_of_tubes.rb
CHANGED
@@ -3,6 +3,6 @@ require_relative './a_series_of_tubes/tubes.rb'
|
|
3
3
|
require_relative './a_series_of_tubes/tube_controller.rb'
|
4
4
|
require_relative './a_series_of_tubes/tube_state.rb'
|
5
5
|
require_relative './a_series_of_tubes/tube_support.rb'
|
6
|
-
|
6
|
+
require_relative './a_series_of_tubes/tube_record.rb'
|
7
7
|
module ASeriesOfTubes
|
8
8
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'sqlite3'
|
2
|
+
|
3
|
+
module ASeriesOfTubes
|
4
|
+
module TubeRecord
|
5
|
+
class DBConnection
|
6
|
+
def self.open(db_file_name)
|
7
|
+
@db = SQLite3::Database.new(db_file_name)
|
8
|
+
@db.results_as_hash = true
|
9
|
+
@db.type_translation = true
|
10
|
+
|
11
|
+
@db
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.reset
|
15
|
+
commands = [
|
16
|
+
"rm '#{TUBE_DB_FILE}'",
|
17
|
+
"cat '#{TUBE_SQL_FILE}' | sqlite3 '#{TUBE_DB_FILE}'"
|
18
|
+
]
|
19
|
+
|
20
|
+
commands.each { |command| `#{command}` }
|
21
|
+
DBConnection.open(TUBE_DB_FILE)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.instance
|
25
|
+
reset if @db.nil?
|
26
|
+
|
27
|
+
@db
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.execute(*args)
|
31
|
+
print_query(*args)
|
32
|
+
instance.execute(*args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.execute2(*args)
|
36
|
+
print_query(*args)
|
37
|
+
instance.execute2(*args)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.last_insert_row_id
|
41
|
+
instance.last_insert_row_id
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def self.print_query(query, *interpolation_args)
|
47
|
+
puts '--------------------'
|
48
|
+
puts query
|
49
|
+
unless interpolation_args.empty?
|
50
|
+
puts "interpolate: #{interpolation_args.inspect}"
|
51
|
+
end
|
52
|
+
puts '--------------------'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'byebug'
|
2
|
+
|
3
|
+
module ASeriesOfTubes
|
4
|
+
module TubeRecord
|
5
|
+
class SQLObject
|
6
|
+
def self.columns
|
7
|
+
@columns ||= DBConnection.execute2(<<-SQL).first.map(&:to_sym)
|
8
|
+
SELECT
|
9
|
+
*
|
10
|
+
FROM
|
11
|
+
#{self.table_name}
|
12
|
+
SQL
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.all
|
16
|
+
self.parse_all(DBConnection.execute(<<-SQL))
|
17
|
+
SELECT
|
18
|
+
*
|
19
|
+
FROM
|
20
|
+
#{self.table_name}
|
21
|
+
SQL
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse_all(results)
|
25
|
+
results.map { |params| self.new(params) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.find(id)
|
29
|
+
result = DBConnection.execute(<<-SQL, id: id).first
|
30
|
+
SELECT
|
31
|
+
*
|
32
|
+
FROM
|
33
|
+
#{self.table_name}
|
34
|
+
WHERE
|
35
|
+
#{self.table_name}.id = :id
|
36
|
+
LIMIT
|
37
|
+
1
|
38
|
+
SQL
|
39
|
+
|
40
|
+
self.new(result) if result
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.finalize!
|
44
|
+
self.columns.each do |column|
|
45
|
+
define_method(column) { self.attributes[column] }
|
46
|
+
define_method("#{column}=") { |value| self.attributes[column] = value }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.table_name
|
51
|
+
@table_name ||= self.to_s.tableize
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.table_name=(table_name)
|
55
|
+
@table_name = table_name
|
56
|
+
end
|
57
|
+
|
58
|
+
def initialize(params = {})
|
59
|
+
params.each do |attr_name, value|
|
60
|
+
if self.class.columns.include?(attr_name.to_sym)
|
61
|
+
self.send("#{attr_name}=", value)
|
62
|
+
else
|
63
|
+
raise "unknown attribute '#{attr_name}'"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def attributes
|
69
|
+
@attributes ||= {}
|
70
|
+
end
|
71
|
+
|
72
|
+
def attribute_values
|
73
|
+
@attributes.keys.map { |k| @attributes[k] }
|
74
|
+
end
|
75
|
+
|
76
|
+
def insert
|
77
|
+
columns = self.class.columns.drop(1)
|
78
|
+
question_marks = (['?'] * columns.length)
|
79
|
+
|
80
|
+
ASeriesOfTubes::TubeRecord::DBConnection.execute(<<-SQL, *attribute_values)
|
81
|
+
INSERT INTO
|
82
|
+
#{self.class.table_name} (#{columns.join(',')})
|
83
|
+
VALUES
|
84
|
+
(#{question_marks.join(',')})
|
85
|
+
SQL
|
86
|
+
|
87
|
+
self.id = ASeriesOfTubes::TubeRecord::DBConnection.last_insert_row_id
|
88
|
+
end
|
89
|
+
|
90
|
+
def update
|
91
|
+
columns = self.class.columns
|
92
|
+
set_values = columns.map { |attr_name| "#{attr_name} = ?" }
|
93
|
+
|
94
|
+
ASeriesOfTubes::TubeRecord::DBConnection.execute(<<-SQL, *attribute_values)
|
95
|
+
UPDATE
|
96
|
+
#{self.class.table_name}
|
97
|
+
SET
|
98
|
+
#{set_values.join(',')}
|
99
|
+
WHERE
|
100
|
+
id = #{self.id}
|
101
|
+
SQL
|
102
|
+
end
|
103
|
+
|
104
|
+
def save
|
105
|
+
self.id ? self.update : self.insert
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: a_series_of_tubes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Phillips
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: sqlite3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description:
|
84
98
|
email:
|
85
99
|
- dan@danphillips.io
|
@@ -104,6 +118,9 @@ files:
|
|
104
118
|
- bin/setup
|
105
119
|
- lib/a_series_of_tubes.rb
|
106
120
|
- lib/a_series_of_tubes/tube_controller.rb
|
121
|
+
- lib/a_series_of_tubes/tube_record.rb
|
122
|
+
- lib/a_series_of_tubes/tube_record/db_connection.rb
|
123
|
+
- lib/a_series_of_tubes/tube_record/sql_object.rb
|
107
124
|
- lib/a_series_of_tubes/tube_state.rb
|
108
125
|
- lib/a_series_of_tubes/tube_state/flash.rb
|
109
126
|
- lib/a_series_of_tubes/tube_state/session.rb
|
@@ -114,6 +131,7 @@ files:
|
|
114
131
|
- lib/a_series_of_tubes/tubes/tuber.rb
|
115
132
|
- lib/a_series_of_tubes/version.rb
|
116
133
|
- pkg/a_series_of_tubes-1.0.0.gem
|
134
|
+
- pkg/a_series_of_tubes-1.0.1.gem
|
117
135
|
homepage: http://www.github.com/danmakenoise/a_series_of_tubes
|
118
136
|
licenses:
|
119
137
|
- MIT
|