nquery 0.1.0 → 0.1.2
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 +32 -0
- data/README.md +263 -24
- data/app/assets/builds/nquery/application.css +61 -4
- data/app/assets/builds/nquery/application.js +107 -12
- data/app/controllers/concerns/nquery/breadcrumbs.rb +5 -3
- data/app/controllers/concerns/nquery/chart_actions.rb +1 -0
- data/app/controllers/concerns/nquery/chart_results.rb +17 -3
- data/app/controllers/nquery/admin/data_sources_controller.rb +49 -2
- data/app/controllers/nquery/admin/groups_controller.rb +8 -2
- data/app/controllers/nquery/admin/users_controller.rb +6 -1
- data/app/controllers/nquery/application_controller.rb +45 -28
- data/app/controllers/nquery/dashboards_controller.rb +30 -0
- data/app/controllers/nquery/embed/charts_controller.rb +1 -0
- data/app/controllers/nquery/embed/dashboards_controller.rb +1 -0
- data/app/controllers/nquery/errors_controller.rb +11 -0
- data/app/controllers/nquery/home_controller.rb +1 -0
- data/app/controllers/nquery/onboarding/admins_controller.rb +42 -0
- data/app/controllers/nquery/onboarding/base_controller.rb +27 -0
- data/app/controllers/nquery/onboarding/companies_controller.rb +30 -0
- data/app/controllers/nquery/onboarding/confirmations_controller.rb +48 -0
- data/app/controllers/nquery/onboarding/congrats_controller.rb +15 -0
- data/app/controllers/nquery/queries_controller.rb +0 -1
- data/app/controllers/nquery/sessions_controller.rb +14 -17
- data/app/helpers/nquery/data_sources_helper.rb +13 -0
- data/app/helpers/nquery/groups_helper.rb +19 -0
- data/app/javascript/nquery/controllers/data_source_form_controller.js +25 -0
- data/app/mailers/nquery/application_mailer.rb +7 -0
- data/app/mailers/nquery/devise_mailer.rb +9 -0
- data/app/models/nquery/audit.rb +2 -2
- data/app/models/nquery/collection.rb +1 -1
- data/app/models/nquery/dashboard.rb +1 -1
- data/app/models/nquery/data_source.rb +139 -4
- data/app/models/nquery/organization.rb +38 -0
- data/app/models/nquery/query.rb +8 -0
- data/app/models/nquery/user.rb +45 -10
- data/app/views/nquery/admin/data_sources/_form.html.erb +121 -0
- data/app/views/nquery/admin/data_sources/edit.html.erb +6 -8
- data/app/views/nquery/admin/data_sources/new.html.erb +6 -7
- data/app/views/nquery/admin/groups/_form.html.erb +47 -0
- data/app/views/nquery/admin/groups/edit.html.erb +15 -6
- data/app/views/nquery/admin/groups/index.html.erb +25 -20
- data/app/views/nquery/admin/groups/new.html.erb +6 -6
- data/app/views/nquery/admin/groups/show.html.erb +98 -19
- data/app/views/nquery/admin/logs/index.html.erb +26 -30
- data/app/views/nquery/charts/_builder_form.html.erb +6 -4
- data/app/views/nquery/charts/edit.html.erb +2 -1
- data/app/views/nquery/dashboards/index.html.erb +6 -0
- data/app/views/nquery/dashboards/new.html.erb +34 -0
- data/app/views/nquery/devise_mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/nquery/devise_mailer/confirmation_instructions.text.erb +5 -0
- data/app/views/nquery/errors/internal_server_error.html.erb +10 -0
- data/app/views/nquery/errors/not_found.html.erb +10 -0
- data/app/views/nquery/home/index.html.erb +7 -15
- data/app/views/nquery/onboarding/admins/new.html.erb +21 -0
- data/app/views/nquery/onboarding/companies/new.html.erb +25 -0
- data/app/views/nquery/onboarding/confirmations/show.html.erb +17 -0
- data/app/views/nquery/onboarding/congrats/show.html.erb +11 -0
- data/app/views/nquery/sessions/new.html.erb +8 -9
- data/app/views/nquery/shared/_auth_shell.html.erb +1 -1
- data/app/views/nquery/shared/_topbar.html.erb +0 -4
- data/config/routes.rb +26 -7
- data/db/migrate/20260721000001_create_nquery_tables.rb +1 -1
- data/db/migrate/20260722000001_add_key_to_nquery_data_sources.rb +8 -0
- data/db/migrate/20260722000002_create_nquery_organizations.rb +11 -0
- data/db/migrate/20260722000003_add_devise_to_nquery_users.rb +35 -0
- data/db/migrate/20260722000004_add_onboarding_completed_at_to_nquery_organizations.rb +7 -0
- data/lib/generators/nquery/install_generator.rb +9 -17
- data/lib/nquery/configuration.rb +7 -23
- data/lib/nquery/csv_importer.rb +3 -3
- data/lib/nquery/data_sources/adapter.rb +4 -0
- data/lib/nquery/data_sources/postgresql_adapter.rb +15 -1
- data/lib/nquery/data_sources/rails_adapter.rb +5 -0
- data/lib/nquery/data_sources/syncer.rb +50 -0
- data/lib/nquery/encryption.rb +50 -0
- data/lib/nquery/engine.rb +42 -3
- data/lib/nquery/onboarding/admin_provisioner.rb +40 -0
- data/lib/nquery/onboarding/password_confirmation.rb +46 -0
- data/lib/nquery/onboarding.rb +40 -0
- data/lib/nquery/permissions/resolver.rb +14 -4
- data/lib/nquery/query_runner.rb +5 -9
- data/lib/nquery/readonly_sql.rb +25 -0
- data/lib/nquery/seeder.rb +25 -34
- data/lib/nquery/setup.rb +75 -0
- data/lib/nquery/version.rb +1 -1
- data/lib/nquery.rb +9 -0
- data/lib/tasks/nquery.rake +6 -0
- data/nquery.gemspec +11 -5
- metadata +135 -26
- data/app/controllers/nquery/registrations_controller.rb +0 -31
- data/app/views/nquery/registrations/new.html.erb +0 -34
data/lib/nquery/setup.rb
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Nquery
|
|
4
|
+
class Setup
|
|
5
|
+
ROOT_COLLECTION_NAME = "Our analytics"
|
|
6
|
+
|
|
7
|
+
def self.run!
|
|
8
|
+
new.run!
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run!
|
|
12
|
+
admin_group = ensure_group!("Administrators", "administrators")
|
|
13
|
+
all_users_group = ensure_group!("All Users", "all_users")
|
|
14
|
+
|
|
15
|
+
DataSources::Syncer.call
|
|
16
|
+
|
|
17
|
+
root_collection = Collection.find_or_create_by!(name: ROOT_COLLECTION_NAME, kind: "root")
|
|
18
|
+
data_source = default_data_source
|
|
19
|
+
|
|
20
|
+
seed_permissions!(admin_group, all_users_group, root_collection, data_source)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def ensure_group!(name, system_group, description = nil)
|
|
26
|
+
Group.find_or_create_by!(system_group: system_group) do |group|
|
|
27
|
+
group.name = name
|
|
28
|
+
group.description = description
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def default_data_source
|
|
33
|
+
key = Nquery.configuration.default_data_source.to_s
|
|
34
|
+
DataSource.find_by!(key: key)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def seed_permissions!(admin_group, all_users_group, root_collection, data_source)
|
|
38
|
+
CollectionPermission.find_or_create_by!(group: admin_group, collection: root_collection) do |permission|
|
|
39
|
+
permission.access_level = "curate"
|
|
40
|
+
end
|
|
41
|
+
CollectionPermission.find_or_create_by!(group: all_users_group, collection: root_collection) do |permission|
|
|
42
|
+
permission.access_level = "view"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
[admin_group, all_users_group].each do |group|
|
|
46
|
+
view_level = "can_view"
|
|
47
|
+
create_level = group.system_group == "administrators" ? "query_builder_and_native" : "no"
|
|
48
|
+
|
|
49
|
+
DataPermission.find_or_create_by!(
|
|
50
|
+
group: group,
|
|
51
|
+
data_source: data_source,
|
|
52
|
+
permission_type: "view_data",
|
|
53
|
+
resource_path: nil
|
|
54
|
+
) do |permission|
|
|
55
|
+
permission.access_level = view_level
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
DataPermission.find_or_create_by!(
|
|
59
|
+
group: group,
|
|
60
|
+
data_source: data_source,
|
|
61
|
+
permission_type: "create_queries",
|
|
62
|
+
resource_path: nil
|
|
63
|
+
) do |permission|
|
|
64
|
+
permission.access_level = create_level
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
ApplicationPermission::FEATURES.each do |feature|
|
|
69
|
+
ApplicationPermission.find_or_create_by!(group: admin_group, feature: feature) do |permission|
|
|
70
|
+
permission.access_level = "yes"
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
data/lib/nquery/version.rb
CHANGED
data/lib/nquery.rb
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "turbo-rails"
|
|
4
|
+
require "devise"
|
|
5
|
+
require "devise/orm/active_record"
|
|
4
6
|
|
|
5
7
|
require "nquery/version"
|
|
6
8
|
require "nquery/configuration"
|
|
9
|
+
require "nquery/encryption"
|
|
7
10
|
require "nquery/permissions/resolver"
|
|
8
11
|
require "nquery/authorizes_collection"
|
|
9
12
|
require "nquery/data_sources/adapter"
|
|
@@ -11,11 +14,17 @@ require "nquery/data_sources/rails_adapter"
|
|
|
11
14
|
require "nquery/data_sources/postgresql_adapter"
|
|
12
15
|
require "nquery/data_sources/mysql_adapter"
|
|
13
16
|
require "nquery/data_sources/sqlite_adapter"
|
|
17
|
+
require "nquery/data_sources/syncer"
|
|
18
|
+
require "nquery/readonly_sql"
|
|
14
19
|
require "nquery/query_runner"
|
|
15
20
|
require "nquery/schema_explorer"
|
|
16
21
|
require "nquery/embed_token_service"
|
|
17
22
|
require "nquery/csv_importer"
|
|
18
23
|
require "nquery/sample_data/ecommerce"
|
|
24
|
+
require "nquery/setup"
|
|
25
|
+
require "nquery/onboarding"
|
|
26
|
+
require "nquery/onboarding/admin_provisioner"
|
|
27
|
+
require "nquery/onboarding/password_confirmation"
|
|
19
28
|
require "nquery/seeder"
|
|
20
29
|
require "nquery/engine"
|
|
21
30
|
|
data/lib/tasks/nquery.rake
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
namespace :nquery do
|
|
4
|
+
desc "Provision default groups, data sources, and permissions"
|
|
5
|
+
task setup: :environment do
|
|
6
|
+
Nquery::Setup.run!
|
|
7
|
+
puts "nquery: setup complete"
|
|
8
|
+
end
|
|
9
|
+
|
|
4
10
|
desc "Seed demo data for nquery"
|
|
5
11
|
task seed: :environment do
|
|
6
12
|
Nquery::Seeder.run!
|
data/nquery.gemspec
CHANGED
|
@@ -9,20 +9,23 @@ Gem::Specification.new do |spec|
|
|
|
9
9
|
spec.email = ["hello@nquery.dev"]
|
|
10
10
|
spec.summary = "SQL charts, dashboards, and data visualization for Rails"
|
|
11
11
|
spec.description = "Mountable Rails engine for SQL charts, dashboards, and analytics."
|
|
12
|
-
spec.homepage = "https://github.com/
|
|
12
|
+
spec.homepage = "https://github.com/caiohenrique12/nquery"
|
|
13
13
|
spec.license = "MIT"
|
|
14
14
|
spec.required_ruby_version = ">= 3.2.0"
|
|
15
15
|
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
17
17
|
spec.metadata["source_code_uri"] = spec.homepage
|
|
18
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
19
|
+
spec.metadata["bug_tracker_uri"] = "#{spec.homepage}/issues"
|
|
18
20
|
|
|
19
21
|
spec.files = Dir.chdir(__dir__) do
|
|
20
|
-
Dir["{app,config,db,lib}/**/*", "README.md", "LICENSE", "Rakefile", "nquery.gemspec"]
|
|
22
|
+
Dir["{app,config,db,lib}/**/*", "README.md", "CHANGELOG.md", "LICENSE", "Rakefile", "nquery.gemspec"]
|
|
21
23
|
.reject { |f| f.include?("/templates/") && f.end_with?(".tt") }
|
|
22
24
|
.select { |f| File.file?(f) }
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
spec.add_dependency "rails", ">= 7.1", "< 9"
|
|
28
|
+
spec.add_dependency "devise", ">= 5.0.4", "< 6"
|
|
26
29
|
spec.add_dependency "bcrypt", "~> 3.1"
|
|
27
30
|
spec.add_dependency "csv"
|
|
28
31
|
spec.add_dependency "importmap-rails"
|
|
@@ -32,9 +35,12 @@ Gem::Specification.new do |spec|
|
|
|
32
35
|
|
|
33
36
|
spec.add_development_dependency "rspec-rails", "~> 7.0"
|
|
34
37
|
spec.add_development_dependency "capybara", "~> 3.40"
|
|
35
|
-
spec.add_development_dependency "
|
|
36
|
-
spec.add_development_dependency "sqlite3", "~> 2.0"
|
|
38
|
+
spec.add_development_dependency "sqlite3", ">= 2.9.6", "< 3"
|
|
37
39
|
spec.add_development_dependency "pg", "~> 1.5"
|
|
38
|
-
spec.add_development_dependency "puma", "
|
|
40
|
+
spec.add_development_dependency "puma", ">= 7.2.1", "< 8"
|
|
39
41
|
spec.add_development_dependency "simplecov", "~> 0.22"
|
|
42
|
+
spec.add_development_dependency "rubocop", "~> 1.75"
|
|
43
|
+
spec.add_development_dependency "rubocop-rails-omakase", "~> 1.1"
|
|
44
|
+
spec.add_development_dependency "brakeman", "~> 7.0"
|
|
45
|
+
spec.add_development_dependency "bundler-audit", "~> 0.9"
|
|
40
46
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: nquery
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nquery Contributors
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-07
|
|
11
|
+
date: 2026-09-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -30,6 +30,26 @@ dependencies:
|
|
|
30
30
|
- - "<"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: '9'
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: devise
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 5.0.4
|
|
40
|
+
- - "<"
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '6'
|
|
43
|
+
type: :runtime
|
|
44
|
+
prerelease: false
|
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
+
requirements:
|
|
47
|
+
- - ">="
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 5.0.4
|
|
50
|
+
- - "<"
|
|
51
|
+
- !ruby/object:Gem::Version
|
|
52
|
+
version: '6'
|
|
33
53
|
- !ruby/object:Gem::Dependency
|
|
34
54
|
name: bcrypt
|
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -143,75 +163,129 @@ dependencies:
|
|
|
143
163
|
- !ruby/object:Gem::Version
|
|
144
164
|
version: '3.40'
|
|
145
165
|
- !ruby/object:Gem::Dependency
|
|
146
|
-
name:
|
|
166
|
+
name: sqlite3
|
|
167
|
+
requirement: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: 2.9.6
|
|
172
|
+
- - "<"
|
|
173
|
+
- !ruby/object:Gem::Version
|
|
174
|
+
version: '3'
|
|
175
|
+
type: :development
|
|
176
|
+
prerelease: false
|
|
177
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
178
|
+
requirements:
|
|
179
|
+
- - ">="
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: 2.9.6
|
|
182
|
+
- - "<"
|
|
183
|
+
- !ruby/object:Gem::Version
|
|
184
|
+
version: '3'
|
|
185
|
+
- !ruby/object:Gem::Dependency
|
|
186
|
+
name: pg
|
|
147
187
|
requirement: !ruby/object:Gem::Requirement
|
|
148
188
|
requirements:
|
|
149
189
|
- - "~>"
|
|
150
190
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: '
|
|
191
|
+
version: '1.5'
|
|
152
192
|
type: :development
|
|
153
193
|
prerelease: false
|
|
154
194
|
version_requirements: !ruby/object:Gem::Requirement
|
|
155
195
|
requirements:
|
|
156
196
|
- - "~>"
|
|
157
197
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: '
|
|
198
|
+
version: '1.5'
|
|
159
199
|
- !ruby/object:Gem::Dependency
|
|
160
|
-
name:
|
|
200
|
+
name: puma
|
|
201
|
+
requirement: !ruby/object:Gem::Requirement
|
|
202
|
+
requirements:
|
|
203
|
+
- - ">="
|
|
204
|
+
- !ruby/object:Gem::Version
|
|
205
|
+
version: 7.2.1
|
|
206
|
+
- - "<"
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '8'
|
|
209
|
+
type: :development
|
|
210
|
+
prerelease: false
|
|
211
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
212
|
+
requirements:
|
|
213
|
+
- - ">="
|
|
214
|
+
- !ruby/object:Gem::Version
|
|
215
|
+
version: 7.2.1
|
|
216
|
+
- - "<"
|
|
217
|
+
- !ruby/object:Gem::Version
|
|
218
|
+
version: '8'
|
|
219
|
+
- !ruby/object:Gem::Dependency
|
|
220
|
+
name: simplecov
|
|
161
221
|
requirement: !ruby/object:Gem::Requirement
|
|
162
222
|
requirements:
|
|
163
223
|
- - "~>"
|
|
164
224
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: '
|
|
225
|
+
version: '0.22'
|
|
166
226
|
type: :development
|
|
167
227
|
prerelease: false
|
|
168
228
|
version_requirements: !ruby/object:Gem::Requirement
|
|
169
229
|
requirements:
|
|
170
230
|
- - "~>"
|
|
171
231
|
- !ruby/object:Gem::Version
|
|
172
|
-
version: '
|
|
232
|
+
version: '0.22'
|
|
173
233
|
- !ruby/object:Gem::Dependency
|
|
174
|
-
name:
|
|
234
|
+
name: rubocop
|
|
175
235
|
requirement: !ruby/object:Gem::Requirement
|
|
176
236
|
requirements:
|
|
177
237
|
- - "~>"
|
|
178
238
|
- !ruby/object:Gem::Version
|
|
179
|
-
version: '1.
|
|
239
|
+
version: '1.75'
|
|
180
240
|
type: :development
|
|
181
241
|
prerelease: false
|
|
182
242
|
version_requirements: !ruby/object:Gem::Requirement
|
|
183
243
|
requirements:
|
|
184
244
|
- - "~>"
|
|
185
245
|
- !ruby/object:Gem::Version
|
|
186
|
-
version: '1.
|
|
246
|
+
version: '1.75'
|
|
187
247
|
- !ruby/object:Gem::Dependency
|
|
188
|
-
name:
|
|
248
|
+
name: rubocop-rails-omakase
|
|
189
249
|
requirement: !ruby/object:Gem::Requirement
|
|
190
250
|
requirements:
|
|
191
251
|
- - "~>"
|
|
192
252
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: '
|
|
253
|
+
version: '1.1'
|
|
194
254
|
type: :development
|
|
195
255
|
prerelease: false
|
|
196
256
|
version_requirements: !ruby/object:Gem::Requirement
|
|
197
257
|
requirements:
|
|
198
258
|
- - "~>"
|
|
199
259
|
- !ruby/object:Gem::Version
|
|
200
|
-
version: '
|
|
260
|
+
version: '1.1'
|
|
201
261
|
- !ruby/object:Gem::Dependency
|
|
202
|
-
name:
|
|
262
|
+
name: brakeman
|
|
203
263
|
requirement: !ruby/object:Gem::Requirement
|
|
204
264
|
requirements:
|
|
205
265
|
- - "~>"
|
|
206
266
|
- !ruby/object:Gem::Version
|
|
207
|
-
version: '0
|
|
267
|
+
version: '7.0'
|
|
208
268
|
type: :development
|
|
209
269
|
prerelease: false
|
|
210
270
|
version_requirements: !ruby/object:Gem::Requirement
|
|
211
271
|
requirements:
|
|
212
272
|
- - "~>"
|
|
213
273
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: '0
|
|
274
|
+
version: '7.0'
|
|
275
|
+
- !ruby/object:Gem::Dependency
|
|
276
|
+
name: bundler-audit
|
|
277
|
+
requirement: !ruby/object:Gem::Requirement
|
|
278
|
+
requirements:
|
|
279
|
+
- - "~>"
|
|
280
|
+
- !ruby/object:Gem::Version
|
|
281
|
+
version: '0.9'
|
|
282
|
+
type: :development
|
|
283
|
+
prerelease: false
|
|
284
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
285
|
+
requirements:
|
|
286
|
+
- - "~>"
|
|
287
|
+
- !ruby/object:Gem::Version
|
|
288
|
+
version: '0.9'
|
|
215
289
|
description: Mountable Rails engine for SQL charts, dashboards, and analytics.
|
|
216
290
|
email:
|
|
217
291
|
- hello@nquery.dev
|
|
@@ -219,6 +293,7 @@ executables: []
|
|
|
219
293
|
extensions: []
|
|
220
294
|
extra_rdoc_files: []
|
|
221
295
|
files:
|
|
296
|
+
- CHANGELOG.md
|
|
222
297
|
- LICENSE
|
|
223
298
|
- README.md
|
|
224
299
|
- Rakefile
|
|
@@ -254,21 +329,31 @@ files:
|
|
|
254
329
|
- app/controllers/nquery/dashboards_controller.rb
|
|
255
330
|
- app/controllers/nquery/embed/charts_controller.rb
|
|
256
331
|
- app/controllers/nquery/embed/dashboards_controller.rb
|
|
332
|
+
- app/controllers/nquery/errors_controller.rb
|
|
257
333
|
- app/controllers/nquery/home_controller.rb
|
|
258
334
|
- app/controllers/nquery/imports_controller.rb
|
|
335
|
+
- app/controllers/nquery/onboarding/admins_controller.rb
|
|
336
|
+
- app/controllers/nquery/onboarding/base_controller.rb
|
|
337
|
+
- app/controllers/nquery/onboarding/companies_controller.rb
|
|
338
|
+
- app/controllers/nquery/onboarding/confirmations_controller.rb
|
|
339
|
+
- app/controllers/nquery/onboarding/congrats_controller.rb
|
|
259
340
|
- app/controllers/nquery/queries_controller.rb
|
|
260
|
-
- app/controllers/nquery/registrations_controller.rb
|
|
261
341
|
- app/controllers/nquery/sessions_controller.rb
|
|
262
342
|
- app/helpers/nquery/charts_helper.rb
|
|
263
343
|
- app/helpers/nquery/collections_helper.rb
|
|
264
344
|
- app/helpers/nquery/components_helper.rb
|
|
345
|
+
- app/helpers/nquery/data_sources_helper.rb
|
|
346
|
+
- app/helpers/nquery/groups_helper.rb
|
|
265
347
|
- app/helpers/nquery/home_helper.rb
|
|
266
348
|
- app/helpers/nquery/icon_helper.rb
|
|
267
349
|
- app/helpers/nquery/navigation_helper.rb
|
|
268
350
|
- app/javascript/nquery/controllers/chart_preview_controller.js
|
|
269
351
|
- app/javascript/nquery/controllers/csv_mapper_controller.js
|
|
270
352
|
- app/javascript/nquery/controllers/dashboard_grid_controller.js
|
|
353
|
+
- app/javascript/nquery/controllers/data_source_form_controller.js
|
|
271
354
|
- app/javascript/nquery/controllers/query_editor_controller.js
|
|
355
|
+
- app/mailers/nquery/application_mailer.rb
|
|
356
|
+
- app/mailers/nquery/devise_mailer.rb
|
|
272
357
|
- app/models/nquery/application_permission.rb
|
|
273
358
|
- app/models/nquery/application_record.rb
|
|
274
359
|
- app/models/nquery/audit.rb
|
|
@@ -283,14 +368,17 @@ files:
|
|
|
283
368
|
- app/models/nquery/embed_token.rb
|
|
284
369
|
- app/models/nquery/group.rb
|
|
285
370
|
- app/models/nquery/group_membership.rb
|
|
371
|
+
- app/models/nquery/organization.rb
|
|
286
372
|
- app/models/nquery/query.rb
|
|
287
373
|
- app/models/nquery/user.rb
|
|
288
374
|
- app/views/layouts/nquery/application.html.erb
|
|
289
375
|
- app/views/layouts/nquery/auth.html.erb
|
|
290
376
|
- app/views/layouts/nquery/embed.html.erb
|
|
377
|
+
- app/views/nquery/admin/data_sources/_form.html.erb
|
|
291
378
|
- app/views/nquery/admin/data_sources/edit.html.erb
|
|
292
379
|
- app/views/nquery/admin/data_sources/index.html.erb
|
|
293
380
|
- app/views/nquery/admin/data_sources/new.html.erb
|
|
381
|
+
- app/views/nquery/admin/groups/_form.html.erb
|
|
294
382
|
- app/views/nquery/admin/groups/edit.html.erb
|
|
295
383
|
- app/views/nquery/admin/groups/index.html.erb
|
|
296
384
|
- app/views/nquery/admin/groups/new.html.erb
|
|
@@ -324,14 +412,22 @@ files:
|
|
|
324
412
|
- app/views/nquery/dashboards/_chart_card.html.erb
|
|
325
413
|
- app/views/nquery/dashboards/edit.html.erb
|
|
326
414
|
- app/views/nquery/dashboards/index.html.erb
|
|
415
|
+
- app/views/nquery/dashboards/new.html.erb
|
|
327
416
|
- app/views/nquery/dashboards/show.html.erb
|
|
417
|
+
- app/views/nquery/devise_mailer/confirmation_instructions.html.erb
|
|
418
|
+
- app/views/nquery/devise_mailer/confirmation_instructions.text.erb
|
|
328
419
|
- app/views/nquery/embed/charts/show.html.erb
|
|
329
420
|
- app/views/nquery/embed/dashboards/show.html.erb
|
|
421
|
+
- app/views/nquery/errors/internal_server_error.html.erb
|
|
422
|
+
- app/views/nquery/errors/not_found.html.erb
|
|
330
423
|
- app/views/nquery/home/index.html.erb
|
|
331
424
|
- app/views/nquery/imports/new.html.erb
|
|
425
|
+
- app/views/nquery/onboarding/admins/new.html.erb
|
|
426
|
+
- app/views/nquery/onboarding/companies/new.html.erb
|
|
427
|
+
- app/views/nquery/onboarding/confirmations/show.html.erb
|
|
428
|
+
- app/views/nquery/onboarding/congrats/show.html.erb
|
|
332
429
|
- app/views/nquery/queries/edit.html.erb
|
|
333
430
|
- app/views/nquery/queries/new.html.erb
|
|
334
|
-
- app/views/nquery/registrations/new.html.erb
|
|
335
431
|
- app/views/nquery/sessions/new.html.erb
|
|
336
432
|
- app/views/nquery/shared/_auth_shell.html.erb
|
|
337
433
|
- app/views/nquery/shared/_breadcrumbs.html.erb
|
|
@@ -347,6 +443,10 @@ files:
|
|
|
347
443
|
- db/migrate/20260721180000_add_archived_at_to_nquery_dashboards.rb
|
|
348
444
|
- db/migrate/20260721190000_add_archived_at_to_nquery_charts.rb
|
|
349
445
|
- db/migrate/20260721200000_add_archived_at_to_nquery_collections.rb
|
|
446
|
+
- db/migrate/20260722000001_add_key_to_nquery_data_sources.rb
|
|
447
|
+
- db/migrate/20260722000002_create_nquery_organizations.rb
|
|
448
|
+
- db/migrate/20260722000003_add_devise_to_nquery_users.rb
|
|
449
|
+
- db/migrate/20260722000004_add_onboarding_completed_at_to_nquery_organizations.rb
|
|
350
450
|
- lib/generators/nquery/install_generator.rb
|
|
351
451
|
- lib/nquery.rb
|
|
352
452
|
- lib/nquery/authorizes_collection.rb
|
|
@@ -357,23 +457,32 @@ files:
|
|
|
357
457
|
- lib/nquery/data_sources/postgresql_adapter.rb
|
|
358
458
|
- lib/nquery/data_sources/rails_adapter.rb
|
|
359
459
|
- lib/nquery/data_sources/sqlite_adapter.rb
|
|
460
|
+
- lib/nquery/data_sources/syncer.rb
|
|
360
461
|
- lib/nquery/embed_token_service.rb
|
|
462
|
+
- lib/nquery/encryption.rb
|
|
361
463
|
- lib/nquery/engine.rb
|
|
464
|
+
- lib/nquery/onboarding.rb
|
|
465
|
+
- lib/nquery/onboarding/admin_provisioner.rb
|
|
466
|
+
- lib/nquery/onboarding/password_confirmation.rb
|
|
362
467
|
- lib/nquery/permissions/resolver.rb
|
|
363
468
|
- lib/nquery/query_runner.rb
|
|
469
|
+
- lib/nquery/readonly_sql.rb
|
|
364
470
|
- lib/nquery/sample_data/ecommerce.rb
|
|
365
471
|
- lib/nquery/schema_explorer.rb
|
|
366
472
|
- lib/nquery/seeder.rb
|
|
473
|
+
- lib/nquery/setup.rb
|
|
367
474
|
- lib/nquery/version.rb
|
|
368
475
|
- lib/tasks/nquery.rake
|
|
369
476
|
- nquery.gemspec
|
|
370
|
-
homepage: https://github.com/
|
|
477
|
+
homepage: https://github.com/caiohenrique12/nquery
|
|
371
478
|
licenses:
|
|
372
479
|
- MIT
|
|
373
480
|
metadata:
|
|
374
|
-
homepage_uri: https://github.com/
|
|
375
|
-
source_code_uri: https://github.com/
|
|
376
|
-
|
|
481
|
+
homepage_uri: https://github.com/caiohenrique12/nquery
|
|
482
|
+
source_code_uri: https://github.com/caiohenrique12/nquery
|
|
483
|
+
changelog_uri: https://github.com/caiohenrique12/nquery/blob/main/CHANGELOG.md
|
|
484
|
+
bug_tracker_uri: https://github.com/caiohenrique12/nquery/issues
|
|
485
|
+
post_install_message:
|
|
377
486
|
rdoc_options: []
|
|
378
487
|
require_paths:
|
|
379
488
|
- lib
|
|
@@ -388,8 +497,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
388
497
|
- !ruby/object:Gem::Version
|
|
389
498
|
version: '0'
|
|
390
499
|
requirements: []
|
|
391
|
-
rubygems_version: 3.
|
|
392
|
-
signing_key:
|
|
500
|
+
rubygems_version: 3.5.22
|
|
501
|
+
signing_key:
|
|
393
502
|
specification_version: 4
|
|
394
503
|
summary: SQL charts, dashboards, and data visualization for Rails
|
|
395
504
|
test_files: []
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Nquery
|
|
4
|
-
class RegistrationsController < ApplicationController
|
|
5
|
-
skip_before_action :_authenticate!
|
|
6
|
-
layout "nquery/auth"
|
|
7
|
-
|
|
8
|
-
def new
|
|
9
|
-
redirect_to root_path if current_nquery_user
|
|
10
|
-
@user = User.new
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def create
|
|
14
|
-
@user = User.new(registration_params)
|
|
15
|
-
if @user.save
|
|
16
|
-
@user.ensure_all_users_membership!
|
|
17
|
-
@user.ensure_personal_collection!
|
|
18
|
-
session[:nquery_user_id] = @user.id
|
|
19
|
-
redirect_to root_path, notice: "Welcome to nquery!"
|
|
20
|
-
else
|
|
21
|
-
render :new, status: :unprocessable_content
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def registration_params
|
|
28
|
-
params.require(:user).permit(:email, :first_name, :last_name, :password, :password_confirmation)
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<%= render layout: "nquery/shared/auth_shell",
|
|
2
|
-
locals: {
|
|
3
|
-
title: "Create your account",
|
|
4
|
-
subtitle: "Get started with SQL charts and dashboards in minutes.",
|
|
5
|
-
footer_text: "Already have an account?",
|
|
6
|
-
footer_link: login_path,
|
|
7
|
-
footer_label: "Sign in"
|
|
8
|
-
} do %>
|
|
9
|
-
<%= form_with model: @user, url: signup_path, class: "nq-form nq-auth-form" do |f| %>
|
|
10
|
-
<div class="nq-form-row">
|
|
11
|
-
<%= f.label :email, "Email address" %>
|
|
12
|
-
<%= f.email_field :email, class: "nq-input", required: true, autofocus: true, autocomplete: "email", placeholder: "you@company.com" %>
|
|
13
|
-
</div>
|
|
14
|
-
<div class="nq-form-row nq-auth-form-row-split">
|
|
15
|
-
<div>
|
|
16
|
-
<%= f.label :first_name, "First name" %>
|
|
17
|
-
<%= f.text_field :first_name, class: "nq-input", required: true, autocomplete: "given-name", placeholder: "Jane" %>
|
|
18
|
-
</div>
|
|
19
|
-
<div>
|
|
20
|
-
<%= f.label :last_name, "Last name" %>
|
|
21
|
-
<%= f.text_field :last_name, class: "nq-input", required: true, autocomplete: "family-name", placeholder: "Doe" %>
|
|
22
|
-
</div>
|
|
23
|
-
</div>
|
|
24
|
-
<div class="nq-form-row">
|
|
25
|
-
<%= f.label :password, "Password" %>
|
|
26
|
-
<%= f.password_field :password, class: "nq-input", required: true, autocomplete: "new-password", placeholder: "At least 8 characters" %>
|
|
27
|
-
</div>
|
|
28
|
-
<div class="nq-form-row">
|
|
29
|
-
<%= f.label :password_confirmation, "Confirm password" %>
|
|
30
|
-
<%= f.password_field :password_confirmation, class: "nq-input", required: true, autocomplete: "new-password", placeholder: "Re-enter your password" %>
|
|
31
|
-
</div>
|
|
32
|
-
<%= f.submit "Create account", class: "nq-btn nq-btn-primary nq-btn-block nq-auth-submit" %>
|
|
33
|
-
<% end %>
|
|
34
|
-
<% end %>
|