syncable_models 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
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