parse-stack 1.0.0
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 +7 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +77 -0
- data/LICENSE +20 -0
- data/README.md +1281 -0
- data/Rakefile +12 -0
- data/bin/console +20 -0
- data/bin/server +10 -0
- data/bin/setup +7 -0
- data/lib/parse/api/all.rb +13 -0
- data/lib/parse/api/analytics.rb +16 -0
- data/lib/parse/api/apps.rb +37 -0
- data/lib/parse/api/batch.rb +148 -0
- data/lib/parse/api/cloud_functions.rb +18 -0
- data/lib/parse/api/config.rb +22 -0
- data/lib/parse/api/files.rb +21 -0
- data/lib/parse/api/hooks.rb +68 -0
- data/lib/parse/api/objects.rb +77 -0
- data/lib/parse/api/push.rb +16 -0
- data/lib/parse/api/schemas.rb +25 -0
- data/lib/parse/api/sessions.rb +11 -0
- data/lib/parse/api/users.rb +43 -0
- data/lib/parse/client.rb +225 -0
- data/lib/parse/client/authentication.rb +59 -0
- data/lib/parse/client/body_builder.rb +69 -0
- data/lib/parse/client/caching.rb +103 -0
- data/lib/parse/client/protocol.rb +15 -0
- data/lib/parse/client/request.rb +43 -0
- data/lib/parse/client/response.rb +116 -0
- data/lib/parse/model/acl.rb +182 -0
- data/lib/parse/model/associations/belongs_to.rb +121 -0
- data/lib/parse/model/associations/collection_proxy.rb +202 -0
- data/lib/parse/model/associations/has_many.rb +218 -0
- data/lib/parse/model/associations/pointer_collection_proxy.rb +71 -0
- data/lib/parse/model/associations/relation_collection_proxy.rb +134 -0
- data/lib/parse/model/bytes.rb +50 -0
- data/lib/parse/model/core/actions.rb +499 -0
- data/lib/parse/model/core/properties.rb +377 -0
- data/lib/parse/model/core/querying.rb +100 -0
- data/lib/parse/model/core/schema.rb +92 -0
- data/lib/parse/model/date.rb +50 -0
- data/lib/parse/model/file.rb +127 -0
- data/lib/parse/model/geopoint.rb +98 -0
- data/lib/parse/model/model.rb +120 -0
- data/lib/parse/model/object.rb +347 -0
- data/lib/parse/model/pointer.rb +106 -0
- data/lib/parse/model/push.rb +99 -0
- data/lib/parse/query.rb +378 -0
- data/lib/parse/query/constraint.rb +130 -0
- data/lib/parse/query/constraints.rb +176 -0
- data/lib/parse/query/operation.rb +66 -0
- data/lib/parse/query/ordering.rb +49 -0
- data/lib/parse/stack.rb +11 -0
- data/lib/parse/stack/version.rb +5 -0
- data/lib/parse/webhooks.rb +228 -0
- data/lib/parse/webhooks/payload.rb +115 -0
- data/lib/parse/webhooks/registration.rb +139 -0
- data/parse-stack.gemspec +45 -0
- metadata +340 -0
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/inflector'
|
4
|
+
require 'active_support/core_ext/object'
|
5
|
+
require 'active_model_serializers'
|
6
|
+
|
7
|
+
module Parse
|
8
|
+
|
9
|
+
class Payload
|
10
|
+
include ::ActiveModel::Serializers::JSON
|
11
|
+
attr_accessor :master, :user, :installation_id, :params, :function_name, :object, :trigger_name
|
12
|
+
|
13
|
+
attr_accessor :original, :update, :raw
|
14
|
+
alias_method :installationId, :installation_id
|
15
|
+
alias_method :functionName, :function_name
|
16
|
+
alias_method :triggerName, :trigger_name
|
17
|
+
|
18
|
+
def initialize(hash = {})
|
19
|
+
hash = JSON.parse(hash) if hash.is_a?(String)
|
20
|
+
hash = Hash[hash.map{ |k, v| [k.to_s.underscore.to_sym, v] }]
|
21
|
+
@raw = hash
|
22
|
+
@master = hash[:master]
|
23
|
+
@user = Parse::User.new hash[:user] if hash[:user].present?
|
24
|
+
@installation_id = hash[:installation_id]
|
25
|
+
@params = hash[:params]
|
26
|
+
@function_name = hash[:function_name]
|
27
|
+
@object = hash[:object]
|
28
|
+
@trigger_name = hash[:trigger_name]
|
29
|
+
@original = hash[:original]
|
30
|
+
@update = hash[:update] #it comes as an update hash
|
31
|
+
end
|
32
|
+
|
33
|
+
def function?
|
34
|
+
@function_name.present?
|
35
|
+
end
|
36
|
+
|
37
|
+
def parse_class
|
38
|
+
return nil unless @object.present?
|
39
|
+
@object["className".freeze] || @object[:className]
|
40
|
+
end
|
41
|
+
|
42
|
+
def parse_id
|
43
|
+
return nil unless @object.present?
|
44
|
+
@object["objectId".freeze] || @object[:objectId]
|
45
|
+
end; alias_method :objectId, :parse_id
|
46
|
+
|
47
|
+
def trigger?
|
48
|
+
@trigger_name.present?
|
49
|
+
end
|
50
|
+
|
51
|
+
def before_trigger?
|
52
|
+
before_save? || before_delete?
|
53
|
+
end
|
54
|
+
|
55
|
+
def after_trigger?
|
56
|
+
after_save? || after_delete?
|
57
|
+
end
|
58
|
+
|
59
|
+
def before_save?
|
60
|
+
trigger? && @trigger_name.to_sym == :beforeSave
|
61
|
+
end
|
62
|
+
|
63
|
+
def after_save?
|
64
|
+
trigger? && @trigger_name.to_sym == :afterSave
|
65
|
+
end
|
66
|
+
|
67
|
+
def before_delete?
|
68
|
+
trigger? && @trigger_name.to_sym == :beforeDelete
|
69
|
+
end
|
70
|
+
|
71
|
+
def after_delete?
|
72
|
+
trigger? && @trigger_name.to_sym == :afterDelete
|
73
|
+
end
|
74
|
+
|
75
|
+
def object?
|
76
|
+
trigger? && @object.present?
|
77
|
+
end
|
78
|
+
|
79
|
+
def original_parse_object
|
80
|
+
return nil unless @original.is_a?(Hash)
|
81
|
+
Parse::Object.build(@original)
|
82
|
+
end
|
83
|
+
|
84
|
+
def parse_object(pristine = false)
|
85
|
+
return nil unless object?
|
86
|
+
return Parse::Object.build(@object) if pristine
|
87
|
+
# if its a before trigger, then we build the original object and apply the updates
|
88
|
+
# in order to create a Parse::Object that has the dirty tracking information
|
89
|
+
# if no original is nil, then it means this is a brand new object, so we create
|
90
|
+
# one from the className
|
91
|
+
if before_trigger?
|
92
|
+
# if original is present, then this is a modified object
|
93
|
+
if @original.present? && @original.is_a?(Hash)
|
94
|
+
o = Parse::Object.build @original
|
95
|
+
o.apply_attributes! @object, dirty_track: true
|
96
|
+
return o
|
97
|
+
else #else the object must be new
|
98
|
+
klass = Parse::Object.find_class parse_class
|
99
|
+
# if we have a class, return that with updated changes, otherwise
|
100
|
+
# default to regular object
|
101
|
+
return klass.new(@object || {}) if klass.present?
|
102
|
+
end
|
103
|
+
end
|
104
|
+
Parse::Object.build(@object)
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
def attributes
|
109
|
+
{ master: nil, user: nil, installationId: nil, params: nil,
|
110
|
+
functionName: nil, object: nil, original: nil, update: nil, triggerName: nil }.freeze
|
111
|
+
end
|
112
|
+
|
113
|
+
end # Payload
|
114
|
+
|
115
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
|
2
|
+
module Parse
|
3
|
+
|
4
|
+
module Webhook
|
5
|
+
|
6
|
+
module Registration
|
7
|
+
|
8
|
+
ALLOWED_HOOKS = Parse::API::Hooks::TRIGGER_NAMES + [:function]
|
9
|
+
|
10
|
+
|
11
|
+
def remove_all_functions!
|
12
|
+
|
13
|
+
client.functions.results.each do |f|
|
14
|
+
next unless f["url"].present?
|
15
|
+
client.delete_function f['functionName']
|
16
|
+
puts "[Webhook] Removed function - #{f['functionName']}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove_all_triggers!
|
21
|
+
|
22
|
+
client.triggers.results.each do |f|
|
23
|
+
next unless f["url"].present?
|
24
|
+
triggerName = f["triggerName"]
|
25
|
+
className = f["className"]
|
26
|
+
client.delete_trigger triggerName, className
|
27
|
+
puts "[Webhook] Removed #{f['triggerName']} - #{f['className']}"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
def register_functions!(endpoint)
|
33
|
+
|
34
|
+
unless endpoint.starts_with?('https://')
|
35
|
+
raise "The HOOKS_URL must be https: '#{endpoint}''"
|
36
|
+
end
|
37
|
+
endpoint += '/' unless endpoint.ends_with?('/')
|
38
|
+
functionsMap = {}
|
39
|
+
client.functions.results.each do |f|
|
40
|
+
next unless f["url"].present?
|
41
|
+
functionsMap[ f['functionName'] ] = f["url"]
|
42
|
+
end
|
43
|
+
|
44
|
+
routes.function.keys.each do |functionName|
|
45
|
+
url = endpoint + functionName
|
46
|
+
if functionsMap[functionName].present? #you may need to update
|
47
|
+
next if functionsMap[functionName] == url
|
48
|
+
client.update_function(functionName, url)
|
49
|
+
else
|
50
|
+
client.create_function(functionName, url)
|
51
|
+
end
|
52
|
+
puts "[Webhook] Registered function - #{functionName}"
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
def register_triggers!(endpoint, include_wildcard: false)
|
58
|
+
|
59
|
+
unless endpoint.starts_with?('https://')
|
60
|
+
raise "The HOOKS_URL must be https: '#{endpoint}''"
|
61
|
+
end
|
62
|
+
endpoint += '/' unless endpoint.ends_with?('/')
|
63
|
+
|
64
|
+
current_triggers = {
|
65
|
+
after_save: {},
|
66
|
+
after_delete: {},
|
67
|
+
before_delete: {},
|
68
|
+
before_save: {}
|
69
|
+
}
|
70
|
+
|
71
|
+
client.triggers.each do |t|
|
72
|
+
next unless t["url"].present?
|
73
|
+
trigger_name = t["triggerName".freeze].underscore.to_sym
|
74
|
+
current_triggers[trigger_name] ||= {}
|
75
|
+
current_triggers[trigger_name][ t["className"] ] = t["url"]
|
76
|
+
end
|
77
|
+
|
78
|
+
[:after_save, :after_delete, :before_delete, :before_save].each do |trigger|
|
79
|
+
classNames = routes[trigger].keys.dup
|
80
|
+
if include_wildcard && classNames.include?('*') #then create the list for all classes
|
81
|
+
classNames.delete '*' #delete the wildcard before we expand it
|
82
|
+
classNames = classNames + Parse.registered_classes
|
83
|
+
classNames.uniq!
|
84
|
+
end
|
85
|
+
|
86
|
+
classNames.each do |className|
|
87
|
+
next if className == '*'.freeze
|
88
|
+
url = endpoint + "#{trigger}/#{className}"
|
89
|
+
if current_triggers[trigger][className].present? #then you may need to update
|
90
|
+
next if current_triggers[trigger][className] == url
|
91
|
+
client.update_trigger(trigger, className, url)
|
92
|
+
else
|
93
|
+
client.create_trigger(trigger, className, url)
|
94
|
+
end
|
95
|
+
puts "[Webhook] Registered #{trigger} - #{className}"
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def register_webhook!(trigger, name, url)
|
102
|
+
trigger = trigger.to_s.camelize(:lower).to_sym
|
103
|
+
raise "Invalid hook trigger #{trigger}" unless ALLOWED_HOOKS.include?(trigger)
|
104
|
+
if trigger == :function
|
105
|
+
response = client.fetch_function(name)
|
106
|
+
# if it is either an error (which has no results) or there is a result but
|
107
|
+
# no registered item with a URL (which implies either none registered or only cloud code registered)
|
108
|
+
# then create it.
|
109
|
+
if response.results.none? { |d| d.has_key?("url".freeze) }
|
110
|
+
response = client.create_function(name, url)
|
111
|
+
else
|
112
|
+
# update it
|
113
|
+
response = client.update_function(name, url)
|
114
|
+
end
|
115
|
+
warn "Webhook Registration warning: #{response.result["warning"]}" if response.result.has_key?("warning")
|
116
|
+
warn "Failed to register Cloud function #{name} with #{url}" if response.error?
|
117
|
+
return response
|
118
|
+
else # must be trigger
|
119
|
+
|
120
|
+
response = client.fetch_trigger(trigger, name)
|
121
|
+
# if it is either an error (which has no results) or there is a result but
|
122
|
+
# no registered item with a URL (which implies either none registered or only cloud code registered)
|
123
|
+
# then create it.
|
124
|
+
if response.results.none? { |d| d.has_key?("url".freeze) }
|
125
|
+
# create it
|
126
|
+
response = client.create_trigger(trigger, name, url)
|
127
|
+
else
|
128
|
+
# update it
|
129
|
+
response = client.update_trigger(trigger, name, url)
|
130
|
+
end
|
131
|
+
|
132
|
+
warn "Webhook Registration warning: #{response.result["warning"]}" if response.result.has_key?("warning")
|
133
|
+
warn "Webhook Registration error: #{response.error}" if response.error?
|
134
|
+
return response
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
data/parse-stack.gemspec
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'parse/stack/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "parse-stack"
|
8
|
+
spec.version = Parse::Stack::VERSION
|
9
|
+
spec.authors = ["Anthony Persaud"]
|
10
|
+
spec.email = ["persaud@modernistik.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Ruby Parse SDK Client and Object Relational Mapping stack}
|
13
|
+
spec.description = %q{A Parse Ruby Client, ORM, and Query engine to manage larger scale Parse applications}
|
14
|
+
spec.homepage = "https://github.com/modernistik/parse-stack"
|
15
|
+
spec.license = "Nonstandard"
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
+
# delete this section to allow pushing this gem to any host.
|
18
|
+
# if spec.respond_to?(:metadata)
|
19
|
+
# spec.metadata['allowed_push_host'] = "http://www.modernistik.com"
|
20
|
+
# else
|
21
|
+
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
+
# end
|
23
|
+
|
24
|
+
spec.files = Dir.glob("**/*").reject { |f| f.match(%r{^(test|spec|features)/} ) || f.match(%r{\.gem$}) } # `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = "exe"
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
spec.add_runtime_dependency "activemodel", [">= 4", "< 5"]
|
30
|
+
spec.add_runtime_dependency "activesupport", [">= 4", "< 5"]
|
31
|
+
spec.add_runtime_dependency "active_model_serializers", [">= 0.9", "< 1"]
|
32
|
+
spec.add_runtime_dependency "parallel", [">= 1.6", "< 2"]
|
33
|
+
spec.add_runtime_dependency "faraday", [">= 0.8", "< 1"]
|
34
|
+
spec.add_runtime_dependency "faraday_middleware", [">= 0.9", "< 1"]
|
35
|
+
spec.add_runtime_dependency "moneta", [">= 0.7", "< 1"]
|
36
|
+
spec.add_runtime_dependency "rack", ["< 2"]
|
37
|
+
|
38
|
+
spec.add_development_dependency "bundler", "~> 1"
|
39
|
+
spec.add_development_dependency "rake", "~> 10"
|
40
|
+
spec.add_development_dependency "minitest", "~> 5"
|
41
|
+
spec.add_development_dependency "pry", "< 1"
|
42
|
+
spec.add_development_dependency 'pry-stack_explorer', "< 1"
|
43
|
+
spec.add_development_dependency 'pry-nav', "< 1"
|
44
|
+
|
45
|
+
end
|
metadata
ADDED
@@ -0,0 +1,340 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: parse-stack
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anthony Persaud
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '4'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '5'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '4'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '5'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: active_model_serializers
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.9'
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '1'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0.9'
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '1'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: parallel
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '1.6'
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.6'
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '2'
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: faraday
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.8'
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.8'
|
110
|
+
- - "<"
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '1'
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: faraday_middleware
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.9'
|
120
|
+
- - "<"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '1'
|
123
|
+
type: :runtime
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0.9'
|
130
|
+
- - "<"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '1'
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: moneta
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0.7'
|
140
|
+
- - "<"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '1'
|
143
|
+
type: :runtime
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.7'
|
150
|
+
- - "<"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rack
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "<"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '2'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "<"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '2'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: bundler
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '1'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '1'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rake
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '10'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '10'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: minitest
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '5'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '5'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: pry
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "<"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '1'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "<"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '1'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: pry-stack_explorer
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "<"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '1'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "<"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '1'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: pry-nav
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "<"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '1'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "<"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '1'
|
251
|
+
description: A Parse Ruby Client, ORM, and Query engine to manage larger scale Parse
|
252
|
+
applications
|
253
|
+
email:
|
254
|
+
- persaud@modernistik.com
|
255
|
+
executables: []
|
256
|
+
extensions: []
|
257
|
+
extra_rdoc_files: []
|
258
|
+
files:
|
259
|
+
- Gemfile
|
260
|
+
- Gemfile.lock
|
261
|
+
- LICENSE
|
262
|
+
- README.md
|
263
|
+
- Rakefile
|
264
|
+
- bin/console
|
265
|
+
- bin/server
|
266
|
+
- bin/setup
|
267
|
+
- lib/parse/api/all.rb
|
268
|
+
- lib/parse/api/analytics.rb
|
269
|
+
- lib/parse/api/apps.rb
|
270
|
+
- lib/parse/api/batch.rb
|
271
|
+
- lib/parse/api/cloud_functions.rb
|
272
|
+
- lib/parse/api/config.rb
|
273
|
+
- lib/parse/api/files.rb
|
274
|
+
- lib/parse/api/hooks.rb
|
275
|
+
- lib/parse/api/objects.rb
|
276
|
+
- lib/parse/api/push.rb
|
277
|
+
- lib/parse/api/schemas.rb
|
278
|
+
- lib/parse/api/sessions.rb
|
279
|
+
- lib/parse/api/users.rb
|
280
|
+
- lib/parse/client.rb
|
281
|
+
- lib/parse/client/authentication.rb
|
282
|
+
- lib/parse/client/body_builder.rb
|
283
|
+
- lib/parse/client/caching.rb
|
284
|
+
- lib/parse/client/protocol.rb
|
285
|
+
- lib/parse/client/request.rb
|
286
|
+
- lib/parse/client/response.rb
|
287
|
+
- lib/parse/model/acl.rb
|
288
|
+
- lib/parse/model/associations/belongs_to.rb
|
289
|
+
- lib/parse/model/associations/collection_proxy.rb
|
290
|
+
- lib/parse/model/associations/has_many.rb
|
291
|
+
- lib/parse/model/associations/pointer_collection_proxy.rb
|
292
|
+
- lib/parse/model/associations/relation_collection_proxy.rb
|
293
|
+
- lib/parse/model/bytes.rb
|
294
|
+
- lib/parse/model/core/actions.rb
|
295
|
+
- lib/parse/model/core/properties.rb
|
296
|
+
- lib/parse/model/core/querying.rb
|
297
|
+
- lib/parse/model/core/schema.rb
|
298
|
+
- lib/parse/model/date.rb
|
299
|
+
- lib/parse/model/file.rb
|
300
|
+
- lib/parse/model/geopoint.rb
|
301
|
+
- lib/parse/model/model.rb
|
302
|
+
- lib/parse/model/object.rb
|
303
|
+
- lib/parse/model/pointer.rb
|
304
|
+
- lib/parse/model/push.rb
|
305
|
+
- lib/parse/query.rb
|
306
|
+
- lib/parse/query/constraint.rb
|
307
|
+
- lib/parse/query/constraints.rb
|
308
|
+
- lib/parse/query/operation.rb
|
309
|
+
- lib/parse/query/ordering.rb
|
310
|
+
- lib/parse/stack.rb
|
311
|
+
- lib/parse/stack/version.rb
|
312
|
+
- lib/parse/webhooks.rb
|
313
|
+
- lib/parse/webhooks/payload.rb
|
314
|
+
- lib/parse/webhooks/registration.rb
|
315
|
+
- parse-stack.gemspec
|
316
|
+
homepage: https://github.com/modernistik/parse-stack
|
317
|
+
licenses:
|
318
|
+
- Nonstandard
|
319
|
+
metadata: {}
|
320
|
+
post_install_message:
|
321
|
+
rdoc_options: []
|
322
|
+
require_paths:
|
323
|
+
- lib
|
324
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
325
|
+
requirements:
|
326
|
+
- - ">="
|
327
|
+
- !ruby/object:Gem::Version
|
328
|
+
version: '0'
|
329
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
330
|
+
requirements:
|
331
|
+
- - ">="
|
332
|
+
- !ruby/object:Gem::Version
|
333
|
+
version: '0'
|
334
|
+
requirements: []
|
335
|
+
rubyforge_project:
|
336
|
+
rubygems_version: 2.5.1
|
337
|
+
signing_key:
|
338
|
+
specification_version: 4
|
339
|
+
summary: Ruby Parse SDK Client and Object Relational Mapping stack
|
340
|
+
test_files: []
|