parse-stack-next 4.5.0 → 5.0.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.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.bundle/config +2 -0
  3. data/.env.sample +17 -3
  4. data/.github/workflows/codeql.yml +44 -0
  5. data/.github/workflows/docs.yml +39 -0
  6. data/.github/workflows/release.yml +32 -0
  7. data/.github/workflows/ruby.yml +8 -6
  8. data/.gitignore +4 -0
  9. data/.vscode/settings.json +3 -0
  10. data/CHANGELOG.md +305 -72
  11. data/Gemfile.lock +10 -3
  12. data/LICENSE.txt +1 -1
  13. data/README.md +190 -219
  14. data/Rakefile +1 -1
  15. data/SECURITY.md +30 -0
  16. data/assets/parse-stack-next-avatar.png +0 -0
  17. data/assets/parse-stack-next-avatar.svg +37 -0
  18. data/assets/parse-stack-next-banner.png +0 -0
  19. data/assets/parse-stack-next-banner.svg +45 -0
  20. data/assets/parse-stack-next-social-preview.png +0 -0
  21. data/docs/atlas_vector_search_guide.md +511 -0
  22. data/docs/client_sdk_guide.md +1320 -0
  23. data/docs/mcp_guide.md +225 -104
  24. data/docs/mongodb_direct_guide.md +21 -4
  25. data/docs/usage_guide.md +585 -0
  26. data/examples/transaction_example.rb +28 -28
  27. data/lib/parse/acl_scope.rb +2 -2
  28. data/lib/parse/agent/mcp_rack_app.rb +184 -16
  29. data/lib/parse/agent/metadata_dsl.rb +16 -16
  30. data/lib/parse/agent/pipeline_validator.rb +28 -1
  31. data/lib/parse/agent/prompts.rb +5 -5
  32. data/lib/parse/agent/tools.rb +287 -14
  33. data/lib/parse/agent.rb +209 -12
  34. data/lib/parse/api/analytics.rb +27 -5
  35. data/lib/parse/api/files.rb +6 -2
  36. data/lib/parse/api/push.rb +21 -4
  37. data/lib/parse/api/server.rb +59 -0
  38. data/lib/parse/api/users.rb +26 -2
  39. data/lib/parse/atlas_search/index_manager.rb +84 -0
  40. data/lib/parse/atlas_search.rb +37 -9
  41. data/lib/parse/cache/pool.rb +88 -0
  42. data/lib/parse/cache/redis.rb +249 -0
  43. data/lib/parse/client/body_builder.rb +94 -0
  44. data/lib/parse/client/caching.rb +109 -9
  45. data/lib/parse/client/response.rb +27 -0
  46. data/lib/parse/client.rb +74 -3
  47. data/lib/parse/console.rb +203 -0
  48. data/lib/parse/embeddings/cohere.rb +484 -0
  49. data/lib/parse/embeddings/fixture.rb +130 -0
  50. data/lib/parse/embeddings/jina.rb +454 -0
  51. data/lib/parse/embeddings/local_http.rb +492 -0
  52. data/lib/parse/embeddings/openai.rb +520 -0
  53. data/lib/parse/embeddings/provider.rb +264 -0
  54. data/lib/parse/embeddings/qwen.rb +431 -0
  55. data/lib/parse/embeddings/voyage.rb +550 -0
  56. data/lib/parse/embeddings.rb +225 -0
  57. data/lib/parse/graphql/scalars.rb +53 -0
  58. data/lib/parse/graphql/type_generator.rb +264 -0
  59. data/lib/parse/graphql.rb +48 -0
  60. data/lib/parse/live_query/client.rb +24 -5
  61. data/lib/parse/live_query/subscription.rb +17 -6
  62. data/lib/parse/live_query.rb +9 -4
  63. data/lib/parse/model/associations/collection_proxy.rb +2 -2
  64. data/lib/parse/model/associations/has_many.rb +32 -1
  65. data/lib/parse/model/associations/has_one.rb +17 -0
  66. data/lib/parse/model/associations/pointer_collection_proxy.rb +3 -3
  67. data/lib/parse/model/classes/user.rb +307 -11
  68. data/lib/parse/model/clp.rb +1 -1
  69. data/lib/parse/model/core/create_lock.rb +14 -2
  70. data/lib/parse/model/core/embed_managed.rb +296 -0
  71. data/lib/parse/model/core/fetching.rb +4 -4
  72. data/lib/parse/model/core/indexing.rb +53 -14
  73. data/lib/parse/model/core/parse_reference.rb +3 -3
  74. data/lib/parse/model/core/properties.rb +70 -1
  75. data/lib/parse/model/core/querying.rb +57 -1
  76. data/lib/parse/model/core/vector_searchable.rb +285 -0
  77. data/lib/parse/model/file.rb +16 -4
  78. data/lib/parse/model/model.rb +26 -10
  79. data/lib/parse/model/object.rb +63 -6
  80. data/lib/parse/model/pointer.rb +16 -2
  81. data/lib/parse/model/shortnames.rb +2 -0
  82. data/lib/parse/model/validations/uniqueness_validator.rb +3 -3
  83. data/lib/parse/model/vector.rb +102 -0
  84. data/lib/parse/mongodb.rb +90 -8
  85. data/lib/parse/pipeline_security.rb +59 -2
  86. data/lib/parse/query/constraints.rb +16 -14
  87. data/lib/parse/query/ordering.rb +1 -1
  88. data/lib/parse/query.rb +137 -64
  89. data/lib/parse/stack/generators/templates/model.erb +2 -2
  90. data/lib/parse/stack/generators/templates/model_installation.rb +1 -1
  91. data/lib/parse/stack/generators/templates/model_role.rb +1 -1
  92. data/lib/parse/stack/generators/templates/model_session.rb +1 -1
  93. data/lib/parse/stack/generators/templates/parse.rb +1 -1
  94. data/lib/parse/stack/generators/templates/webhooks.rb +1 -1
  95. data/lib/parse/stack/version.rb +1 -1
  96. data/lib/parse/stack.rb +375 -73
  97. data/lib/parse/two_factor_auth/user_extension.rb +5 -2
  98. data/lib/parse/vector_search.rb +341 -0
  99. data/parse-stack-next.gemspec +10 -9
  100. data/scripts/docker/docker-compose.test.yml +18 -0
  101. data/scripts/start-parse.sh +6 -0
  102. data/scripts/vector_prototype/create_vector_index.js +105 -0
  103. data/scripts/vector_prototype/fetch_embeddings.py +241 -0
  104. data/scripts/vector_prototype/fixture_manifest.json +9 -0
  105. data/scripts/vector_prototype/query_prototype.rb +84 -0
  106. data/scripts/vector_prototype/run.sh +34 -0
  107. metadata +77 -5
  108. data/parse-stack.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b354266f9fc2d699d75a8ae2c15cbaa278805f895d13f4d62b7968cecdc61678
4
- data.tar.gz: 87977904fe5f826e84fb60945cb6dc71548943293184af9ab734aba5b978bb3d
3
+ metadata.gz: fa424fed1ae3d44678d301ca6fca95d383deda63edfcc645f1bfaafd030a24f3
4
+ data.tar.gz: b96f56fea9dbbeb76650736bee52be70546c02180be8ead3ef0ef392c041884f
5
5
  SHA512:
6
- metadata.gz: 9440647f605498a4b0051d437ea242bda57e10036a3541c5fb88dafefa1975763b04c8a0d9b0a91756b06ba9fb4e0285f32fdbe2e46c8973663bb869e30b8b4f
7
- data.tar.gz: ce24add8f26eeb0e589b747ac4dae546abce69ab8aa74c39a78c96c67b31e9a831606acc8f4600dd37a8f93e37852e59f352003d5417599026b3f5ef3b8f6a9e
6
+ metadata.gz: 1c176aa65bd1694c281f2566e69a554ee2d80d090e69969ee5f26e093d11558bbbcbb6da052b9c56e3b9fe95e9c488657b570bb500bf0e5ed3b3cbd72e9f3da8
7
+ data.tar.gz: 9895c24fdb645b06a1cb799da8ded92dc2a1cb5647d34ea5b0f0fd5bef849ff6768ec16098cb70c7b33a5a53f1773ea5487055f8ad1766ffecfe83a9964548d3
data/.bundle/config CHANGED
@@ -1,2 +1,4 @@
1
1
  ---
2
2
  BUNDLE_FORCE_RUBY_PLATFORM: "true"
3
+ BUNDLE_PATH: "/home/runner/work/parse-stack-next/parse-stack-next/vendor/bundle"
4
+ BUNDLE_DEPLOYMENT: "true"
data/.env.sample CHANGED
@@ -34,11 +34,9 @@ PARSE_MASTER_KEY=myMasterKey
34
34
  # PARSE_TIMEOUT=30
35
35
  # PARSE_REQUIRE_HTTPS=true
36
36
 
37
- # Optional service URLs (only if you split webhooks/config/hooks endpoints):
37
+ # Optional service URLs (only if you split webhooks/hooks endpoints):
38
38
  # PARSE_LIVE_QUERY_URL=
39
- # CONFIG_URL=
40
39
  # HOOKS_URL=
41
- # HYPERDRIVE_URL=
42
40
 
43
41
  # ===========================================================================
44
42
  # Webhooks
@@ -110,3 +108,19 @@ PARSE_MASTER_KEY=myMasterKey
110
108
  # LLM_ENDPOINT=http://localhost:1234/v1
111
109
  # OPENAI_API_KEY=
112
110
  # ANTHROPIC_API_KEY=
111
+
112
+ # ===========================================================================
113
+ # Embedding providers (Parse::Embeddings)
114
+ #
115
+ # Used by `Parse::Embeddings.register(...)` in initializers / tests for the
116
+ # text-only providers shipped in v5.0: OpenAI, Cohere, Voyage, Jina, Qwen.
117
+ # LocalHTTP providers (Ollama, LM Studio, vLLM, self-hosted voyage-4-nano /
118
+ # Qwen3-Embedding) read no env var by default — their api_key (if any) is
119
+ # passed at registration time.
120
+ # ===========================================================================
121
+
122
+ # OPENAI_API_KEY=sk-...
123
+ # COHERE_API_KEY=
124
+ # VOYAGE_API_KEY=pa-...
125
+ # JINA_API_KEY=jina_...
126
+ # DASHSCOPE_API_KEY=sk-... # Alibaba Cloud DashScope (Qwen 3 embeddings)
@@ -0,0 +1,44 @@
1
+ name: "CodeQL Advanced"
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+ schedule:
9
+ - cron: '32 23 * * 1'
10
+
11
+ jobs:
12
+ analyze:
13
+ name: Analyze (${{ matrix.language }})
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ security-events: write
17
+ packages: read
18
+ actions: read
19
+ contents: read
20
+
21
+ strategy:
22
+ fail-fast: false
23
+ matrix:
24
+ include:
25
+ - language: actions
26
+ build-mode: none
27
+ - language: ruby
28
+ build-mode: none
29
+
30
+ steps:
31
+ - name: Checkout repository
32
+ uses: actions/checkout@v4
33
+
34
+ - name: Initialize CodeQL
35
+ uses: github/codeql-action/init@v4
36
+ with:
37
+ languages: ${{ matrix.language }}
38
+ build-mode: ${{ matrix.build-mode }}
39
+ queries: security-extended,security-and-quality
40
+
41
+ - name: Perform CodeQL Analysis
42
+ uses: github/codeql-action/analyze@v4
43
+ with:
44
+ category: "/language:${{matrix.language}}"
@@ -0,0 +1,39 @@
1
+ name: Publish YARD Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ pages: write
11
+ id-token: write
12
+
13
+ concurrency:
14
+ group: pages
15
+ cancel-in-progress: false
16
+
17
+ jobs:
18
+ build:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1.310.0
23
+ with:
24
+ ruby-version: '3.4'
25
+ bundler-cache: true
26
+ - name: Build YARD docs
27
+ run: bundle exec rake yard
28
+ - uses: actions/upload-pages-artifact@v3
29
+ with:
30
+ path: doc/parse-stack-next
31
+ deploy:
32
+ needs: build
33
+ runs-on: ubuntu-latest
34
+ environment:
35
+ name: github-pages
36
+ url: ${{ steps.deployment.outputs.page_url }}
37
+ steps:
38
+ - id: deployment
39
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,32 @@
1
+ name: Release Gem
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ push:
10
+ name: Push to RubyGems
11
+ runs-on: ubuntu-latest
12
+ environment: rubygems
13
+ permissions:
14
+ id-token: write
15
+ contents: read
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ # bundler-cache (next step) writes --local path / --local
20
+ # deployment into the tracked `.bundle/config`, which would leave
21
+ # the working tree dirty and trip `rake release`'s
22
+ # `release:guard_clean` check. Tell git to ignore worktree
23
+ # mutations to this file so guard_clean passes while still
24
+ # letting Bundler resolve vendor/bundle in the next step.
25
+ - run: git update-index --skip-worktree .bundle/config
26
+
27
+ - uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: "3.4"
30
+ bundler-cache: true
31
+
32
+ - uses: rubygems/release-gem@v1
@@ -9,9 +9,12 @@ name: Gem Tests
9
9
 
10
10
  on:
11
11
  push:
12
- branches: [master]
12
+ branches: [main]
13
13
  pull_request:
14
- branches: [master]
14
+ branches: [main]
15
+
16
+ permissions:
17
+ contents: read
15
18
 
16
19
  jobs:
17
20
  test:
@@ -26,11 +29,10 @@ jobs:
26
29
  - name: Set up Ruby
27
30
  # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
31
  # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
- uses: ruby/setup-ruby@v1
30
- # uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
32
+ uses: ruby/setup-ruby@afeafc3d1ab54a631816aba4c914a0081c12ff2f # v1.310.0
31
33
  with:
32
34
  ruby-version: ${{ matrix.ruby }}
33
35
  - name: Install dependencies
34
36
  run: bundle install
35
- - name: Run tests
36
- run: bundle exec rake
37
+ - name: Run unit tests
38
+ run: bundle exec rake test:unit
data/.gitignore CHANGED
@@ -47,3 +47,7 @@ logs
47
47
  !docs/mcp_guide.md
48
48
  !docs/mongodb_direct_guide.md
49
49
  !docs/mongodb_index_optimization_guide.md
50
+ !docs/atlas_vector_search_guide.md
51
+ !docs/usage_guide.md
52
+ !SECURITY.md
53
+ !docs/client_sdk_guide.md
@@ -0,0 +1,3 @@
1
+ {
2
+ "makefile.configureOnOpen": false
3
+ }