import_everything_rails 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ class DataloadsController < InheritedResources::Base
2
+ belongs_to :workspace
3
+ def run
4
+ @dataload = resource
5
+ @dataload.run!
6
+ redirect_to [@dataload.workspace,@dataload]
7
+ end
8
+
9
+ end
@@ -1,18 +1,110 @@
1
- # class MockFile
2
- # attr_accessor :filename, :read
3
- # include FromHash
4
- # end
1
+ class MyTempfile < Tempfile
2
+ attr_accessor :original_filename
3
+ end
4
+
5
+ class UrlFile
6
+ attr_accessor :url
7
+ include FromHash
8
+ def basename
9
+ url.split("/").last
10
+ end
11
+ def tempfile
12
+ require 'open-uri'
13
+ mylog "tempfile", :url => url, :last => basename
14
+ res = MyTempfile.new(basename)
15
+ res.original_filename = basename
16
+ res << (open(url) { |f| f.read })
17
+ res
18
+ end
19
+ def self.file(url)
20
+ new(:url => url).tempfile
21
+ end
22
+ end
23
+
24
+ class ReadProxy
25
+ attr_accessor :file
26
+ include FromHash
27
+ def method_missing(sym,*args,&b)
28
+ file.send(sym,*args,&b)
29
+ end
30
+ fattr(:read) { file.read }
31
+ def respond_to?(x)
32
+ file.respond_to?(x)
33
+ end
34
+ end
35
+
36
+ require 'mongo_mapper'
37
+ require 'joint'
5
38
 
6
39
  class Dataload
7
40
  include MongoMapper::Document
8
41
  plugin Joint
9
42
  attachment :file
10
43
  key :coll_name
44
+ key :url
45
+ key :data
46
+ key :ignore_duplicates, Boolean
11
47
  belongs_to :workspace
48
+ before_create 'set_file_from_url!'
49
+ def text
50
+ file.name.present? ? wrapped_file.read : nil
51
+ end
52
+ def set_file_from_url!
53
+ if url.present?
54
+ self.file = UrlFile.file(url)
55
+ elsif data.present?
56
+ self.file = data_tempfile
57
+ end
58
+ end
59
+ def data_tempfile
60
+ f = Tempfile.new('gdfgfhfghfg.sql')
61
+ f << data
62
+ f
63
+ end
64
+ def myfilename
65
+ file.name
66
+ end
67
+ end
68
+
69
+ class Dataload
70
+ key :rows_added
71
+ fattr(:wrapped_file) { ReadProxy.new(:file => file) }
72
+ def duplicate?(c,row)
73
+ res = c.find_one(row)
74
+ mylog "duplicate", :res => res
75
+ !!res
76
+ end
77
+ def should_ignore?(c,row)
78
+ ignore_duplicates && duplicate?(c,row)
79
+ end
80
+ def run!
81
+ self.rows_added ||= 0
82
+ ImportEverything.each_table_and_rows(:file => wrapped_file) do |table,rows|
83
+ c = workspace.get_or_create_coll(table.to_s)
84
+ rows.each do |row|
85
+ unless should_ignore?(c,row)
86
+ c.save(row)
87
+ self.rows_added += 1
88
+ end
89
+ end
90
+ c.invalidate_cache!
91
+ end
92
+ save!
93
+ end
94
+ fattr(:preview) { ImportEverything.preview(import_ops) }
95
+ def import_ops
96
+ {:file => wrapped_file}.merge(addl_ops)
97
+ end
12
98
  end
13
99
 
14
100
  class Dataload
15
101
  key :addl_ops, Hash
102
+ def addl_ops_hash
103
+ res = addl_ops.clone
104
+ preview.addl_required_fields.each { |x| res[x.to_s] ||= '' }
105
+ mylog "dataload", :addl_ops => addl_ops, :res => res
106
+ res
107
+ end
16
108
  def method_missing(sym,*args,&b)
17
109
  if sym.to_s[-1..-1] == '='
18
110
  self.addl_ops[sym.to_s[0..-2]] = args.first
@@ -22,6 +114,16 @@ class Dataload
22
114
  end
23
115
  end
24
116
 
117
+ class Dataload
118
+ def self.find(*args)
119
+ if args.first == :all
120
+ all(*args[1..-1])
121
+ else
122
+ super
123
+ end
124
+ end
125
+ end
126
+
25
127
  # class Dataload
26
128
  # attr_accessor :coll, :data, :url, :file, :workspace, :actual
27
129
  # include FromHash
@@ -0,0 +1,86 @@
1
+ raise 'foo'
2
+ # class MockFile
3
+ # attr_accessor :filename, :read
4
+ # include FromHash
5
+ # end
6
+
7
+ # class Dataload
8
+ # include MongoMapper::Document
9
+ # plugin Joint
10
+ # attachment :file
11
+ # key :coll_name
12
+ # belongs_to :workspace
13
+ # end
14
+ #
15
+ # class Dataload
16
+ # key :addl_ops, Hash
17
+ # def method_missing(sym,*args,&b)
18
+ # if sym.to_s[-1..-1] == '='
19
+ # self.addl_ops[sym.to_s[0..-2]] = args.first
20
+ # else
21
+ # super
22
+ # end
23
+ # end
24
+ # end
25
+
26
+ # class Dataload
27
+ # attr_accessor :coll, :data, :url, :file, :workspace, :actual
28
+ # include FromHash
29
+ # fattr(:addl_ops) { {} }
30
+ # def import_ops
31
+ # {:file => get_file}.merge(addl_ops)
32
+ # end
33
+ # def save!
34
+ # ImportEverything.each_table_and_rows(:file => get_file) do |table,rows|
35
+ # c = workspace.get_or_create_coll(table.to_s)
36
+ # rows.each { |row| c.save(row) }
37
+ # c.invalidate_cache!
38
+ # end
39
+ # end
40
+ # fattr(:get_file) do
41
+ # if url.present?
42
+ # require 'open-uri'
43
+ # MockFile.new(:filename => url, :read => open(url, 'rb') { |f| f.read })
44
+ # elsif file.present?
45
+ # file
46
+ # else
47
+ # data
48
+ # end
49
+ # end
50
+ # fattr(:preview) { ImportEverything.preview(import_ops) }
51
+ # def to_json
52
+ # #save! if preview.ready?
53
+ # mylog "dataload", :ready => preview.ready?, :actual => actual
54
+ # if preview.ready?
55
+ # if actual
56
+ # save!
57
+ # {:ran => true}
58
+ # else
59
+ # mylog 'dataload', :stuff => 'ready not actual'
60
+ # res = {:addl_required_fields => preview.addl_required_fields, :result => true, :tables => preview.tables.map { |x| x.to_hash }}
61
+ # mylog 'dataload', :stuff => 'ready not actual 2'
62
+ # res
63
+ # end
64
+ # else
65
+ # {:addl_required_fields => preview.addl_required_fields, :result => false}
66
+ # end
67
+ # end
68
+ # def method_missing(sym,*args,&b)
69
+ # if sym.to_s[-1..-1] == '='
70
+ # self.addl_ops[sym.to_s[0..-2]] = args.first
71
+ # else
72
+ # super
73
+ # end
74
+ # end
75
+ # end
76
+ #
77
+ #
78
+ # class Dataload
79
+ # extend ActiveModel::Naming
80
+ # def to_key
81
+ # nil
82
+ # end
83
+ # def persisted?
84
+ # false
85
+ # end
86
+ # end
@@ -1,3 +1,3 @@
1
1
  module ImportEverythingRails
2
- require 'authr/engine' if defined?(Rails)
2
+ require 'import_everything_rails/engine' if defined?(Rails)
3
3
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: import_everything_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - Mike Harris
@@ -9,19 +14,21 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-05-12 00:00:00 -04:00
17
+ date: 2010-05-18 00:00:00 -04:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- version:
30
+ type: :development
31
+ version_requirements: *id001
25
32
  description: import_everything_rails
26
33
  email: mharris717@gmail.com
27
34
  executables: []
@@ -32,7 +39,9 @@ extra_rdoc_files:
32
39
  - LICENSE
33
40
  - README.rdoc
34
41
  files:
42
+ - app/controllers/dataloads_controller.rb
35
43
  - app/models/dataload.rb
44
+ - lib/app/models/dataload.rb
36
45
  - lib/import_everything_rails.rb
37
46
  - lib/import_everything_rails/engine.rb
38
47
  - LICENSE
@@ -50,18 +59,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
59
  requirements:
51
60
  - - ">="
52
61
  - !ruby/object:Gem::Version
62
+ segments:
63
+ - 0
53
64
  version: "0"
54
- version:
55
65
  required_rubygems_version: !ruby/object:Gem::Requirement
56
66
  requirements:
57
67
  - - ">="
58
68
  - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
59
71
  version: "0"
60
- version:
61
72
  requirements: []
62
73
 
63
74
  rubyforge_project:
64
- rubygems_version: 1.3.5
75
+ rubygems_version: 1.3.6
65
76
  signing_key:
66
77
  specification_version: 3
67
78
  summary: import_everything_rails