zillace 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 19b7f2fd9f94f910b62184f4bd8bc1c940e887e772b729089c729fa386d5f418
4
+ data.tar.gz: d2bdb6c7e6c172a7f3fad783268a7dda28845b1dc48899713ac6b7a140f8e635
5
+ SHA512:
6
+ metadata.gz: 00275e10e87ba43b5c725e722ff7b905e477ca9acefe8494c9e442e720c57673d77415f4dd0772446a07511cb0f42ca8ad92452df2b9e105d1d1a27c0ea93ce4
7
+ data.tar.gz: 4f2231c47d58d523d001248396a9528c56721b304251f3ab39c7671f085306694c8072ba1da6cb65df12fbf781638c485ba4775774c707b3823b4a57d8bffafe
data/.rubocop.yml ADDED
@@ -0,0 +1,16 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.1
3
+ NewCops: enable
4
+ DisabledByDefault: true
5
+
6
+ Style/StringLiterals:
7
+ Enabled: true
8
+ EnforcedStyle: single_quotes
9
+
10
+ Style/StringLiteralsInInterpolation:
11
+ Enabled: true
12
+ EnforcedStyle: single_quotes
13
+
14
+ Style/FrozenStringLiteralComment:
15
+ Enabled: true
16
+ EnforcedStyle: never
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [Unreleased]
2
+
3
+ ## [0.0.1] - 2023-12-02
4
+
5
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+ gem 'rake', '~> 13.0'
4
+ gem 'test-unit', '~> 3.0'
5
+ gem 'rubocop', '~> 1.21'
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # Zillace
2
+
3
+ ## Installation
4
+
5
+ Install the gem and add to the application's `Gemfile` by executing: `bundle add zillace`.
6
+ If Bundler is not being used to manage dependencies, install the gem by executing: `gem install zillace`.
7
+
8
+ ## Usage
9
+
10
+ Please see `script/sample.rb` as a simple example at the moment.
11
+
12
+ ## Development
13
+
14
+ After checking out the repo, run `bin/setup` to install dependencies.
15
+ Then, run `rake test` to run the tests.
16
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment.
17
+
18
+ To install this gem onto your local machine, run `bundle exec rake install`.
19
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
20
+
21
+ ## Contributing
22
+
23
+ Bug reports and pull requests are welcome.
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ require 'rubocop/rake_task'
11
+
12
+ RuboCop::RakeTask.new
13
+
14
+ task default: %i[test rubocop]
@@ -0,0 +1,3 @@
1
+ module Zillace
2
+ VERSION = '0.0.1'
3
+ end
data/lib/zillace.rb ADDED
@@ -0,0 +1,80 @@
1
+ require_relative 'zillace/version'
2
+ require 'sqlite3'
3
+ require 'forwardable'
4
+
5
+ module Zillace
6
+ def self.prtime(micro_seconds)
7
+ Time.new(Rational(micro_seconds, 1_000_000))
8
+ end
9
+
10
+ class Error < StandardError; end
11
+
12
+ class Database
13
+ def initialize(profile_prefix: File.join(Dir.home, '.var/app/org.mozilla.firefox'))
14
+ @profile_prefix = profile_prefix
15
+ end
16
+
17
+ def connect
18
+ pattern = File.join(@profile_prefix, '.mozilla/firefox/*.default-release/places.sqlite')
19
+ path = Dir[pattern].first
20
+ @database = SQLite3::Database.new(path)
21
+ self
22
+ end
23
+
24
+ extend Forwardable
25
+ def_delegators :@database, :execute
26
+ end
27
+
28
+ class Place
29
+ attr_reader :url, :title
30
+
31
+ def initialize(id:, url:, title:)
32
+ @id = id
33
+ @url = url
34
+ @title = title
35
+ end
36
+
37
+ def self.each(database: Database.new.connect, &block)
38
+ enumerator = Enumerator.new do |enumerator|
39
+ database.execute('select id, url, title from moz_places') do |row|
40
+ id, url, title = row
41
+ enumerator << new(id:, url:, title:)
42
+ end
43
+ end
44
+
45
+ block_given? ? enumerator.each(&block) : enumerator
46
+ end
47
+
48
+ def self.find(id, database: Database.new.connect)
49
+ url, title = database.execute('select url, title from moz_places where id = ?', id).first
50
+ return new(id:, url:, title:)
51
+ end
52
+ end
53
+
54
+ class Bookmark
55
+ attr_reader :title, :date_added, :last_modified
56
+
57
+ def initialize(fk:, title:, date_added:, last_modified:, database: Database.new.connect)
58
+ @fk = fk
59
+ @title = title
60
+ @date_added = date_added
61
+ @last_modified = last_modified
62
+ @database = database
63
+ end
64
+
65
+ def self.each(database: Database.new.connect, &block)
66
+ enumerator = Enumerator.new do |enumerator|
67
+ database.execute('select fk, title, dateAdded, lastModified from moz_bookmarks') do |row|
68
+ fk, title, date_added, last_modified = row
69
+ enumerator << new(fk:, title:, date_added: ::Zillace.prtime(date_added), last_modified: ::Zillace.prtime(last_modified), database:)
70
+ end
71
+ end
72
+
73
+ block_given? ? enumerator.each(&block) : enumerator
74
+ end
75
+
76
+ def url
77
+ Place.find(@fk, database: @database).url
78
+ end
79
+ end
80
+ end
data/manifest.scm ADDED
@@ -0,0 +1 @@
1
+ (specifications->manifest (list "ruby@3.1" "ruby-sqlite3" "ruby-rubocop"))
data/script/sample.rb ADDED
@@ -0,0 +1,13 @@
1
+ # This sample script generates bookmark contents for qutebrowser's quickmarks file content
2
+ #
3
+ # Usage:
4
+ # ruby script/sample.rb >> ~/.config/qutebrowser/quickmarks
5
+
6
+ require_relative '../lib/zillace'
7
+
8
+ Zillace::Bookmark.each do |bookmark|
9
+ url = bookmark.url or next
10
+ title = bookmark.title or next
11
+ title = title.lines.join(' ')
12
+ puts [title, url].join(' ')
13
+ end
data/sig/zillace.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Zillace
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zillace
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - gemmaro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-12-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby-sqlite3
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Zillace is a database manipulation library for Mozilla Firefox. It reads
28
+ the places.sqlite file under the user's Firefox profile directory.
29
+ email:
30
+ - gemmaro.dev@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".rubocop.yml"
36
+ - CHANGELOG.md
37
+ - Gemfile
38
+ - README.md
39
+ - Rakefile
40
+ - lib/zillace.rb
41
+ - lib/zillace/version.rb
42
+ - manifest.scm
43
+ - script/sample.rb
44
+ - sig/zillace.rbs
45
+ homepage: https://codeberg.org/gemmaro/zillace
46
+ licenses: []
47
+ metadata:
48
+ homepage_uri: https://codeberg.org/gemmaro/zillace
49
+ source_code_uri: https://codeberg.org/gemmaro/zillace.git
50
+ changelog_uri: https://codeberg.org/gemmaro/zillace/src/branch/main/CHANGELOG.md
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '3.1'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubygems_version: 3.3.26
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: Mozilla Firefox places SQLite3 database library
70
+ test_files: []