rhosync 2.1.2 → 2.1.3

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/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ ## 2.1.3
2
+ * #4398193 - ping should only send push messages to unique device pin list
3
+ * #13022667 - settings.yml doesn't work for setting external Redis instances
4
+
1
5
  ## 2.1.2
2
6
  * Use server-dir/redis.conf if not found at RedisRunner.prefix (via artemk)
3
7
  * #8471337 - switch client user if it is not equal to current_user
@@ -21,7 +21,6 @@ ROOT_PATH = File.expand_path(File.dirname(__FILE__))
21
21
  Rhosync::Server.disable :run
22
22
  Rhosync::Server.disable :clean_trace
23
23
  Rhosync::Server.enable :raise_errors
24
- Rhosync::Server.set :environment, :development
25
24
  Rhosync::Server.set :secret, '<changeme>'
26
25
  Rhosync::Server.set :root, ROOT_PATH
27
26
  Rhosync::Server.use Rack::Static, :urls => ["/data"], :root => Rhosync::Server.root
@@ -18,7 +18,6 @@ ROOT_PATH = File.expand_path(File.dirname(__FILE__))
18
18
  Rhosync::Server.disable :run
19
19
  Rhosync::Server.disable :clean_trace
20
20
  Rhosync::Server.enable :raise_errors
21
- Rhosync::Server.set :environment, :development
22
21
  Rhosync::Server.set :secret, '<%= @secret %>'
23
22
  Rhosync::Server.set :root, ROOT_PATH
24
23
  Rhosync::Server.use Rack::Static, :urls => ["/data"], :root => Rhosync::Server.root
@@ -7,13 +7,21 @@ module Rhosync
7
7
  # Perform a ping for all clients registered to a user
8
8
  def self.perform(params)
9
9
  user = User.load(params["user_id"])
10
+ device_pins = []
10
11
  user.clients.members.each do |client_id|
11
12
  client = Client.load(client_id,{:source_name => '*'})
12
- params.merge!('device_port' => client.device_port,
13
- 'device_pin' => client.device_pin)
13
+ params.merge!('device_port' => client.device_port, 'device_pin' => client.device_pin)
14
14
  if client.device_type and client.device_type.size > 0 and client.device_pin and client.device_pin.size > 0
15
- klass = Object.const_get(camelize(client.device_type.downcase))
16
- klass.ping(params) if klass
15
+ unless device_pins.include? client.device_pin
16
+ device_pins << client.device_pin
17
+ klass = Object.const_get(camelize(client.device_type.downcase))
18
+ if klass
19
+ params['vibrate'] = params['vibrate'].to_s
20
+ klass.ping(params)
21
+ end
22
+ else
23
+ log "Dropping ping request for client_id '#{client_id}' because it's already in user's device pin list."
24
+ end
17
25
  else
18
26
  log "Skipping ping for non-registered client_id '#{client_id}'..."
19
27
  end
data/lib/rhosync/tasks.rb CHANGED
@@ -88,7 +88,7 @@ namespace :rhosync do
88
88
 
89
89
  task :config do
90
90
  $settings = load_settings(File.join('settings','settings.yml'))
91
- $env = (ENV['RHO_ENV'] || :development).to_sym
91
+ $env = (ENV['RHO_ENV'] || ENV['RACK_ENV'] || :development).to_sym
92
92
  uri = URI.parse($settings[$env][:syncserver])
93
93
  $url = "#{uri.scheme}://#{uri.host}"
94
94
  $url = "#{$url}:#{uri.port}" if uri.port && uri.port != 80
@@ -1,3 +1,3 @@
1
1
  module Rhosync
2
- VERSION = '2.1.2'
2
+ VERSION = '2.1.3'
3
3
  end
data/lib/rhosync.rb CHANGED
@@ -51,7 +51,7 @@ module Rhosync
51
51
  def bootstrap(basedir)
52
52
  config = get_config(basedir)
53
53
  #Load environment
54
- environment = (ENV['RHO_ENV'] || :development).to_sym
54
+ environment = (ENV['RHO_ENV'] || ENV['RACK_ENV'] || :development).to_sym
55
55
  # Initialize Rhosync and Resque
56
56
  Rhosync.base_directory = basedir
57
57
  Rhosync.app_directory = get_setting(config,environment,:app_directory)
@@ -17,11 +17,9 @@ describe "ApiHelper", :shared => true do
17
17
  Rhosync.bootstrap(get_testapp_path) do |rhosync|
18
18
  rhosync.vendor_directory = File.join(rhosync.base_directory,'..','..','..','vendor')
19
19
  end
20
- Rhosync::Server.set(
21
- :environment => :test,
22
- :run => false,
23
- :secret => "secure!"
24
- )
20
+ Rhosync::Server.set :environment, :test
21
+ Rhosync::Server.set :run, false
22
+ Rhosync::Server.set :secret, "secure!"
25
23
  @api_token = User.load('rhoadmin').token_id
26
24
  end
27
25
 
@@ -12,15 +12,15 @@
12
12
 
13
13
  :development:
14
14
  :licensefile: settings/license.key
15
- :iphonecertfile: settings/apple_fake_cert.pem
16
- :iphonepassphrase: certpassword
17
- :iphoneserver: gateway.sandbox.push.apple.com
18
- :iphoneport: 2195
19
15
  :bulk_sync_poll_interval: 3600
20
16
  :redis: localhost:6379
21
17
  :syncserver: http://localhost:9292/application/
22
18
  :test:
23
19
  :licensefile: settings/license.key
20
+ :iphonecertfile: settings/apple_fake_cert.pem
21
+ :iphonepassphrase: certpassword
22
+ :iphoneserver: gateway.sandbox.push.apple.com
23
+ :iphoneport: 2195
24
24
  :bulk_sync_poll_interval: 3600
25
25
  :redis: localhost:6379
26
26
  :syncserver: http://localhost:9292/application/
data/spec/doc/doc_spec.rb CHANGED
@@ -23,11 +23,9 @@ describe "Protocol" do
23
23
  Rhosync.bootstrap(get_testapp_path) do |rhosync|
24
24
  rhosync.vendor_directory = File.join(rhosync.base_directory,'..','..','..','vendor')
25
25
  end
26
- Rhosync::Server.set(
27
- :environment => :test,
28
- :run => false,
29
- :secret => "secure!"
30
- )
26
+ Rhosync::Server.set :environment, :test
27
+ Rhosync::Server.set :run, false
28
+ Rhosync::Server.set :secret, "secure!"
31
29
  end
32
30
 
33
31
  before(:each) do
@@ -41,5 +41,20 @@ describe "PingJob" do
41
41
  PingJob.should_receive(:log).once.with("Skipping ping for non-registered client_id '#{@c.id}'...")
42
42
  lambda { PingJob.perform(params) }.should_not raise_error
43
43
  end
44
+
45
+ it "should drop ping if it's already in user's device pin list" do
46
+ params = {"user_id" => @u.id, "api_token" => @api_token,
47
+ "sources" => [@s.name], "message" => 'hello world',
48
+ "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
49
+
50
+ # another client with the same device pin ...
51
+ @c1 = Client.create(@c_fields,{:source_name => @s_fields[:name]})
52
+ # and yet another one ...
53
+ @c2 = Client.create(@c_fields,{:source_name => @s_fields[:name]})
54
+
55
+ Apple.should_receive(:ping).with({'device_pin' => @c.device_pin, 'device_port' => @c.device_port}.merge!(params))
56
+ PingJob.should_receive(:log).twice.with(/Dropping ping request for client/)
57
+ lambda { PingJob.perform(params) }.should_not raise_error
58
+ end
44
59
 
45
60
  end
data/spec/rhosync_spec.rb CHANGED
@@ -15,7 +15,7 @@ describe "Rhosync" do
15
15
  Rhosync.vendor_directory.should == 'foo'
16
16
  Rhosync.blackberry_bulk_sync.should == false
17
17
  Rhosync.bulk_sync_poll_interval.should == 3600
18
- Rhosync.environment.should == :development
18
+ Rhosync.environment.should == :test
19
19
  Rhosync.stats.should == false
20
20
  App.is_exist?(@test_app_name).should be_true
21
21
  end
@@ -27,6 +27,14 @@ describe "Rhosync" do
27
27
  ENV.delete('RHO_ENV')
28
28
  end
29
29
 
30
+ it "should bootstrap Rhosync with RACK_ENV provided" do
31
+ env = ENV['RACK_ENV'].dup
32
+ ENV['RACK_ENV'] = 'production'
33
+ Rhosync.bootstrap(get_testapp_path)
34
+ Rhosync.environment.should == :production
35
+ ENV['RACK_ENV'] = env
36
+ end
37
+
30
38
  it "should bootstrap with existing app" do
31
39
  app = App.create(:name => @test_app_name)
32
40
  App.should_receive(:load).once.with(@test_app_name).and_return(app)
@@ -18,11 +18,9 @@ describe "Server" do
18
18
  Rhosync.bootstrap(get_testapp_path) do |rhosync|
19
19
  rhosync.vendor_directory = File.join(rhosync.base_directory,'..','..','..','vendor')
20
20
  end
21
- Rhosync::Server.set(
22
- :environment => :test,
23
- :run => false,
24
- :secret => "secure!"
25
- )
21
+ Rhosync::Server.set :environment, :test
22
+ Rhosync::Server.set :run, false
23
+ Rhosync::Server.set :secret, "secure!"
26
24
  Rhosync::Server.use Rack::Static, :urls => ["/data"],
27
25
  :root => File.expand_path(File.join(File.dirname(__FILE__),'..','apps','rhotestapp'))
28
26
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rhosync'
3
3
  include Rhosync
4
+ ENV['RACK_ENV'] = 'test'
4
5
 
5
6
  ERROR = '0_broken_object_id' unless defined? ERROR
6
7
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhosync
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 1
9
- - 2
10
- version: 2.1.2
9
+ - 3
10
+ version: 2.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rhomobile
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-18 00:00:00 -07:00
18
+ date: 2011-05-05 00:00:00 -07:00
19
19
  default_executable: rhosync
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -574,7 +574,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
574
574
  requirements: []
575
575
 
576
576
  rubyforge_project:
577
- rubygems_version: 1.5.0
577
+ rubygems_version: 1.6.2
578
578
  signing_key:
579
579
  specification_version: 3
580
580
  summary: RhoSync Synchronization Framework