parse-stack 1.8.0 → 1.8.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.
- checksums.yaml +4 -4
- data/.solargraph.yml +23 -0
- data/.travis.yml +0 -1
- data/Gemfile +13 -12
- data/Gemfile.lock +88 -51
- data/README.md +2 -4
- data/Rakefile +14 -14
- data/lib/parse/api/aggregate.rb +4 -7
- data/lib/parse/api/all.rb +1 -1
- data/lib/parse/api/analytics.rb +0 -3
- data/lib/parse/api/batch.rb +3 -5
- data/lib/parse/api/cloud_functions.rb +0 -3
- data/lib/parse/api/config.rb +0 -4
- data/lib/parse/api/files.rb +3 -7
- data/lib/parse/api/hooks.rb +4 -8
- data/lib/parse/api/objects.rb +7 -12
- data/lib/parse/api/push.rb +0 -4
- data/lib/parse/api/schema.rb +2 -6
- data/lib/parse/api/server.rb +4 -7
- data/lib/parse/api/sessions.rb +2 -5
- data/lib/parse/api/users.rb +9 -14
- data/lib/parse/client.rb +54 -50
- data/lib/parse/client/authentication.rb +29 -33
- data/lib/parse/client/batch.rb +8 -11
- data/lib/parse/client/body_builder.rb +19 -20
- data/lib/parse/client/caching.rb +23 -28
- data/lib/parse/client/protocol.rb +11 -12
- data/lib/parse/client/request.rb +4 -6
- data/lib/parse/client/response.rb +5 -7
- data/lib/parse/model/acl.rb +14 -12
- data/lib/parse/model/associations/belongs_to.rb +14 -21
- data/lib/parse/model/associations/collection_proxy.rb +328 -329
- data/lib/parse/model/associations/has_many.rb +18 -25
- data/lib/parse/model/associations/has_one.rb +6 -11
- data/lib/parse/model/associations/pointer_collection_proxy.rb +5 -8
- data/lib/parse/model/associations/relation_collection_proxy.rb +5 -9
- data/lib/parse/model/bytes.rb +8 -10
- data/lib/parse/model/classes/installation.rb +2 -4
- data/lib/parse/model/classes/product.rb +2 -5
- data/lib/parse/model/classes/role.rb +3 -5
- data/lib/parse/model/classes/session.rb +2 -5
- data/lib/parse/model/classes/user.rb +20 -16
- data/lib/parse/model/core/actions.rb +31 -46
- data/lib/parse/model/core/builder.rb +6 -6
- data/lib/parse/model/core/errors.rb +0 -1
- data/lib/parse/model/core/fetching.rb +45 -50
- data/lib/parse/model/core/properties.rb +51 -66
- data/lib/parse/model/core/querying.rb +291 -294
- data/lib/parse/model/core/schema.rb +89 -92
- data/lib/parse/model/date.rb +16 -17
- data/lib/parse/model/file.rb +171 -174
- data/lib/parse/model/geopoint.rb +12 -16
- data/lib/parse/model/model.rb +31 -37
- data/lib/parse/model/object.rb +47 -53
- data/lib/parse/model/pointer.rb +177 -176
- data/lib/parse/model/push.rb +8 -10
- data/lib/parse/model/shortnames.rb +1 -2
- data/lib/parse/model/time_zone.rb +3 -5
- data/lib/parse/query.rb +34 -35
- data/lib/parse/query/constraint.rb +4 -6
- data/lib/parse/query/constraints.rb +21 -29
- data/lib/parse/query/operation.rb +8 -11
- data/lib/parse/query/ordering.rb +45 -49
- data/lib/parse/stack.rb +11 -12
- data/lib/parse/stack/generators/rails.rb +28 -30
- data/lib/parse/stack/generators/templates/model.erb +5 -6
- data/lib/parse/stack/generators/templates/model_installation.rb +0 -1
- data/lib/parse/stack/generators/templates/model_role.rb +0 -1
- data/lib/parse/stack/generators/templates/model_session.rb +0 -1
- data/lib/parse/stack/generators/templates/model_user.rb +0 -1
- data/lib/parse/stack/generators/templates/parse.rb +9 -9
- data/lib/parse/stack/generators/templates/webhooks.rb +1 -2
- data/lib/parse/stack/railtie.rb +2 -4
- data/lib/parse/stack/tasks.rb +70 -86
- data/lib/parse/stack/version.rb +1 -1
- data/lib/parse/webhooks.rb +19 -26
- data/lib/parse/webhooks/payload.rb +26 -28
- data/lib/parse/webhooks/registration.rb +23 -31
- data/parse-stack.gemspec +25 -25
- data/parse-stack.png +0 -0
- metadata +13 -7
- data/.github/parse-ruby-sdk.png +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 701000f16067800a6902f767dcff4d0a7c4bda2c1753c4f43de6502fdf67ea1a
|
4
|
+
data.tar.gz: 017677fbcfe5e324b1e0ec0403e3a10309f7bad7c14fd8a273cc01fd461975ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 189fdf3e1570c01622d84d76c4dd646d480c086be67fc24a0280322d642204fae66d513cc91a6fc44bed1eeff0107ee5cd5cb4f7a9236c20a29234cdb234a3b1
|
7
|
+
data.tar.gz: fad384f60dfe9a6c37c06ad4e574e3cd51241f801f91ec0238aa0159e7c0a453fa52f3d967b47e729c038bdf779149b3aee331146963d5288d5880346b3c4a15
|
data/.solargraph.yml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
---
|
2
|
+
include:
|
3
|
+
- "**/*.rb"
|
4
|
+
exclude:
|
5
|
+
- spec/**/*
|
6
|
+
- test/**/*
|
7
|
+
- vendor/**/*
|
8
|
+
- ".bundle/**/*"
|
9
|
+
domains: []
|
10
|
+
reporters:
|
11
|
+
- rubocop
|
12
|
+
- require_not_found
|
13
|
+
require_paths: []
|
14
|
+
max_files: 5000
|
15
|
+
require:
|
16
|
+
- activemodel
|
17
|
+
- faraday
|
18
|
+
- faraday_middleware
|
19
|
+
- moneta
|
20
|
+
- activesupport
|
21
|
+
- rack
|
22
|
+
- active_model_serializers
|
23
|
+
- parallel
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,18 +1,19 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in parse-stack.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :test, :development do
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
11
|
-
gem
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
16
|
-
gem
|
17
|
-
gem
|
7
|
+
gem "dotenv"
|
8
|
+
gem "redis"
|
9
|
+
gem "rake"
|
10
|
+
gem "byebug"
|
11
|
+
gem "minitest"
|
12
|
+
gem "pry"
|
13
|
+
gem "pry-stack_explorer"
|
14
|
+
gem "pry-nav"
|
15
|
+
gem "yard", ">= 0.9.11"
|
16
|
+
gem "redcarpet"
|
17
|
+
gem "solargraph"
|
18
|
+
gem "thin" # for yard server
|
18
19
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,105 +1,141 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
parse-stack (1.8.
|
4
|
+
parse-stack (1.8.1)
|
5
5
|
active_model_serializers (>= 0.9, < 1)
|
6
6
|
activemodel (>= 4.2.1, < 6)
|
7
|
-
activesupport (>= 4.2.1, <
|
7
|
+
activesupport (>= 4.2.1, < 7)
|
8
8
|
faraday (>= 0.8, < 1)
|
9
9
|
faraday_middleware (>= 0.9, < 1)
|
10
10
|
moneta (< 2)
|
11
11
|
parallel (>= 1.6, < 2)
|
12
|
-
rack (< 3)
|
12
|
+
rack (>= 2.0.6, < 3)
|
13
13
|
|
14
14
|
GEM
|
15
15
|
remote: https://rubygems.org/
|
16
16
|
specs:
|
17
|
-
actionpack (5.2.
|
18
|
-
actionview (= 5.2.
|
19
|
-
activesupport (= 5.2.
|
20
|
-
rack (~> 2.0)
|
17
|
+
actionpack (5.2.4.2)
|
18
|
+
actionview (= 5.2.4.2)
|
19
|
+
activesupport (= 5.2.4.2)
|
20
|
+
rack (~> 2.0, >= 2.0.8)
|
21
21
|
rack-test (>= 0.6.3)
|
22
22
|
rails-dom-testing (~> 2.0)
|
23
23
|
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
24
|
-
actionview (5.2.
|
25
|
-
activesupport (= 5.2.
|
24
|
+
actionview (5.2.4.2)
|
25
|
+
activesupport (= 5.2.4.2)
|
26
26
|
builder (~> 3.1)
|
27
27
|
erubi (~> 1.4)
|
28
28
|
rails-dom-testing (~> 2.0)
|
29
29
|
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
30
|
-
active_model_serializers (0.10.
|
31
|
-
actionpack (>= 4.1, < 6)
|
32
|
-
activemodel (>= 4.1, < 6)
|
30
|
+
active_model_serializers (0.10.10)
|
31
|
+
actionpack (>= 4.1, < 6.1)
|
32
|
+
activemodel (>= 4.1, < 6.1)
|
33
33
|
case_transform (>= 0.2)
|
34
34
|
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
35
|
-
activemodel (5.2.
|
36
|
-
activesupport (= 5.2.
|
37
|
-
activesupport (5.2.
|
35
|
+
activemodel (5.2.4.2)
|
36
|
+
activesupport (= 5.2.4.2)
|
37
|
+
activesupport (5.2.4.2)
|
38
38
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
39
39
|
i18n (>= 0.7, < 2)
|
40
40
|
minitest (~> 5.1)
|
41
41
|
tzinfo (~> 1.1)
|
42
|
+
ast (2.4.0)
|
43
|
+
backport (1.1.2)
|
44
|
+
benchmark (0.1.0)
|
42
45
|
binding_of_caller (0.8.0)
|
43
46
|
debug_inspector (>= 0.0.1)
|
44
|
-
builder (3.2.
|
45
|
-
byebug (
|
47
|
+
builder (3.2.4)
|
48
|
+
byebug (11.1.3)
|
46
49
|
case_transform (0.2)
|
47
50
|
activesupport
|
48
51
|
coderay (1.1.2)
|
49
|
-
concurrent-ruby (1.
|
50
|
-
crass (1.0.
|
51
|
-
daemons (1.
|
52
|
+
concurrent-ruby (1.1.6)
|
53
|
+
crass (1.0.6)
|
54
|
+
daemons (1.3.1)
|
52
55
|
debug_inspector (0.0.3)
|
53
|
-
dotenv (2.5
|
54
|
-
|
56
|
+
dotenv (2.7.5)
|
57
|
+
e2mmap (0.1.0)
|
58
|
+
erubi (1.9.0)
|
55
59
|
eventmachine (1.2.7)
|
56
|
-
faraday (0.
|
60
|
+
faraday (0.17.3)
|
57
61
|
multipart-post (>= 1.2, < 3)
|
58
|
-
faraday_middleware (0.
|
62
|
+
faraday_middleware (0.14.0)
|
59
63
|
faraday (>= 0.7.4, < 1.0)
|
60
|
-
i18n (1.
|
64
|
+
i18n (1.8.2)
|
61
65
|
concurrent-ruby (~> 1.0)
|
62
|
-
|
63
|
-
|
66
|
+
jaro_winkler (1.5.4)
|
67
|
+
jsonapi-renderer (0.2.2)
|
68
|
+
loofah (2.5.0)
|
64
69
|
crass (~> 1.0.2)
|
65
70
|
nokogiri (>= 1.5.9)
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
71
|
+
maruku (0.7.3)
|
72
|
+
method_source (0.9.2)
|
73
|
+
mini_portile2 (2.4.0)
|
74
|
+
minitest (5.14.0)
|
75
|
+
moneta (1.3.0)
|
76
|
+
multipart-post (2.1.1)
|
77
|
+
nokogiri (1.10.9)
|
78
|
+
mini_portile2 (~> 2.4.0)
|
79
|
+
parallel (1.19.1)
|
80
|
+
parser (2.7.1.2)
|
81
|
+
ast (~> 2.4.0)
|
82
|
+
pry (0.12.2)
|
75
83
|
coderay (~> 1.1.0)
|
76
|
-
method_source (~> 0.
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
pry-stack_explorer (0.4.9.2)
|
84
|
+
method_source (~> 0.9.0)
|
85
|
+
pry-nav (0.3.0)
|
86
|
+
pry (>= 0.9.10, < 0.13.0)
|
87
|
+
pry-stack_explorer (0.4.9.3)
|
81
88
|
binding_of_caller (>= 0.7)
|
82
89
|
pry (>= 0.9.11)
|
83
|
-
rack (2.
|
90
|
+
rack (2.2.2)
|
84
91
|
rack-test (1.1.0)
|
85
92
|
rack (>= 1.0, < 3)
|
86
93
|
rails-dom-testing (2.0.3)
|
87
94
|
activesupport (>= 4.2.0)
|
88
95
|
nokogiri (>= 1.6)
|
89
|
-
rails-html-sanitizer (1.0
|
90
|
-
loofah (~> 2.
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
96
|
+
rails-html-sanitizer (1.3.0)
|
97
|
+
loofah (~> 2.3)
|
98
|
+
rainbow (3.0.0)
|
99
|
+
rake (13.0.1)
|
100
|
+
redcarpet (3.5.0)
|
101
|
+
redis (4.1.4)
|
102
|
+
reverse_markdown (1.4.0)
|
103
|
+
nokogiri
|
104
|
+
rexml (3.2.4)
|
105
|
+
rubocop (0.82.0)
|
106
|
+
jaro_winkler (~> 1.5.1)
|
107
|
+
parallel (~> 1.10)
|
108
|
+
parser (>= 2.7.0.1)
|
109
|
+
rainbow (>= 2.2.2, < 4.0)
|
110
|
+
rexml
|
111
|
+
ruby-progressbar (~> 1.7)
|
112
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
113
|
+
ruby-progressbar (1.10.1)
|
114
|
+
solargraph (0.39.7)
|
115
|
+
backport (~> 1.1)
|
116
|
+
benchmark
|
117
|
+
bundler (>= 1.17.2)
|
118
|
+
e2mmap
|
119
|
+
jaro_winkler (~> 1.5)
|
120
|
+
maruku (~> 0.7, >= 0.7.3)
|
121
|
+
nokogiri (~> 1.9, >= 1.9.1)
|
122
|
+
parser (~> 2.3)
|
123
|
+
reverse_markdown (~> 1.0, >= 1.0.5)
|
124
|
+
rubocop (~> 0.52)
|
125
|
+
thor (~> 1.0)
|
126
|
+
tilt (~> 2.0)
|
127
|
+
yard (~> 0.9, >= 0.9.24)
|
95
128
|
thin (1.7.2)
|
96
129
|
daemons (~> 1.0, >= 1.0.9)
|
97
130
|
eventmachine (~> 1.0, >= 1.0.4)
|
98
131
|
rack (>= 1, < 3)
|
132
|
+
thor (1.0.1)
|
99
133
|
thread_safe (0.3.6)
|
100
|
-
|
134
|
+
tilt (2.0.10)
|
135
|
+
tzinfo (1.2.7)
|
101
136
|
thread_safe (~> 0.1)
|
102
|
-
|
137
|
+
unicode-display_width (1.7.0)
|
138
|
+
yard (0.9.25)
|
103
139
|
|
104
140
|
PLATFORMS
|
105
141
|
ruby
|
@@ -115,8 +151,9 @@ DEPENDENCIES
|
|
115
151
|
rake
|
116
152
|
redcarpet
|
117
153
|
redis
|
154
|
+
solargraph
|
118
155
|
thin
|
119
156
|
yard (>= 0.9.11)
|
120
157
|
|
121
158
|
BUNDLED WITH
|
122
|
-
1.
|
159
|
+
1.17.3
|
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
|
1
|
+

|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
[Parse Stack](https://github.com/modernistik/parse-stack) is the [Parse Server](http://parseplatform.org/) SDK, REST Client and ORM framework for [Ruby](https://www.ruby-lang.org/en/). It provides a client adapter, a query engine, an object relational mapper (ORM) and a Cloud Code Webhooks rack application.
|
3
|
+
A full featured Active Model ORM and Ruby REST API for Parse-Server. [Parse Stack](https://github.com/modernistik/parse-stack) is the [Parse Server](http://parseplatform.org/) SDK, REST Client and ORM framework for [Ruby](https://www.ruby-lang.org/en/). It provides a client adapter, a query engine, an object relational mapper (ORM) and a Cloud Code Webhooks rack application.
|
6
4
|
|
7
5
|
Below is a [quick start guide](https://github.com/modernistik/parse-stack#overview), but you can also check out the full *[API Reference](https://www.modernistik.com/gems/parse-stack/index.html)* for more detailed information about our Parse Server SDK.
|
8
6
|
|
data/Rakefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "yard"
|
4
|
+
require "rake/testtask"
|
5
5
|
|
6
6
|
Rake::TestTask.new do |t|
|
7
|
-
t.libs <<
|
8
|
-
t.test_files = FileList[
|
7
|
+
t.libs << "lib/parse/stack"
|
8
|
+
t.test_files = FileList["test/lib/**/*_test.rb"]
|
9
9
|
t.warning = false
|
10
10
|
t.verbose = true
|
11
11
|
end
|
@@ -13,22 +13,22 @@ end
|
|
13
13
|
task :default => :test
|
14
14
|
|
15
15
|
task :console do
|
16
|
-
exec
|
16
|
+
exec "./bin/console"
|
17
17
|
end
|
18
18
|
task :c => :console
|
19
19
|
|
20
|
-
desc
|
21
|
-
task
|
22
|
-
exec
|
20
|
+
desc "List undocumented methods"
|
21
|
+
task "yard:stats" do
|
22
|
+
exec "yard stats --list-undoc"
|
23
23
|
end
|
24
24
|
|
25
|
-
desc
|
26
|
-
task
|
27
|
-
exec
|
25
|
+
desc "Start the yard server"
|
26
|
+
task "docs" do
|
27
|
+
exec "rm -rf ./yard && yard server --reload"
|
28
28
|
end
|
29
29
|
|
30
30
|
YARD::Rake::YardocTask.new do |t|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
t.files = ["lib/**/*.rb"] # optional
|
32
|
+
t.options = ["-o", "doc/parse-stack"] # optional
|
33
|
+
t.stats_options = ["--list-undoc"] # optional
|
34
34
|
end
|
data/lib/parse/api/aggregate.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require_relative
|
7
|
-
module Parse
|
4
|
+
require "active_support"
|
5
|
+
require "active_support/core_ext"
|
6
|
+
require_relative "./objects"
|
8
7
|
|
8
|
+
module Parse
|
9
9
|
module API
|
10
10
|
# REST API methods for fetching CRUD operations on Parse objects.
|
11
11
|
module Aggregate
|
@@ -33,7 +33,6 @@ module Parse
|
|
33
33
|
end
|
34
34
|
"#{PATH_PREFIX}#{className}"
|
35
35
|
end
|
36
|
-
|
37
36
|
end
|
38
37
|
|
39
38
|
# Get the API path for this class.
|
@@ -55,8 +54,6 @@ module Parse
|
|
55
54
|
response.parse_class = className if response.present?
|
56
55
|
response
|
57
56
|
end
|
58
|
-
|
59
57
|
end #Aggregate
|
60
58
|
end #API
|
61
|
-
|
62
59
|
end
|
data/lib/parse/api/all.rb
CHANGED
data/lib/parse/api/analytics.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Parse
|
5
|
-
|
6
5
|
module API
|
7
6
|
# Defines the Analytics interface for the Parse REST API
|
8
7
|
module Analytics
|
@@ -14,8 +13,6 @@ module Parse
|
|
14
13
|
def send_analytics(event_name, metrics = {})
|
15
14
|
request :post, "events/#{event_name}", body: metrics
|
16
15
|
end
|
17
|
-
|
18
16
|
end
|
19
17
|
end
|
20
|
-
|
21
18
|
end
|
data/lib/parse/api/batch.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
4
|
+
require "parallel"
|
5
|
+
require "active_support"
|
6
|
+
require "active_support/core_ext"
|
7
7
|
|
8
8
|
module Parse
|
9
|
-
|
10
9
|
module API
|
11
10
|
# Defines the Batch interface for the Parse REST API
|
12
11
|
# @see Parse::BatchOperation
|
@@ -30,7 +29,6 @@ module Parse
|
|
30
29
|
response = request(:post, "batch", body: batch_operations.as_json)
|
31
30
|
response.success? && response.batch? ? response.batch_responses : response
|
32
31
|
end
|
33
|
-
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -2,7 +2,6 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Parse
|
5
|
-
|
6
5
|
module API
|
7
6
|
# Defines the CloudCode interface for the Parse REST API
|
8
7
|
module CloudFunctions
|
@@ -22,8 +21,6 @@ module Parse
|
|
22
21
|
def trigger_job(name, body = {})
|
23
22
|
request :post, "jobs/#{name}", body: body
|
24
23
|
end
|
25
|
-
|
26
24
|
end
|
27
25
|
end
|
28
|
-
|
29
26
|
end
|
data/lib/parse/api/config.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
module Parse
|
5
|
-
|
6
5
|
module API
|
7
6
|
# Defines the Config interface for the Parse REST API
|
8
7
|
module Config
|
@@ -44,9 +43,6 @@ module Parse
|
|
44
43
|
@config.merge!(params) if result && @config.present?
|
45
44
|
result
|
46
45
|
end
|
47
|
-
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|