flowthings 0.1.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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +9 -0
- data/Guardfile +77 -0
- data/LICENSE +202 -0
- data/README.md +161 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/flowthings.gemspec +31 -0
- data/lib/flowthings/client.rb +63 -0
- data/lib/flowthings/configuration.rb +39 -0
- data/lib/flowthings/connection.rb +23 -0
- data/lib/flowthings/crud/aggregate.rb +18 -0
- data/lib/flowthings/crud/base.rb +41 -0
- data/lib/flowthings/crud/extended_methods.rb +26 -0
- data/lib/flowthings/crud/find.rb +13 -0
- data/lib/flowthings/crud/member_update.rb +14 -0
- data/lib/flowthings/crud/simulate.rb +13 -0
- data/lib/flowthings/error.rb +30 -0
- data/lib/flowthings/platform_objects/api_task.rb +6 -0
- data/lib/flowthings/platform_objects/drop.rb +29 -0
- data/lib/flowthings/platform_objects/flow.rb +12 -0
- data/lib/flowthings/platform_objects/group.rb +10 -0
- data/lib/flowthings/platform_objects/identity.rb +10 -0
- data/lib/flowthings/platform_objects/mqtt.rb +8 -0
- data/lib/flowthings/platform_objects/platform_object_interface.rb +44 -0
- data/lib/flowthings/platform_objects/share.rb +9 -0
- data/lib/flowthings/platform_objects/token.rb +9 -0
- data/lib/flowthings/platform_objects/track.rb +12 -0
- data/lib/flowthings/request.rb +59 -0
- data/lib/flowthings/response/platform_response.rb +16 -0
- data/lib/flowthings/response/raise_errors.rb +42 -0
- data/lib/flowthings/utils/crud_utils.rb +96 -0
- data/lib/flowthings/utils/member.rb +0 -0
- data/lib/flowthings/version.rb +3 -0
- data/lib/flowthings.rb +7 -0
- data/spec/client_configuration_spec.rb +67 -0
- data/spec/client_spec.rb +51 -0
- data/spec/configuration_spec.rb +28 -0
- data/spec/flowthings_spec.rb +7 -0
- data/spec/platform_object_interface_spec.rb +12 -0
- data/spec/platform_objects/api_task_spec.rb +92 -0
- data/spec/platform_objects/drop_spec.rb +180 -0
- data/spec/platform_objects/flow_spec.rb +83 -0
- data/spec/platform_objects/platform_objects_spec.rb +73 -0
- data/spec/platform_objects/track_spec.rb +46 -0
- data/spec/spec_helper.rb +5 -0
- metadata +192 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Flowthings::PlatformObjectInterface do
|
4
|
+
describe "platform object" do
|
5
|
+
before do
|
6
|
+
@connection = {}
|
7
|
+
end
|
8
|
+
it "should raise an error if you try to initialize it" do
|
9
|
+
expect { Flowthings::PlatformObjectInterface.new @connection }.to raise_error(Flowthings::Error::ObjectError, "Use the actual platform objects")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Flowthings::ApiTask do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@account_name = ENV["FT_ACCOUNT_NAME"]
|
7
|
+
@account_token = ENV["FT_ACCOUNT_TOKEN"]
|
8
|
+
|
9
|
+
@api = Flowthings::Client.new({account_name: @account_name,
|
10
|
+
account_token: @account_token})
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".create, .read, .update, .destroy" do
|
14
|
+
|
15
|
+
before(:example) do
|
16
|
+
@path = "/" + @account_name + "/ruby-client-test"
|
17
|
+
@flow = @api.flow.create({"path" => @path,
|
18
|
+
"description" => "description"})
|
19
|
+
|
20
|
+
@flowId = @flow["id"]
|
21
|
+
|
22
|
+
@api_task_task = {
|
23
|
+
"destination" => @path,
|
24
|
+
"periodicity" => 120000,
|
25
|
+
"js" => "new Task({
|
26
|
+
request: {uri: 'http://api.example.com/data.json', method: 'GET'},
|
27
|
+
callback: function(responseText) {
|
28
|
+
var json = JSON.parse(responseText);
|
29
|
+
return json['items'].map(function(item) {
|
30
|
+
return {
|
31
|
+
elems: {
|
32
|
+
title : {type: 'string', value: item.title},
|
33
|
+
source_uri : {type: 'uri', value: item.uri}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
});"
|
37
|
+
}
|
38
|
+
|
39
|
+
@api_task_task_updated = {
|
40
|
+
"destination" => @path,
|
41
|
+
"periodicity" => 120000,
|
42
|
+
"js" => "new Task({
|
43
|
+
request: {uri: 'http://api.example.com/data.json', method: 'GET'},
|
44
|
+
callback: function(responseText) {
|
45
|
+
var json = JSON.parse(responseText);
|
46
|
+
return json['items'].map(function(item) {
|
47
|
+
return {
|
48
|
+
elems: {
|
49
|
+
title : {type: 'string', value: item.title},
|
50
|
+
source_uri : {type: 'uri', value: item.uri}
|
51
|
+
}
|
52
|
+
}
|
53
|
+
});",
|
54
|
+
"displayName" => "testtesttest"
|
55
|
+
}
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
after(:example) do
|
60
|
+
@api.flow.delete(@flowId)
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
it "should do all of these operations correctly" do
|
65
|
+
|
66
|
+
api_task_response = @api.api_task.create(@api_task_task)
|
67
|
+
|
68
|
+
expect(api_task_response.empty?).not_to be true
|
69
|
+
|
70
|
+
expect(api_task_response["destination"]).to eq(@path)
|
71
|
+
expect(api_task_response["periodicity"]).to eq(@api_task_task["periodicity"])
|
72
|
+
expect(api_task_response["js"]).to eq(@api_task_task["js"])
|
73
|
+
|
74
|
+
read_response = @api.api_task.read(api_task_response["id"])
|
75
|
+
|
76
|
+
expect(read_response["id"]).to eq(api_task_response["id"])
|
77
|
+
|
78
|
+
update_response = @api.api_task.update(api_task_response["id"],
|
79
|
+
@api_task_task_updated)
|
80
|
+
|
81
|
+
|
82
|
+
expect(update_response["displayName"]).to eq(@api_task_task_updated["displayName"])
|
83
|
+
|
84
|
+
delete_response = @api.api_task.delete(api_task_response["id"])
|
85
|
+
|
86
|
+
expect(delete_response.empty?).to be true
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Flowthings::Drop do
|
4
|
+
before do
|
5
|
+
@account_name = ENV["FT_ACCOUNT_NAME"]
|
6
|
+
@account_token = ENV["FT_ACCOUNT_TOKEN"]
|
7
|
+
|
8
|
+
@api = Flowthings::Client.new account_name: @account_name, account_token: @account_token
|
9
|
+
|
10
|
+
# @flow = @api.flow.create({"path" => "/greg/test/ruby"})
|
11
|
+
end
|
12
|
+
|
13
|
+
# after do
|
14
|
+
# # @flow = @api.flow.create({"path" => "/greg/test/ruby"})
|
15
|
+
# end
|
16
|
+
|
17
|
+
|
18
|
+
describe ".get" do
|
19
|
+
it "should get the proper information from the platform" do
|
20
|
+
api = Flowthings::Client.new({account_name: "greg",
|
21
|
+
account_token: "p2lAhiLuQeqWN0EMeClmTAYPjgPy"})
|
22
|
+
|
23
|
+
result = {
|
24
|
+
"id" => "d551720070cf25d405fb1e495",
|
25
|
+
"flowId" => "f55171ff90cf2ece6103ef410",
|
26
|
+
"creationDate" => 1427578887233,
|
27
|
+
"path" => "/greg/test/ruby-drop",
|
28
|
+
"version" => 0,
|
29
|
+
"elems" => {
|
30
|
+
"drop" => {
|
31
|
+
"type" => "string",
|
32
|
+
"value" => "adsf"
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
drop = api.drop("f55171ff90cf2ece6103ef410").read("d551720070cf25d405fb1e495")
|
38
|
+
|
39
|
+
expect(drop).to eq(result)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe ".create, .update, .destroy" do
|
44
|
+
|
45
|
+
before(:example) do
|
46
|
+
@path = "/" + @account_name + "/ruby-client-test"
|
47
|
+
@flow = @api.flow.create "path" => @path, "description" => "description"
|
48
|
+
|
49
|
+
@flowId = @flow["id"]
|
50
|
+
|
51
|
+
@drop = {"elems" => {
|
52
|
+
"elem_name" => {
|
53
|
+
"type" => "string",
|
54
|
+
"value" => "elem_value"
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
@update_drop = {"elems" => {
|
60
|
+
"elem_name" => {
|
61
|
+
"type" => "string",
|
62
|
+
"value" => "elem_value"
|
63
|
+
},
|
64
|
+
"second_elem" => {
|
65
|
+
"type" => "string",
|
66
|
+
"value" => "elem_value"
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
@aggregation = {
|
72
|
+
"filter": "EXISTS elem_name",
|
73
|
+
"output": ["$count"]
|
74
|
+
}
|
75
|
+
end
|
76
|
+
|
77
|
+
after(:example) do
|
78
|
+
@api.flow.delete @flowId
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should create, update and then delete a drop on the platform" do
|
82
|
+
create_response = @api.drop(@flowId).create @drop
|
83
|
+
dropId = create_response["id"]
|
84
|
+
|
85
|
+
update_response = @api.drop(@flowId).update dropId, @update_drop
|
86
|
+
|
87
|
+
destroy_response = @api.drop(@flowId).destroy dropId
|
88
|
+
|
89
|
+
expect(create_response.empty?).not_to be true
|
90
|
+
expect(create_response["flowId"]).to eq(@flowId)
|
91
|
+
expect(create_response["elems"]).to eq(@drop["elems"])
|
92
|
+
|
93
|
+
expect(update_response.empty?).not_to be true
|
94
|
+
expect(update_response["flowId"]).to eq(@flowId)
|
95
|
+
expect(update_response["id"]).to eq(dropId)
|
96
|
+
expect(update_response["elems"]).to eq(@update_drop["elems"])
|
97
|
+
|
98
|
+
expect(destroy_response.empty?).to be true
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
describe ".aggregate" do
|
104
|
+
before(:example) do
|
105
|
+
@path = "/" + @account_name + "/ruby-client-test"
|
106
|
+
@flow = @api.flow.create({"path" => @path,
|
107
|
+
"description" => "description"})
|
108
|
+
|
109
|
+
@flowId = @flow["id"]
|
110
|
+
|
111
|
+
@drop = {"elems" => {
|
112
|
+
"elem_name" => {
|
113
|
+
"type" => "string",
|
114
|
+
"value" => "elem_value"
|
115
|
+
}
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
@api.drop(@flowId).create(@drop)
|
120
|
+
|
121
|
+
@aggregation = {
|
122
|
+
"filter": "EXISTS elem_name",
|
123
|
+
"output": ["$count"]
|
124
|
+
}
|
125
|
+
end
|
126
|
+
|
127
|
+
after(:example) do
|
128
|
+
@api.flow.delete(@flowId)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should aggregate properly" do
|
132
|
+
aggregate_response = @api.drop(@flowId).aggregate(@aggregation)
|
133
|
+
|
134
|
+
expect(aggregate_response.class).to be Array
|
135
|
+
expect(aggregate_response[0]["$count"]).to eq(1)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
describe "error" do
|
142
|
+
|
143
|
+
before(:example) do
|
144
|
+
path = "/" + @account_name + "/ruby-client-test"
|
145
|
+
|
146
|
+
@flow = @api.flow.create({"path" => path,
|
147
|
+
"description" => "description"})
|
148
|
+
|
149
|
+
@flowId = @flow["id"]
|
150
|
+
@api.flow.destroy(@flowId)
|
151
|
+
|
152
|
+
@drop = {"elems" => {
|
153
|
+
"elem_name" => {
|
154
|
+
"type" => "string",
|
155
|
+
"value" => "elem_value"
|
156
|
+
}
|
157
|
+
}
|
158
|
+
}
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should error when appropriate" do
|
162
|
+
expect {
|
163
|
+
@api.drop(@flowId).create(@drop)
|
164
|
+
}.to raise_error
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should be able to rescue from an error" do
|
168
|
+
expect {
|
169
|
+
begin
|
170
|
+
@api.drop(@flowId).create(@drop)
|
171
|
+
rescue Flowthings::Error::BadRequest => e
|
172
|
+
error = e
|
173
|
+
end
|
174
|
+
|
175
|
+
}.not_to raise_error
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Flowthings::Flow do
|
4
|
+
before do
|
5
|
+
@flowid = "f55171ff90cf2ece6103ef410"
|
6
|
+
|
7
|
+
@account_name = ENV["FT_ACCOUNT_NAME"]
|
8
|
+
@account_token = ENV["FT_ACCOUNT_TOKEN"]
|
9
|
+
@api = Flowthings::Client.new({account_name: @account_name,
|
10
|
+
account_token: @account_token})
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".read" do
|
14
|
+
it "should get the proper information from the platform" do
|
15
|
+
api = Flowthings::Client.new({account_name: 'greg',
|
16
|
+
account_token: "p2lAhiLuQeqWN0EMeClmTAYPjgPy"})
|
17
|
+
|
18
|
+
response = {"id" => "f55171ff90cf2ece6103ef410",
|
19
|
+
"capacity" => 1000,
|
20
|
+
"creationDate" => 1427578873318,
|
21
|
+
"creatorId" => "i54af263c0cf25b8ea459c204",
|
22
|
+
"path" => "/greg/test/ruby-drop"}
|
23
|
+
|
24
|
+
|
25
|
+
expect(api.flow.read(@flowid)).to eq(response)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
describe ".create, .update, .delete" do
|
31
|
+
it "should create, update and then delete a flow properly" do
|
32
|
+
response = {}
|
33
|
+
|
34
|
+
path = "/" + @account_name + "/ruby-client-test"
|
35
|
+
|
36
|
+
expect{
|
37
|
+
response = @api.flow.create({"path" => path,
|
38
|
+
"description" => "description",
|
39
|
+
"filter" => "EXISTS title"})
|
40
|
+
}.not_to raise_error
|
41
|
+
|
42
|
+
expect(response.empty?).not_to be true
|
43
|
+
expect(response["path"]).to eq(path)
|
44
|
+
expect(response["description"]).to eq("description")
|
45
|
+
expect(response["filter"]).to eq("EXISTS title")
|
46
|
+
|
47
|
+
updated_response = @api.flow.update(response["id"], {"path" => path,
|
48
|
+
"description" => "description",
|
49
|
+
"filter" => ""})
|
50
|
+
@id = response["id"]
|
51
|
+
|
52
|
+
expect(updated_response["id"]).to eq(response["id"])
|
53
|
+
expect(updated_response["description"]).to eq("description")
|
54
|
+
expect(updated_response["path"]).to eq(path)
|
55
|
+
|
56
|
+
expect(updated_response["filter"].empty?).to be true
|
57
|
+
|
58
|
+
expect(@api.flow.destroy(response["id"]).empty?).to be true
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe ".find" do
|
63
|
+
before do
|
64
|
+
path = "/" + @account_name + "/ruby-client-test"
|
65
|
+
@flow = @api.flow.create({"path" => path,
|
66
|
+
"description" => "description",
|
67
|
+
"filter" => "EXISTS title"})
|
68
|
+
end
|
69
|
+
|
70
|
+
after do
|
71
|
+
@api.flow.destroy(@flow["id"])
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should find the correct flow" do
|
75
|
+
path_regex = "/\\/" + @account_name + "\\/ruby-client-test/"
|
76
|
+
|
77
|
+
flow = @api.flow.find(filter: "path =~ " + path_regex)
|
78
|
+
expect(flow[0] == @flow)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_support/inflector'
|
3
|
+
|
4
|
+
platform_objects = [Flowthings::ApiTask, Flowthings::Drop, Flowthings::Flow, Flowthings::Group, Flowthings::Identity, Flowthings::Mqtt, Flowthings::Share, Flowthings::Token, Flowthings::Track]
|
5
|
+
crud_methods = ["create", "read", "update", "destroy"]
|
6
|
+
|
7
|
+
|
8
|
+
platform_objects.each do |platform_object|
|
9
|
+
|
10
|
+
describe platform_object do
|
11
|
+
|
12
|
+
before do
|
13
|
+
@options = {}
|
14
|
+
@flowId = "f123456"
|
15
|
+
@connection = {}
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "initialization" do
|
19
|
+
it "should error out without any arguments" do
|
20
|
+
expect { platform_object.new }.to raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
|
23
|
+
unless platform_object == Flowthings::Drop
|
24
|
+
it "should take a connection argument and an options argument" do
|
25
|
+
expect { platform_object.new @connection, @options }.not_to raise_error
|
26
|
+
end
|
27
|
+
it "the options argument should be optional" do
|
28
|
+
expect { platform_object.new @connection }.not_to raise_error
|
29
|
+
end
|
30
|
+
else
|
31
|
+
it "should take an options argument, a flowId and a connection" do
|
32
|
+
expect { platform_object.new @flowId, @connection, @options }.not_to raise_error
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should error out with only one argument" do
|
36
|
+
expect { platform_object.new @flowId }.to raise_error(ArgumentError)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should have an optional options argument" do
|
40
|
+
expect { platform_object.new @flowId, @connection }.not_to raise_error
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end #init
|
45
|
+
|
46
|
+
describe "crud" do
|
47
|
+
before do
|
48
|
+
unless platform_object == Flowthings::Drop
|
49
|
+
@initialized_object = platform_object.new @options
|
50
|
+
else
|
51
|
+
@initialized_object = platform_object.new @flowId, @options
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
crud_methods.each do |method|
|
56
|
+
describe ".#{method}" do
|
57
|
+
unless method == "update"&& ( platform_object == Flowthings::Share || platform_object == Flowthings::Token )
|
58
|
+
it "should respond to the method" do
|
59
|
+
expect(@initialized_object.respond_to? "#{method}").to be true
|
60
|
+
end
|
61
|
+
else
|
62
|
+
it "should not respond to the method" do
|
63
|
+
expect(@initialized_object.respond_to? "#{method}").to be false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Flowthings::Track do
|
4
|
+
before(:example) do
|
5
|
+
@account_name = ENV["FT_ACCOUNT_NAME"]
|
6
|
+
@account_token = ENV["FT_ACCOUNT_TOKEN"]
|
7
|
+
|
8
|
+
@api = Flowthings::Client.new({
|
9
|
+
account_name: @account_name,
|
10
|
+
account_token: @account_token
|
11
|
+
})
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".simulate" do
|
15
|
+
it "should simulate track output" do
|
16
|
+
|
17
|
+
simulated_track = {
|
18
|
+
"drop" => {
|
19
|
+
"elems" => {
|
20
|
+
"a" => 1
|
21
|
+
}
|
22
|
+
},
|
23
|
+
"js" => "function (input_drop) {
|
24
|
+
var a = input_drop.elems.a.value;
|
25
|
+
input_drop.elems.b = a * 3;
|
26
|
+
return input_drop;
|
27
|
+
}"
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
track_response = @api.track.simulate(simulated_track)
|
32
|
+
|
33
|
+
expect(track_response.empty?).not_to be true
|
34
|
+
|
35
|
+
drops = track_response["drops"]
|
36
|
+
log = track_response["log"]
|
37
|
+
errs = track_response["errors"]
|
38
|
+
|
39
|
+
expect(errs.empty?).to be true
|
40
|
+
expect(drops.empty?).not_to be true
|
41
|
+
expect(log.empty?).not_to be true
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: flowthings
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Greg Meyer
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: excon
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.44'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.44'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.8'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.10'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.10'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.12'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.12'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guard-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '4.5'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '4.5'
|
111
|
+
description: flowthings.io is an agile intelligence platform that is specifically
|
112
|
+
geared towards the Internet of Things. This is our Ruby Client.
|
113
|
+
email:
|
114
|
+
- dev@flowthings.io
|
115
|
+
executables: []
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- ".gitignore"
|
120
|
+
- ".rspec"
|
121
|
+
- ".travis.yml"
|
122
|
+
- Gemfile
|
123
|
+
- Guardfile
|
124
|
+
- LICENSE
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- bin/console
|
128
|
+
- bin/setup
|
129
|
+
- flowthings.gemspec
|
130
|
+
- lib/flowthings.rb
|
131
|
+
- lib/flowthings/client.rb
|
132
|
+
- lib/flowthings/configuration.rb
|
133
|
+
- lib/flowthings/connection.rb
|
134
|
+
- lib/flowthings/crud/aggregate.rb
|
135
|
+
- lib/flowthings/crud/base.rb
|
136
|
+
- lib/flowthings/crud/extended_methods.rb
|
137
|
+
- lib/flowthings/crud/find.rb
|
138
|
+
- lib/flowthings/crud/member_update.rb
|
139
|
+
- lib/flowthings/crud/simulate.rb
|
140
|
+
- lib/flowthings/error.rb
|
141
|
+
- lib/flowthings/platform_objects/api_task.rb
|
142
|
+
- lib/flowthings/platform_objects/drop.rb
|
143
|
+
- lib/flowthings/platform_objects/flow.rb
|
144
|
+
- lib/flowthings/platform_objects/group.rb
|
145
|
+
- lib/flowthings/platform_objects/identity.rb
|
146
|
+
- lib/flowthings/platform_objects/mqtt.rb
|
147
|
+
- lib/flowthings/platform_objects/platform_object_interface.rb
|
148
|
+
- lib/flowthings/platform_objects/share.rb
|
149
|
+
- lib/flowthings/platform_objects/token.rb
|
150
|
+
- lib/flowthings/platform_objects/track.rb
|
151
|
+
- lib/flowthings/request.rb
|
152
|
+
- lib/flowthings/response/platform_response.rb
|
153
|
+
- lib/flowthings/response/raise_errors.rb
|
154
|
+
- lib/flowthings/utils/crud_utils.rb
|
155
|
+
- lib/flowthings/utils/member.rb
|
156
|
+
- lib/flowthings/version.rb
|
157
|
+
- spec/client_configuration_spec.rb
|
158
|
+
- spec/client_spec.rb
|
159
|
+
- spec/configuration_spec.rb
|
160
|
+
- spec/flowthings_spec.rb
|
161
|
+
- spec/platform_object_interface_spec.rb
|
162
|
+
- spec/platform_objects/api_task_spec.rb
|
163
|
+
- spec/platform_objects/drop_spec.rb
|
164
|
+
- spec/platform_objects/flow_spec.rb
|
165
|
+
- spec/platform_objects/platform_objects_spec.rb
|
166
|
+
- spec/platform_objects/track_spec.rb
|
167
|
+
- spec/spec_helper.rb
|
168
|
+
homepage: https://flowthings.io
|
169
|
+
licenses:
|
170
|
+
- Apache 2.0
|
171
|
+
metadata: {}
|
172
|
+
post_install_message:
|
173
|
+
rdoc_options: []
|
174
|
+
require_paths:
|
175
|
+
- lib
|
176
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - ">="
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
186
|
+
requirements: []
|
187
|
+
rubyforge_project:
|
188
|
+
rubygems_version: 2.4.8
|
189
|
+
signing_key:
|
190
|
+
specification_version: 4
|
191
|
+
summary: A rubygem for the flowthings.io platform.
|
192
|
+
test_files: []
|