ordlite 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/Manifest.txt +2 -0
- data/lib/ordlite/base.rb +106 -0
- data/lib/ordlite/cache.rb +123 -0
- data/lib/ordlite/schema.rb +11 -6
- data/lib/ordlite/version.rb +1 -1
- data/lib/ordlite.rb +5 -98
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 349d70aaa528cdced0835181ca83ad5bb8815982bc60bc7f9d5535095131b322
|
4
|
+
data.tar.gz: 505f8f222ea148ca87f84080696cc0ec8d369a1a285aa50270ce8db6632ace96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a1ecae2ec91d531ae6ff660dea7861243569f7c2009cbf48315e88a406ddbc0b9cdf91a8b29291b8e64e2f99d5051188662356a3bbf70efd394d4f7e7f13cfa
|
7
|
+
data.tar.gz: 50cc3f57b2cade5086a12a9c459469a991a667fe9b30431f2b2f6c957c1462430a41bbd6e2e50b635631668d4f6f3ef70aa54a6f6ec7a9d812a17c920b1031f2
|
data/CHANGELOG.md
CHANGED
data/Manifest.txt
CHANGED
data/lib/ordlite/base.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
# core and stlibs
|
2
|
+
|
3
|
+
require 'pp'
|
4
|
+
require 'fileutils'
|
5
|
+
require 'uri'
|
6
|
+
require 'json'
|
7
|
+
require 'yaml'
|
8
|
+
|
9
|
+
require 'logger' # Note: use for ActiveRecord::Base.logger -- remove/replace later w/ LogUtils::Logger ???
|
10
|
+
|
11
|
+
|
12
|
+
# 3rd party gems / libs
|
13
|
+
require 'props' # see github.com/rubylibs/props
|
14
|
+
require 'logutils' # see github.com/rubylibs/logutils
|
15
|
+
|
16
|
+
|
17
|
+
require 'active_record' ## todo: add sqlite3? etc.
|
18
|
+
|
19
|
+
## add more activerecords addons/utils
|
20
|
+
# require 'tagutils'
|
21
|
+
require 'activerecord/utils'
|
22
|
+
require 'props/activerecord' # includes ConfDb (ConfDb::Model::Prop, etc.)
|
23
|
+
require 'logutils/activerecord' # includes LogDb (LogDb::Model::Log, etc.)
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
# our own code
|
28
|
+
require_relative 'version' # always goes first
|
29
|
+
|
30
|
+
require_relative 'models/forward'
|
31
|
+
|
32
|
+
require_relative 'models/inscribe'
|
33
|
+
require_relative 'models/blob'
|
34
|
+
|
35
|
+
|
36
|
+
require_relative 'schema'
|
37
|
+
|
38
|
+
require_relative 'cache'
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
module OrdDb
|
43
|
+
|
44
|
+
def self.create
|
45
|
+
CreateDb.new.up
|
46
|
+
ConfDb::Model::Prop.create!( key: 'db.schema.ord.version',
|
47
|
+
value: Ordlite::VERSION )
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.create_all
|
51
|
+
LogDb.create # add logs table
|
52
|
+
ConfDb.create # add props table
|
53
|
+
OrdDb.create
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.connect( config={} )
|
57
|
+
|
58
|
+
if config.empty?
|
59
|
+
puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
|
60
|
+
|
61
|
+
### change default to ./ord.db ?? why? why not?
|
62
|
+
db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///ord.db' )
|
63
|
+
|
64
|
+
if db.scheme == 'postgres'
|
65
|
+
config = {
|
66
|
+
adapter: 'postgresql',
|
67
|
+
host: db.host,
|
68
|
+
port: db.port,
|
69
|
+
username: db.user,
|
70
|
+
password: db.password,
|
71
|
+
database: db.path[1..-1],
|
72
|
+
encoding: 'utf8'
|
73
|
+
}
|
74
|
+
else # assume sqlite3
|
75
|
+
config = {
|
76
|
+
adapter: db.scheme, # sqlite3
|
77
|
+
database: db.path[1..-1] # ord.db (NB: cut off leading /, thus 1..-1)
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
puts "Connecting to db using settings: "
|
83
|
+
pp config
|
84
|
+
ActiveRecord::Base.establish_connection( config )
|
85
|
+
# ActiveRecord::Base.logger = Logger.new( STDOUT )
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
def self.setup_in_memory_db
|
90
|
+
|
91
|
+
# Database Setup & Config
|
92
|
+
ActiveRecord::Base.logger = Logger.new( STDOUT )
|
93
|
+
## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
|
94
|
+
|
95
|
+
self.connect( adapter: 'sqlite3',
|
96
|
+
database: ':memory:' )
|
97
|
+
|
98
|
+
## build schema
|
99
|
+
OrdDb.create_all
|
100
|
+
end # setup_in_memory_db (using SQLite :memory:)
|
101
|
+
|
102
|
+
end # module OrdDb
|
103
|
+
|
104
|
+
|
105
|
+
# say hello
|
106
|
+
puts Ordlite.banner ## if defined?($RUBYCOCOS_DEBUG) && $RUBCOCOS_DEBUG
|
@@ -0,0 +1,123 @@
|
|
1
|
+
|
2
|
+
module OrdDb
|
3
|
+
|
4
|
+
|
5
|
+
class Cache
|
6
|
+
|
7
|
+
Inscribe = Model::Inscribe
|
8
|
+
Blob = Model::Blob
|
9
|
+
|
10
|
+
def initialize( dir='.' )
|
11
|
+
@dir = dir
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
def import_all
|
17
|
+
paths = Dir.glob( "#{@dir}/**.json" )
|
18
|
+
puts " #{paths.size} inscribe datafile(s) found"
|
19
|
+
|
20
|
+
paths.each_with_index do |path, i|
|
21
|
+
puts "==> inscribe #{i+1}/#{paths.size}..."
|
22
|
+
data = _read_inscribe( path )
|
23
|
+
|
24
|
+
Inscribe.create( _parse_inscribe( data ))
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
paths = Dir.glob( "#{@dir}/content/**.txt" )
|
29
|
+
puts " #{paths.size} content datafile(s) found"
|
30
|
+
|
31
|
+
paths.each_with_index do |path, i|
|
32
|
+
puts "==> blob #{i+1}/#{paths.size}..."
|
33
|
+
content = _read_blob( path )
|
34
|
+
id = File.basename( path, File.extname( path ))
|
35
|
+
|
36
|
+
Blob.create( id: id,
|
37
|
+
content: content )
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def import( id )
|
43
|
+
data = read( id )
|
44
|
+
rec = Inscribe.create( _parse_inscribe( data ))
|
45
|
+
rec
|
46
|
+
end
|
47
|
+
|
48
|
+
def read( id )
|
49
|
+
_read_inscribe( "#{@dir}/#{id}.json" )
|
50
|
+
end
|
51
|
+
|
52
|
+
def _read_inscribe( path )
|
53
|
+
JSON.parse( _read_text( path ))
|
54
|
+
end
|
55
|
+
|
56
|
+
def _read_blob( path )
|
57
|
+
blob = File.open( path, 'rb' ) { |f| f.read }
|
58
|
+
## auto force to ASCII-7BIT if not already - why? why not?
|
59
|
+
blob
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
def _read_text( path )
|
64
|
+
File.open( path, 'r:utf-8' ){ |f| f.read }
|
65
|
+
end
|
66
|
+
|
67
|
+
def _parse_inscribe( data )
|
68
|
+
## num via title
|
69
|
+
attributes = {
|
70
|
+
id: data['id'],
|
71
|
+
num: _title_to_num( data['title'] ),
|
72
|
+
bytes: _content_length_to_bytes( data['content length'] ),
|
73
|
+
sat: data['sat'].to_i(10),
|
74
|
+
content_type: data['content type'],
|
75
|
+
block: data['genesis height'].to_i(10),
|
76
|
+
fee: data['genesis fee'].to_i(10),
|
77
|
+
tx: data['genesis transaction'],
|
78
|
+
address: data['address'],
|
79
|
+
output: data['output'],
|
80
|
+
value: data['output value'].to_i(10),
|
81
|
+
offset: data['offset'].to_i(10),
|
82
|
+
# "2023-06-01 05:00:57 UTC"
|
83
|
+
date: DateTime.strptime( data['timestamp'],
|
84
|
+
'%Y-%m-%d %H:%M:%S %z')
|
85
|
+
}
|
86
|
+
|
87
|
+
attributes
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
## "title": "Inscription 9992615",
|
93
|
+
TITLE_RX = /^Inscription (?<num>[0-9]+)$/i
|
94
|
+
|
95
|
+
def _title_to_num( str )
|
96
|
+
if m=TITLE_RX.match( str )
|
97
|
+
m[:num].to_i(10) ## use base 10
|
98
|
+
else
|
99
|
+
puts "!! ERROR - no inscribe num found in title >#{str}<"
|
100
|
+
exit 1 ## not found - raise exception - why? why not?
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
CONTENT_LENGTH_RX = /^(?<num>[0-9]+) bytes$/i
|
105
|
+
|
106
|
+
def _content_length_to_bytes( str )
|
107
|
+
if m=CONTENT_LENGTH_RX.match( str )
|
108
|
+
m[:num].to_i(10) ## use base 10
|
109
|
+
else
|
110
|
+
puts "!! ERROR - bytes found in content lenght >#{str}<"
|
111
|
+
exit 1 ## not found - raise exception - why? why not?
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
end # class Cache
|
119
|
+
end # module OrdDb
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
|
data/lib/ordlite/schema.rb
CHANGED
@@ -48,7 +48,8 @@ create_table :inscribes, :id => :string do |t|
|
|
48
48
|
|
49
49
|
## "content length": "85 bytes",
|
50
50
|
## note: extract bytes as integer!!!
|
51
|
-
|
51
|
+
## change to bytes - why? why not?
|
52
|
+
t.integer :bytes, null: false
|
52
53
|
## "content type": "text/plain;charset=utf-8",
|
53
54
|
## note: make sure always lower/down case!!!
|
54
55
|
t.string :content_type, null: false
|
@@ -63,10 +64,11 @@ create_table :inscribes, :id => :string do |t|
|
|
63
64
|
|
64
65
|
##
|
65
66
|
## "genesis height": "792337",
|
67
|
+
## -> change height to block - why? why not?
|
66
68
|
## "genesis fee": "6118",
|
67
69
|
## "genesis transaction": "0a3a4dbf6630338bc4df8e36bd081f8f7d2dee9441131cb03a18d43eb4882d5c",
|
68
70
|
## "offset": "0"
|
69
|
-
t.integer :
|
71
|
+
t.integer :block, null: false
|
70
72
|
t.integer :fee, null: false
|
71
73
|
t.string :tx, null: false
|
72
74
|
t.integer :offset, null: false
|
@@ -76,12 +78,15 @@ create_table :inscribes, :id => :string do |t|
|
|
76
78
|
## is this minter/inscriber addr???
|
77
79
|
t.string :address, null: false
|
78
80
|
|
79
|
-
## -- ignore for now - why? why not?
|
80
|
-
## what is output ???
|
81
|
-
## "location": "0a3a4dbf6630338bc4df8e36bd081f8f7d2dee9441131cb03a18d43eb4882d5c:0:0",
|
82
81
|
## "output": "0a3a4dbf6630338bc4df8e36bd081f8f7d2dee9441131cb03a18d43eb4882d5c:0",
|
83
82
|
## "output value": "546",
|
84
|
-
|
83
|
+
t.string :output, null: false
|
84
|
+
t.integer :value, null: false
|
85
|
+
|
86
|
+
## -- ignore for now - why? why not?
|
87
|
+
## what is location ???
|
88
|
+
## "location": "0a3a4dbf6630338bc4df8e36bd081f8f7d2dee9441131cb03a18d43eb4882d5c:0:0",
|
89
|
+
|
85
90
|
## timestamp at last
|
86
91
|
t.timestamps
|
87
92
|
end
|
data/lib/ordlite/version.rb
CHANGED
data/lib/ordlite.rb
CHANGED
@@ -1,105 +1,12 @@
|
|
1
|
-
# core and stlibs
|
2
1
|
|
3
|
-
|
4
|
-
require 'fileutils'
|
5
|
-
require 'uri'
|
6
|
-
require 'json'
|
7
|
-
require 'yaml'
|
2
|
+
require_relative 'ordlite/base'
|
8
3
|
|
9
|
-
require 'logger' # Note: use for ActiveRecord::Base.logger -- remove/replace later w/ LogUtils::Logger ???
|
10
4
|
|
5
|
+
## add convenience helpers
|
6
|
+
## use require 'ordlite/base' if you do NOT want automagic aliases
|
11
7
|
|
12
|
-
# 3rd party gems / libs
|
13
|
-
require 'props' # see github.com/rubylibs/props
|
14
|
-
require 'logutils' # see github.com/rubylibs/logutils
|
15
8
|
|
9
|
+
Inscribe = OrdDb::Model::Inscribe
|
10
|
+
Blob = OrdDb::Model::Blob
|
16
11
|
|
17
|
-
require 'active_record' ## todo: add sqlite3? etc.
|
18
12
|
|
19
|
-
## add more activerecords addons/utils
|
20
|
-
# require 'tagutils'
|
21
|
-
require 'activerecord/utils'
|
22
|
-
require 'props/activerecord' # includes ConfDb (ConfDb::Model::Prop, etc.)
|
23
|
-
require 'logutils/activerecord' # includes LogDb (LogDb::Model::Log, etc.)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
# our own code
|
28
|
-
|
29
|
-
require 'ordlite/version' # always goes first
|
30
|
-
|
31
|
-
require 'ordlite/models/forward'
|
32
|
-
|
33
|
-
require 'ordlite/models/inscribe'
|
34
|
-
require 'ordlite/models/blob'
|
35
|
-
|
36
|
-
|
37
|
-
require 'ordlite/schema'
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
module OrdDb
|
42
|
-
|
43
|
-
def self.create
|
44
|
-
CreateDb.new.up
|
45
|
-
ConfDb::Model::Prop.create!( key: 'db.schema.ord.version',
|
46
|
-
value: Ordlite::VERSION )
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.create_all
|
50
|
-
LogDb.create # add logs table
|
51
|
-
ConfDb.create # add props table
|
52
|
-
OrdDb.create
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.connect( config={} )
|
56
|
-
|
57
|
-
if config.empty?
|
58
|
-
puts "ENV['DATBASE_URL'] - >#{ENV['DATABASE_URL']}<"
|
59
|
-
|
60
|
-
### change default to ./ord.db ?? why? why not?
|
61
|
-
db = URI.parse( ENV['DATABASE_URL'] || 'sqlite3:///ord.db' )
|
62
|
-
|
63
|
-
if db.scheme == 'postgres'
|
64
|
-
config = {
|
65
|
-
adapter: 'postgresql',
|
66
|
-
host: db.host,
|
67
|
-
port: db.port,
|
68
|
-
username: db.user,
|
69
|
-
password: db.password,
|
70
|
-
database: db.path[1..-1],
|
71
|
-
encoding: 'utf8'
|
72
|
-
}
|
73
|
-
else # assume sqlite3
|
74
|
-
config = {
|
75
|
-
adapter: db.scheme, # sqlite3
|
76
|
-
database: db.path[1..-1] # ord.db (NB: cut off leading /, thus 1..-1)
|
77
|
-
}
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
puts "Connecting to db using settings: "
|
82
|
-
pp config
|
83
|
-
ActiveRecord::Base.establish_connection( config )
|
84
|
-
# ActiveRecord::Base.logger = Logger.new( STDOUT )
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
def self.setup_in_memory_db
|
89
|
-
|
90
|
-
# Database Setup & Config
|
91
|
-
ActiveRecord::Base.logger = Logger.new( STDOUT )
|
92
|
-
## ActiveRecord::Base.colorize_logging = false - no longer exists - check new api/config setting?
|
93
|
-
|
94
|
-
self.connect( adapter: 'sqlite3',
|
95
|
-
database: ':memory:' )
|
96
|
-
|
97
|
-
## build schema
|
98
|
-
OrdDb.create_all
|
99
|
-
end # setup_in_memory_db (using SQLite :memory:)
|
100
|
-
|
101
|
-
end # module OrdDb
|
102
|
-
|
103
|
-
|
104
|
-
# say hello
|
105
|
-
puts Ordlite.banner ## if defined?($RUBYCOCOS_DEBUG) && $RUBCOCOS_DEBUG
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ordlite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gerald Bauer
|
@@ -157,6 +157,8 @@ files:
|
|
157
157
|
- README.md
|
158
158
|
- Rakefile
|
159
159
|
- lib/ordlite.rb
|
160
|
+
- lib/ordlite/base.rb
|
161
|
+
- lib/ordlite/cache.rb
|
160
162
|
- lib/ordlite/models/blob.rb
|
161
163
|
- lib/ordlite/models/forward.rb
|
162
164
|
- lib/ordlite/models/inscribe.rb
|