cloudrail_si 0.1.5

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.
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