kilt-cms 1.0.0 → 1.1.0

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +8 -8
  3. data/Rakefile +1 -0
  4. data/app/assets/images/kilt/logo.png +0 -0
  5. data/app/assets/images/kilt/tartan.png +0 -0
  6. data/app/assets/stylesheets/kilt/screen.css +1962 -4
  7. data/app/controllers/kilt/kilt_controller.rb +14 -6
  8. data/app/views/kilt/kilt/_field_setup.html.erb +6 -0
  9. data/app/views/kilt/kilt/_form.html.erb +9 -5
  10. data/app/views/kilt/kilt/index.html.erb +0 -2
  11. data/app/views/kilt/kilt/list.html.erb +3 -3
  12. data/app/views/layouts/kilt/cms.html.erb +12 -1
  13. data/app/views/layouts/kilt/cms/_default_creds_warning.html.erb +4 -0
  14. data/app/views/layouts/kilt/cms/_menu.html.erb +1 -7
  15. data/lib/generators/kilt/backend_generator.rb +0 -1
  16. data/lib/generators/kilt/templates/backend/creds.yml.example +6 -2
  17. data/lib/kilt.rb +17 -25
  18. data/lib/kilt/base.rb +3 -1
  19. data/lib/kilt/engine.rb +1 -2
  20. data/lib/kilt/object.rb +1 -1
  21. data/lib/kilt/slugger.rb +55 -0
  22. data/lib/kilt/upload.rb +18 -46
  23. data/lib/kilt/upload/local.rb +17 -0
  24. data/lib/kilt/upload/s3.rb +24 -0
  25. data/lib/kilt/utils.rb +1 -5
  26. data/lib/kilt_object.rb +7 -2
  27. data/lib/kilt_view_model.rb +44 -0
  28. data/test/dummy/config/kilt/config.yml +11 -2
  29. data/test/dummy/config/kilt/creds.yml.example +6 -2
  30. data/test/generators/kilt/backend_generator_spec.rb +0 -7
  31. data/test/kilt/upload_spec.rb +309 -0
  32. data/test/kilt/utils_spec.rb +4 -12
  33. data/test/kilt_spec.rb +132 -26
  34. data/test/kilt_view_model_spec.rb +128 -0
  35. data/test/minitest_helper.rb +6 -5
  36. metadata +47 -231
  37. data/lib/generators/kilt/frontend_generator.rb +0 -37
  38. data/lib/generators/kilt/templates/backend/creds.yml.rethinkdb.example +0 -22
  39. data/lib/generators/kilt/templates/frontend/application.html.erb +0 -24
  40. data/lib/generators/kilt/templates/frontend/assets/javascripts/application.js +0 -14
  41. data/lib/generators/kilt/templates/frontend/assets/javascripts/html5shiv.js +0 -2
  42. data/lib/generators/kilt/templates/frontend/assets/javascripts/mediaqueries.js +0 -1
  43. data/lib/generators/kilt/templates/frontend/assets/stylesheets/application.css +0 -13
  44. data/lib/generators/kilt/templates/frontend/assets/stylesheets/screen.css +0 -160
  45. data/lib/generators/kilt/templates/frontend/dummy.js.erb +0 -11
  46. data/lib/generators/kilt/templates/frontend/home_controller.rb.erb +0 -4
  47. data/lib/generators/kilt/templates/frontend/index.html.erb +0 -5
  48. data/lib/kilt/db/rethink_db.rb +0 -108
  49. data/test/dummy/config/kilt/creds.yml +0 -16
  50. data/test/dummy/log/development.log +0 -84143
  51. data/test/dummy/log/test.log +0 -36
  52. data/test/dummy/public/uploads/image/photo.JPG +0 -0
  53. data/test/dummy/public/uploads/image/timbo.jpg +0 -0
  54. data/test/dummy/tmp/cache/assets/development/sprockets/03cdc43618f8bef3dfc725a1886c40ed +0 -0
  55. data/test/dummy/tmp/cache/assets/development/sprockets/0d8e5c7178ebdb79e5b9cc4ef439eae8 +0 -0
  56. data/test/dummy/tmp/cache/assets/development/sprockets/13a3d23d13c1459a86283c4fe577a775 +0 -0
  57. data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  58. data/test/dummy/tmp/cache/assets/development/sprockets/18837248cb3274df9b7c6b0a5dcd56a5 +0 -0
  59. data/test/dummy/tmp/cache/assets/development/sprockets/1c198a7e1d4ae808a6adf4c4809061eb +0 -0
  60. data/test/dummy/tmp/cache/assets/development/sprockets/20dffc9385ea740ceca470ee4e4b2197 +0 -0
  61. data/test/dummy/tmp/cache/assets/development/sprockets/23733156ea27da67211ba7ff763d76f0 +0 -0
  62. data/test/dummy/tmp/cache/assets/development/sprockets/2e57def2c82ce30227eefea2360d5f50 +0 -0
  63. data/test/dummy/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  64. data/test/dummy/tmp/cache/assets/development/sprockets/3148655edeef1c319d57d0f9570acfd5 +0 -0
  65. data/test/dummy/tmp/cache/assets/development/sprockets/32ab48c63ad3bb6ddc1f419e51adb5db +0 -0
  66. data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  67. data/test/dummy/tmp/cache/assets/development/sprockets/36715e644093cfcb33ac795f3c9d66fe +0 -0
  68. data/test/dummy/tmp/cache/assets/development/sprockets/36f9a7f6f43adb582ac6eec43b58eb30 +0 -0
  69. data/test/dummy/tmp/cache/assets/development/sprockets/36fff19076c588427464432f563a8d2d +0 -0
  70. data/test/dummy/tmp/cache/assets/development/sprockets/3878e0f19bbd21176b1bcc46160a3df3 +0 -0
  71. data/test/dummy/tmp/cache/assets/development/sprockets/3cee919b5b764629fbb01de361ad1b99 +0 -0
  72. data/test/dummy/tmp/cache/assets/development/sprockets/3d69f4783ceef2f5455635de03e6c62a +0 -0
  73. data/test/dummy/tmp/cache/assets/development/sprockets/3d8ca1585ee95c5efb388645d66cf377 +0 -0
  74. data/test/dummy/tmp/cache/assets/development/sprockets/3e0acde4cdc501f590a21ede6fac0b97 +0 -0
  75. data/test/dummy/tmp/cache/assets/development/sprockets/413be9c73d25c7febe933f4619da7cf8 +0 -0
  76. data/test/dummy/tmp/cache/assets/development/sprockets/4a935342c0113b534ad7622234965544 +0 -0
  77. data/test/dummy/tmp/cache/assets/development/sprockets/4b5c4a1edd3823a6a6c39e06b6eb230a +0 -0
  78. data/test/dummy/tmp/cache/assets/development/sprockets/4c5736bf0bd429296d1a32930364897e +0 -0
  79. data/test/dummy/tmp/cache/assets/development/sprockets/4f26158b7a804a3e3c47ce0ceff2798c +0 -0
  80. data/test/dummy/tmp/cache/assets/development/sprockets/542fc810f9cd36e7bed9a3e5e9670995 +0 -0
  81. data/test/dummy/tmp/cache/assets/development/sprockets/56f1e7d57d31bf3315e1e33732d57faa +0 -0
  82. data/test/dummy/tmp/cache/assets/development/sprockets/5bea4c2d87ec725262213ed51575b485 +0 -0
  83. data/test/dummy/tmp/cache/assets/development/sprockets/5eb5178b706a9b8bd0362b7ed487339a +0 -0
  84. data/test/dummy/tmp/cache/assets/development/sprockets/5fa6492da1cba5232b9e9799b5e2bf8f +0 -0
  85. data/test/dummy/tmp/cache/assets/development/sprockets/5fe3d26a30497da82978c9f7ee53068b +0 -0
  86. data/test/dummy/tmp/cache/assets/development/sprockets/66f697b8e4167ad9ebefbd8b5fc65b23 +0 -0
  87. data/test/dummy/tmp/cache/assets/development/sprockets/6b6e86e81f5e8f80bb2b3d1e8f7ed7f3 +0 -0
  88. data/test/dummy/tmp/cache/assets/development/sprockets/6c2ddc22c04321c269de383e37cb519b +0 -0
  89. data/test/dummy/tmp/cache/assets/development/sprockets/6caab0d3b759107ab41492546763aaf0 +0 -0
  90. data/test/dummy/tmp/cache/assets/development/sprockets/6d83c6efd2bf1080ba1dead9fcfdd0db +0 -0
  91. data/test/dummy/tmp/cache/assets/development/sprockets/7035e5c60f5da3b7fc12c472677483d0 +0 -0
  92. data/test/dummy/tmp/cache/assets/development/sprockets/704c682957c2beb38a1927ddb66cc557 +0 -0
  93. data/test/dummy/tmp/cache/assets/development/sprockets/70d4b3b9e59d0e01e90eebf94dbc2c47 +0 -0
  94. data/test/dummy/tmp/cache/assets/development/sprockets/74b6c3e00222b8bf31b0ecf50fcb0d38 +0 -0
  95. data/test/dummy/tmp/cache/assets/development/sprockets/8127282074e6ffd457b72c228a69f0c0 +0 -0
  96. data/test/dummy/tmp/cache/assets/development/sprockets/8ffacb4ba6e6ca3da12ac1100f664b30 +0 -0
  97. data/test/dummy/tmp/cache/assets/development/sprockets/91021bdb7ebb3d4f6fdf4e49909d4c07 +0 -0
  98. data/test/dummy/tmp/cache/assets/development/sprockets/914095efd3b33401a7f29f9fb05d72d6 +0 -0
  99. data/test/dummy/tmp/cache/assets/development/sprockets/9dd98bca318fb820a8451cafce020588 +0 -0
  100. data/test/dummy/tmp/cache/assets/development/sprockets/9f2c00a36b5b8c713a797b508c778a65 +0 -0
  101. data/test/dummy/tmp/cache/assets/development/sprockets/a88ab4e49bb7203b8e0586c38efdd2b0 +0 -0
  102. data/test/dummy/tmp/cache/assets/development/sprockets/acfc15d25fde8b933b06c91324755751 +0 -0
  103. data/test/dummy/tmp/cache/assets/development/sprockets/b259805c84c81064f20700498328f109 +0 -0
  104. data/test/dummy/tmp/cache/assets/development/sprockets/b7e1f059a53a1e79df01a336fb1f50f0 +0 -0
  105. data/test/dummy/tmp/cache/assets/development/sprockets/c0671678b70011547b80da0669d031cc +0 -0
  106. data/test/dummy/tmp/cache/assets/development/sprockets/c1006115f345f87cc152b851154e9e34 +0 -0
  107. data/test/dummy/tmp/cache/assets/development/sprockets/cf0d5ad037fbf541c6b982abf73b9938 +0 -0
  108. data/test/dummy/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  109. data/test/dummy/tmp/cache/assets/development/sprockets/d6973c1d43f8ca41b98a6b640fda2616 +0 -0
  110. data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  111. data/test/dummy/tmp/cache/assets/development/sprockets/da31523b2e8cf32dd8db9f304d5b7395 +0 -0
  112. data/test/dummy/tmp/cache/assets/development/sprockets/dc676330961fd22be77c48cb77ec065f +0 -0
  113. data/test/dummy/tmp/cache/assets/development/sprockets/ddc29f2c13cd99d017fd526b61dcb951 +0 -0
  114. data/test/dummy/tmp/cache/assets/development/sprockets/de45247cb814cafe20e9e46c79e470fe +0 -0
  115. data/test/dummy/tmp/cache/assets/development/sprockets/df0b7c3ac590a286561806e813c2974f +0 -0
  116. data/test/dummy/tmp/cache/assets/development/sprockets/dfa8b85e3c1273b7e69839e4e607c3e1 +0 -0
  117. data/test/dummy/tmp/cache/assets/development/sprockets/e22d705d0c889ec4837f183a9beec0f3 +0 -0
  118. data/test/dummy/tmp/cache/assets/development/sprockets/e3a4ad3549e1e57d03698a36daeff406 +0 -0
  119. data/test/dummy/tmp/cache/assets/development/sprockets/e7ba95a61b1b9381906a88610dceb6dd +0 -0
  120. data/test/dummy/tmp/cache/assets/development/sprockets/ef7c8ce46dfc9e9087ce84dbdfdd0011 +0 -0
  121. data/test/dummy/tmp/cache/assets/development/sprockets/f3e1a8ba304f70dccefd77356c900ebc +0 -0
  122. data/test/dummy/tmp/cache/assets/development/sprockets/f4b5dd06a6113950c0f481cbc5a31a66 +0 -0
  123. data/test/dummy/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  124. data/test/dummy/tmp/data/meta_request/1c3d4a4b-d7e1-4126-8bfc-572acbc2f675.json +0 -1
  125. data/test/dummy/tmp/data/meta_request/449ff78e-30d2-4cc5-bbb7-3397d04a4c46.json +0 -1
  126. data/test/dummy/tmp/data/meta_request/5974cfb9-99bd-4d5c-a4e1-6e352ecd2dd8.json +0 -1
  127. data/test/dummy/tmp/data/meta_request/960de12b-b1c5-4d44-937b-e3d8c00d682c.json +0 -1
  128. data/test/dummy/tmp/data/meta_request/9df9ad77-1b70-4fb7-ad18-f31f28c60c6c.json +0 -1
  129. data/test/dummy/tmp/data/meta_request/a5374758-4e16-487a-ab11-9a69a1abed2e.json +0 -1
  130. data/test/dummy/tmp/data/meta_request/a65d97b2-df1f-445e-99d5-615c4db5c4e1.json +0 -1
  131. data/test/dummy/tmp/data/meta_request/b3693c6f-23cd-4afe-ae82-38078eaa643a.json +0 -1
  132. data/test/dummy/tmp/data/meta_request/daa1c80a-bad3-4bc1-8f67-d586979cbedc.json +0 -1
  133. data/test/dummy/tmp/data/meta_request/e2e7621f-08e5-46dd-83c2-b87eb6d5fd45.json +0 -1
@@ -0,0 +1,24 @@
1
+ module Kilt
2
+ module Upload
3
+ module S3
4
+ def self.upload type, file_reference
5
+ Kilt::Utils.ensure_s3_bucket_exists
6
+ if file_reference
7
+ begin
8
+ s3 = AWS::S3.new(
9
+ :access_key_id => Kilt.config.s3.key,
10
+ :secret_access_key => Kilt.config.s3.secret)
11
+ bucket = s3.buckets[Kilt.config.s3.bucket]
12
+ new_file = bucket.objects["#{type}/#{file_reference.original_filename}"]
13
+ new_file.write(Pathname.new(file_reference.tempfile), :acl => :public_read)
14
+ file_reference.original_filename
15
+ rescue
16
+ ''
17
+ end
18
+ else
19
+ ''
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -16,11 +16,7 @@ module Kilt
16
16
  end
17
17
 
18
18
  def self.database
19
- @database ||= if @db_type == :active_record
20
- Kilt::DB::ActiveRecord.new
21
- else
22
- Kilt::DB::RethinkDb.new current_db_config
23
- end
19
+ Kilt::DB::ActiveRecord.new
24
20
  end
25
21
 
26
22
  def self.current_db_config
@@ -1,3 +1,8 @@
1
- class KiltObject < ActiveRecord::Base
2
- serialize :data, Hash
1
+ # if no activerecord, then this class makes no sense
2
+ if Object.const_defined? 'ActiveRecord'
3
+
4
+ class KiltObject < ActiveRecord::Base
5
+ serialize :data, Hash
6
+ end
7
+
3
8
  end
@@ -0,0 +1,44 @@
1
+ class KiltViewModel
2
+
3
+ def self.build input
4
+ this_is_a_collection(input) ? build_view_models_from(input)
5
+ : build_a_view_model_from(input)
6
+ end
7
+
8
+ def initialize subject = {}
9
+ @subject = subject
10
+ end
11
+
12
+ def [] id
13
+ @subject[id.to_s] || @subject[id.to_s.to_sym]
14
+ end
15
+
16
+ def method_missing(meth, *args, &blk)
17
+ @subject[meth.to_s] || @subject[meth]
18
+ end
19
+
20
+ class << self
21
+
22
+ private
23
+
24
+ def build_a_view_model_from record
25
+ eval("#{record['type']}_view_model".classify).new record
26
+ rescue
27
+ KiltViewModel.new record
28
+ end
29
+
30
+ def this_is_a_collection input
31
+ input.is_a?(Array) || input.is_a?(Kilt::ObjectCollection)
32
+ end
33
+
34
+ def build_view_models_from records
35
+ records.map { |r| build_a_view_model_from r }
36
+ .sort_by do |x|
37
+ sequence = x.sequence.to_s.to_i
38
+ sequence.to_s == x.sequence.to_s ? sequence : 99999999999
39
+ end
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -1,4 +1,4 @@
1
- name: Dummy
1
+ name: Test Kilt CMS App
2
2
  storage:
3
3
  strategy: local
4
4
  objects:
@@ -14,4 +14,13 @@ objects:
14
14
  image: image
15
15
  vimeo_video: vimeo
16
16
  youtube_video: youtube
17
- other: file
17
+ other: file
18
+ satchel:
19
+ fields:
20
+ name: text
21
+ weight: number
22
+ description: longtext
23
+ dictionary:
24
+ fields:
25
+ name: text
26
+
@@ -7,5 +7,9 @@ s3:
7
7
  secret: <S3 secret>
8
8
  bucket: <S3 bucket>
9
9
  auth:
10
- username: <Username>
11
- password: <Password>
10
+ username: admin
11
+ password: changeme
12
+ default_auth:
13
+ username: admin
14
+ password: changeme
15
+ note: "Feel free to remove default_auth when you change your username/password"
@@ -44,13 +44,6 @@ describe Kilt::Generators::BackendGenerator do
44
44
  generator.generate
45
45
  end
46
46
 
47
- it "should copy the rethinkdb credential file to the app" do
48
- root_result = Object.new
49
- root.stubs(:join).with('config', 'kilt', 'creds.yml.rethinkdb.example').returns root_result
50
- generator.expects(:copy_file).with 'creds.yml.rethinkdb.example', root_result
51
- generator.generate
52
- end
53
-
54
47
  it "should copy the kilt.rb file as an app initializer" do
55
48
  root_result = Object.new
56
49
  root.stubs(:join).with('config', 'initializers', 'kilt.rb').returns root_result
@@ -0,0 +1,309 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../minitest_helper')
2
+
3
+ describe Kilt::Upload do
4
+
5
+ let(:config) { Struct.new(:storage).new storage }
6
+ let(:storage) { Struct.new(:strategy).new strategy }
7
+
8
+ before do
9
+ Kilt.stubs(:config).returns config
10
+ end
11
+
12
+ describe "do" do
13
+
14
+ let(:type) { Object.new }
15
+
16
+ let(:root) { Object.new }
17
+
18
+ let(:file_reference) do
19
+ Struct.new(:original_filename, :read, :tempfile).new SecureRandom.uuid, nil, Object.new
20
+ end
21
+
22
+ before do
23
+ Rails.stubs(:root).returns root
24
+ root.stubs(:join).returns nil
25
+ end
26
+
27
+ describe "using the local strategy" do
28
+
29
+ let(:strategy) { 'local' }
30
+
31
+ before do
32
+ Kilt::Utils.stubs(:ensure_local_storage_dir_exists)
33
+ File.stubs(:open)
34
+ root.stubs(:join).returns Object.new
35
+ end
36
+
37
+ it "should ensure that the local storage dir exists" do
38
+ File.stubs(:open)
39
+ Kilt::Utils.expects(:ensure_local_storage_dir_exists)
40
+ Kilt::Upload.do type, file_reference
41
+ end
42
+
43
+ it "should write the file to local storage" do
44
+ location = Object.new
45
+ root.stubs(:join)
46
+ .with('public', 'uploads', type, file_reference.original_filename)
47
+ .returns location
48
+
49
+ File.expects(:open).with location, 'wb'
50
+
51
+ Kilt::Upload.do type, file_reference
52
+ end
53
+
54
+ it "should return the original file reference" do
55
+ result = Kilt::Upload.do type, file_reference
56
+ result.must_be_same_as file_reference.original_filename
57
+ end
58
+
59
+ describe "given no file reference" do
60
+ it "should no try to write a file" do
61
+ File.stubs(:open).raises 'An error'
62
+ Kilt::Upload.do type, nil
63
+ # no error should be thrown
64
+ end
65
+
66
+ it "should return an empty string" do
67
+ Kilt::Upload.do(type, nil).must_equal ''
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ describe "actually writing the file locally" do
74
+
75
+ let(:strategy) { 'local' }
76
+
77
+ let(:test_file) { "test/test_s3.txt" }
78
+
79
+ before do
80
+ File.delete(test_file) if File.exists? test_file
81
+ end
82
+
83
+ after do
84
+ File.delete(test_file) if File.exists? test_file
85
+ end
86
+
87
+ it "should write the file" do
88
+ Kilt::Utils.stubs(:ensure_local_storage_dir_exists)
89
+
90
+ random_content = SecureRandom.uuid
91
+ file_reference.stubs(:read).returns random_content
92
+ root.stubs(:join).returns test_file
93
+
94
+ Kilt::Upload.do type, file_reference
95
+
96
+ File.open(test_file).read.must_equal random_content
97
+ end
98
+
99
+ end
100
+
101
+ describe "uploading a file to s3" do
102
+
103
+ let(:strategy) { 's3' }
104
+
105
+ let(:type) { SecureRandom.uuid }
106
+
107
+ let(:s3_config) do
108
+ Struct.new(:key, :secret, :bucket)
109
+ .new(Object.new, Object.new, Object.new)
110
+ end
111
+
112
+ let(:s3) { Object.new }
113
+ let(:bucket) { Object.new }
114
+ let(:buckets) { Object.new }
115
+ let(:objects) { Object.new }
116
+ let(:the_file) { Object.new }
117
+
118
+ let(:the_location_of_the_temp_file) { Object.new }
119
+
120
+ before do
121
+ Kilt::Utils.stubs(:ensure_s3_bucket_exists)
122
+ config.stubs(:s3).returns s3_config
123
+
124
+ AWS::S3.stubs(:new)
125
+ .with(access_key_id: s3_config.key,
126
+ secret_access_key: s3_config.secret)
127
+ .returns s3
128
+
129
+ s3.stubs(:buckets).returns buckets
130
+ buckets.stubs(:[]).with(s3_config.bucket).returns bucket
131
+
132
+ bucket.stubs(:objects).returns objects
133
+
134
+ objects.stubs(:[])
135
+ .with("#{type}/#{file_reference.original_filename}")
136
+ .returns the_file
137
+
138
+ Pathname.stubs(:new)
139
+ .with(file_reference.tempfile)
140
+ .returns the_location_of_the_temp_file
141
+
142
+ the_file.stubs(:write)
143
+ end
144
+
145
+ it "should ensure that the s3 bucket exists" do
146
+ Kilt::Utils.expects(:ensure_s3_bucket_exists)
147
+ Kilt::Upload.do type, file_reference
148
+ end
149
+
150
+ it "should write the file to the bucket" do
151
+ the_file.expects(:write).with(the_location_of_the_temp_file, { acl: :public_read } )
152
+ Kilt::Upload.do type, file_reference
153
+ end
154
+
155
+ it "should return the original filename" do
156
+ result = Kilt::Upload.do type, file_reference
157
+ result.must_be_same_as file_reference.original_filename
158
+ end
159
+
160
+ describe "when the s3 write fails" do
161
+
162
+ before do
163
+ the_file.expects(:write).raises 'error'
164
+ end
165
+
166
+ it "should eat the error" do
167
+ # this better not fail
168
+ Kilt::Upload.do type, file_reference
169
+ end
170
+
171
+ it "should return an empty string" do
172
+ result = Kilt::Upload.do type, file_reference
173
+ result.must_equal ''
174
+ end
175
+
176
+ end
177
+
178
+ describe "when there is an error getting the s3 object" do
179
+ before do
180
+ AWS::S3.stubs(:new).raises 'error'
181
+ end
182
+
183
+ it "should eat the error" do
184
+ # this better not fail
185
+ Kilt::Upload.do type, file_reference
186
+ end
187
+
188
+ it "should return an empty string" do
189
+ result = Kilt::Upload.do type, file_reference
190
+ result.must_equal ''
191
+ end
192
+ end
193
+
194
+ end
195
+
196
+ describe "when no file reference is passed with a s3 type" do
197
+
198
+ let(:strategy) { 's3' }
199
+
200
+ before do
201
+ Kilt::Utils.stubs(:ensure_s3_bucket_exists)
202
+ end
203
+
204
+ it "should ensure that the s3 bucket exists" do
205
+ Kilt::Utils.expects(:ensure_s3_bucket_exists)
206
+ Kilt::Upload.do type, nil
207
+ end
208
+
209
+ it "should not attempt to hit s3" do
210
+ AWS::S3.expects(:new).never
211
+ Kilt::Upload.do type, nil
212
+ end
213
+
214
+ it "should return an empty string" do
215
+ result = Kilt::Upload.do type, nil
216
+ result.must_equal ''
217
+ end
218
+
219
+ end
220
+
221
+ end
222
+
223
+ describe "uploading different fields" do
224
+
225
+ let(:strategy) { Object.new }
226
+ let(:file_reference) { Object.new }
227
+
228
+ [:image, :file].each do |type|
229
+
230
+ describe type do
231
+
232
+ it "should call the do method and return the result" do
233
+ expected_result = Object.new
234
+
235
+ Kilt::Upload.stubs(:do)
236
+ .with(type.to_s, file_reference)
237
+ .returns expected_result
238
+
239
+ result = Kilt::Upload.send type, file_reference
240
+
241
+ result.must_be_same_as expected_result
242
+ end
243
+
244
+ end
245
+
246
+ end
247
+
248
+ end
249
+
250
+ describe "uploadable fields" do
251
+
252
+ let(:strategy) { nil }
253
+
254
+ describe "and no config was set" do
255
+
256
+ before do
257
+ config.stubs(:uploadable_fields).returns nil
258
+ end
259
+
260
+ it "should return file and image" do
261
+ fields = Kilt::Upload.uploadable_fields
262
+ fields.count.must_equal 2
263
+ fields.include?('file').must_equal true
264
+ fields.include?('image').must_equal true
265
+ end
266
+ end
267
+
268
+ describe "and the fields were overridden by config" do
269
+
270
+ before do
271
+ config.stubs(:uploadable_fields).returns 'a, b, c'
272
+ end
273
+
274
+ it "should return file and image" do
275
+ fields = Kilt::Upload.uploadable_fields
276
+ fields.include?('file').must_equal true
277
+ fields.include?('image').must_equal true
278
+ end
279
+
280
+ it "should return the fields" do
281
+ fields = Kilt::Upload.uploadable_fields
282
+ fields.include?('a').must_equal true
283
+ fields.include?('b').must_equal true
284
+ fields.include?('c').must_equal true
285
+ end
286
+
287
+ end
288
+
289
+ describe "and some edge cases" do
290
+
291
+ before do
292
+ config.stubs(:uploadable_fields).returns 'r, r, r, file, image, q, s'
293
+ end
294
+
295
+ it "should return every type only once" do
296
+ fields = Kilt::Upload.uploadable_fields
297
+ fields.count.must_equal 5
298
+ fields.include?('r').must_equal true
299
+ fields.include?('q').must_equal true
300
+ fields.include?('s').must_equal true
301
+ fields.include?('file').must_equal true
302
+ fields.include?('image').must_equal true
303
+ end
304
+
305
+ end
306
+
307
+ end
308
+
309
+ end