apiotics-test 0.1.49

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 (75) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +260 -0
  4. data/Rakefile +33 -0
  5. data/lib/apiotics.rb +58 -0
  6. data/lib/apiotics/client.rb +20 -0
  7. data/lib/apiotics/configuration.rb +23 -0
  8. data/lib/apiotics/extract.rb +107 -0
  9. data/lib/apiotics/hardware.rb +109 -0
  10. data/lib/apiotics/insert.rb +115 -0
  11. data/lib/apiotics/parse.rb +20 -0
  12. data/lib/apiotics/portal.rb +217 -0
  13. data/lib/apiotics/railtie.rb +14 -0
  14. data/lib/apiotics/server.rb +238 -0
  15. data/lib/apiotics/version.rb +3 -0
  16. data/lib/generators/apiotics/channel/USAGE +10 -0
  17. data/lib/generators/apiotics/channel/channel_generator.rb +35 -0
  18. data/lib/generators/apiotics/channel/templates/apiotics_channel.rb.erb +9 -0
  19. data/lib/generators/apiotics/channel/templates/apiotics_channel_client.coffee.erb +16 -0
  20. data/lib/generators/apiotics/channel/templates/apiotics_channel_initializer.rb.erb +3 -0
  21. data/lib/generators/apiotics/controller/USAGE +8 -0
  22. data/lib/generators/apiotics/controller/controller_generator.rb +25 -0
  23. data/lib/generators/apiotics/controller/templates/apiotics_scaffold.rb.erb +60 -0
  24. data/lib/generators/apiotics/create_model/USAGE +10 -0
  25. data/lib/generators/apiotics/create_model/create_model_generator.rb +76 -0
  26. data/lib/generators/apiotics/create_model/templates/apiotics_logs_model.rb.erb +7 -0
  27. data/lib/generators/apiotics/create_model/templates/apiotics_model.rb.erb +49 -0
  28. data/lib/generators/apiotics/create_model/templates/apiotics_module.rb.erb +14 -0
  29. data/lib/generators/apiotics/create_model/templates/apiotics_module_model.rb.erb +8 -0
  30. data/lib/generators/apiotics/create_model/templates/create_module_model_table.rb.erb +9 -0
  31. data/lib/generators/apiotics/create_table/USAGE +9 -0
  32. data/lib/generators/apiotics/create_table/create_table_generator.rb +62 -0
  33. data/lib/generators/apiotics/create_table/templates/create_logs_table.rb.erb +14 -0
  34. data/lib/generators/apiotics/create_table/templates/create_table.rb.erb +16 -0
  35. data/lib/generators/apiotics/initializer/USAGE +8 -0
  36. data/lib/generators/apiotics/initializer/initializer_generator.rb +29 -0
  37. data/lib/generators/apiotics/initializer/templates/apiotics.rb.erb +10 -0
  38. data/lib/generators/apiotics/initializer/templates/apiotics_module.rb.erb +6 -0
  39. data/lib/generators/apiotics/initializer/templates/apiotics_parents.rb.erb +3 -0
  40. data/lib/generators/apiotics/initializer/templates/apiotics_settings.rb.erb +9 -0
  41. data/lib/generators/apiotics/initializer/templates/apiotics_targets.rb.erb +4 -0
  42. data/lib/generators/apiotics/initializer/templates/setting.rb.erb +3 -0
  43. data/lib/generators/apiotics/install/USAGE +11 -0
  44. data/lib/generators/apiotics/install/install_generator.rb +11 -0
  45. data/lib/generators/apiotics/migration/USAGE +10 -0
  46. data/lib/generators/apiotics/migration/migration_generator.rb +54 -0
  47. data/lib/generators/apiotics/migration/templates/create_logs_table.rb.erb +14 -0
  48. data/lib/generators/apiotics/migration/templates/migrate_table.rb.erb +12 -0
  49. data/lib/generators/apiotics/model/USAGE +11 -0
  50. data/lib/generators/apiotics/model/model_generator.rb +58 -0
  51. data/lib/generators/apiotics/scaffold/scaffold_generator.rb +23 -0
  52. data/lib/generators/apiotics/scaffold/templates/USAGE +0 -0
  53. data/lib/generators/apiotics/script/USAGE +8 -0
  54. data/lib/generators/apiotics/script/script_generator.rb +45 -0
  55. data/lib/generators/apiotics/script/templates/comm_server.rake +19 -0
  56. data/lib/generators/apiotics/script/templates/dev_comm_server.rake +19 -0
  57. data/lib/generators/apiotics/script/templates/dev_server.rb +8 -0
  58. data/lib/generators/apiotics/script/templates/dev_server_control.rb +7 -0
  59. data/lib/generators/apiotics/script/templates/install_firmware.rake +10 -0
  60. data/lib/generators/apiotics/script/templates/publish_script.rake +6 -0
  61. data/lib/generators/apiotics/script/templates/script.rb.erb +12 -0
  62. data/lib/generators/apiotics/script/templates/server.rb +8 -0
  63. data/lib/generators/apiotics/script/templates/server_control.rb +7 -0
  64. data/lib/generators/apiotics/script/templates/test_comm_server.rake +19 -0
  65. data/lib/generators/apiotics/script/templates/test_server.rb +8 -0
  66. data/lib/generators/apiotics/script/templates/test_server_control.rb +7 -0
  67. data/lib/generators/apiotics/view/USAGE +12 -0
  68. data/lib/generators/apiotics/view/templates/default.css.erb +18 -0
  69. data/lib/generators/apiotics/view/templates/edit.html.erb +6 -0
  70. data/lib/generators/apiotics/view/templates/form.html.erb +52 -0
  71. data/lib/generators/apiotics/view/templates/index.html.erb +66 -0
  72. data/lib/generators/apiotics/view/templates/show.html.erb +56 -0
  73. data/lib/generators/apiotics/view/view_generator.rb +26 -0
  74. data/lib/tasks/simbiotes_tasks.rake +4 -0
  75. metadata +256 -0
@@ -0,0 +1,76 @@
1
+ module Apiotics
2
+ class CreateModelGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ argument :parent, :type => :string
5
+ argument :name, :type => :string
6
+ argument :portal, :type => :string, :required => false
7
+
8
+ def copy_model_file
9
+ if portal == "true"
10
+ @c = Apiotics.get_attributes(parent, name)
11
+ end
12
+ @targets = Apiotics::Portal.parse_all_interfaces
13
+ template "apiotics_module.rb.erb", "app/models/#{module_file_name}.rb"
14
+ unless File.exist?("app/models/#{module_file_name}/#{module_file_name}.rb")
15
+ template "create_module_model_table.rb.erb", "db/migrate/#{date_string}_create_#{plural_name}.rb"
16
+ end
17
+ template "apiotics_module_model.rb.erb", "app/models/#{module_file_name}/#{module_file_name}.rb"
18
+ template "apiotics_model.rb.erb", "app/models/#{module_file_name}/#{file_name}.rb"
19
+ unless Apiotics.configuration.local_logging == false
20
+ if portal == "true"
21
+ @c[:attributes].each do |k,v|
22
+ @k = k
23
+ @v = v
24
+ template "apiotics_logs_model.rb.erb", "app/models/#{module_file_name}/#{file_name}_#{@k.underscore.downcase.gsub(" ","_")}_log.rb"
25
+ end
26
+ else
27
+ @k = name
28
+ template "apiotics_logs_model.rb.erb", "app/models/#{module_file_name}/#{file_name}_#{@k.underscore.downcase.gsub(" ","_")}_log.rb"
29
+ end
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def file_name
36
+ name.underscore
37
+ end
38
+
39
+ def module_file_name
40
+ parent.underscore
41
+ end
42
+
43
+ def class_name
44
+ name.classify
45
+ end
46
+
47
+ def module_name
48
+ parent.classify
49
+ end
50
+
51
+ def table_prefix
52
+ parent.underscore + "_"
53
+ end
54
+
55
+ def plural_name
56
+ parent.underscore.pluralize
57
+ end
58
+
59
+ def plural_table_name
60
+ parent.underscore + "_" + parent.underscore.pluralize
61
+ end
62
+
63
+ def plural_class_name
64
+ parent.classify + name.classify.pluralize
65
+ end
66
+
67
+ def plural_module_name
68
+ parent.classify.pluralize
69
+ end
70
+
71
+ def date_string
72
+ date_string = DateTime.now.strftime("%Y%m%d%H%M%S")
73
+ end
74
+
75
+ end
76
+ end
@@ -0,0 +1,7 @@
1
+ module <%= module_name %>
2
+ class <%= class_name + @k.gsub(" ","_").classify%>Log < ApplicationRecord
3
+
4
+ belongs_to :<%=class_name.underscore.downcase %>
5
+
6
+ end
7
+ end
@@ -0,0 +1,49 @@
1
+ module <%= module_name %>
2
+ class <%= class_name %> < ApplicationRecord
3
+ <% unless @c == nil %># The method(s) that correspond to device interfaces are: <% @c[:attributes].each do |k,v| %><%=k.downcase.gsub(" ", "_")%> <% end %><% end %>
4
+ <%unless @c == nil %><% unless Apiotics.configuration.local_logging == false %><% @c[:attributes].each do |k,v| %>
5
+ has_many :<%= class_name.underscore.downcase.gsub(" ", "_") + "_#{k.underscore.downcase.gsub(" ", "_")}_logs"%>, dependent: :destroy
6
+ <% end %><% end %><% end %>
7
+ belongs_to :<%= module_name.underscore.downcase.gsub(" ", "_")%>
8
+ attr_accessor :skip_extract
9
+ after_commit :extract, unless: :skip_extract
10
+ after_commit :channel_push
11
+ <% unless @c == nil %><% @c[:attributes].each do |k,v| %><% unless v[:values] == "" %>validates :<%= k.downcase.gsub(" ", "_").underscore %>, inclusion: { in: %w(<%= v[:values].join(" ") %>,
12
+ message: "%{value} is not a valid <%= k %>" }<% end %><% unless v[:range] == "" %>
13
+ validates :<%= k.gsub(" ", "_").underscore %>, inclusion: { in: <%= v[:range] %>,
14
+ message: "%{value} is not within the range <%= v[:range] %>" }<% end %><% if v[:type] == "enum" %>
15
+ enum <%= k.gsub(" ", "_").underscore %>: <%= v[:values] %><% end %><% end %><% end %>
16
+
17
+
18
+ def sync
19
+ Apiotics.sync(self)
20
+ end
21
+
22
+ private
23
+
24
+ def extract
25
+ Apiotics::Extract.send(self)
26
+ end
27
+
28
+ def channel_push
29
+ if Apiotics.configuration.push == true
30
+ interfaces = Hash.new
31
+ puts self.previous_changes
32
+ self.previous_changes.each do |k,v|
33
+ if Apiotics::Extract.is_target(self, k)
34
+ interfaces[k] = v[1].to_s
35
+ end
36
+ end
37
+ interfaces.each do |k,v|
38
+ ActionCable.server.broadcast "#{self.class.parent.to_s.underscore.downcase.gsub(" ", "_")}_channel",
39
+ apiotics_instance: self.<%= module_name.underscore.downcase.gsub(" ", "_")%>.apiotics_instance,
40
+ worker_name: self.class.parent.to_s.underscore.downcase.gsub(" ", "_"),
41
+ model_name: self.class.name.demodulize.to_s.underscore.downcase.gsub(" ", "_"),
42
+ interface: k,
43
+ value: v
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,14 @@
1
+ module <%= module_name %>
2
+ def self.table_name_prefix
3
+ '<%= table_prefix %>'
4
+ end
5
+
6
+ def self.sync_device_instances
7
+ Apiotics.sync_device_instances(self.name)
8
+ end
9
+
10
+ def self.sync_devices
11
+ Apiotics.sync_device_instances(self.name, true)
12
+ end
13
+
14
+ end
@@ -0,0 +1,8 @@
1
+ module <%= module_name %>
2
+ class <%= module_name %> < ApplicationRecord
3
+ <% @targets[module_name].keys.each do |key| %>
4
+ has_one :<%= key.underscore.downcase.gsub(" ", "_")%>, dependent: :destroy
5
+ accepts_nested_attributes_for :<%= key.underscore.downcase.gsub(" ", "_")%>
6
+ <% end %>
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ class Create<%= plural_module_name %> < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :<%= plural_table_name %> do |t|
4
+ t.string :apiotics_instance
5
+ t.string :name
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ Creates a database table with attributes that Apiotics requires.
3
+
4
+ Example:
5
+ rails generate apiotics:create_table Table attribute:type attribute:type ... attribute:type
6
+
7
+ This will create:
8
+ db/migrate/{datetime_stamp}_create_table.rb
9
+ db/migrate/{datetime_stamp}_create_table_logs.rb
@@ -0,0 +1,62 @@
1
+ module Apiotics
2
+ class CreateTableGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ argument :parent, :type => :string
5
+ argument :name, :type => :string
6
+ argument :attributes, :type => :hash, :required => false
7
+
8
+ def copy_create_table_files
9
+ @attribute_map = {
10
+ "smallint" => {"kind" => "integer", "limit" => 2},
11
+ "bigint" => {"kind" => "integer", "limit" => 8},
12
+ "uint8_t" => {"kind" => "integer", "limit" => 2},
13
+ "uint16_t" => {"kind" => "integer", "limit" => 4},
14
+ "uint32_t" => {"kind" => "integer", "limit" => 8},
15
+ "int16_t" => {"kind" => "integer", "limit" => 2},
16
+ "int32_t" => {"kind" => "integer", "limit" => 4},
17
+ "int_64t" => {"kind" => "integer", "limit" => 8}
18
+ }
19
+ template "create_table.rb.erb", "db/migrate/#{date_string}_create_#{plural_name}.rb"
20
+ unless Apiotics.configuration.local_logging == false
21
+ sleep 1
22
+ attributes.each do |k,v|
23
+ @k = k
24
+ @v = v
25
+ template "create_logs_table.rb.erb", "db/migrate/#{date_string}_create_#{table_name}_#{@k}_logs.rb"
26
+ sleep 1
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def date_string
34
+ date_string = DateTime.now.strftime("%Y%m%d%H%M%S")
35
+ end
36
+
37
+ def plural_name
38
+ parent.underscore + "_" + name.underscore.pluralize
39
+ end
40
+
41
+ def table_name
42
+ parent.underscore + "_" + name.underscore
43
+ end
44
+
45
+ def class_name
46
+ name.classify
47
+ end
48
+
49
+ def plural_class_name
50
+ parent.classify + name.classify.pluralize
51
+ end
52
+
53
+ def logs_class_name(k)
54
+ parent.classify + name.classify + k.classify + "Logs"
55
+ end
56
+
57
+ def logs_table_name(k)
58
+ parent.underscore + "_" + name.underscore + "_" + k.underscore + "_" + "logs"
59
+ end
60
+
61
+ end
62
+ end
@@ -0,0 +1,14 @@
1
+ class Create<%= logs_class_name(@k) %> < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :<%= logs_table_name(@k) %> do |t|
4
+ <% if @attribute_map[@v] != nil %>t.<%= @attribute_map[@v]["kind"] %> :<%= @k %>, limit: <%= @attribute_map[@v]["limit"] %><% else %>t.<%= @v %> :<%= @k %><% end %>
5
+ t.boolean :<%= @k %>_ack
6
+ t.boolean :<%= @k %>_complete
7
+ t.string :<%= @k %>_timestamp
8
+ t.string :<%= @k %>_status
9
+ t.string :<%= @k %>_action
10
+ t.integer :<%= name.underscore.downcase %>_id
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ class Create<%= plural_class_name %> < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :<%= plural_name %> do |t|
4
+ <% attributes.each do |k,v| %>
5
+ <% if @attribute_map[v] != nil %>t.<%= @attribute_map[v]["kind"] %> :<%= k %>, limit: <%= @attribute_map[v]["limit"] %><% else %>t.<%= v %> :<%= k %><% end %>
6
+ t.boolean :<%= k %>_ack
7
+ t.boolean :<%= k %>_complete
8
+ t.string :<%= k %>_timestamp
9
+ t.string :<%= k %>_status
10
+ t.string :<%= k %>_action
11
+ <% end %>
12
+ t.integer :<%= parent.underscore.downcase.gsub(" ", "_") + "_id" %>
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ This generator creates an apiotics.rb initializer file at config/initializers
3
+
4
+ Example:
5
+ rails generate apiotics_initializer
6
+
7
+ This will create:
8
+ config/initializers/apiotics.rb
@@ -0,0 +1,29 @@
1
+ module Apiotics
2
+ class InitializerGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ argument :portal, :type => :string, :required => false
5
+
6
+ def copy_initializer_file
7
+ if portal == "true"
8
+ @c = Apiotics::Portal.parse_all_interfaces
9
+ template "apiotics_targets.rb.erb", "config/initializers/apiotics_targets.rb"
10
+ @p = Apiotics::Portal.parse_parents
11
+ template "apiotics_parents.rb.erb", "config/initializers/apiotics_parents.rb"
12
+ else
13
+ template "apiotics.rb.erb", "config/initializers/apiotics.rb"
14
+ template "apiotics_settings.rb.erb", "db/migrate/#{date_string}_create_apiotics_settings.rb"
15
+ template "setting.rb.erb", "app/models/apiotics_setting.rb"
16
+ #template "apiotics_module.rb.erb", "app/models/apiotics.rb"
17
+ end
18
+ end
19
+
20
+
21
+
22
+ private
23
+
24
+ def date_string
25
+ date_string = DateTime.now.strftime("%Y%m%d%H%M%S")
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ Apiotics.configure do |config|
2
+ config.public_key = nil #set this to an Environment variable
3
+ config.private_key = nil #set this to an Environment variable
4
+ config.local_port = 8001
5
+ config.server_port = 8000
6
+ config.tls = true
7
+ config.verify_peer = true
8
+ config.handshake = true
9
+ config.local_logging = true
10
+ end
@@ -0,0 +1,6 @@
1
+ module Apiotics
2
+ def self.table_name_prefix
3
+ 'apiotics_'
4
+ end
5
+
6
+ end
@@ -0,0 +1,3 @@
1
+ Apiotics.configure do |config|
2
+ config.parents = <%= @p %>
3
+ end
@@ -0,0 +1,9 @@
1
+ class CreateApioticsSettings < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :apiotics_settings do |t|
4
+ t.string :key
5
+ t.text :value
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'simple_form'
2
+ Apiotics.configure do |config|
3
+ config.targets = <%= @c %>
4
+ end
@@ -0,0 +1,3 @@
1
+ class ApioticsSetting < ApplicationRecord
2
+
3
+ end
@@ -0,0 +1,11 @@
1
+ Description:
2
+ Install the initial files for the Apiotics gem.
3
+
4
+ Example:
5
+ rails g apiotics:install
6
+
7
+ This will create:
8
+ config/initializers/apiotics.rb
9
+ lib/scripts/server.rb
10
+ lib/scripts/server_control.rb
11
+ lib/tasks/comm_server.rake
@@ -0,0 +1,11 @@
1
+ module Apiotics
2
+ class InstallGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def install
6
+ generate "apiotics:initializer"
7
+ generate "apiotics:script"
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ Description:
2
+ Creates database migrations for Apiotics tables
3
+
4
+ Example:
5
+ rails generate apiotics:migration AddAttributeToTableName attribute:type attribute:type ... attribute:type
6
+
7
+ This will create:
8
+ db/migrate/{datetime_string}_migration_name.rb
9
+
10
+ The AddAttributeToTableName argument is flexible, but expects an existing Apiotics table name after the "To" portion of the name.
@@ -0,0 +1,54 @@
1
+ module Apiotics
2
+ class MigrationGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ argument :name, :type => :string
5
+ argument :attributes, :type => :hash, :required => true
6
+
7
+ def copy_create_table_files
8
+ template "migrate_table.rb.erb", "db/migrate/#{date_string}_#{underscore_name}.rb"
9
+ sleep 1
10
+ attributes.each do |k,v|
11
+ @k = k
12
+ @v = v
13
+ template "create_logs_table.rb.erb", "db/migrate/#{date_string}_#{underscore_name}_logs.rb"
14
+ sleep 1
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def date_string
21
+ date_string = DateTime.now.strftime("%Y%m%d%H%M%S")
22
+ end
23
+
24
+ def table_name
25
+ array = name.underscore.split('_')
26
+ i = 0
27
+ new_array = Array.new
28
+ marker = false
29
+ while i < array.length
30
+ if marker == true
31
+ new_array << array[i]
32
+ end
33
+ if array[i] == "to"
34
+ marker = true
35
+ end
36
+ i += 1
37
+ end
38
+ new_array.join('_')
39
+ end
40
+
41
+ def underscore_name
42
+ name.underscore
43
+ end
44
+
45
+ def class_name
46
+ name.classify
47
+ end
48
+
49
+ def logs_table_name(k)
50
+ table_name + "_" + k.underscore + "_" + "logs"
51
+ end
52
+
53
+ end
54
+ end