uploadable 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.todo +7 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +108 -0
- data/MIT-LICENSE +20 -0
- data/README.md +0 -0
- data/Rakefile +12 -0
- data/lib/uploadable.rb +26 -0
- data/lib/uploadable/instance_methods.rb +5 -0
- data/lib/uploadable/processor.rb +34 -0
- data/lib/uploadable/railtie.rb +10 -0
- data/lib/uploadable/version.rb +3 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/support/csv/album_fixture_1.csv +2 -0
- data/spec/support/sample_app/.gitignore +15 -0
- data/spec/support/sample_app/Gemfile +5 -0
- data/spec/support/sample_app/Gemfile.lock +87 -0
- data/spec/support/sample_app/README.rdoc +261 -0
- data/spec/support/sample_app/Rakefile +7 -0
- data/spec/support/sample_app/app/controllers/application_controller.rb +3 -0
- data/spec/support/sample_app/app/helpers/application_helper.rb +2 -0
- data/spec/support/sample_app/app/mailers/.gitkeep +0 -0
- data/spec/support/sample_app/app/models/.gitkeep +0 -0
- data/spec/support/sample_app/app/models/album.rb +6 -0
- data/spec/support/sample_app/app/models/track.rb +10 -0
- data/spec/support/sample_app/app/models/user.rb +3 -0
- data/spec/support/sample_app/config.ru +4 -0
- data/spec/support/sample_app/config/application.rb +62 -0
- data/spec/support/sample_app/config/boot.rb +6 -0
- data/spec/support/sample_app/config/database.yml +25 -0
- data/spec/support/sample_app/config/environment.rb +5 -0
- data/spec/support/sample_app/config/environments/development.rb +37 -0
- data/spec/support/sample_app/config/environments/production.rb +67 -0
- data/spec/support/sample_app/config/environments/test.rb +37 -0
- data/spec/support/sample_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/support/sample_app/config/initializers/inflections.rb +15 -0
- data/spec/support/sample_app/config/initializers/mime_types.rb +5 -0
- data/spec/support/sample_app/config/initializers/secret_token.rb +7 -0
- data/spec/support/sample_app/config/initializers/session_store.rb +8 -0
- data/spec/support/sample_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/support/sample_app/config/locales/en.yml +5 -0
- data/spec/support/sample_app/config/routes.rb +58 -0
- data/spec/support/sample_app/db/migrate/20120624173544_create_albums.rb +10 -0
- data/spec/support/sample_app/db/migrate/20120624173638_create_tracks.rb +10 -0
- data/spec/support/sample_app/db/migrate/20120625055607_create_users.rb +10 -0
- data/spec/support/sample_app/db/migrate/20120630102016_add_column_top_rated_to_tracks.rb +5 -0
- data/spec/support/sample_app/db/schema.rb +38 -0
- data/spec/support/sample_app/db/seeds.rb +7 -0
- data/spec/support/sample_app/doc/README_FOR_APP +2 -0
- data/spec/support/sample_app/lib/assets/.gitkeep +0 -0
- data/spec/support/sample_app/lib/tasks/.gitkeep +0 -0
- data/spec/support/sample_app/log/.gitkeep +0 -0
- data/spec/support/sample_app/public/404.html +26 -0
- data/spec/support/sample_app/public/422.html +26 -0
- data/spec/support/sample_app/public/500.html +25 -0
- data/spec/support/sample_app/public/favicon.ico +0 -0
- data/spec/support/sample_app/public/index.html +241 -0
- data/spec/support/sample_app/public/robots.txt +5 -0
- data/spec/support/sample_app/script/rails +6 -0
- data/spec/support/sample_app/test/fixtures/.gitkeep +0 -0
- data/spec/support/sample_app/test/functional/.gitkeep +0 -0
- data/spec/support/sample_app/test/integration/.gitkeep +0 -0
- data/spec/support/sample_app/test/performance/browsing_test.rb +12 -0
- data/spec/support/sample_app/test/test_helper.rb +13 -0
- data/spec/support/sample_app/test/unit/.gitkeep +0 -0
- data/spec/support/sample_app/vendor/assets/javascripts/.gitkeep +0 -0
- data/spec/support/sample_app/vendor/assets/stylesheets/.gitkeep +0 -0
- data/spec/support/sample_app/vendor/plugins/.gitkeep +0 -0
- data/spec/uploadable/processor_spec.rb +35 -0
- data/spec/uploadable_spec.rb +36 -0
- data/uploadable.gemspec +20 -0
- metadata +134 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
require File.expand_path('../../config/environment', __FILE__)
|
3
|
+
require 'rails/test_help'
|
4
|
+
|
5
|
+
class ActiveSupport::TestCase
|
6
|
+
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
7
|
+
#
|
8
|
+
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
9
|
+
# -- they do not yet inherit this setting
|
10
|
+
fixtures :all
|
11
|
+
|
12
|
+
# Add more helper methods to be used by all tests here...
|
13
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Uploadable::Processor" do
|
4
|
+
it "should take manadatory and optional attributes while initializing" do
|
5
|
+
processor = Uploadable::Processor.new :mandatory_fields => [:required], :optional_fields => [:maybe], :model => TestModel
|
6
|
+
processor.mandatory.should == [:required]
|
7
|
+
processor.optional.should == [:maybe]
|
8
|
+
processor.model.should == TestModel
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "transform_csv" do
|
12
|
+
it "should error or of headers not valid" do
|
13
|
+
processor = Uploadable::Processor.new :mandatory_fields => [:title], :optional_fields => [:artist]
|
14
|
+
lambda { processor.transform_csv "Artist\n\"John Denver\"" }.should raise_error("Mandatory header(s): title is missing")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should transform csv into array of hashes and reject extra columns" do
|
18
|
+
processor = Uploadable::Processor.new :mandatory_fields => [:artist], :optional_fields => [:title]
|
19
|
+
result = processor.transform_csv "Artist,Title,Extra\n\"John Denver\",\"All Aboard!\",1\n\"Usher\",\"Looking 4 Myself\",2"
|
20
|
+
|
21
|
+
result.should == [{:artist => "John Denver", :title => "All Aboard!"}, {:artist=>"Usher", :title=>"Looking 4 Myself"}]
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should transform the column values for which transform method is present" do
|
25
|
+
processor = Uploadable::Processor.new :mandatory_fields => [:name], :optional_fields => [:top_rated], :model => Track
|
26
|
+
result = processor.transform_csv "Name,Top Rated\n\"Waiting For A Train\",Y\n\"People Get Ready\",N\n\"Lining Track\","
|
27
|
+
|
28
|
+
result.should == [{:name => "Waiting For A Train", :top_rated => true}, {:name => "People Get Ready", :top_rated => false},
|
29
|
+
{:name => "Lining Track", :top_rated => false}]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class TestModel
|
35
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Uploadable" do
|
4
|
+
describe "uploadable" do
|
5
|
+
it "all active record models should have access to uploadable methods" do
|
6
|
+
Album.methods.should include(:uploadable)
|
7
|
+
User.methods.should include(:uploadable)
|
8
|
+
Track.methods.should include(:uploadable)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should initialize a procesor if model is uploadable" do
|
12
|
+
Album.instance_variable_get(:@upload_processor).should_not be_nil
|
13
|
+
User.instance_variable_get(:@upload_processor).should be_nil
|
14
|
+
|
15
|
+
Album.instance_variable_get(:@upload_processor).model.should == Album
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should defind upload_from_csv method for models" do
|
19
|
+
Album.should respond_to(:upload_from_csv)
|
20
|
+
Track.should respond_to(:upload_from_csv)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "upload_from_csv" do
|
25
|
+
it "should raise NoMethodError for non uploadable models" do
|
26
|
+
lambda { User.upload_from_csv("") }.should raise_error(NoMethodError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should upload to an uploadable model" do
|
30
|
+
lambda { Album.upload_from_csv("Artist,Title,Extra\n\"John Denver\",\"All Aboard!\",1\n\"Usher\",\"Looking 4 Myself\",2")}.
|
31
|
+
should change(Album, :count).by(2)
|
32
|
+
Album.where(:artist => "John Denver", :title => "All Aboard!").count.should == 1
|
33
|
+
Album.where(:artist => "Usher", :title => "Looking 4 Myself").count.should == 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/uploadable.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path('../lib/uploadable/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.authors = ["Garima"]
|
5
|
+
gem.email = ["igarimasingh@gmail.com"]
|
6
|
+
gem.description = %q{Upload your csv to activerecord model}
|
7
|
+
gem.summary = %q{This gem gives you flexibility to upload the csv to you model. It also comes packed with some customizations}
|
8
|
+
gem.homepage = "https://github.com/singhgarima/uploadable"
|
9
|
+
|
10
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
11
|
+
gem.files = `git ls-files`.split("\n")
|
12
|
+
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
13
|
+
gem.name = "uploadable"
|
14
|
+
gem.require_paths = ["lib"]
|
15
|
+
gem.version = Uploadable::VERSION
|
16
|
+
gem.license = 'MIT'
|
17
|
+
|
18
|
+
gem.add_dependency 'fastercsv'
|
19
|
+
end
|
20
|
+
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: uploadable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Garima
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-01 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fastercsv
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: Upload your csv to activerecord model
|
31
|
+
email:
|
32
|
+
- igarimasingh@gmail.com
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- .todo
|
39
|
+
- Gemfile
|
40
|
+
- Gemfile.lock
|
41
|
+
- MIT-LICENSE
|
42
|
+
- README.md
|
43
|
+
- Rakefile
|
44
|
+
- lib/uploadable.rb
|
45
|
+
- lib/uploadable/instance_methods.rb
|
46
|
+
- lib/uploadable/processor.rb
|
47
|
+
- lib/uploadable/railtie.rb
|
48
|
+
- lib/uploadable/version.rb
|
49
|
+
- spec/spec_helper.rb
|
50
|
+
- spec/support/csv/album_fixture_1.csv
|
51
|
+
- spec/support/sample_app/.gitignore
|
52
|
+
- spec/support/sample_app/Gemfile
|
53
|
+
- spec/support/sample_app/Gemfile.lock
|
54
|
+
- spec/support/sample_app/README.rdoc
|
55
|
+
- spec/support/sample_app/Rakefile
|
56
|
+
- spec/support/sample_app/app/controllers/application_controller.rb
|
57
|
+
- spec/support/sample_app/app/helpers/application_helper.rb
|
58
|
+
- spec/support/sample_app/app/mailers/.gitkeep
|
59
|
+
- spec/support/sample_app/app/models/.gitkeep
|
60
|
+
- spec/support/sample_app/app/models/album.rb
|
61
|
+
- spec/support/sample_app/app/models/track.rb
|
62
|
+
- spec/support/sample_app/app/models/user.rb
|
63
|
+
- spec/support/sample_app/config.ru
|
64
|
+
- spec/support/sample_app/config/application.rb
|
65
|
+
- spec/support/sample_app/config/boot.rb
|
66
|
+
- spec/support/sample_app/config/database.yml
|
67
|
+
- spec/support/sample_app/config/environment.rb
|
68
|
+
- spec/support/sample_app/config/environments/development.rb
|
69
|
+
- spec/support/sample_app/config/environments/production.rb
|
70
|
+
- spec/support/sample_app/config/environments/test.rb
|
71
|
+
- spec/support/sample_app/config/initializers/backtrace_silencers.rb
|
72
|
+
- spec/support/sample_app/config/initializers/inflections.rb
|
73
|
+
- spec/support/sample_app/config/initializers/mime_types.rb
|
74
|
+
- spec/support/sample_app/config/initializers/secret_token.rb
|
75
|
+
- spec/support/sample_app/config/initializers/session_store.rb
|
76
|
+
- spec/support/sample_app/config/initializers/wrap_parameters.rb
|
77
|
+
- spec/support/sample_app/config/locales/en.yml
|
78
|
+
- spec/support/sample_app/config/routes.rb
|
79
|
+
- spec/support/sample_app/db/migrate/20120624173544_create_albums.rb
|
80
|
+
- spec/support/sample_app/db/migrate/20120624173638_create_tracks.rb
|
81
|
+
- spec/support/sample_app/db/migrate/20120625055607_create_users.rb
|
82
|
+
- spec/support/sample_app/db/migrate/20120630102016_add_column_top_rated_to_tracks.rb
|
83
|
+
- spec/support/sample_app/db/schema.rb
|
84
|
+
- spec/support/sample_app/db/seeds.rb
|
85
|
+
- spec/support/sample_app/doc/README_FOR_APP
|
86
|
+
- spec/support/sample_app/lib/assets/.gitkeep
|
87
|
+
- spec/support/sample_app/lib/tasks/.gitkeep
|
88
|
+
- spec/support/sample_app/log/.gitkeep
|
89
|
+
- spec/support/sample_app/public/404.html
|
90
|
+
- spec/support/sample_app/public/422.html
|
91
|
+
- spec/support/sample_app/public/500.html
|
92
|
+
- spec/support/sample_app/public/favicon.ico
|
93
|
+
- spec/support/sample_app/public/index.html
|
94
|
+
- spec/support/sample_app/public/robots.txt
|
95
|
+
- spec/support/sample_app/script/rails
|
96
|
+
- spec/support/sample_app/test/fixtures/.gitkeep
|
97
|
+
- spec/support/sample_app/test/functional/.gitkeep
|
98
|
+
- spec/support/sample_app/test/integration/.gitkeep
|
99
|
+
- spec/support/sample_app/test/performance/browsing_test.rb
|
100
|
+
- spec/support/sample_app/test/test_helper.rb
|
101
|
+
- spec/support/sample_app/test/unit/.gitkeep
|
102
|
+
- spec/support/sample_app/vendor/assets/javascripts/.gitkeep
|
103
|
+
- spec/support/sample_app/vendor/assets/stylesheets/.gitkeep
|
104
|
+
- spec/support/sample_app/vendor/plugins/.gitkeep
|
105
|
+
- spec/uploadable/processor_spec.rb
|
106
|
+
- spec/uploadable_spec.rb
|
107
|
+
- uploadable.gemspec
|
108
|
+
homepage: https://github.com/singhgarima/uploadable
|
109
|
+
licenses:
|
110
|
+
- MIT
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
requirements: []
|
128
|
+
rubyforge_project:
|
129
|
+
rubygems_version: 1.8.24
|
130
|
+
signing_key:
|
131
|
+
specification_version: 3
|
132
|
+
summary: This gem gives you flexibility to upload the csv to you model. It also comes
|
133
|
+
packed with some customizations
|
134
|
+
test_files: []
|