Skip to content
This repository was archived by the owner on Dec 1, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,4 @@ bin/config.json
/node_modules
/bin/parse-dashboard-config.json
logs
/.idea/
1 change: 0 additions & 1 deletion .solargraph.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ max_files: 5000
require:
- activemodel
- faraday
- faraday_middleware
- moneta
- activesupport
- rack
Expand Down
95 changes: 47 additions & 48 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
PATH
remote: .
specs:
parse-stack (1.9.1)
active_model_serializers (>= 0.9, < 1)
activemodel (>= 5, < 7)
activesupport (>= 5, < 7)
faraday (< 1)
faraday_middleware (>= 0.9, < 2)
moneta (< 2)
parallel (>= 1.6, < 2)
rack (>= 2.0.6, < 3)
parse-stack (1.10.1)
active_model_serializers (>= 0.9)
activemodel (>= 5)
activesupport (>= 5)
faraday
moneta
parallel (>= 1.6)
rack (>= 2.0.6)

GEM
remote: https://rubygems.org/
specs:
actionpack (6.1.7.1)
actionview (= 6.1.7.1)
activesupport (= 6.1.7.1)
rack (~> 2.0, >= 2.0.9)
actionpack (7.0.5)
actionview (= 7.0.5)
activesupport (= 7.0.5)
rack (~> 2.0, >= 2.2.4)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actionview (6.1.7.1)
activesupport (= 6.1.7.1)
actionview (7.0.5)
activesupport (= 7.0.5)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
Expand All @@ -32,14 +31,13 @@ GEM
activemodel (>= 4.1, < 7.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activemodel (6.1.7.1)
activesupport (= 6.1.7.1)
activesupport (6.1.7.1)
activemodel (7.0.5)
activesupport (= 7.0.5)
activesupport (7.0.5)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
ansi (1.5.0)
binding_of_caller (1.0.0)
debug_inspector (>= 0.0.1)
Expand All @@ -48,38 +46,39 @@ GEM
case_transform (0.2)
activesupport
coderay (1.1.3)
concurrent-ruby (1.1.10)
connection_pool (2.3.0)
concurrent-ruby (1.2.2)
connection_pool (2.4.1)
crass (1.0.6)
daemons (1.4.1)
debug_inspector (1.1.0)
dotenv (2.8.1)
erubi (1.12.0)
eventmachine (1.2.7)
faraday (0.17.6)
multipart-post (>= 1.2, < 3)
faraday_middleware (0.14.0)
faraday (>= 0.7.4, < 1.0)
i18n (1.12.0)
faraday (2.7.5)
faraday-net_http (>= 2.0, < 3.1)
ruby2_keywords (>= 0.0.4)
faraday-net_http (3.0.2)
i18n (1.13.0)
concurrent-ruby (~> 1.0)
jsonapi-renderer (0.2.2)
loofah (2.19.1)
loofah (2.21.3)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
nokogiri (>= 1.12.0)
method_source (1.0.0)
mini_portile2 (2.8.1)
minitest (5.17.0)
minitest-reporters (1.5.0)
mini_portile2 (2.8.2)
minitest (5.18.0)
minitest-reporters (1.6.0)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
moneta (1.5.2)
multipart-post (2.2.3)
nokogiri (1.13.10)
mini_portile2 (~> 2.8.0)
moneta (1.6.0)
nokogiri (1.15.2)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
parallel (1.22.1)
nokogiri (1.15.2-x86_64-darwin)
racc (~> 1.4)
parallel (1.23.0)
pry (0.14.2)
coderay (~> 1.1)
method_source (~> 1.0)
Expand All @@ -89,35 +88,35 @@ GEM
binding_of_caller (~> 1.0)
pry (~> 0.13)
racc (1.6.2)
rack (2.2.6.2)
rack-test (2.0.2)
rack (2.2.7)
rack-test (2.1.0)
rack (>= 1.3)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.5.0)
loofah (~> 2.19, >= 2.19.1)
rake (13.0.6)
redcarpet (3.5.1)
redcarpet (3.6.0)
redis (5.0.6)
redis-client (>= 0.9.0)
redis-client (0.12.1)
redis-client (0.14.1)
connection_pool
ruby-progressbar (1.11.0)
rufo (0.13.0)
thin (1.8.1)
ruby-progressbar (1.13.0)
ruby2_keywords (0.0.5)
rufo (0.16.1)
thin (1.8.2)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0, >= 1.0.4)
rack (>= 1, < 3)
tzinfo (2.0.5)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
webrick (1.7.0)
yard (0.9.28)
webrick (~> 1.7.0)
zeitwerk (2.6.6)
yard (0.9.34)

PLATFORMS
ruby
x86_64-darwin-20
x86_64-darwin-22

DEPENDENCIES
byebug
Expand Down
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,39 @@ data.acl # => ACL({"role:Admin"=>{"read"=>true, "write"=>true}})

For more information about Parse record ACLs, see the documentation at [Security](http://docs.parseplatform.org/rest/guide/#security)

## Builtin parse collections

These classes match parse builtin collections. Do not redeclare them as rails autoloader don't support multiple class declarations. To add properties and methods to these classes, properly reopen them with overrides, using this class_eval method.

First, append this to config/application.rb

```ruby
##
# Don't autoload overrides but preload them instead
overrides = "#{Rails.root}/app/overrides"
Rails.autoloaders.main.ignore(overrides)

config.to_prepare do
Dir.glob("#{overrides}/**/*_override.rb").each do |override|
load override
end
end
```

Then, create the folder app/overrides/models. Create a file named [collection]_override.rb in this folder to reopen one of these classes. Example with the _User collection:

```ruby
# app/overrides/models/user_override.rb
Parse::User.class_eval do
has_many :created_articles, as: :articles, field: :creator

property :first_name
property :last_name
property :picture
end
```


### [Parse::Session](https://www.modernistik.com/gems/parse-stack/Parse/Session.html)
This class represents the data and columns contained in the standard Parse `_Session` collection. You may add additional properties and methods to this class. See [Session API Reference](https://www.modernistik.com/gems/parse-stack/Parse/Session.html). You may call `Parse.use_shortnames!` to use `Session` in addition to `Parse::Session`.

Expand Down
4 changes: 2 additions & 2 deletions lib/parse/api/users.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def update_user(id, body = {}, headers: {}, **opts)
# @return [Parse::Response]
def set_service_auth_data(id, service_name, auth_data, headers: {}, **opts)
body = { authData: { service_name => auth_data } }
update_user(id, body, opts)
update_user(id, body, **opts)
end

# Delete a {Parse::User} record given an objectId.
Expand Down Expand Up @@ -143,7 +143,7 @@ def logout(session_token, headers: {}, **opts)
def signup(username, password, email = nil, body: {}, **opts)
body = body.merge({ username: username, password: password })
body[:email] = email || body[:email]
create_user(body, opts)
create_user(body, **opts)
end
end # Users
end #API
Expand Down
13 changes: 6 additions & 7 deletions lib/parse/client.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
require "faraday"
require "faraday_middleware"
require "active_support"
require "moneta"
require "active_model_serializers"

require "active_support/inflector"
require "active_support/core_ext/object"
require "active_support/core_ext/string"
Expand Down Expand Up @@ -202,8 +201,8 @@ def client(conn = :default)
# @see Parse::Middleware::Caching
# @see Parse::Middleware::Authentication
# @see Parse::Protocol
def setup(opts = {})
@clients[:default] = self.new(opts, &Proc.new)
def setup(opts = {}, &block)
@clients[:default] = self.new(opts, &block)
end
end

Expand Down Expand Up @@ -481,7 +480,7 @@ def request(method, uri = nil, body: nil, query: nil, headers: nil, opts: {})
retry
end
raise
rescue Faraday::Error::ClientError, Net::OpenTimeout => e
rescue Faraday::ClientError, Net::OpenTimeout => e
if _retry_count > 0
warn "[Parse:Retry] Retries remaining #{_retry_count} : #{_request}"
_retry_count -= 1
Expand Down Expand Up @@ -579,9 +578,9 @@ def client
# @yield (see Parse::Client.setup)
# @return (see Parse::Client.setup)
# @see Parse::Client.setup
def self.setup(opts = {})
def self.setup(opts = {}, &block)
if block_given?
Parse::Client.new(opts, &Proc.new)
Parse::Client.new(opts, &block)
else
Parse::Client.new(opts)
end
Expand Down
1 change: 0 additions & 1 deletion lib/parse/client/authentication.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
# frozen_string_literal: true

require "faraday"
require "faraday_middleware"
require "active_support"
require "active_support/core_ext"

Expand Down
8 changes: 4 additions & 4 deletions lib/parse/client/batch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,9 @@ def change_requests
end

# @return [Array]
def each
def each(&block)
return enum_for(:each) unless block_given?
@requests.each(&Proc.new)
@requests.each(&block)
end

# @return [Hash] a formatted payload for the batch request.
Expand Down Expand Up @@ -125,15 +125,15 @@ def error?
# @param segment [Integer] the number of requests to send in each batch. Default 50.
# @return [Array<Parse::Response>] the corresponding set of responses for
# each request in the batch.
def submit(segment = 50)
def submit(segment = 50, &block)
@responses = []
@requests.uniq!(&:signature)
@responses = @requests.each_slice(segment).to_a.threaded_map(2) do |slice|
client.batch_request(BatchOperation.new(slice))
end
@responses.flatten!
#puts "Requests: #{@requests.count} == Response: #{@responses.count}"
@requests.zip(@responses).each(&Proc.new) if block_given?
@requests.zip(@responses).each(&block) if block_given?
@responses
end

Expand Down
3 changes: 1 addition & 2 deletions lib/parse/client/body_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@
# frozen_string_literal: true

require "faraday"
require "faraday_middleware"
require_relative "response"
require_relative "protocol"
require "active_support"
require "active_support/core_ext"
require "active_model_serializers"


module Parse

Expand Down
1 change: 0 additions & 1 deletion lib/parse/client/caching.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
# frozen_string_literal: true

require "faraday"
require "faraday_middleware"
require "moneta"
require_relative "protocol"

Expand Down
4 changes: 2 additions & 2 deletions lib/parse/client/response.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,9 +156,9 @@ def first

# Iterate through each result item.
# @yieldparam [Object] a result entry.
def each
def each(&block)
return enum_for(:each) unless block_given?
results.each(&Proc.new)
results.each(&block)
self
end

Expand Down
20 changes: 10 additions & 10 deletions lib/parse/model/associations/collection_proxy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -328,33 +328,33 @@ def notify_will_change!
end

# Alias for Array#each
def each
def each(&block)
return collection.enum_for(:each) unless block_given?
collection.each &Proc.new
collection.each(&block)
end

# Alias for Array#map
def map
def map(&block)
return collection.enum_for(:map) unless block_given?
collection.map &Proc.new
collection.map(&block)
end

# Alias for Array#select
def select
def select(&block)
return collection.enum_for(:select) unless block_given?
collection.select &Proc.new
collection.select(&block)
end

# Alias for Array#uniq
def uniq
return collection.uniq(&Proc.new) if block_given?
def uniq(&block)
return collection.uniq(&block) if block_given?
return collection.uniq
end

# Alias for Array#uniq!
def uniq!
def uniq!(&block)
notify_will_change!
return collection.uniq!(&Proc.new) if block_given?
return collection.uniq!(&block) if block_given?
return collection.uniq!
end

Expand Down
Loading