syncable_models 0.0.9 → 0.0.10

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzExMWFmOTBmNzJkMjVjZjBlYTY1MjVkMWE4NzVlYzQxYjY1ZmIwNQ==
4
+ MjM5MDVhOWMwZGRkMGIyMmI3NTI1NTNlZjk2ZTVmZWE5NzJmY2NkMA==
5
5
  data.tar.gz: !binary |-
6
- NTk0NjI3ZTliZTVlNGQ5ZWQ2NzMwZDY2NzExOTA4N2Q5Mzg5NDEzMg==
6
+ OGI3NTFhOWI4OWNjZDYzZmE1YmYyZGNlNDNlYjcyMjgyMDllZWRlZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTYxODY1NWM0ZDUwYmM4MDdiMTczYzMxOTFjMWFlODg3ZWY3YjVmMDliYjhl
10
- ZDUyYzM3NWNjNDkyYzMwYjk0NzE4YWQ0NmVmNWU2ZTc4MzA3NGU2NTJmNjU5
11
- M2NkMTM4MWRmNWNiMTQyNjdmMDdmMDgyNDk5ZjliZmRkNDE3NDk=
9
+ OWU5M2Q2NDA5MmE2NGUxNjI4ODQ5YjNjZjAxMjRkMjQ1NjYyMjhiYmU5MDlh
10
+ NTFhMTIyZmMxNTZjYWIxNGY2YmY3OTBiMTcyZjczMWMxZTRhZjU4NzBiOGI4
11
+ NDZjMjU2YWZjMzg2OWJlMzBkMjAyODVjNTRhOTdmNmQ1NTc4Y2U=
12
12
  data.tar.gz: !binary |-
13
- YWI1OTQxYTg0MmRhNGY5NjE0ZWEyNTE3NTlkNWUyNmIxNDA2MGE3NWM2YmM4
14
- MjkxNmY1YTUwNTk3YmM2MjkzOGQwZjkyODkwZDU0NGM0ZmUyNzBlZWY2Mzk1
15
- NzhlMTQwOWE3MTNjMmRiYWZiMzI0YjkxYThmZjgzNmE4NzcyNTk=
13
+ OWI5MjQzYjM4MDU4MTY0MzkyMGI3YTY5NTg1ZTY0YjYwOGFlMWRmOTEwN2Y1
14
+ NzE2YTNmM2Q2Y2M5MjY1YzMzNDMyNTQ1NzM2N2JkOTZlNTVkNGFhZTA2ZmE3
15
+ ZmZhMjZkYWI0MWQyNmRhM2UyM2JhZWQxOGUzNTNlNDViNTdlZjE=
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require ENV['APP_PATH'] || File.join(File.expand_path('.'), 'config', 'application')
4
+ Rails.application.initialize!
5
+
6
+ ## Importer
7
+ puts 'Starting Importer... '
8
+
9
+ importers = []
10
+
11
+ SyncableModels::Importer.imports.each do |i|
12
+ puts "Registering importer #{ i.name } (interval=#{ i.interval }s, timeout=#{ i.timeout }s)..."
13
+ importers << Concurrent::TimerTask.new(execution_interval: i.interval,
14
+ timeout_interval: i.timeout,
15
+ run_now: true) do
16
+ begin
17
+ i.import
18
+ rescue => exc
19
+ Rails.logger.error "[Importer] Error: #{exc.message}\n" \
20
+ " backtrace:\n #{exc.backtrace.join("\n ")}"
21
+ end
22
+ end
23
+ end
24
+
25
+ importers.each &:execute
26
+ puts "done."
27
+
28
+ # Signal catching
29
+ def shut_down
30
+ puts "\nShutting down gracefully..."
31
+ sleep 1
32
+ end
33
+
34
+ ["TERM", "INT"].each do |sig|
35
+ trap(sig) do
36
+ shut_down
37
+ exit
38
+ end
39
+ end
40
+
41
+
42
+ loop { sleep }
@@ -1,13 +1,13 @@
1
1
  SyncableModels::Importer.config do |conf|
2
2
  ## Define one or several imports here
3
- # conf.add_import do |import|
3
+ # conf.add_import :my_awesome_import do |import|
4
4
  # import.api_url = 'http://www.example.com/import_api/'
5
5
  # import.destination = :my_awesome_project
6
6
 
7
7
  # import.import_model 'Project', id_key: :uuid
8
8
  # import.import_model 'Team', fetch_path: 'some_teams', sync_path: 'sync_some_teams'
9
- # end
10
9
 
11
- # conf.interval = 5.minutes
12
- # conf.timeout = 10.seconds
10
+ # conf.interval = 5.minutes
11
+ # conf.timeout = 10.seconds
12
+ # end
13
13
  end
@@ -3,11 +3,14 @@ require 'faraday'
3
3
  module SyncableModels
4
4
  module Importer
5
5
  class Import
6
- attr_accessor :api_url, :api_key, :destination
6
+ attr_accessor :name, :api_url, :api_key, :destination, :interval, :timeout
7
7
  attr_reader :models
8
8
 
9
- def initialize
9
+ def initialize(name)
10
+ @name = name.to_s
10
11
  @models = {}
12
+ @interval = 5.minutes
13
+ @timeout = 10.seconds
11
14
  end
12
15
 
13
16
  def import_model(class_name, args = {})
@@ -31,8 +34,15 @@ module SyncableModels
31
34
  params
32
35
  end
33
36
 
34
- def import
35
- @models.each do |model_name, params|
37
+ def import(model_names=[])
38
+ selected_models = model_names.any? ?
39
+ @models.select{ |k, v| k.in? model_names } :
40
+ @models
41
+
42
+ selected_models.each do |model_name, params|
43
+ puts "[SyncableModels::Importer] Importing #{model_name.underscore.pluralize}..."
44
+ next if model_names.any? && !model_name.in?(model_names)
45
+
36
46
  fetch_url = self.api_url + params[:fetch_path]
37
47
  sync_url = self.api_url + params[:sync_path]
38
48
 
@@ -66,22 +76,24 @@ module SyncableModels
66
76
  end
67
77
  end
68
78
 
69
- mattr_accessor :imports, :interval, :timeout
79
+ mattr_accessor :imports
70
80
  @@imports = []
71
- @@interval = 5.minutes
72
- @@timeout = 10.seconds
73
81
 
74
82
  def self.config
75
83
  yield self
76
84
  end
77
85
 
78
- def self.add_import
79
- import = Import.new
86
+ def self.add_import(name)
87
+ import = Import.new name
80
88
  yield import
81
89
  @@imports << import
82
90
  end
83
91
 
84
- def self.import
92
+ def self.find_import(name)
93
+ @@imports.detect{ |i| i.name == name.to_s }
94
+ end
95
+
96
+ def self.import_all
85
97
  @@imports.each &:import
86
98
  end
87
99
  end
@@ -1,3 +1,3 @@
1
1
  module SyncableModels
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
@@ -0,0 +1,18 @@
1
+ # desc "Explaining what the task does"
2
+
3
+ def prepare_models(models)
4
+ return unless models
5
+ models.split(',').map(&:camelize)
6
+ end
7
+
8
+ namespace :syncable_models do
9
+ task import: :environment do
10
+ models = prepare_models(ENV['MODELS']) || []
11
+
12
+ if import = SyncableModels::Importer.find_import(ENV['NAME'])
13
+ import.import models
14
+ else
15
+ puts "Import #{ENV['NAME']} was not found..."
16
+ end
17
+ end
18
+ end
@@ -1,7 +1,7 @@
1
-  (3.9ms) CREATE TABLE "syncs" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "subject_id" integer, "subject_type" varchar, "destination" varchar, "created_at" datetime, "updated_at" datetime) 
2
-  (0.1ms) select sqlite_version(*)
3
-  (1.7ms) CREATE INDEX "index_syncs_on_destination" ON "syncs" ("destination")
4
-  (0.2ms) SELECT sql
1
+  (38.8ms) CREATE TABLE "syncs" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "subject_id" integer, "subject_type" varchar, "destination" varchar, "created_at" datetime, "updated_at" datetime) 
2
+  (0.2ms) select sqlite_version(*)
3
+  (2.6ms) CREATE INDEX "index_syncs_on_destination" ON "syncs" ("destination")
4
+  (0.1ms) SELECT sql
5
5
  FROM sqlite_master
6
6
  WHERE name='index_syncs_on_destination' AND type='index'
7
7
  UNION ALL
@@ -9,12 +9,12 @@
9
9
  FROM sqlite_temp_master
10
10
  WHERE name='index_syncs_on_destination' AND type='index'
11
11
 
12
-  (1.7ms) CREATE INDEX "index_syncs_on_subject_id_and_subject_type_and_destination" ON "syncs" ("subject_id", "subject_type", "destination")
13
-  (1.8ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL)
14
-  (1.6ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
12
+  (2.5ms) CREATE INDEX "index_syncs_on_subject_id_and_subject_type_and_destination" ON "syncs" ("subject_id", "subject_type", "destination")
13
+  (6.8ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL)
14
+  (4.5ms) CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
15
15
   (0.1ms) SELECT version FROM "schema_migrations"
16
-  (1.3ms) INSERT INTO "schema_migrations" (version) VALUES ('20160225141153')
17
- ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations"
16
+  (7.2ms) INSERT INTO "schema_migrations" (version) VALUES ('20160225141153')
17
+ ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations".* FROM "schema_migrations"
18
18
   (0.2ms) begin transaction
19
19
  ------------------------------
20
20
  SyncableModelsTest: test_truth
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: syncable_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Serafim Nenarokov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-23 00:00:00.000000000 Z
11
+ date: 2016-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -66,11 +66,25 @@ dependencies:
66
66
  - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.9.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: concurrent-ruby-edge
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.1
69
83
  description: The gem provides tagged syncing functionality and API methods.
70
84
  email:
71
85
  - serafim.nenarokov@flant.ru
72
86
  executables:
73
- - import
87
+ - import_syncable_models
74
88
  extensions: []
75
89
  extra_rdoc_files: []
76
90
  files:
@@ -78,7 +92,7 @@ files:
78
92
  - README.md
79
93
  - Rakefile
80
94
  - app/models/syncable_models/sync.rb
81
- - bin/import
95
+ - bin/import_syncable_models
82
96
  - config/routes.rb
83
97
  - db/migrate/20160225141153_create_syncs.rb
84
98
  - lib/generators/syncable_models/import_config_generator.rb
@@ -89,7 +103,7 @@ files:
89
103
  - lib/syncable_models/engine.rb
90
104
  - lib/syncable_models/importer.rb
91
105
  - lib/syncable_models/version.rb
92
- - lib/tasks/syncable_models_tasks.rake
106
+ - lib/tasks/syncable_models.rake
93
107
  - test/dummy/README.rdoc
94
108
  - test/dummy/Rakefile
95
109
  - test/dummy/app/assets/javascripts/application.js
data/bin/import DELETED
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.join((ENV['APP_PATH'] || File.expand_path('.')), 'config', 'environment')
4
-
5
- ## Importer
6
- print 'Starting Importer... '
7
-
8
- interval = SyncableModels::Importer.interval
9
- timeout = SyncableModels::Importer.timeout
10
-
11
- importer = Concurrent::TimerTask.new(execution_interval: interval, timeout_interval: timeout, run_now: true) do
12
- begin
13
- SyncableModels::Importer.import
14
- rescue => exc
15
- Rails.logger.error "[Importer] Error: #{exc.message}\n" \
16
- " backtrace:\n #{exc.backtrace.join("\n ")}"
17
- end
18
- end
19
- importer.execute
20
- print "done.\n"
21
-
22
- # Signal catching
23
- def shut_down
24
- puts "\nShutting down gracefully..."
25
- sleep 1
26
- end
27
-
28
- ["TERM", "INT"].each do |sig|
29
- trap(sig) do
30
- shut_down
31
- exit
32
- end
33
- end
34
-
35
-
36
- loop { sleep }
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :syncable_models do
3
- # # Task goes here
4
- # end