sugester 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b3eabba82657434848ca0bcfa74ba360e1d48604
4
- data.tar.gz: bc4fd33184a9dc7cd2ec8c3df1cf6e87f438be1b
3
+ metadata.gz: 97350edffd2ec4dba08024b6b6168856c30a2631
4
+ data.tar.gz: 87d5b7a8d8fd8d3e7247ffdddcbdf59b66e30fa1
5
5
  SHA512:
6
- metadata.gz: 4225d3a0623aa4e7c54147dac44b664f981f1ba0febb3efd4a669dbfe09f9c45704fa86a1c1fb7199b0b830c64bc0a665771f2d7e149146e15ee369bc1744cdf
7
- data.tar.gz: ac383f3e177fcd7b476e104d06f04bd6ab2a5cfd3d6a2062c2d584db9e499e89d1eaf99e8d6f5caef3745d9877b3563b1e00c8a965cc915c63dea8abd5e82e40
6
+ metadata.gz: 22fb5a218ee12784c52a356c4159d34f56da8f87d2368e03f9b01cd8c58842afbaaf7b1810d5536fa8c2331ca3fca5108574e52acc437a61197781a1a63380aa
7
+ data.tar.gz: 5dda2c2d0ff4cbf16d26dd2f3ce3476040237f88f89fa244dc8fdbf51f1258fc5fc90ad731aa069cb540654ca1ddf5fa9237a08e8e5a901ac104f6a904afcf36
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sugester (0.4.0)
4
+ sugester (0.5.1)
5
5
  activesupport
6
6
  aws-sdk (~> 2)
7
7
 
@@ -14,12 +14,12 @@ GEM
14
14
  minitest (~> 5.1)
15
15
  thread_safe (~> 0.3, >= 0.3.4)
16
16
  tzinfo (~> 1.1)
17
- aws-sdk (2.5.2)
18
- aws-sdk-resources (= 2.5.2)
19
- aws-sdk-core (2.5.2)
17
+ aws-sdk (2.5.3)
18
+ aws-sdk-resources (= 2.5.3)
19
+ aws-sdk-core (2.5.3)
20
20
  jmespath (~> 1.0)
21
- aws-sdk-resources (2.5.2)
22
- aws-sdk-core (= 2.5.2)
21
+ aws-sdk-resources (2.5.3)
22
+ aws-sdk-core (= 2.5.3)
23
23
  diff-lcs (1.2.5)
24
24
  i18n (0.7.0)
25
25
  jmespath (1.3.1)
@@ -48,6 +48,7 @@ PLATFORMS
48
48
 
49
49
  DEPENDENCIES
50
50
  bundler (~> 1.11)
51
+ minitest (~> 5.1)
51
52
  rake (~> 10.0)
52
53
  rspec
53
54
  sugester!
@@ -1,12 +1,25 @@
1
- require "sugester/version"
2
1
  require 'aws-sdk'
3
2
  require 'active_support/all'
4
3
  require 'digest'
5
4
 
6
5
  module Sugester
7
6
 
7
+ VERSION = "0.5.1"
8
+
9
+ def self.assert(msg, v)
10
+ raise StandardError.new(msg) unless v
11
+ end
12
+ def self.instance_assert(variable_name, variable, *klasses)
13
+ assert(
14
+ "#{variable_name} must be instance of #{klasses.join(" or ")}",
15
+ klasses.reduce(false){|acc, klass| acc || (variable.is_a? klass)}
16
+ )
17
+ end
18
+
8
19
  class SugesterQueue
9
20
 
21
+ private
22
+
10
23
  def self.decrypt(msg)
11
24
  begin
12
25
  cipher = OpenSSL::Cipher.new('AES-128-ECB')
@@ -27,33 +40,77 @@ module Sugester
27
40
  raise "secret corrupted"
28
41
  end
29
42
 
30
- def initialize(secret)
31
- @secret = secret
32
- @sqs = Aws::SQS::Client.new(config(:config))
43
+
44
+ def push(kind, client_id, msg)
45
+ Sugester.assert "unknown kind", MSG_KINDS.include?(kind)
46
+ Sugester.instance_assert "client_id", client_id, Integer
47
+ raw_push msg.merge({client_id: client_id, kind: kind})
33
48
  end
34
49
 
35
- def activity(client_id, activity_name, options = {})
36
- #TODO assert client_id
37
- msg = {
38
- activity: activity_name,
39
- client_id: client_id,
40
- token: config(:token),
41
- prefix: config(:prefix),
42
- }
50
+ def raw_push(msg)
43
51
  #TODO max length
44
52
  @sqs.send_message({
45
53
  queue_url: config(:url),
46
- message_body: msg.to_json,
54
+ message_body: msg.merge({
55
+ token: config(:token),
56
+ prefix: config(:prefix),
57
+ }).to_json,
47
58
  })
48
59
  end
60
+
61
+ MSG_KINDS = [:activity, :property, :payment]
62
+ public
63
+
64
+ def initialize(secret)
65
+ @secret = secret
66
+ @sqs = Aws::SQS::Client.new(config(:config))
67
+ end
68
+
69
+ def activity(client_id, name, options = {})
70
+ Sugester.instance_assert "name", name, String, Symbol
71
+ push :activity, client_id, {name: name}
72
+ end
73
+
74
+ def property(client_id, options)
75
+ options.each do |name, value|
76
+ Sugester.instance_assert "name", name, String, Symbol
77
+ #TODO valid value
78
+ end
79
+ push :property, client_id, {options: options}
80
+ end
81
+
82
+ def payment(client_id, name, price, date_from, date_to)
83
+ Sugester.instance_assert "date_from", date_from, Time
84
+ Sugester.instance_assert "date_to", date_to, Time
85
+ Sugester.instance_assert "price", price, Numeric
86
+ Sugester.instance_assert "name", name, String, Symbol
87
+
88
+ push :payment, client_id, {price: price, from: date_from, to: date_to, name: name}
89
+ end
49
90
  end
50
91
 
51
92
  def self.init_singleton *args
52
93
  @@singleton = SugesterQueue.new *args
53
94
  end
54
95
 
55
- def self.activity *args
56
- @@singleton.activity *args
96
+
97
+ def self.singleton_initialized?
98
+ assert("uninitialized singleton. run Sugester.init_singleton", @@singleton)
99
+ end
100
+
101
+ def self.activity(*args)
102
+ singleton_initialized?
103
+ @@singleton.activity(*args)
104
+ end
105
+
106
+ def self.property(*args)
107
+ singleton_initialized?
108
+ @@singleton.property(*args)
109
+ end
110
+
111
+ def self.payment(*args)
112
+ singleton_initialized?
113
+ @@singleton.payment(*args)
57
114
  end
58
115
 
59
116
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sugester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - marcin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-08-11 00:00:00.000000000 Z
12
+ date: 2016-08-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: minitest
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '5.1'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.1'
56
70
  - !ruby/object:Gem::Dependency
57
71
  name: aws-sdk
58
72
  requirement: !ruby/object:Gem::Requirement
@@ -95,9 +109,6 @@ files:
95
109
  - bin/console
96
110
  - bin/setup
97
111
  - lib/sugester.rb
98
- - lib/sugester/version.rb
99
- - sugester.gemspec
100
- - tasks/rspec.rake
101
112
  homepage: http://rubygems.org/gems/sugester
102
113
  licenses:
103
114
  - MIT
@@ -1,3 +0,0 @@
1
- module Sugester
2
- VERSION = "0.4.0"
3
- end
@@ -1,35 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'sugester/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "sugester"
8
- spec.version = Sugester::VERSION
9
- spec.authors = ["marcin", "mateuszkitlas"]
10
- spec.email = ["dev@sugester.com"]
11
-
12
- spec.summary = %q{Sugester API}
13
- spec.description = %q{Sugester API}
14
- spec.homepage = 'http://rubygems.org/gems/sugester'
15
- spec.license = "MIT"
16
-
17
- # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
- # delete this section to allow pushing this gem to any host.
19
- if spec.respond_to?(:metadata)
20
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
21
- else
22
- raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
23
- end
24
-
25
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
- spec.bindir = "exe"
27
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
- spec.require_paths = ["lib"]
29
-
30
- spec.add_development_dependency "bundler", "~> 1.11"
31
- spec.add_development_dependency "rake", "~> 10.0"
32
- spec.add_development_dependency "rspec"
33
- spec.add_dependency "aws-sdk", '~> 2'
34
- spec.add_dependency 'activesupport'
35
- end
@@ -1,4 +0,0 @@
1
-
2
- require 'rspec/core/rake_task'
3
-
4
- RSpec::Core::RakeTask.new(:spec)