wedge 0.1.17 → 0.1.18

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +8 -1
  3. data/Makefile +2 -0
  4. data/Rakefile +8 -4
  5. data/TODO.md +4 -0
  6. data/lib/roda/plugins/wedge.rb +14 -96
  7. data/lib/wedge.rb +9 -4
  8. data/lib/wedge/component.rb +70 -29
  9. data/lib/wedge/config.rb +36 -6
  10. data/lib/wedge/middleware.rb +43 -35
  11. data/lib/wedge/opal.rb +15 -4
  12. data/lib/wedge/plugins/ability_list.rb +95 -0
  13. data/lib/wedge/plugins/current_user.rb +48 -0
  14. data/lib/wedge/plugins/factory.rb +36 -0
  15. data/lib/wedge/plugins/form.rb +216 -343
  16. data/lib/wedge/plugins/{validations.rb → form/validations.rb} +64 -37
  17. data/lib/wedge/plugins/form_backup.rb +442 -0
  18. data/lib/wedge/plugins/render.rb +110 -0
  19. data/lib/wedge/plugins/uploader.rb +2 -2
  20. data/lib/wedge/utilis/duplicable.rb +104 -0
  21. data/lib/wedge/utilis/hash.rb +48 -0
  22. data/lib/wedge/version.rb +1 -1
  23. data/playground/app/app.rb +27 -11
  24. data/playground/app/components/abilities.rb +11 -0
  25. data/playground/app/components/current_user.rb +12 -0
  26. data/playground/app/components/layout.rb +5 -0
  27. data/playground/app/components/todo_list.rb +24 -0
  28. data/playground/app/config/boot.rb +3 -0
  29. data/playground/app/forms/todo_list_add.rb +9 -0
  30. data/playground/app/models/user.rb +5 -0
  31. data/playground/public/css/styles.css +139 -0
  32. data/playground/public/css/todo_list.css +138 -0
  33. data/playground/public/todo_list.html +23 -0
  34. data/playground/src/css/styles.scss +2 -1
  35. data/playground/src/css/todo_list.scss +165 -0
  36. data/playground/src/todo_list.slim +17 -0
  37. data/spec/playground/uploader_spec.rb +27 -29
  38. data/spec/spec_helper.rb +29 -0
  39. data/spec/stubs/models/user.rb +15 -0
  40. data/spec/wedge/plugins/current_user_spec.rb +29 -0
  41. data/spec/wedge/plugins/factory_spec.rb +16 -0
  42. data/spec/wedge/plugins/form_spec.rb +119 -0
  43. data/spec/wedge/plugins/uploader_spec.rb +1 -3
  44. data/spec/wedge_spec.rb +3 -3
  45. metadata +28 -3
@@ -0,0 +1,17 @@
1
+ .container
2
+ h1#title Today’s Goals
3
+ p#notice.hidden You have no goals for today.
4
+ ul#list
5
+ li
6
+ | Buy apples
7
+ button.delete Delete
8
+ li
9
+ | Buy bananas
10
+ button.delete Delete
11
+ li
12
+ | Eat apples and bananas
13
+ button.delete Delete
14
+ form#add-form
15
+ textarea#task-input name="todo[description]" placeholder=("Enter new goal here") rows="1"
16
+ button#add Add to list
17
+ /! .container
@@ -2,33 +2,31 @@ require 'spec_helper'
2
2
  require 'components/uploader'
3
3
 
4
4
  describe 'Playground::UploaderComponent' do
5
- puts Wedge.events.events
6
- # subject(:uploader) { Wedge[:uploader] }
7
- #
8
- # html Wedge.html! { button 'Upload' }.to_html
9
- #
10
- # context '#display' do
11
- # subject { uploader.display }
12
- #
13
- # if Wedge.server?
14
- # it { is_expected.to be_a Wedge::DOM }
15
- # else
16
- # it { is_expected.to be_nil }
17
- # end
18
- # end
19
- #
20
- # context 'browser_events' do
21
- # before do
22
- # allow_any_instance_of(Wedge::Plugins::Uploader).to receive(:settings).and_return({
23
- # aws_access_key_id: 123456,
24
- # bucket: 'wedge'
25
- # })
26
- # puts Wedge.events.events
27
- # uploader.trigger :browser_events
28
- # end
29
- #
30
- # it 'should have fine uploader button' do
31
- # expect(uploader.dom.find('.qq-uploader').to_html).not_to be_empty
32
- # end
33
- # end if Wedge.client?
5
+ subject(:uploader) { Wedge[:uploader] }
6
+
7
+ html Wedge.html! { button 'Upload' }.to_html
8
+
9
+ context '#display' do
10
+ subject { uploader.display }
11
+
12
+ if Wedge.server?
13
+ it { is_expected.to be_a Wedge::DOM }
14
+ else
15
+ it { is_expected.to be_nil }
16
+ end
17
+ end
18
+
19
+ context 'browser_events' do
20
+ before do
21
+ allow_any_instance_of(Wedge::Plugins::Uploader).to receive(:settings).and_return({
22
+ aws_access_key_id: 123456,
23
+ bucket: 'wedge'
24
+ })
25
+ uploader.trigger :browser_events
26
+ end
27
+
28
+ it 'should have fine uploader button' do
29
+ expect(uploader.dom.find('.qq-uploader').to_html).not_to be_empty
30
+ end
31
+ end if Wedge.client?
34
32
  end
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,7 @@ if RUBY_ENGINE == 'opal'
4
4
  require 'opal/rspec'
5
5
  require 'opal/jquery/rspec'
6
6
  else
7
+ require 'rspec'
7
8
 
8
9
  ENV['RACK_ENV'] ||= 'test'
9
10
 
@@ -19,7 +20,35 @@ else
19
20
  RSpec.configure do |c|
20
21
  c.extend RSpecHelpers
21
22
  c.filter_run_excluding :slow
23
+ c.color = true
24
+ # c.before do
25
+ # allow(Playground::User).to receive(:find) do |id|
26
+ # if id == 1
27
+ # {id: 1, first_name: 'Test', last_name: 'Admin', is_admin: true}
28
+ # else
29
+ # nil
30
+ # end
31
+ # end
32
+ # end
22
33
  end
23
34
 
24
35
  require 'config/boot'
36
+
37
+ Dir["./spec/stubs/**/*.rb"].sort.each { |file| require file }
38
+
39
+ Wedge.plugin(:factory)
40
+ user = HashObject.new(
41
+ first_name: 'moo',
42
+ last_name: 'cow',
43
+ location: {
44
+ address: HashObject.new(
45
+ line1: 'The fields',
46
+ city: 'milkton',
47
+ state: 'texas',
48
+ zip: 40004
49
+ )
50
+ }
51
+ )
52
+
53
+ Wedge[:factory].stub user, :user, location: [:address]
25
54
  end
@@ -0,0 +1,15 @@
1
+ unless RUBY_ENGINE == 'opal'
2
+ class Playground
3
+ class User
4
+ class << self
5
+ def find id
6
+ if id == 1
7
+ {id: 1, first_name: 'Test', last_name: 'Admin', is_admin: true, secret_key: 123456}
8
+ else
9
+ nil
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'wedge/plugins/current_user'
3
+
4
+ class TestComponent < Wedge::Component
5
+ name :test
6
+
7
+ def display
8
+ if current_user.can? :view, :admin
9
+ 'admin'
10
+ else
11
+ 'user'
12
+ end
13
+ end
14
+ end
15
+
16
+ describe Wedge::Plugins::CurrentUser do
17
+ let(:test_comp) { Wedge[:test] }
18
+ let(:current_user) { Wedge[:current_user_plugin].current_user }
19
+
20
+ context 'admin' do
21
+ it 'expects to be an admin' do
22
+ expect(test_comp.display).to eq 'admin'
23
+ end
24
+
25
+ it 'secret_key' do
26
+ expect(current_user.secret_key).to eq(Wedge.server?? 123456 : nil)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+ require 'wedge/plugins/factory'
3
+
4
+ describe Wedge::Plugins::Factory do
5
+ let(:user_stub) { Wedge[:factory][:user].to_h }
6
+
7
+ it 'expects the correct fields returned' do
8
+ expect(user_stub.keys).to include *%w'first_name last_name location'
9
+ expect(user_stub[:location][:address].keys).to include 'line1'
10
+ end
11
+
12
+ it 'accepts override params' do
13
+ data = Wedge[:factory][:user, api_key: 123456].to_h
14
+ expect(data.keys).to include 'api_key'
15
+ end
16
+ end
@@ -0,0 +1,119 @@
1
+ require 'spec_helper'
2
+ require 'wedge/plugins/form'
3
+
4
+ class TestForm < Wedge::Plugins::Form
5
+ name :test_form
6
+
7
+ attr_reader :id, type: Integer, default: '1'
8
+ attr_reader :type, type: Symbol, default: -> { id == 1 ? 'admin' : 'user' }
9
+ attr_reader :zipcode
10
+
11
+ attr_accessor :first_name, :last_name
12
+ attr_accessor :phone_number, type: Integer
13
+ attr_accessor :user_only, default: true, unless: -> { current_user.admin? }
14
+ attr_accessor :email, hidden: true
15
+
16
+ model_alias :phone_num, :phone_number
17
+
18
+ form_accessor :car
19
+
20
+ def validate
21
+ assert_present %w'first_name last_name'
22
+ assert_numeric :phone_number
23
+ assert_form :car
24
+ end
25
+
26
+ def full_name
27
+ "#{first_name} #{last_name}"
28
+ end
29
+
30
+ def phone_number= number
31
+ super(number.gsub(/[^\d]/, ''))
32
+ end
33
+
34
+ def default_zipcode
35
+ 55555
36
+ end
37
+ end
38
+
39
+ class TestLimitForm < TestForm
40
+ name :test_limit_form
41
+ form_accessor :car, atts: %w'make model'
42
+ end
43
+
44
+ class CarForm < Wedge::Plugins::Form
45
+ name :car_form
46
+
47
+ attr_reader :id, default: 1
48
+ attr_accessor :make, :model, :vin, :year
49
+
50
+ def validate
51
+ assert_present %w'make model vin year'
52
+ assert_length :vin, 17
53
+ end
54
+
55
+ def default_year
56
+ Time.now.year
57
+ end
58
+ end
59
+
60
+ describe Wedge::Plugins::Form do
61
+ let(:params) {{
62
+ id: 5, first_name: 'CJ', last_name: 'Lazell', phone_num: '(555) 555 - 5555',
63
+ car: {
64
+ make: 'ford', model: 'focus', vin: '12121212121212121'
65
+ }
66
+ }}
67
+ subject(:test_form) { Wedge[:test_form, params] }
68
+
69
+ context 'attributes' do
70
+ subject(:attributes) { test_form.attributes }
71
+
72
+ # id is 1 because values that are attr_readers can't be set via passed in
73
+ # params, this stops people updating values they shouldn't and is why you
74
+ # should always use a form to filter param data before passing it to a model.
75
+ it { is_expected.to include({
76
+ id: 1, first_name: 'CJ', last_name: 'Lazell', phone_number: 5555555555, zipcode: 55555
77
+ })}
78
+ it { is_expected.not_to have_key :full_name }
79
+ it { is_expected.not_to have_key :email }
80
+ end
81
+
82
+ context 'model_attributes' do
83
+ subject(:attributes) { test_form.model_attributes }
84
+
85
+ it { is_expected.not_to have_key :phone_number }
86
+ it { is_expected.to have_key :phone_num }
87
+ end
88
+
89
+ context 'validation errors' do
90
+ subject { form = Wedge[:test_form]; form.valid?; form.errors }
91
+
92
+ it { is_expected.to include({
93
+ first_name: [:not_present], last_name: [:not_present],
94
+ :car => {
95
+ make: [:not_present], model: [:not_present], vin: [:not_present]
96
+ }
97
+ }) }
98
+
99
+ it { is_expected.not_to include phone_number: [:not_numeric] }
100
+ end
101
+
102
+ context 'limit form validation' do
103
+ subject { form = Wedge[:test_limit_form]; form.valid?; form.errors }
104
+
105
+ it { is_expected.to include({
106
+ :car => {
107
+ make: [:not_present], model: [:not_present]
108
+ }
109
+ })}
110
+
111
+ it { is_expected.not_to include vin: [:not_present] }
112
+ end
113
+
114
+ context 'block#current_user' do
115
+ it 'should not have access to user_only' do
116
+ expect(test_form.user_only).to be_nil
117
+ end
118
+ end
119
+ end
@@ -21,9 +21,7 @@ describe Wedge::Plugins::Uploader do
21
21
  if Wedge.server?
22
22
  expect(settings.keys).to include *%w'aws_access_key_id aws_secret_access_key bucket'
23
23
  else
24
- # settings are nil client side as the class on :compile would need to be
25
- # ran server side first.
26
- # expect(settings).to be_nil
24
+ expect(settings.keys).not_to include *%w'aws_secret_access_key'
27
25
  end
28
26
  end
29
27
  end
data/spec/wedge_spec.rb CHANGED
@@ -12,9 +12,9 @@ describe Wedge do
12
12
  expect(Wedge.source_map).to match /mappings/
13
13
  end
14
14
  else
15
- # it 'should not have an assets key' do
16
- # expect(Wedge.config.assets_key).to be_nil
17
- # end
15
+ it 'should not have an assets key' do
16
+ expect(Wedge.config.assets_key).not_to be_nil
17
+ end
18
18
  end
19
19
  end
20
20
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wedge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.17
4
+ version: 0.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - cj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-02 00:00:00.000000000 Z
11
+ date: 2015-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -160,8 +160,10 @@ files:
160
160
  - ".gitignore"
161
161
  - Gemfile
162
162
  - LICENSE.txt
163
+ - Makefile
163
164
  - README.md
164
165
  - Rakefile
166
+ - TODO.md
165
167
  - lib/roda/plugins/wedge.rb
166
168
  - lib/wedge.rb
167
169
  - lib/wedge/component.rb
@@ -171,14 +173,20 @@ files:
171
173
  - lib/wedge/html.rb
172
174
  - lib/wedge/middleware.rb
173
175
  - lib/wedge/opal.rb
176
+ - lib/wedge/plugins/ability_list.rb
177
+ - lib/wedge/plugins/current_user.rb
178
+ - lib/wedge/plugins/factory.rb
174
179
  - lib/wedge/plugins/form.rb
180
+ - lib/wedge/plugins/form/validations.rb
181
+ - lib/wedge/plugins/form_backup.rb
175
182
  - lib/wedge/plugins/history.rb
176
183
  - lib/wedge/plugins/location.rb
177
184
  - lib/wedge/plugins/pjax.rb
185
+ - lib/wedge/plugins/render.rb
178
186
  - lib/wedge/plugins/uploader.rb
179
- - lib/wedge/plugins/validations.rb
180
187
  - lib/wedge/require.rb
181
188
  - lib/wedge/utilis/blank.rb
189
+ - lib/wedge/utilis/duplicable.rb
182
190
  - lib/wedge/utilis/element.rb
183
191
  - lib/wedge/utilis/hash.rb
184
192
  - lib/wedge/utilis/indifferent_hash.rb
@@ -189,11 +197,16 @@ files:
189
197
  - lib/wedge/version.rb
190
198
  - playground/Gruntfile.coffee
191
199
  - playground/app/app.rb
200
+ - playground/app/components/abilities.rb
201
+ - playground/app/components/current_user.rb
192
202
  - playground/app/components/index.rb
193
203
  - playground/app/components/layout.rb
204
+ - playground/app/components/todo_list.rb
194
205
  - playground/app/components/uploader.rb
195
206
  - playground/app/config/boot.rb
196
207
  - playground/app/config/variables.rb
208
+ - playground/app/forms/todo_list_add.rb
209
+ - playground/app/models/user.rb
197
210
  - playground/backup/components/bar.rb
198
211
  - playground/backup/components/base.rb
199
212
  - playground/backup/components/layout.rb
@@ -207,8 +220,10 @@ files:
207
220
  - playground/package.json
208
221
  - playground/public/css/styles.css
209
222
  - playground/public/css/styles.css.map
223
+ - playground/public/css/todo_list.css
210
224
  - playground/public/includes/_head.html
211
225
  - playground/public/index.html
226
+ - playground/public/todo_list.html
212
227
  - playground/public/uploader.html
213
228
  - playground/public/vendor/fine-uploader/s3.jquery.fine-uploader.js
214
229
  - playground/public/vendor/font-awesome/fonts/FontAwesome.otf
@@ -223,14 +238,20 @@ files:
223
238
  - playground/src/css/_variables.scss
224
239
  - playground/src/css/addons/_buttons.scss
225
240
  - playground/src/css/styles.scss
241
+ - playground/src/css/todo_list.scss
226
242
  - playground/src/includes/_head.slim
227
243
  - playground/src/index.slim
244
+ - playground/src/todo_list.slim
228
245
  - playground/src/uploader.slim
229
246
  - spec/index.html.erb
230
247
  - spec/playground/layout_spec.rb
231
248
  - spec/playground/uploader_spec.rb
232
249
  - spec/spec_helper.rb
250
+ - spec/stubs/models/user.rb
233
251
  - spec/wedge/component_spec.rb
252
+ - spec/wedge/plugins/current_user_spec.rb
253
+ - spec/wedge/plugins/factory_spec.rb
254
+ - spec/wedge/plugins/form_spec.rb
234
255
  - spec/wedge/plugins/uploader_spec.rb
235
256
  - spec/wedge_spec.rb
236
257
  - wedge.gemspec
@@ -263,7 +284,11 @@ test_files:
263
284
  - spec/playground/layout_spec.rb
264
285
  - spec/playground/uploader_spec.rb
265
286
  - spec/spec_helper.rb
287
+ - spec/stubs/models/user.rb
266
288
  - spec/wedge/component_spec.rb
289
+ - spec/wedge/plugins/current_user_spec.rb
290
+ - spec/wedge/plugins/factory_spec.rb
291
+ - spec/wedge/plugins/form_spec.rb
267
292
  - spec/wedge/plugins/uploader_spec.rb
268
293
  - spec/wedge_spec.rb
269
294
  has_rdoc: