cloudrail_si 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +3 -0
  3. data/examples/README.md +3 -0
  4. data/examples/simple/index.rb +11 -0
  5. data/lib/cloudrail_si.rb +41 -0
  6. data/lib/cloudrail_si/RedirectReceivers.rb +40 -0
  7. data/lib/cloudrail_si/Settings.rb +12 -0
  8. data/lib/cloudrail_si/errors/DetailErrors.rb +13 -0
  9. data/lib/cloudrail_si/errors/InternalError.rb +10 -0
  10. data/lib/cloudrail_si/errors/UserError.rb +11 -0
  11. data/lib/cloudrail_si/helpers/Helper.rb +151 -0
  12. data/lib/cloudrail_si/helpers/LimitedReadableStream.rb +55 -0
  13. data/lib/cloudrail_si/helpers/SequenceReadableStream.rb +59 -0
  14. data/lib/cloudrail_si/servicecode/InitSelfTest.rb +92 -0
  15. data/lib/cloudrail_si/servicecode/Interpreter.rb +213 -0
  16. data/lib/cloudrail_si/servicecode/Sandbox.rb +361 -0
  17. data/lib/cloudrail_si/servicecode/VarAddress.rb +11 -0
  18. data/lib/cloudrail_si/servicecode/commands/AwaitCodeRedirect.rb +48 -0
  19. data/lib/cloudrail_si/servicecode/commands/Break.rb +16 -0
  20. data/lib/cloudrail_si/servicecode/commands/CallFunc.rb +26 -0
  21. data/lib/cloudrail_si/servicecode/commands/Clone.rb +18 -0
  22. data/lib/cloudrail_si/servicecode/commands/Concat.rb +22 -0
  23. data/lib/cloudrail_si/servicecode/commands/Conditional.rb +27 -0
  24. data/lib/cloudrail_si/servicecode/commands/Create.rb +56 -0
  25. data/lib/cloudrail_si/servicecode/commands/Delete.rb +21 -0
  26. data/lib/cloudrail_si/servicecode/commands/Get.rb +25 -0
  27. data/lib/cloudrail_si/servicecode/commands/GetMimeType.rb +1005 -0
  28. data/lib/cloudrail_si/servicecode/commands/JumpRel.rb +18 -0
  29. data/lib/cloudrail_si/servicecode/commands/Pull.rb +34 -0
  30. data/lib/cloudrail_si/servicecode/commands/Push.rb +32 -0
  31. data/lib/cloudrail_si/servicecode/commands/Return.rb +16 -0
  32. data/lib/cloudrail_si/servicecode/commands/Set.rb +23 -0
  33. data/lib/cloudrail_si/servicecode/commands/Size.rb +26 -0
  34. data/lib/cloudrail_si/servicecode/commands/ThrowError.rb +17 -0
  35. data/lib/cloudrail_si/servicecode/commands/array/Uint8ToBase64.rb +25 -0
  36. data/lib/cloudrail_si/servicecode/commands/debug/Out.rb +24 -0
  37. data/lib/cloudrail_si/servicecode/commands/hash/md5.rb +29 -0
  38. data/lib/cloudrail_si/servicecode/commands/hash/sha1.rb +30 -0
  39. data/lib/cloudrail_si/servicecode/commands/http/RequestCall.rb +51 -0
  40. data/lib/cloudrail_si/servicecode/commands/json/Parse.rb +40 -0
  41. data/lib/cloudrail_si/servicecode/commands/json/Stringify.rb +21 -0
  42. data/lib/cloudrail_si/servicecode/commands/math/Floor.rb +27 -0
  43. data/lib/cloudrail_si/servicecode/commands/math/MathCombine.rb +35 -0
  44. data/lib/cloudrail_si/servicecode/commands/object/GetKeyArray.rb +21 -0
  45. data/lib/cloudrail_si/servicecode/commands/object/GetKeyValueArrays.rb +29 -0
  46. data/lib/cloudrail_si/servicecode/commands/stream/MakeJoinedStream.rb +38 -0
  47. data/lib/cloudrail_si/servicecode/commands/stream/MakeLimitedStream.rb +23 -0
  48. data/lib/cloudrail_si/servicecode/commands/stream/StreamToString.rb +25 -0
  49. data/lib/cloudrail_si/servicecode/commands/stream/StringToStream.rb +20 -0
  50. data/lib/cloudrail_si/servicecode/commands/string/Base64Encode.rb +42 -0
  51. data/lib/cloudrail_si/servicecode/commands/string/Format.rb +43 -0
  52. data/lib/cloudrail_si/servicecode/commands/string/IndexOf.rb +29 -0
  53. data/lib/cloudrail_si/servicecode/commands/string/LastIndexOf.rb +29 -0
  54. data/lib/cloudrail_si/servicecode/commands/string/Split.rb +29 -0
  55. data/lib/cloudrail_si/servicecode/commands/string/StringTransform.rb +29 -0
  56. data/lib/cloudrail_si/servicecode/commands/string/Substr.rb +30 -0
  57. data/lib/cloudrail_si/servicecode/commands/string/Substring.rb +30 -0
  58. data/lib/cloudrail_si/services/Facebook.rb +528 -0
  59. data/lib/cloudrail_si/services/FacebookPage.rb +310 -0
  60. data/lib/cloudrail_si/services/Foursquare.rb +314 -0
  61. data/lib/cloudrail_si/services/GitHub.rb +354 -0
  62. data/lib/cloudrail_si/services/GooglePlaces.rb +309 -0
  63. data/lib/cloudrail_si/services/GooglePlus.rb +367 -0
  64. data/lib/cloudrail_si/services/Instagram.rb +342 -0
  65. data/lib/cloudrail_si/services/LinkedIn.rb +363 -0
  66. data/lib/cloudrail_si/services/MicrosoftLive.rb +346 -0
  67. data/lib/cloudrail_si/services/Nexmo.rb +173 -0
  68. data/lib/cloudrail_si/services/Slack.rb +318 -0
  69. data/lib/cloudrail_si/services/Twilio.rb +173 -0
  70. data/lib/cloudrail_si/services/Twitter.rb +795 -0
  71. data/lib/cloudrail_si/services/Yahoo.rb +408 -0
  72. data/lib/cloudrail_si/services/Yelp.rb +389 -0
  73. data/lib/cloudrail_si/statistics/Statistics.rb +125 -0
  74. data/lib/cloudrail_si/types/Address.rb +9 -0
  75. data/lib/cloudrail_si/types/Charge.rb +33 -0
  76. data/lib/cloudrail_si/types/CloudMetaData.rb +19 -0
  77. data/lib/cloudrail_si/types/CreditCard.rb +76 -0
  78. data/lib/cloudrail_si/types/Date.rb +49 -0
  79. data/lib/cloudrail_si/types/DateOfBirth.rb +16 -0
  80. data/lib/cloudrail_si/types/Error.rb +21 -0
  81. data/lib/cloudrail_si/types/Location.rb +8 -0
  82. data/lib/cloudrail_si/types/POI.rb +17 -0
  83. data/lib/cloudrail_si/types/Refund.rb +25 -0
  84. data/lib/cloudrail_si/types/SandboxObject.rb +20 -0
  85. data/lib/cloudrail_si/types/SpaceAllocation.rb +13 -0
  86. data/lib/cloudrail_si/types/Subscription.rb +27 -0
  87. data/lib/cloudrail_si/types/SubscriptionPlan.rb +26 -0
  88. data/lib/cloudrail_si/types/Types.rb +43 -0
  89. data/lib/cloudrail_si/version.rb +3 -0
  90. metadata +205 -0
@@ -0,0 +1,125 @@
1
+ require_relative '../Settings'
2
+ require_relative '../helpers/Helper'
3
+ require_relative '../servicecode/InitSelfTest'
4
+ require_relative '../servicecode/Interpreter'
5
+ require_relative '../servicecode/Sandbox'
6
+
7
+ module CloudRailSi
8
+ module ServiceCode
9
+ class Statistics
10
+ class << self
11
+ @@CR_VERSION = @get_cr_ver
12
+ @@SERVER_URL = 'https://developers.cloudrail.com/api/entries'
13
+ @@next = 1
14
+ @@count = 0
15
+ @@data = {}
16
+ @@entry_id = nil
17
+
18
+ def add_call(service, method)
19
+ message = 'A valid CloudRail license key is required. You can get one for free at https://developers.cloudrail.com'
20
+ keyMatch = /^[a-f\d]{24}$/i
21
+ r = Regexp.new(keyMatch).freeze
22
+ raise message if (!Settings.license_key || !Settings.license_key.match(r))
23
+
24
+ calls = get_method_calls(service, method)
25
+ calls['count'] += 1
26
+
27
+ @@count += 1
28
+ if (@@count === @@next)
29
+ @@next *= 2
30
+ end
31
+ send_statistics()
32
+ end
33
+
34
+ def add_error(service, method)
35
+ calls = get_method_calls(service, method)
36
+ calls['error'] += 1
37
+ end
38
+
39
+ def send_statistics
40
+ begin
41
+ return if (@@count == 0)
42
+
43
+ body = {
44
+ data: @@data
45
+ }
46
+
47
+ if (@@entry_id)
48
+ body.id = @@entry_id
49
+ else
50
+ mac = InitSelfTest.get_mac
51
+ app = InitSelfTest.get_name_version
52
+ client = {
53
+ 'os' => InitSelfTest.get_os
54
+ }
55
+
56
+ app_hash = hash_string([app['name'], app['version']].to_json)
57
+ client_hash = hash_string([mac, client['os']].to_json)
58
+
59
+ body['app'] = app
60
+ body['client'] = client
61
+ body['appKey'] = Settings.license_key unless (Settings.license_key.nil?)
62
+ body['libraryVersion'] = @@CR_VERSION
63
+ body['appHash'] = app_hash
64
+ body['clientHash'] = client_hash
65
+ body['platform'] = "Ruby"
66
+
67
+ res = Helper.make_request(
68
+ @@SERVER_URL,
69
+ { "Content-Type" => "application/json" },
70
+ Helper.streamify_string(body.to_json, nil),
71
+ "POST")
72
+ raise StandardError.new("Unexpected response when sending stats: #{res.code}") if (res.code != '200')
73
+ res_str = Helper.dump_stream(res.body)
74
+ if !@@entry_id
75
+ obj = JSON.parse(res_str)
76
+ @@entry_id = obj.id
77
+ end
78
+ @@data = {}
79
+ @@count = 0
80
+ end
81
+ rescue => ex
82
+ Helper.log(ex)
83
+ end
84
+ end
85
+
86
+ def get_method_calls(service, method)
87
+ @@data[service] = @@data[service] || {}
88
+ calls_to_service = @@data[service]
89
+ if (!calls_to_service[method])
90
+ calls_to_service[method] = {
91
+ 'count' => 0,
92
+ 'error' => 0
93
+ }
94
+ end
95
+
96
+ calls_to_service[method]
97
+ end
98
+
99
+ def hash_string(str)
100
+ service_code = {
101
+ "hashString" => [
102
+ ["hash.md5", "$L0", "$P1"],
103
+ ["size", "$L1", "$L0"],
104
+ ["set", "$L2", 0],
105
+ ["set", "$P0", ""],
106
+ ["get", "$L3", "$L0", "$L2"],
107
+ ["string.format", "$L4", "%02X", "$L3"],
108
+ ["string.concat", "$P0", "$P0", "$L4"],
109
+ ["math.add", "$L2", "$L2", 1],
110
+ ["if>=than", "$L2", "$L1", -5]
111
+ ]
112
+ }
113
+
114
+ interpreter = Interpreter.new(Sandbox.new(service_code, [], {}))
115
+ interpreter.call_function_sync("hashString", nil, str)
116
+ interpreter.get_parameter(0)
117
+ end
118
+
119
+ def get_cr_ver
120
+ Cloudrail::VERSION
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,9 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class Address < SandboxObject
6
+ attr_reader :country, :city, :state, :line1, :line2, :postalCode
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,33 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class Charge < SandboxObject
6
+ attr_reader :amount, :created, :currency, :id, :refunded, :source, :status
7
+
8
+ def initialize(amount, created, currency, id, refunded, source, status)
9
+ super()
10
+ @amount = amount
11
+ @created = created
12
+ @currency = currency.upcase
13
+ @id = id
14
+ @refunded = !!refunded
15
+ @source = source
16
+ @status = status
17
+
18
+ @currency = currency.upcase
19
+ @refunded = !!refunded
20
+
21
+ if (currency.nil? || id.nil? || source.nil? || status.nil? || refunded.nil?)
22
+ raise Errors::IllegalArgumentError.new('One or more parameters are nil.')
23
+ elsif (amount < 0)
24
+ raise Errors::IllegalArgumentError.new('The amount can not be less than 0.')
25
+ elsif (currency.length != 3)
26
+ raise Errors::IllegalArgumentError.new('The passed currency is invalid.')
27
+ elsif (["pending", "succeeded", "failed"].index(status) < 0)
28
+ raise Errors::IllegalArgumentError.new("The passed state should be one of: 'pending', 'succeeded' or 'failed'.")
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class CloudMetaData < SandboxObject
6
+ attr_accessor :folder, :name, :path, :size, :modified_at
7
+
8
+ def to_s
9
+ s = ""
10
+ s += "name -> #{@name}\n"
11
+ s += "path -> #{@path}\n"
12
+ s += "size -> #{@size}\n"
13
+ s += "folder -> #{@folder}\n"
14
+ s += "modified_at -> #{@modified_at}"
15
+ return s
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,76 @@
1
+ require_relative './SandboxObject'
2
+ require_relative './Address'
3
+ require_relative '../errors/DetailErrors'
4
+ require_relative './Types'
5
+ require_relative '../errors/InternalError'
6
+ require_relative '../helpers/Helper'
7
+
8
+ module CloudRailSi
9
+ module Types
10
+ class CreditCard < SandboxObject
11
+ include Comparable
12
+
13
+ attr_accessor :expire_month, :expire_year, :number, :type, :address, :firstName, :lastName, :cvc
14
+
15
+ def initialize(cvc, expire_month, expire_year, number, type, first_name, last_name, address)
16
+ super()
17
+ @cvc = cvc
18
+ @expire_month = expire_month
19
+ @expire_year = expire_year
20
+ @number = number
21
+ @type = type
22
+ @firstName = first_name
23
+ @lastName = last_name
24
+ @address = address
25
+ end
26
+
27
+ def expire_month=(value)
28
+ raise Errors::IllegalArgumentError.new('Expiration month shouldn''t be nil') if value.nil?
29
+ raise Errors::IllegalArgumentError.new('Expiration month needs to be between 1 and 12.') if (value <= 0 || value > 12)
30
+ @expire_month = value
31
+ end
32
+
33
+ def expire_year=(value)
34
+ raise Errors::IllegalArgumentError.new('Expiration year shouldn''t be nil') if (value.nil?)
35
+ raise Errors::IllegalArgumentError.new('Expiration year needs to be a four digit number.') if ((value < 1970) || (value.to_s.length != 4))
36
+ @expire_year = value
37
+ end
38
+
39
+ def number=(value)
40
+ raise Errors::IllegalArgumentError.new('Card number is not allowed to be nil.') if (value.nil?)
41
+ @number = value
42
+ end
43
+
44
+ def type=(value)
45
+ raise Errors::IllegalArgumentError.new('Card type is not allowed to be nil.') if (value.nil?)
46
+ raise Errors::IllegalArgumentError.new('Unknown card type. Allowed values are: ''visa'', ''mastercard'', ''discover'' or ''amex''.') if (['visa', 'mastercard', 'discover', 'amex'].index(value) < 0)
47
+ this._type = value
48
+ end
49
+
50
+ def <=> (obj)
51
+ raise Errors::InternalError.new('CreditCards must only be compared with other non-nil CreditCards') if (obj.nil? || !(obj.instance_of?(CreditCard)))
52
+
53
+ another = obj
54
+
55
+ compare = CloudRailSi::ServiceCode::Helper.compare(@firstName, another.firstName)
56
+ return compare if (compare)
57
+
58
+ compare = CloudRailSi::ServiceCode::Helper.compare(@lastName, another.lastName)
59
+ return compare if (compare)
60
+
61
+ compare = CloudRailSi::ServiceCode::Helper.compare(@number.substring[12..-1], another.number[12..-1])
62
+ return compare if (compare)
63
+
64
+ compare = CloudRailSi::ServiceCode::Helper.compare(@expire_month, another.expire_month)
65
+ return compare if (compare)
66
+
67
+ compare = CloudRailSi::ServiceCode::Helper.compare(@expire_year, another.expire_year)
68
+ return compare if (compare)
69
+
70
+ return CloudRailSi::ServiceCode::Helper.compare(@type, another.type)
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+
@@ -0,0 +1,49 @@
1
+ require_relative './SandboxObject'
2
+ require_relative './Types'
3
+ require_relative '../errors/InternalError'
4
+ require 'date'
5
+
6
+ module CloudRailSi
7
+ module Types
8
+ class CustomDate < SandboxObject
9
+ include Comparable
10
+
11
+ attr_accessor :date
12
+
13
+ def initialize(date_string=nil)
14
+ @date = (!date_string.nil? && !date_string.empty?) ? DateTime.parse(date_string).to_time.utc.to_datetime : DateTime.now
15
+ end
16
+
17
+ def time
18
+ @date.to_time.to_i * 1000
19
+ end
20
+
21
+ def time=(value)
22
+ @date = Time.at(value / 1000).to_datetime
23
+ end
24
+
25
+ def rfc_time
26
+ @date.to_time.utc.strftime("%Y-%m-%dT%H:%M:%SZ")
27
+ end
28
+
29
+ def <=> (obj)
30
+ raise Errors::InternalError.new("Comparing a Date with a non-Date") if (!(obj.instance_of?(CustomDate)))
31
+
32
+ return -1 if (time < obj.time)
33
+ return 1 if (obj.time < time)
34
+ return 0 if (time === obj.time)
35
+
36
+ raise Errors::InternalError.new("Comparing a Date with a non-Date")
37
+ end
38
+
39
+ class << self
40
+ def json_create(object)
41
+ byebug
42
+ cd = CustomDate.new
43
+ cd.time = Integer(object['time'])
44
+ return cd
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,16 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class DateOfBirth < SandboxObject
6
+ attr_accessor :day, :month, :year
7
+
8
+ def initialize()
9
+ super()
10
+ @day = 0
11
+ @month = 0
12
+ @year = 0
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class Error < SandboxObject
6
+ attr_accessor :message, :type
7
+
8
+ def initialize(message, type)
9
+ updated_message = message.nil? ? nil : message.gsub('null', 'nil')
10
+
11
+ @message = updated_message
12
+ @type = type
13
+ super()
14
+ end
15
+
16
+ def to_s
17
+ @message
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class Location < SandboxObject
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ require_relative './SandboxObject'
2
+ require_relative './Location'
3
+
4
+ module CloudRailSi
5
+ module Types
6
+ class POI < SandboxObject
7
+ def initialize(categories, image_url, location, name, phone)
8
+ super()
9
+ @categories = categories
10
+ @image_url = image_url
11
+ @location = location
12
+ @name = name
13
+ @phone = phone
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ require_relative './SandboxObject'
2
+ require_relative '../errors/DetailErrors'
3
+
4
+ module CloudRailSi
5
+ module Types
6
+ class Refund < SandboxObject
7
+ attr_reader :id, :amount, :created, :currency, :charge_id, :state
8
+
9
+ def initialize(amount, charge_id, created, id, state, currency)
10
+ super()
11
+ @amount = amount
12
+ @charge_id = charge_id
13
+ @created = created
14
+ @id = id
15
+ @state = state
16
+ @currency = currency
17
+ raise Errors::IllegalArgumentError.new("At least one of the parameters is nil.") if (charge_id.nil? || id.nil? || state.nil?)
18
+ raise Errors::IllegalArgumentError.new("Unknown state. Allowed values are: 'succeeded', 'failed' or 'pending'.") if (["pending", "succeeded", "failed"].index(@state) < 0)
19
+ raise Errors::IllegalArgumentError.new("The passed currency is invalid.") if (@currency.length != 3)
20
+
21
+ @currency = @currency.upcase
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ require_relative './SandboxObject'
2
+ require_relative '../helpers/Helper'
3
+
4
+ module CloudRailSi
5
+ module Types
6
+ class SandboxObject
7
+ def get(key)
8
+ entry = instance_variable_get("#{Helper.lowerCaseFirstLetter(key)}")
9
+ if (Helper.is_boolean(entry))
10
+ entry = entry ? 1 : 0
11
+ end
12
+ entry
13
+ end
14
+
15
+ def set(key, value)
16
+ instance_variable_set("#{Helper.lowerCaseFirstLetter(key)}", value)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ require_relative './SandboxObject'
2
+
3
+ module CloudRailSi
4
+ module Types
5
+ class SpaceAllocation < SandboxObject
6
+ def initialize(used, total)
7
+ @used = used
8
+ @total = total
9
+ super()
10
+ end
11
+ end
12
+ end
13
+ end