parsecom 0.6.1 → 0.7.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.
- data/lib/parse/push.rb +74 -0
- data/lib/parse/query.rb +10 -2
- data/lib/parse/version.rb +1 -1
- data/lib/parsecom.rb +1 -0
- data/spec/parse_push_spec.rb +67 -0
- metadata +5 -2
data/lib/parse/push.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
module Parse
|
2
|
+
class Push
|
3
|
+
ENDPOINT = 'push'
|
4
|
+
|
5
|
+
attr_accessor :channels
|
6
|
+
|
7
|
+
class <<self
|
8
|
+
def send message_or_opts, opts={}, &block
|
9
|
+
opts[:data] = message_or_opts if message_or_opts.is_a? String
|
10
|
+
raise ArgumentError.new 'data is nil' unless opts[:data]
|
11
|
+
opts[:push_time] = opts[:at] if opts[:at]
|
12
|
+
opts[:where] = opts[:condition] if opts[:condition]
|
13
|
+
|
14
|
+
push = Parse::Push.new opts[:data]
|
15
|
+
push.at opts[:push_time] if opts[:push_time]
|
16
|
+
if opts[:where]
|
17
|
+
if opts[:where].is_a? Proc
|
18
|
+
push.where &opts[:where]
|
19
|
+
else
|
20
|
+
push.where opts[:where]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
push.send &block
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize data={}, parse_client=nil
|
28
|
+
parse_client = data if data.is_a? Parse::Client
|
29
|
+
data = {'alert' => data} if data.is_a? String
|
30
|
+
|
31
|
+
@parse_client = parse_client || Parse::Client.default
|
32
|
+
@channels = []
|
33
|
+
@data = data
|
34
|
+
@query = nil
|
35
|
+
@push_time = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def data= val
|
39
|
+
@data = val.is_a?(String) ? {'alert' => val} : val
|
40
|
+
end
|
41
|
+
|
42
|
+
def where hash=nil, &block
|
43
|
+
@query = Parse::Query.new 'Parse::Notification', @parse_client
|
44
|
+
@query.where hash, &block
|
45
|
+
end
|
46
|
+
|
47
|
+
def push_time= val
|
48
|
+
# TODO: refactoring: use ParseDate?
|
49
|
+
@push_time = val.is_a?(Time) ? val.getutc.iso8601 : val
|
50
|
+
end
|
51
|
+
alias at push_time=
|
52
|
+
|
53
|
+
def to_json
|
54
|
+
raise ArgumentError.new '@data is nil' if @data.empty?
|
55
|
+
|
56
|
+
json = {}
|
57
|
+
json['channels'] = @channels unless @channels.empty?
|
58
|
+
if @query
|
59
|
+
where = @query.where
|
60
|
+
def where.to_json *args; "{#{self.join ','}}" end
|
61
|
+
json['where'] = where
|
62
|
+
end
|
63
|
+
json['push_time'] = @push_time if @push_time
|
64
|
+
json['data'] = @data
|
65
|
+
json.to_json
|
66
|
+
end
|
67
|
+
|
68
|
+
def send opt={}, &block
|
69
|
+
push_time = opt[:push_time] || opt[:at]
|
70
|
+
self.push_time = push_time if push_time
|
71
|
+
@parse_client.call_api :post, ENDPOINT, to_json, &block
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/lib/parse/query.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Parse
|
2
2
|
class Query
|
3
|
-
attr_reader :keys
|
3
|
+
attr_reader :keys, :where
|
4
4
|
attr_accessor :parse_class_name, :parse_client
|
5
5
|
|
6
6
|
def initialize parse_class_name=nil, parse_client=nil
|
@@ -203,7 +203,15 @@ module Parse
|
|
203
203
|
alias greater_that_or_equal_to gte
|
204
204
|
alias not_equal_to ne
|
205
205
|
|
206
|
-
def between range
|
206
|
+
def between *range
|
207
|
+
if range.size == 1 && range.first.is_a?(Range)
|
208
|
+
range = range.first
|
209
|
+
elsif range.size == 2
|
210
|
+
range = range[0]..range[1]
|
211
|
+
else
|
212
|
+
raise ArgumentErrr
|
213
|
+
end
|
214
|
+
|
207
215
|
if range.exclude_end?
|
208
216
|
self.gt(range.begin).lt(range.end)
|
209
217
|
else
|
data/lib/parse/version.rb
CHANGED
data/lib/parsecom.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
# coding:utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'parsecom'
|
4
|
+
|
5
|
+
describe Parse::Push, 'when push' do
|
6
|
+
it 'should send a simple push message' do
|
7
|
+
push = Parse::Push.new
|
8
|
+
push.channels = ['Giants', 'Mets']
|
9
|
+
push.data = 'The Giants won against the Mets 2-3.'
|
10
|
+
push.to_json.should == '{"channels":["Giants","Mets"],"data":{"alert":"The Giants won against the Mets 2-3."}}'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should send a conditional push message' do
|
14
|
+
push = Parse::Push.new
|
15
|
+
push.where 'injuryReports' => true
|
16
|
+
push.data = 'Willie Hayes injured by own pop fly.'
|
17
|
+
push.to_json.should == '{"where":{"injuryReports":true},"data":{"alert":"Willie Hayes injured by own pop fly."}}'
|
18
|
+
|
19
|
+
push = Parse::Push.new
|
20
|
+
push.where 'channels' => 'Giants', 'scores' => true
|
21
|
+
push.data = 'The Giants scored a run! The score is now 2-2.'
|
22
|
+
push.to_json.should == '{"where":{"channels":"Giants","scores":true},"data":{"alert":"The Giants scored a run! The score is now 2-2."}}'
|
23
|
+
=begin
|
24
|
+
TODO:
|
25
|
+
curl -X POST \
|
26
|
+
-H "X-Parse-Application-Id: " \
|
27
|
+
-H "X-Parse-REST-API-Key: " \
|
28
|
+
-H "Content-Type: application/json" \
|
29
|
+
-d '{
|
30
|
+
"where": {
|
31
|
+
"user": {
|
32
|
+
"$inQuery": {
|
33
|
+
"location": {
|
34
|
+
"$nearSphere": {
|
35
|
+
"__type": "GeoPoint",
|
36
|
+
"longitude": -20.0
|
37
|
+
},
|
38
|
+
"$maxDistanceInMiles": 1.0
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
},
|
43
|
+
"data": {
|
44
|
+
"alert": "Free hotdogs at the Parse concession stand!"
|
45
|
+
}
|
46
|
+
}' \
|
47
|
+
https://api.parse.com/1/push
|
48
|
+
=end
|
49
|
+
end
|
50
|
+
|
51
|
+
# it 'should send a customized push message' do
|
52
|
+
# end
|
53
|
+
|
54
|
+
# it 'should send a push message with expiration date' do
|
55
|
+
# end
|
56
|
+
|
57
|
+
# it 'should send a push message with target' do
|
58
|
+
# end
|
59
|
+
|
60
|
+
it 'should send a schedued push message' do
|
61
|
+
push = Parse::Push.new
|
62
|
+
push.where 'user_id' => 'user_123'
|
63
|
+
push.at Time.new(2014, 12, 3, 21, 0, 0, '+09:00')
|
64
|
+
push.data = 'You previously created a reminder for the game today'
|
65
|
+
push.to_json.should == '{"where":{"user_id":"user_123"},"push_time":"2014-12-03T12:00:00Z","data":{"alert":"You previously created a reminder for the game today"}}'
|
66
|
+
end
|
67
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parsecom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-12-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- lib/parse/op/remove.rb
|
97
97
|
- lib/parse/op/remove_relation.rb
|
98
98
|
- lib/parse/pointer.rb
|
99
|
+
- lib/parse/push.rb
|
99
100
|
- lib/parse/query.rb
|
100
101
|
- lib/parse/relation.rb
|
101
102
|
- lib/parse/role.rb
|
@@ -115,6 +116,7 @@ files:
|
|
115
116
|
- spec/parse_client_spec.rb
|
116
117
|
- spec/parse_date_spec.rb
|
117
118
|
- spec/parse_object_spec.rb
|
119
|
+
- spec/parse_push_spec.rb
|
118
120
|
- spec/parse_query_spec.rb
|
119
121
|
- spec/parse_user_spec.rb
|
120
122
|
- spec/spec_helper.rb
|
@@ -155,6 +157,7 @@ test_files:
|
|
155
157
|
- spec/parse_client_spec.rb
|
156
158
|
- spec/parse_date_spec.rb
|
157
159
|
- spec/parse_object_spec.rb
|
160
|
+
- spec/parse_push_spec.rb
|
158
161
|
- spec/parse_query_spec.rb
|
159
162
|
- spec/parse_user_spec.rb
|
160
163
|
- spec/spec_helper.rb
|