test_machine_shop 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/compiler.xml +23 -0
- data/.idea/copyright/profiles_settings.xml +5 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/inspectionProfiles/Project_Default.xml +7 -0
- data/.idea/inspectionProfiles/profiles_settings.xml +7 -0
- data/.idea/machineshop.iml +194 -0
- data/.idea/misc.xml +5 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/.idea/workspace.xml +722 -0
- data/Gemfile +9 -0
- data/LICENSE +22 -0
- data/README.md +977 -0
- data/Rakefile +8 -0
- data/doc.txt +50 -0
- data/lib/machineshop.rb +475 -0
- data/lib/machineshop/api_operations/create.rb +17 -0
- data/lib/machineshop/api_operations/delete.rb +11 -0
- data/lib/machineshop/api_operations/list.rb +16 -0
- data/lib/machineshop/api_operations/update.rb +11 -0
- data/lib/machineshop/api_resource.rb +35 -0
- data/lib/machineshop/configuration.rb +14 -0
- data/lib/machineshop/customer.rb +15 -0
- data/lib/machineshop/data_source_types.rb +28 -0
- data/lib/machineshop/data_sources.rb +35 -0
- data/lib/machineshop/database.rb +59 -0
- data/lib/machineshop/device.rb +30 -0
- data/lib/machineshop/device_instance.rb +30 -0
- data/lib/machineshop/end_points.rb +30 -0
- data/lib/machineshop/errors/api_connection_error.rb +4 -0
- data/lib/machineshop/errors/api_error.rb +4 -0
- data/lib/machineshop/errors/authentication_error.rb +4 -0
- data/lib/machineshop/errors/database_error.rb +5 -0
- data/lib/machineshop/errors/invalid_request_error.rb +10 -0
- data/lib/machineshop/errors/machineshop_error.rb +20 -0
- data/lib/machineshop/errors/schema_error.rb +5 -0
- data/lib/machineshop/json.rb +21 -0
- data/lib/machineshop/machineshop_cache.rb +49 -0
- data/lib/machineshop/machineshop_object.rb +165 -0
- data/lib/machineshop/mapping.rb +34 -0
- data/lib/machineshop/meter.rb +12 -0
- data/lib/machineshop/models/api_endpoint.rb +8 -0
- data/lib/machineshop/models/api_request.rb +28 -0
- data/lib/machineshop/models/schema.rb +184 -0
- data/lib/machineshop/report.rb +11 -0
- data/lib/machineshop/rule.rb +42 -0
- data/lib/machineshop/user.rb +43 -0
- data/lib/machineshop/users.rb +43 -0
- data/lib/machineshop/util.rb +193 -0
- data/lib/machineshop/utility.rb +30 -0
- data/lib/machineshop/version.rb +3 -0
- data/machineshop.gemspec +35 -0
- data/spec/lib/api_calls_spec.rb +628 -0
- data/spec/lib/custom_endpoint_test.rb +78 -0
- data/spec/lib/customer_spec.rb +87 -0
- data/spec/lib/data_source.rb +138 -0
- data/spec/lib/data_source_type_spec.rb +77 -0
- data/spec/lib/database_spec.rb +45 -0
- data/spec/lib/device_instances.rb +73 -0
- data/spec/lib/device_spec.rb +172 -0
- data/spec/lib/endpoint_spec.rb +37 -0
- data/spec/lib/geocode_spec +45 -0
- data/spec/lib/mapping_spec.rb +68 -0
- data/spec/lib/meter_spec.rb +49 -0
- data/spec/lib/report_spec.rb +52 -0
- data/spec/lib/rule_spec.rb +130 -0
- data/spec/lib/user_spec.rb +58 -0
- data/spec/spec_helper.rb +12 -0
- metadata +235 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
#Defining class method inside a module
|
2
|
+
module MachineShop
|
3
|
+
module APIOperations
|
4
|
+
module Create
|
5
|
+
module ClassMethods
|
6
|
+
def create(params={}, auth_token=nil)
|
7
|
+
response = MachineShop.gem_post(self.url, auth_token, params)
|
8
|
+
Util.convert_to_machineshop_object(response, auth_token, self.class_name)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.included(base)
|
13
|
+
base.extend(ClassMethods)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module MachineShop
|
2
|
+
module APIOperations
|
3
|
+
module List
|
4
|
+
module ClassMethods
|
5
|
+
def all(filters={}, auth_token=nil)
|
6
|
+
response = MachineShop.gem_get(url, auth_token, filters)
|
7
|
+
Util.convert_to_machineshop_object(response, auth_token, self.class_name)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.included(base)
|
12
|
+
base.extend(ClassMethods)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class APIResource < MachineShopObject
|
3
|
+
def self.class_name
|
4
|
+
self.name.split('::')[-1]
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.url()
|
8
|
+
if self == APIResource
|
9
|
+
raise NotImplementedError.new('APIResource is an abstract class. You should perform actions on its subclasses (Device, Rule, etc.)')
|
10
|
+
end
|
11
|
+
ret = "/platform/#{CGI.escape(class_name.underscore)}"
|
12
|
+
ret
|
13
|
+
end
|
14
|
+
|
15
|
+
def url
|
16
|
+
unless id = self['id']
|
17
|
+
raise InvalidRequestError.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}", 'id')
|
18
|
+
end
|
19
|
+
ret = "#{self.class.url}/#{CGI.escape(id)}"
|
20
|
+
ret
|
21
|
+
end
|
22
|
+
|
23
|
+
def refresh
|
24
|
+
response = MachineShop.gem_get(url, @auth_token)
|
25
|
+
refresh_from(response, auth_token)
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.retrieve(id, auth_token=nil)
|
30
|
+
instance = self.new(id, auth_token)
|
31
|
+
instance.refresh
|
32
|
+
instance
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :expiry_time, :enable_caching, :db_username, :db_password, :db_name, :db_host, :base_version, :custom_endpoints_cache_time
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
#default values
|
7
|
+
@expiry_time=0
|
8
|
+
@enable_caching = true
|
9
|
+
@base_version = "v0"
|
10
|
+
@custom_endpoints_cache_time = lambda{86400.seconds.ago}
|
11
|
+
#default 1 day
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class Customer < APIResource
|
3
|
+
include MachineShop::APIOperations::List
|
4
|
+
include MachineShop::APIOperations::Create
|
5
|
+
include MachineShop::APIOperations::Delete
|
6
|
+
include MachineShop::APIOperations::Update
|
7
|
+
|
8
|
+
|
9
|
+
def self.update(id,auth_token,params={})
|
10
|
+
response = MachineShop.put(self.url+"/#{id}", auth_token, params)
|
11
|
+
Util.convert_to_machineshop_object(response, auth_token, self.class_name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class DataSourceTypes < APIResource
|
3
|
+
include MachineShop::APIOperations::List
|
4
|
+
include MachineShop::APIOperations::Create
|
5
|
+
include MachineShop::APIOperations::Delete
|
6
|
+
|
7
|
+
|
8
|
+
def create_data_source(params)
|
9
|
+
params.merge!({:data_source_type => self.id})
|
10
|
+
DataSources.create(params, @auth_token)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_email_data_source(params)
|
14
|
+
params.merge!({:data_source_type => self.id})
|
15
|
+
MachineShop.gem_post(email_data_source_url, @auth_token, params)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def self.url
|
20
|
+
'/platform/data_source_types'
|
21
|
+
end
|
22
|
+
|
23
|
+
def email_data_source_url
|
24
|
+
'/platform/email_data_sources'
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class DataSources < APIResource
|
3
|
+
include MachineShop::APIOperations::List
|
4
|
+
include MachineShop::APIOperations::Create
|
5
|
+
include MachineShop::APIOperations::Update
|
6
|
+
# include MachineShop::APIOperations::Delete
|
7
|
+
|
8
|
+
# Specific API calls
|
9
|
+
|
10
|
+
def report_count(params)
|
11
|
+
MachineShop.gem_get(report_count_url, @auth_token, params)
|
12
|
+
end
|
13
|
+
|
14
|
+
def reports(filters={})
|
15
|
+
filters.merge!(:device_instance_id => self.id)
|
16
|
+
MachineShop::Report.all(filters, @auth_token)
|
17
|
+
end
|
18
|
+
|
19
|
+
def meters(filters={})
|
20
|
+
filters.merge!(:device_instance_id => self.id)
|
21
|
+
MachineShop::Meter.all(filters, @auth_token)
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete
|
25
|
+
MachineShop.gem_delete("/platform/data_sources/#{self.id}?_type=#{self._type}", @auth_token,{})
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def report_count_url
|
31
|
+
url + '/report_count'
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module MachineShop
|
2
|
+
|
3
|
+
require 'machineshop/errors/machineshop_error'
|
4
|
+
# require 'machineshop/errors/api_error'
|
5
|
+
require 'machineshop/errors/database_error'
|
6
|
+
require 'machineshop/errors/schema_error'
|
7
|
+
require 'mysql'
|
8
|
+
require 'active_record'
|
9
|
+
# require 'machineshop/configuration'
|
10
|
+
|
11
|
+
class Database < Configuration
|
12
|
+
|
13
|
+
attr_accessor :con, :rs,:db_connected
|
14
|
+
|
15
|
+
def initialize()
|
16
|
+
|
17
|
+
# @db_connected=true
|
18
|
+
begin
|
19
|
+
ActiveRecord::Base.establish_connection(
|
20
|
+
adapter: 'mysql', # or 'postgresql' or 'sqlite3'
|
21
|
+
host: MachineShop.configuration.db_host,
|
22
|
+
database: MachineShop.configuration.db_name,
|
23
|
+
username: MachineShop.configuration.db_username,
|
24
|
+
password: MachineShop.configuration.db_password,
|
25
|
+
)
|
26
|
+
|
27
|
+
begin
|
28
|
+
load 'machineshop/models/schema.rb'
|
29
|
+
rescue Mysql::Error => e
|
30
|
+
# raise SchemaError.new(e.message)
|
31
|
+
rescue StandardError => e
|
32
|
+
# raise SchemaError.new(e.message)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
rescue Mysql::Error =>e
|
37
|
+
raise DatabaseError.new("Mysql error ")
|
38
|
+
rescue StandardError =>e
|
39
|
+
raise DatabaseError.new("Database Error #1")
|
40
|
+
rescue Exception => e
|
41
|
+
# @db_connected=false
|
42
|
+
raise DatabaseError.new("Connection to Database refused")
|
43
|
+
# load schema file
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.serialize_data(data)
|
53
|
+
Marshal.dump(data)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class Device < APIResource
|
3
|
+
include MachineShop::APIOperations::List
|
4
|
+
include MachineShop::APIOperations::Create
|
5
|
+
include MachineShop::APIOperations::Delete
|
6
|
+
|
7
|
+
# Specific API calls
|
8
|
+
def payload_fields(params=nil)
|
9
|
+
MachineShop.gem_get(payload_fields_url, @auth_token, params)
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_instance(params)
|
13
|
+
params.merge!({:device_id => self.id})
|
14
|
+
DeviceInstance.create(params, @auth_token)
|
15
|
+
end
|
16
|
+
|
17
|
+
def instances(params={})
|
18
|
+
params.merge!({:device_id => self.id})
|
19
|
+
DeviceInstance.all(params, @auth_token)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def payload_fields_url
|
25
|
+
url + '/payload_fields'
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class DeviceInstance < APIResource
|
3
|
+
include MachineShop::APIOperations::List
|
4
|
+
include MachineShop::APIOperations::Create
|
5
|
+
include MachineShop::APIOperations::Delete
|
6
|
+
|
7
|
+
# Specific API calls
|
8
|
+
|
9
|
+
def report_count(params)
|
10
|
+
MachineShop.gem_get(report_count_url, @auth_token, params)
|
11
|
+
end
|
12
|
+
|
13
|
+
def reports(filters={})
|
14
|
+
filters.merge!(:device_instance_id => self.id)
|
15
|
+
MachineShop::Report.all(filters, @auth_token)
|
16
|
+
end
|
17
|
+
|
18
|
+
def meters(filters={})
|
19
|
+
filters.merge!(:device_instance_id => self.id)
|
20
|
+
MachineShop::Meter.all(filters, @auth_token)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def report_count_url
|
26
|
+
url + '/report_count'
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class EndPoints < APIResource
|
3
|
+
include MachineShop::APIOperations::List
|
4
|
+
|
5
|
+
# Specific API calls
|
6
|
+
|
7
|
+
def self.url()
|
8
|
+
return "/gem/routes"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.all(version=v0,namespace="",auth_token)
|
12
|
+
|
13
|
+
# ActiveRecord::Base.logger = Logger.new(STDOUT)
|
14
|
+
|
15
|
+
endpoints = MachineShop.gem_get(url+"/#{version}/#{namespace}",auth_token)
|
16
|
+
|
17
|
+
endpoints=endpoints.as_json
|
18
|
+
endpoints = endpoints["#{version}"]["api"]
|
19
|
+
|
20
|
+
if Util.db_connected?
|
21
|
+
endpoints.each do |endpoint|
|
22
|
+
apiend = ApiEndpoint.find_or_initialize_by(verb: endpoint['verb'], endpoint:endpoint['endpoint'], auth_token: auth_token)
|
23
|
+
apiend.save
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MachineShop
|
2
|
+
class MachineShopError < StandardError
|
3
|
+
attr_reader :message
|
4
|
+
attr_reader :http_status
|
5
|
+
attr_reader :http_body
|
6
|
+
attr_reader :json_body
|
7
|
+
|
8
|
+
def initialize(message=nil, http_status=nil, http_body=nil, json_body=nil)
|
9
|
+
@message = message
|
10
|
+
@http_status = http_status
|
11
|
+
@http_body = http_body
|
12
|
+
@json_body = json_body
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
|
17
|
+
"#{status_string}#{@message}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module MachineShop
|
2
|
+
module JSON
|
3
|
+
if MultiJson.respond_to?(:dump)
|
4
|
+
def self.dump(*args)
|
5
|
+
MultiJson.dump(*args)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.load(*args)
|
9
|
+
MultiJson.load(*args)
|
10
|
+
end
|
11
|
+
else
|
12
|
+
def self.dump(*args)
|
13
|
+
MultiJson.encode(*args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.load(*args)
|
17
|
+
MultiJson.decode(*args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|