sruby 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/.idea/.gitignore +8 -8
- data/.idea/misc.xml +3 -3
- data/.idea/modules.xml +7 -7
- data/.idea/sruby.iml +56 -16
- data/.idea/vcs.xml +5 -5
- data/.rubocop.yml +43 -43
- data/Gemfile +12 -10
- data/Gemfile.lock +19 -2
- data/README.md +1 -0
- data/Rakefile +4 -4
- data/lib/sruby/errors.rb +9 -9
- data/lib/sruby/index.rb +194 -186
- data/lib/sruby/mixin.rb +44 -44
- data/lib/sruby/version.rb +1 -1
- data/lib/sruby.rb +1 -1
- data/sig/sruby/index.rbs +4 -4
- metadata +6 -7
- data/tests/index.rb +0 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7f0b3f7eae88703fdb9989e97072baf6da6a641c595bd4d4b8815e36f52f8ae1
|
|
4
|
+
data.tar.gz: 2df873b2c0ff2ebf65bd64cf622fbfec5e6d3b55b53ebed66427f837bebe21c9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f2f65eb0916343f1f1dcc21bc86ad9ff664c8917491b11fda1c252384d0c6030c7249857b2faf3fdcf262b999ed11bf95bea6b4b2ab8a5a332f5a1ea0d08d646
|
|
7
|
+
data.tar.gz: 4f7bb3f11866160e7da8c49450905162961db2c1e244a4ba0dd6844098a482f6d8189a6c30b1a0f8fb7824b7c827f2af7be25ae11031b796f221420755daddfd
|
data/.idea/.gitignore
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# Default ignored files
|
|
2
|
-
/shelf/
|
|
3
|
-
/workspace.xml
|
|
4
|
-
# Editor-based HTTP Client requests
|
|
5
|
-
/httpRequests/
|
|
6
|
-
# Datasource local storage ignored files
|
|
7
|
-
/dataSources/
|
|
8
|
-
/dataSources.local.xml
|
|
1
|
+
# Default ignored files
|
|
2
|
+
/shelf/
|
|
3
|
+
/workspace.xml
|
|
4
|
+
# Editor-based HTTP Client requests
|
|
5
|
+
/httpRequests/
|
|
6
|
+
# Datasource local storage ignored files
|
|
7
|
+
/dataSources/
|
|
8
|
+
/dataSources.local.xml
|
data/.idea/misc.xml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="ProjectRootManager" version="2" project-jdk-name="ruby-3.0.3-p157" project-jdk-type="RUBY_SDK" />
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="ProjectRootManager" version="2" project-jdk-name="ruby-3.0.3-p157" project-jdk-type="RUBY_SDK" />
|
|
4
4
|
</project>
|
data/.idea/modules.xml
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="ProjectModuleManager">
|
|
4
|
-
<modules>
|
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/sruby.iml" filepath="$PROJECT_DIR$/.idea/sruby.iml" />
|
|
6
|
-
</modules>
|
|
7
|
-
</component>
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="ProjectModuleManager">
|
|
4
|
+
<modules>
|
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/.idea/sruby.iml" filepath="$PROJECT_DIR$/.idea/sruby.iml" />
|
|
6
|
+
</modules>
|
|
7
|
+
</component>
|
|
8
8
|
</project>
|
data/.idea/sruby.iml
CHANGED
|
@@ -1,17 +1,57 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
|
3
|
-
<component name="ModuleRunConfigurationManager">
|
|
4
|
-
<shared />
|
|
5
|
-
</component>
|
|
6
|
-
<component name="NewModuleRootManager">
|
|
7
|
-
<content url="file://$MODULE_DIR$">
|
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
|
9
|
-
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
|
10
|
-
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
|
11
|
-
</content>
|
|
12
|
-
<orderEntry type="
|
|
13
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.3.4, ruby-3.0.
|
|
15
|
-
<orderEntry type="library" scope="PROVIDED" name="
|
|
16
|
-
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
|
3
|
+
<component name="ModuleRunConfigurationManager">
|
|
4
|
+
<shared />
|
|
5
|
+
</component>
|
|
6
|
+
<component name="NewModuleRootManager">
|
|
7
|
+
<content url="file://$MODULE_DIR$">
|
|
8
|
+
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
|
9
|
+
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
|
10
|
+
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
|
11
|
+
</content>
|
|
12
|
+
<orderEntry type="jdk" jdkName="RVM: ruby-3.0.0" jdkType="RUBY_SDK" />
|
|
13
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
14
|
+
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.3.4, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
15
|
+
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.5.0, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
16
|
+
<orderEntry type="library" scope="PROVIDED" name="rake (v13.0.6, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
17
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.11.0, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
18
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.11.0, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
19
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.11.0, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
20
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.11.1, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
21
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.11.0, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
22
|
+
<orderEntry type="library" scope="PROVIDED" name="sqlite (v1.0.2, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
23
|
+
<orderEntry type="library" scope="PROVIDED" name="sqlite3 (v1.4.4, RVM: ruby-3.0.0) [gem]" level="application" />
|
|
24
|
+
</component>
|
|
25
|
+
<component name="RakeTasksCache">
|
|
26
|
+
<option name="myRootTask">
|
|
27
|
+
<RakeTaskImpl id="rake">
|
|
28
|
+
<subtasks>
|
|
29
|
+
<RakeTaskImpl description="Build sruby-0.1.1.gem into the pkg directory" fullCommand="build" id="build" />
|
|
30
|
+
<RakeTaskImpl id="build">
|
|
31
|
+
<subtasks>
|
|
32
|
+
<RakeTaskImpl description="Generate SHA512 checksum if sruby-0.1.1.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
|
|
33
|
+
</subtasks>
|
|
34
|
+
</RakeTaskImpl>
|
|
35
|
+
<RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
|
|
36
|
+
<RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
|
|
37
|
+
<RakeTaskImpl description="Build and install sruby-0.1.1.gem into system gems" fullCommand="install" id="install" />
|
|
38
|
+
<RakeTaskImpl id="install">
|
|
39
|
+
<subtasks>
|
|
40
|
+
<RakeTaskImpl description="Build and install sruby-0.1.1.gem into system gems without network access" fullCommand="install:local" id="local" />
|
|
41
|
+
</subtasks>
|
|
42
|
+
</RakeTaskImpl>
|
|
43
|
+
<RakeTaskImpl description="Create tag v0.1.1 and build and push sruby-0.1.1.gem to https://rubygems.org" fullCommand="release[remote]" id="release[remote]" />
|
|
44
|
+
<RakeTaskImpl description="" fullCommand="default" id="default" />
|
|
45
|
+
<RakeTaskImpl description="" fullCommand="release" id="release" />
|
|
46
|
+
<RakeTaskImpl id="release">
|
|
47
|
+
<subtasks>
|
|
48
|
+
<RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
|
|
49
|
+
<RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
|
|
50
|
+
<RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
|
|
51
|
+
</subtasks>
|
|
52
|
+
</RakeTaskImpl>
|
|
53
|
+
</subtasks>
|
|
54
|
+
</RakeTaskImpl>
|
|
55
|
+
</option>
|
|
56
|
+
</component>
|
|
17
57
|
</module>
|
data/.idea/vcs.xml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="VcsDirectoryMappings">
|
|
4
|
-
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
5
|
-
</component>
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="VcsDirectoryMappings">
|
|
4
|
+
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
5
|
+
</component>
|
|
6
6
|
</project>
|
data/.rubocop.yml
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
AllCops:
|
|
2
|
-
TargetRubyVersion: 2.5
|
|
3
|
-
|
|
4
|
-
Style/StringLiterals:
|
|
5
|
-
Enabled: true
|
|
6
|
-
EnforcedStyle: double_quotes
|
|
7
|
-
|
|
8
|
-
Style/StringLiteralsInInterpolation:
|
|
9
|
-
Enabled: true
|
|
10
|
-
EnforcedStyle: double_quotes
|
|
11
|
-
|
|
12
|
-
Layout/LineLength:
|
|
13
|
-
Max: 200
|
|
14
|
-
|
|
15
|
-
Style/HashSyntax:
|
|
16
|
-
Enabled: true
|
|
17
|
-
EnforcedStyle: hash_rockets
|
|
18
|
-
|
|
19
|
-
Layout/EndOfLine:
|
|
20
|
-
Enabled: false
|
|
21
|
-
|
|
22
|
-
Metrics/ModuleLength:
|
|
23
|
-
Enabled: false
|
|
24
|
-
|
|
25
|
-
Metrics/MethodLength:
|
|
26
|
-
Enabled: false
|
|
27
|
-
|
|
28
|
-
Lint/RedundantStringCoercion:
|
|
29
|
-
Enabled: false
|
|
30
|
-
|
|
31
|
-
Style/Documentation:
|
|
32
|
-
Enabled: false
|
|
33
|
-
|
|
34
|
-
Metrics/PerceivedComplexity:
|
|
35
|
-
Enabled: false
|
|
36
|
-
|
|
37
|
-
Metrics/AbcSize:
|
|
38
|
-
Enabled: false
|
|
39
|
-
|
|
40
|
-
Metrics/CyclomaticComplexity:
|
|
41
|
-
Enabled: false
|
|
42
|
-
|
|
43
|
-
Metrics/BlockLength:
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.5
|
|
3
|
+
|
|
4
|
+
Style/StringLiterals:
|
|
5
|
+
Enabled: true
|
|
6
|
+
EnforcedStyle: double_quotes
|
|
7
|
+
|
|
8
|
+
Style/StringLiteralsInInterpolation:
|
|
9
|
+
Enabled: true
|
|
10
|
+
EnforcedStyle: double_quotes
|
|
11
|
+
|
|
12
|
+
Layout/LineLength:
|
|
13
|
+
Max: 200
|
|
14
|
+
|
|
15
|
+
Style/HashSyntax:
|
|
16
|
+
Enabled: true
|
|
17
|
+
EnforcedStyle: hash_rockets
|
|
18
|
+
|
|
19
|
+
Layout/EndOfLine:
|
|
20
|
+
Enabled: false
|
|
21
|
+
|
|
22
|
+
Metrics/ModuleLength:
|
|
23
|
+
Enabled: false
|
|
24
|
+
|
|
25
|
+
Metrics/MethodLength:
|
|
26
|
+
Enabled: false
|
|
27
|
+
|
|
28
|
+
Lint/RedundantStringCoercion:
|
|
29
|
+
Enabled: false
|
|
30
|
+
|
|
31
|
+
Style/Documentation:
|
|
32
|
+
Enabled: false
|
|
33
|
+
|
|
34
|
+
Metrics/PerceivedComplexity:
|
|
35
|
+
Enabled: false
|
|
36
|
+
|
|
37
|
+
Metrics/AbcSize:
|
|
38
|
+
Enabled: false
|
|
39
|
+
|
|
40
|
+
Metrics/CyclomaticComplexity:
|
|
41
|
+
Enabled: false
|
|
42
|
+
|
|
43
|
+
Metrics/BlockLength:
|
|
44
44
|
Enabled: false
|
data/Gemfile
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
source "https://rubygems.org"
|
|
4
|
-
|
|
5
|
-
# Specify your gem's dependencies in sruby.gemspec
|
|
6
|
-
gemspec
|
|
7
|
-
|
|
8
|
-
gem "rake", "~> 13.0"
|
|
9
|
-
|
|
10
|
-
gem "
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
# Specify your gem's dependencies in sruby.gemspec
|
|
6
|
+
gemspec
|
|
7
|
+
|
|
8
|
+
gem "rake", "~> 13.0"
|
|
9
|
+
|
|
10
|
+
gem "rspec", "~> 3.0"
|
|
11
|
+
|
|
12
|
+
gem "sqlite", "~> 1.0", ">= 1.0.2"
|
data/Gemfile.lock
CHANGED
|
@@ -1,20 +1,37 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sruby (0.1.
|
|
4
|
+
sruby (0.1.1)
|
|
5
5
|
sqlite3
|
|
6
6
|
|
|
7
7
|
GEM
|
|
8
8
|
remote: https://rubygems.org/
|
|
9
9
|
specs:
|
|
10
|
+
diff-lcs (1.5.0)
|
|
10
11
|
rake (13.0.6)
|
|
11
|
-
|
|
12
|
+
rspec (3.11.0)
|
|
13
|
+
rspec-core (~> 3.11.0)
|
|
14
|
+
rspec-expectations (~> 3.11.0)
|
|
15
|
+
rspec-mocks (~> 3.11.0)
|
|
16
|
+
rspec-core (3.11.0)
|
|
17
|
+
rspec-support (~> 3.11.0)
|
|
18
|
+
rspec-expectations (3.11.0)
|
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
20
|
+
rspec-support (~> 3.11.0)
|
|
21
|
+
rspec-mocks (3.11.1)
|
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
23
|
+
rspec-support (~> 3.11.0)
|
|
24
|
+
rspec-support (3.11.0)
|
|
25
|
+
sqlite (1.0.2)
|
|
26
|
+
sqlite3 (1.4.4)
|
|
12
27
|
|
|
13
28
|
PLATFORMS
|
|
14
29
|
x86_64-linux
|
|
15
30
|
|
|
16
31
|
DEPENDENCIES
|
|
17
32
|
rake (~> 13.0)
|
|
33
|
+
rspec (~> 3.0)
|
|
34
|
+
sqlite (~> 1.0, >= 1.0.2)
|
|
18
35
|
sruby!
|
|
19
36
|
|
|
20
37
|
BUNDLED WITH
|
data/README.md
CHANGED
data/Rakefile
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "bundler/gem_tasks"
|
|
4
|
-
task :default => %i[]
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bundler/gem_tasks"
|
|
4
|
+
task :default => %i[]
|
data/lib/sruby/errors.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Sruby
|
|
4
|
-
class SrubyError < StandardError
|
|
5
|
-
def initialize(msg = String.new)
|
|
6
|
-
super("SRUBY ERROR : #{msg}")
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Sruby
|
|
4
|
+
class SrubyError < StandardError
|
|
5
|
+
def initialize(msg = String.new)
|
|
6
|
+
super("SRUBY ERROR : #{msg}")
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
data/lib/sruby/index.rb
CHANGED
|
@@ -1,186 +1,194 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "sqlite3"
|
|
4
|
-
require File.expand_path("mixin.rb", __dir__)
|
|
5
|
-
require File.expand_path("errors.rb", __dir__)
|
|
6
|
-
|
|
7
|
-
module Sruby
|
|
8
|
-
class Database
|
|
9
|
-
attr_reader :db
|
|
10
|
-
|
|
11
|
-
# Creates a new database object
|
|
12
|
-
# @param [String, Hash, Sqlite3::Database] options The database file to open, or a hash of options
|
|
13
|
-
def initialize(options = Hash[:name => "sruby.db"])
|
|
14
|
-
case options
|
|
15
|
-
when String
|
|
16
|
-
@db = SQLite3::Database.new(options)
|
|
17
|
-
when Hash
|
|
18
|
-
@db = SQLite3::Database.new(options[:name])
|
|
19
|
-
when SQLite3::Database
|
|
20
|
-
@db = options
|
|
21
|
-
else
|
|
22
|
-
raise SrubyError, "Invalid argument: #{options.inspect}"
|
|
23
|
-
end
|
|
24
|
-
@db.results_as_hash = true if options.is_a?(Hash) && options[:results_as_hash]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Creates a new Table in database
|
|
28
|
-
# @param [String] table_name The name of the table
|
|
29
|
-
# @example
|
|
30
|
-
# db = Sruby::Database.new
|
|
31
|
-
# db.create_table("users")
|
|
32
|
-
# @return [Table] The database object
|
|
33
|
-
def create(table_name)
|
|
34
|
-
@db.execute <<~SQL
|
|
35
|
-
CREATE TABLE IF NOT EXISTS #{table_name} (
|
|
36
|
-
name TEXT PRIMARY KEY,
|
|
37
|
-
value TEXT
|
|
38
|
-
);
|
|
39
|
-
SQL
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
#
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
#
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
#
|
|
105
|
-
# @
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
#
|
|
133
|
-
# @
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
def
|
|
162
|
-
@db
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def
|
|
175
|
-
Database.new(@db).
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
def
|
|
179
|
-
Database.new(@db).
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
def
|
|
183
|
-
Database.new(@db).
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "sqlite3"
|
|
4
|
+
require File.expand_path("mixin.rb", __dir__)
|
|
5
|
+
require File.expand_path("errors.rb", __dir__)
|
|
6
|
+
|
|
7
|
+
module Sruby
|
|
8
|
+
class Database
|
|
9
|
+
attr_reader :db, :tables
|
|
10
|
+
|
|
11
|
+
# Creates a new database object
|
|
12
|
+
# @param [String, Hash, Sqlite3::Database] options The database file to open, or a hash of options
|
|
13
|
+
def initialize(options = Hash[:name => "sruby.db"])
|
|
14
|
+
case options
|
|
15
|
+
when String
|
|
16
|
+
@db = SQLite3::Database.new(options)
|
|
17
|
+
when Hash
|
|
18
|
+
@db = SQLite3::Database.new(options[:name])
|
|
19
|
+
when SQLite3::Database
|
|
20
|
+
@db = options
|
|
21
|
+
else
|
|
22
|
+
raise SrubyError, "Invalid argument: #{options.inspect}"
|
|
23
|
+
end
|
|
24
|
+
@db.results_as_hash = true if options.is_a?(Hash) && options[:results_as_hash]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Creates a new Table in database
|
|
28
|
+
# @param [String] table_name The name of the table
|
|
29
|
+
# @example
|
|
30
|
+
# db = Sruby::Database.new
|
|
31
|
+
# db.create_table("users")
|
|
32
|
+
# @return [Table] The database object
|
|
33
|
+
def create(table_name)
|
|
34
|
+
@db.execute <<~SQL
|
|
35
|
+
CREATE TABLE IF NOT EXISTS #{table_name} (
|
|
36
|
+
name TEXT PRIMARY KEY,
|
|
37
|
+
value TEXT
|
|
38
|
+
);
|
|
39
|
+
SQL
|
|
40
|
+
|
|
41
|
+
@tables ||= Hash.new
|
|
42
|
+
@tables[table_name] = Table.new(@db, table_name)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def [](table_name)
|
|
46
|
+
@tables ||= Hash.new
|
|
47
|
+
@tables[table_name.to_s]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def method_missing(symbol, *args)
|
|
51
|
+
return self[symbol] if self[symbol]
|
|
52
|
+
super
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Insert values into a table
|
|
56
|
+
# @param [String] table_name The name of the table
|
|
57
|
+
# @param [String, Hash] values The values to insert
|
|
58
|
+
# @example
|
|
59
|
+
# db = Sruby::Database.new
|
|
60
|
+
# db.create_table("users")
|
|
61
|
+
# db.insert("users", "person" => "John", "age" => "24")
|
|
62
|
+
# db.insert("users", Hash["person" => "John", "age" => "24"])
|
|
63
|
+
# db.insert("users", "person", "John")
|
|
64
|
+
# @return [Array] The database object
|
|
65
|
+
def insert(table_name, *values)
|
|
66
|
+
case values[0]
|
|
67
|
+
when Hash
|
|
68
|
+
values[0].stringify_keys!
|
|
69
|
+
values_as_paths = values[0].paths
|
|
70
|
+
values_as_paths.each do |path, value|
|
|
71
|
+
p path, value
|
|
72
|
+
@db.execute("INSERT INTO #{table_name} (name, value) VALUES (?, ?)", path.join("."), value)
|
|
73
|
+
end
|
|
74
|
+
else
|
|
75
|
+
@db.execute("INSERT INTO #{table_name} (name, value) VALUES (?, ?)", values[0].to_s, values[1])
|
|
76
|
+
end
|
|
77
|
+
rescue SQLite3::ConstraintException
|
|
78
|
+
raise SrubyError, "Duplicated key"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Updates values in a table
|
|
82
|
+
# @param [String] table_name The name of the table
|
|
83
|
+
# @param [String, Hash] values The values to update
|
|
84
|
+
# @example
|
|
85
|
+
# db = Sruby::Database.new
|
|
86
|
+
# db.create_table("users")
|
|
87
|
+
# db.insert("users", "person" => "John", "age" => "24")
|
|
88
|
+
# db.update("users", "person" => "John", "age" => "25")
|
|
89
|
+
# db.update("users", Hash["person" => "John", "age" => "25"])
|
|
90
|
+
# @return [Array] The database object
|
|
91
|
+
def update(table_name, *values)
|
|
92
|
+
case values[0]
|
|
93
|
+
when Hash
|
|
94
|
+
values[0].stringify_keys!
|
|
95
|
+
values_as_paths = values[0].paths
|
|
96
|
+
values_as_paths.each do |path, value|
|
|
97
|
+
@db.execute("REPLACE INTO #{table_name} (name, value) VALUES (?, ?)", path.join("."), value)
|
|
98
|
+
end
|
|
99
|
+
else
|
|
100
|
+
@db.execute("REPLACE INTO #{table_name} (name, value) VALUES (?, ?)", values[0].to_s, values[1])
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Get a value from a table
|
|
105
|
+
# @param [String] table_name The name of the table
|
|
106
|
+
# @param [String] name The value to get
|
|
107
|
+
# @param [Nil, String] path The path to get
|
|
108
|
+
# @example
|
|
109
|
+
# db = Sruby::Database.new
|
|
110
|
+
# db.create_table("users")
|
|
111
|
+
# db.insert("users", "person" => "John", "age" => "24")
|
|
112
|
+
# db.get("users", "person")
|
|
113
|
+
# @return [String] The value
|
|
114
|
+
def get(table_name, name, path = nil)
|
|
115
|
+
if path.nil?
|
|
116
|
+
@db.execute("SELECT value FROM #{table_name} WHERE name = ?", name)
|
|
117
|
+
else
|
|
118
|
+
path_name = case path
|
|
119
|
+
when Array
|
|
120
|
+
"#{path.map(&:to_s).join(".")}.#{name}"
|
|
121
|
+
when String
|
|
122
|
+
"#{path}.#{name}"
|
|
123
|
+
else
|
|
124
|
+
name
|
|
125
|
+
end
|
|
126
|
+
data = @db.execute("SELECT value FROM #{table_name} WHERE name = ?", path_name)
|
|
127
|
+
raise SrubyError, "No value found for #{path_name}" if data.empty?
|
|
128
|
+
data
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Deletes a row from a table
|
|
133
|
+
# @param [String] table_name The name of the table
|
|
134
|
+
# @param [String] name The name of the row to delete
|
|
135
|
+
# @param [Nil, String] path The path to delete
|
|
136
|
+
# @example
|
|
137
|
+
# db = Sruby::Database.new
|
|
138
|
+
# db.create_table("users")
|
|
139
|
+
# db.insert("users", "person" => "John", "age" => "24")
|
|
140
|
+
# db.delete("users", "person")
|
|
141
|
+
# @return [Array] The database object
|
|
142
|
+
def delete(table_name, name, path = nil)
|
|
143
|
+
if path.nil?
|
|
144
|
+
@db.execute("DELETE FROM #{table_name} WHERE name = ?", name)
|
|
145
|
+
else
|
|
146
|
+
path_name = case path
|
|
147
|
+
when Array
|
|
148
|
+
"#{path.map(&:to_s).join(".")}.#{name}"
|
|
149
|
+
when String
|
|
150
|
+
"#{path}.#{name}"
|
|
151
|
+
else
|
|
152
|
+
name
|
|
153
|
+
end
|
|
154
|
+
@db.execute("DELETE FROM #{table_name} WHERE name = ?", path_name)
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Get all the values from a table
|
|
159
|
+
# @param [String] table_name The name of the table
|
|
160
|
+
# @return [Array] The values
|
|
161
|
+
def all(table_name)
|
|
162
|
+
@db.execute("SELECT * FROM #{table_name}")
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
class Table
|
|
167
|
+
attr_reader :db, :name
|
|
168
|
+
|
|
169
|
+
def initialize(db, name)
|
|
170
|
+
@db = db
|
|
171
|
+
@name = name
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def insert(*values)
|
|
175
|
+
Database.new(@db).insert(@name, *values)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def update(*values)
|
|
179
|
+
Database.new(@db).update(@name, *values)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def get(name, path = nil)
|
|
183
|
+
Database.new(@db).get(@name, name, path)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def delete(name, path = nil)
|
|
187
|
+
Database.new(@db).delete(@name, name, path)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def all
|
|
191
|
+
Database.new(@db).all(@name)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
data/lib/sruby/mixin.rb
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Hash
|
|
4
|
-
def stringify_keys!
|
|
5
|
-
transform_keys!(&:to_s)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def stringify_values!
|
|
9
|
-
transform_values!(&:to_s)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Get the deepest keys
|
|
13
|
-
# @param hash [Hash] the hash to get the deepest keys from
|
|
14
|
-
# @return [Array<String>] the deepest keys
|
|
15
|
-
def keys(hash = self)
|
|
16
|
-
hash.each_with_object([]) do |(key, value), paths|
|
|
17
|
-
if value.is_a?(Hash)
|
|
18
|
-
paths.concat(keys(value))
|
|
19
|
-
else
|
|
20
|
-
paths << key
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Get the deep path of a certain key
|
|
26
|
-
# @param key [String] the key to get the path for
|
|
27
|
-
# @param path [Array] the current path
|
|
28
|
-
# @return [NilClass, Array<String, String>] the path to the key
|
|
29
|
-
def path_to(key, path = [], hash: self)
|
|
30
|
-
hash.stringify_keys!
|
|
31
|
-
hash.each_pair do |k, v|
|
|
32
|
-
return [path + [k], v] if k == key.to_s
|
|
33
|
-
if v.is_a?(Hash) &&
|
|
34
|
-
(p = path_to(key.to_s, path + [k], :hash => v))
|
|
35
|
-
return p
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
nil
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def paths(hash = self)
|
|
42
|
-
keys(hash).map { |key| path_to(key, :hash => hash) }
|
|
43
|
-
end
|
|
44
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Hash
|
|
4
|
+
def stringify_keys!
|
|
5
|
+
transform_keys!(&:to_s)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def stringify_values!
|
|
9
|
+
transform_values!(&:to_s)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Get the deepest keys
|
|
13
|
+
# @param hash [Hash] the hash to get the deepest keys from
|
|
14
|
+
# @return [Array<String>] the deepest keys
|
|
15
|
+
def keys(hash = self)
|
|
16
|
+
hash.each_with_object([]) do |(key, value), paths|
|
|
17
|
+
if value.is_a?(Hash)
|
|
18
|
+
paths.concat(keys(value))
|
|
19
|
+
else
|
|
20
|
+
paths << key
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Get the deep path of a certain key
|
|
26
|
+
# @param key [String] the key to get the path for
|
|
27
|
+
# @param path [Array] the current path
|
|
28
|
+
# @return [NilClass, Array<String, String>] the path to the key
|
|
29
|
+
def path_to(key, path = [], hash: self)
|
|
30
|
+
hash.stringify_keys!
|
|
31
|
+
hash.each_pair do |k, v|
|
|
32
|
+
return [path + [k], v] if k == key.to_s
|
|
33
|
+
if v.is_a?(Hash) &&
|
|
34
|
+
(p = path_to(key.to_s, path + [k], :hash => v))
|
|
35
|
+
return p
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def paths(hash = self)
|
|
42
|
+
keys(hash).map { |key| path_to(key, :hash => hash) }
|
|
43
|
+
end
|
|
44
|
+
end
|
data/lib/sruby/version.rb
CHANGED
data/lib/sruby.rb
CHANGED
data/sig/sruby/index.rbs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
module Sruby
|
|
2
|
-
class Database
|
|
3
|
-
|
|
4
|
-
end
|
|
1
|
+
module Sruby
|
|
2
|
+
class Database
|
|
3
|
+
|
|
4
|
+
end
|
|
5
5
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sruby
|
|
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
|
- Senchu
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sqlite3
|
|
@@ -56,7 +56,6 @@ files:
|
|
|
56
56
|
- lib/sruby/version.rb
|
|
57
57
|
- sig/sruby.rbs
|
|
58
58
|
- sig/sruby/index.rbs
|
|
59
|
-
- tests/index.rb
|
|
60
59
|
homepage: https://github.com/Senchuu/Sruby
|
|
61
60
|
licenses:
|
|
62
61
|
- MIT
|
|
@@ -65,7 +64,7 @@ metadata:
|
|
|
65
64
|
homepage_uri: https://github.com/Senchuu/Sruby
|
|
66
65
|
source_code_uri: https://github.com/Senchuu/Sruby
|
|
67
66
|
changelog_uri: https://github.com/Senchuu/Sruby/blob/main/CHANGELOG.md
|
|
68
|
-
post_install_message:
|
|
67
|
+
post_install_message:
|
|
69
68
|
rdoc_options: []
|
|
70
69
|
require_paths:
|
|
71
70
|
- lib
|
|
@@ -80,8 +79,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
80
79
|
- !ruby/object:Gem::Version
|
|
81
80
|
version: '0'
|
|
82
81
|
requirements: []
|
|
83
|
-
rubygems_version: 3.3
|
|
84
|
-
signing_key:
|
|
82
|
+
rubygems_version: 3.2.3
|
|
83
|
+
signing_key:
|
|
85
84
|
specification_version: 4
|
|
86
85
|
summary: Create, read, update and delete data from SQLite database.
|
|
87
86
|
test_files: []
|
data/tests/index.rb
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative "../lib/sruby/index"
|
|
4
|
-
|
|
5
|
-
db = Sruby::Database.new
|
|
6
|
-
test = db.create("test")
|
|
7
|
-
db.test == test
|
|
8
|
-
test.insert("one" => 1)
|
|
9
|
-
test.insert("member" => Hash[:name=>"John", :age=>25])
|
|
10
|
-
test.delete("one")
|
|
11
|
-
test.all
|
|
12
|
-
db.all("test")
|