magic_lamp 1.5.2 → 1.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 41478cabfbc093d487b0dba06c3da1eda0f2cd7b
4
- data.tar.gz: 739255d6adb9212a7353f1d5ab21100f8c91c589
3
+ metadata.gz: c8bca611448f6cd6086f0a9a17393ffce473d65d
4
+ data.tar.gz: adfc6d57c0e0a61d4a02c1c36ec8b137c1ca3ed9
5
5
  SHA512:
6
- metadata.gz: 7f55d8114967531bf6da21d5863b9fdaa03822daf179e21de2f26fffbb16ff1eb33f86b705db85b4635c5a6e5fccfb7a24af44a7ffe48b93500fa0b1d5b52677
7
- data.tar.gz: e8e0a9c49ee7403bf9735e8a9205f43fa513a3808e9507ffb2bacb7f2dbc54635ff35fdbd5c1a370ec174682b2e53345c03c1051017ded7a629eac48a83c59bd
6
+ metadata.gz: 8eeab2759a000a30e47eabd000e5c49fcf46c20de833026c9aa464c3647f1d95f85a138450010fab737387f01aab5fa82ee290d942b68747467aaba54cdcd768
7
+ data.tar.gz: 83aab308b53d110243d0c8132fdb96aa4a83c47e9d6bcd36e6a5dd4c231cfe790af3f483834bb29ed4da0540022d849d8f491925385ef4bee2b75bfeae8eb3cd
data/README.md CHANGED
@@ -6,8 +6,6 @@ Magic Lamp helps you get your Rails templates into your JavaScript tests. This m
6
6
  if you change your templates _and_ you don't have to create so many fixtures. Plus, it lets you test your views in JavaScript.
7
7
  All you have to do is set up your data just like you would in a controller.
8
8
 
9
- It's not required that you use [Teaspoon](https://github.com/modeset/teaspoon) as your JavaScript test runner, but you should.
10
-
11
9
  Table of Contents
12
10
  -----------------
13
11
  1. [Installation](#installation)
@@ -31,12 +29,7 @@ And then execute:
31
29
 
32
30
  $ bundle install
33
31
 
34
- Or install it yourself with:
35
-
36
- $ gem install magic_lamp
37
-
38
- Then paste `mount MagicLamp::Genie, at: "/magic_lamp" if defined?(MagicLamp)` into your `config/routes.rb`
39
- like so:
32
+ Then paste `mount MagicLamp::Genie, at: "/magic_lamp" if defined?(MagicLamp)` into your `config/routes.rb` like so:
40
33
  ```ruby
41
34
  Rails.application.routes.draw do
42
35
  # ...
@@ -50,24 +43,29 @@ Then drop this:
50
43
  ```js
51
44
  //= require magic_lamp
52
45
  ```
53
- at the top of your `spec_helper.js` (assuming you're using [Teaspoon](https://github.com/modeset/teaspoon) or another JavaScript spec runner for Rails that allows the use of Sprockets directives).
46
+ at the top of your `spec_helper.js` (assuming you're using JavaScript spec runner for Rails that allows the use of Sprockets directives).
54
47
 
55
- (I highly recommend that you use [Teaspoon](https://github.com/modeset/teaspoon) as your JavaScript spec runner.)
48
+ If your JavaScript doesn't support XHR requests, you can drop this in instead:
56
49
 
57
- Now you've got the basic setup.
50
+ ```js
51
+ //= require magic_lamp
52
+ //= require magic_lamp/all_fixtures
53
+ ```
58
54
 
59
- In case you need it, [here's an example app](https://github.com/crismali/magic_lamp/tree/master/example).
55
+ `//= require magic_lamp/all_fixtures` will load all of your fixtures without making any XHR requests.
56
+
57
+ Now you've got the basic setup.
60
58
 
61
59
  ### Debugging
62
60
  Visit `/magic_lamp/lint` in your browser to lint your fixtures. You can also run `rake magic_lamp:lint` (or `rake mll` for short) to lint your fixtures from the command line.
63
61
 
64
62
  ### Loading Helpers
65
63
 
66
- Simply `require` or `load` your helpers in the `magic_lamp_config.rb` file like so:
64
+ Simply `load` your helpers in the `magic_lamp_config.rb` file like so:
67
65
 
68
66
  ```ruby
69
67
  # in magic_lamp_config.rb
70
- Dir[Rails.root.join("spec", "support", "magic_lamp_helpers/**/*.rb")].each { |f| require f }
68
+ Dir[Rails.root.join("spec", "support", "magic_lamp_helpers/**/*.rb")].each { |f| load f }
71
69
  ```
72
70
 
73
71
  ### With Database Cleaner
@@ -399,6 +397,7 @@ It requires a block to which it yields the configuration object. Here you can se
399
397
  Example:
400
398
 
401
399
  ```ruby
400
+ # spec/support/magic_lamp/helpers/auth_stub.rb
402
401
  module AuthStub
403
402
  def current_user
404
403
  @current_user ||= User.create!(
@@ -408,8 +407,11 @@ module AuthStub
408
407
  end
409
408
  end
410
409
 
410
+ # spec/magic_lamp_config.rb (can be anywhere in /spec)
411
411
  MagicLamp.configure do |config|
412
412
 
413
+ Dir[Rails.root.join("spec", "support", "magic_lamp_helpers/**/*.rb")].each { |f| load f }
414
+
413
415
  # if you want to require the name parameter for the `fixture` method
414
416
  config.infer_names = false
415
417
 
@@ -0,0 +1,12 @@
1
+ <% all_fixtures = MagicLamp.generate_all_fixtures.to_json rescue nil %>
2
+
3
+ <% if all_fixtures %>
4
+
5
+ MagicLamp.genie.cacheOnly = true;
6
+ MagicLamp.genie.cache = <%= MagicLamp.generate_all_fixtures.to_json %>;
7
+
8
+ <% else %>
9
+
10
+ throw new Error(MagicLamp.genericError);
11
+
12
+ <% end %>
@@ -85,7 +85,7 @@
85
85
  if (this.xhrStatus(xhr) === 400) {
86
86
  this.handleError(xhr.responseText);
87
87
  } else if (this.xhrStatus(xhr) > 400) {
88
- this.handleError('Something went wrong, please check the server log or run `rake magic_lamp:lint` for more information');
88
+ this.handleError(MagicLamp.genericError);
89
89
  }
90
90
  return xhr;
91
91
  },
@@ -17,7 +17,9 @@
17
17
 
18
18
  preload: function() {
19
19
  this.genie.preload.apply(this.genie, arguments);
20
- }
20
+ },
21
+
22
+ genericError: 'Something went wrong, please check the server log, run `rake magic_lamp:lint`, or visit `/magic_lamp/lint` for more information'
21
23
  };
22
24
 
23
25
  MagicLamp.clean = function() {
data/lib/magic_lamp.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "rake"
1
+ require "method_source"
2
2
 
3
3
  require "magic_lamp/engine"
4
4
  require "magic_lamp/constants"
@@ -9,8 +9,8 @@ require "magic_lamp/defaults_manager"
9
9
  require "magic_lamp/fixture_creator"
10
10
  require "magic_lamp/render_catcher"
11
11
 
12
- require "tasks/lint_task"
13
- require "tasks/fixture_names_task"
12
+ require "tasks/lint"
13
+ require "tasks/fixture_names"
14
14
 
15
15
  module MagicLamp
16
16
  class << self
@@ -1,3 +1,3 @@
1
1
  module MagicLamp
2
- VERSION = "1.5.2"
2
+ VERSION = "1.6.0"
3
3
  end
@@ -0,0 +1,12 @@
1
+ MagicLamp::Genie.rake_tasks do
2
+ namespace :magic_lamp do
3
+ desc "Displays all Magic Lamp fixture names"
4
+ task fixture_names: :environment do
5
+ MagicLamp.load_lamp_files
6
+ puts MagicLamp.registered_fixtures.keys.sort
7
+ end
8
+ end
9
+
10
+ desc "Displays all Magic Lamp fixture names (alias for `magic_lamp:fixture_names`)"
11
+ task mlfn: "magic_lamp:fixture_names"
12
+ end
data/lib/tasks/lint.rb ADDED
@@ -0,0 +1,88 @@
1
+ MagicLamp::Genie.rake_tasks do
2
+ namespace :magic_lamp do
3
+ desc "Generates all Magic Lamp fixtures and displays errors for debugging"
4
+ task lint: ["magic_lamp:lint:config", "magic_lamp:lint:files", "magic_lamp:lint:fixtures"]
5
+
6
+ namespace :lint do
7
+ desc "Lints your Magic Lamp configuration and reports any errors"
8
+ task config: :environment do
9
+ puts "Linting Magic Lamp configuration..."
10
+ errors = MagicLamp.lint_config
11
+ if errors.present?
12
+ if errors[:config_file_load].present?
13
+ puts "Loading configuration failed with:"
14
+ puts "\n#{errors[:config_file_load]}"
15
+ end
16
+
17
+ [:before_each, :after_each].each do |callback|
18
+ if errors[callback].present?
19
+ puts "Executing #{callback} failed with:"
20
+ puts "\n#{errors[callback]}"
21
+ end
22
+ end
23
+ abort
24
+ else
25
+ puts "Configuration looks good!"
26
+ end
27
+ end
28
+
29
+ desc "Lints your Magic Lamp lamp files and reports any errors"
30
+ task files: :environment do
31
+ puts "Linting lamp files..."
32
+ errors = MagicLamp.lint_fixtures[:files]
33
+
34
+ if errors.present?
35
+ puts "The following files are broken:"
36
+ puts ""
37
+
38
+ errors.each do |path, error|
39
+ puts "File: #{path}"
40
+ puts "Error: #{error}"
41
+ puts ""
42
+ end
43
+ abort
44
+ else
45
+ puts "Lamp files look good!"
46
+ end
47
+ end
48
+
49
+ desc "Lints your Magic Lamp fixtures and reports any errors"
50
+ task fixtures: :environment do
51
+ puts "Linting Magic Lamp fixtures..."
52
+ errors = MagicLamp.lint_fixtures[:fixtures]
53
+
54
+ if errors.present?
55
+ puts "The following fixtures are broken:"
56
+ puts ""
57
+
58
+ errors.each do |name, fixture_info|
59
+ puts "Name: \"#{name}\""
60
+ render_block = fixture_info[:render_block]
61
+ puts "File: #{render_block.source_location.join(':')}"
62
+ puts "Controller: #{fixture_info[:controller]}"
63
+
64
+ if fixture_info[:extend].present?
65
+ extensions = fixture_info[:extend].join(", ")
66
+ else
67
+ extensions = "None"
68
+ end
69
+
70
+ puts "Extensions: #{extensions}"
71
+ puts ""
72
+ puts "Source code:"
73
+ puts render_block.source
74
+ puts ""
75
+ puts "Error: #{fixture_info[:error]}"
76
+ puts ""
77
+ end
78
+ abort
79
+ else
80
+ puts "Fixtures look good!"
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ desc "Generates all Magic Lamp fixtures and displays errors for debugging (alias for `magic_lamp:lint`)"
87
+ task mll: "magic_lamp:lint"
88
+ end
@@ -2,7 +2,7 @@ require "rails_helper"
2
2
 
3
3
  module MagicLamp
4
4
  describe LintController do
5
- routes { Engine.routes }
5
+ routes { MagicLamp::Engine.routes }
6
6
 
7
7
  describe "#index" do
8
8
  context "no errors" do
@@ -308,7 +308,7 @@ describe('Genie', function() {
308
308
  stub(subject, 'xhrStatus', 500);
309
309
  var path = '/magic_lamp/foo/bar';
310
310
  subject.xhrRequest(path);
311
- expect(subject.handleError).to.have.been.calledWith('Something went wrong, please check the server log or run `rake magic_lamp:lint` for more information');
311
+ expect(subject.handleError).to.have.been.calledWith(MagicLamp.genericError);
312
312
  });
313
313
 
314
314
  it('calls handleError with the default error message if the status was 404', function() {
@@ -316,7 +316,7 @@ describe('Genie', function() {
316
316
  stub(subject, 'xhrStatus', 404);
317
317
  var path = '/magic_lamp/foo/bar';
318
318
  subject.xhrRequest(path);
319
- expect(subject.handleError).to.have.been.calledWith('Something went wrong, please check the server log or run `rake magic_lamp:lint` for more information');
319
+ expect(subject.handleError).to.have.been.calledWith(MagicLamp.genericError);
320
320
  });
321
321
  });
322
322
 
@@ -0,0 +1,32 @@
1
+ require "rails_helper"
2
+
3
+ describe "All fixtures js erb" do
4
+ subject do
5
+ sprockets_env = Sprockets::Environment.new
6
+ sprockets_env.append_path("app/assets/javascripts/")
7
+ sprockets_env["magic_lamp/all_fixtures.js"].to_s
8
+ end
9
+
10
+ it "sets cache only to true" do
11
+ expect(subject).to match(/MagicLamp.genie.cacheOnly = true/)
12
+ end
13
+
14
+ it "provides all of the fixtures as json in the cache" do
15
+ excaped_json = Regexp.escape(MagicLamp.generate_all_fixtures.to_json)
16
+ expect(subject).to match(/MagicLamp.genie.cache = #{excaped_json}/)
17
+ end
18
+
19
+ it "does not throw an error" do
20
+ expect(subject).to_not match(/throw new Error\(MagicLamp.genericError\)/)
21
+ end
22
+
23
+ context "errors" do
24
+ before do
25
+ allow(MagicLamp).to receive(:generate_all_fixtures).and_raise("Some error")
26
+ end
27
+
28
+ it "throws an error" do
29
+ expect(subject).to match(/throw new Error\(MagicLamp.genericError\)/)
30
+ end
31
+ end
32
+ end
data/spec/spec_helper.rb CHANGED
@@ -15,7 +15,6 @@
15
15
  #
16
16
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
17
  require "fantaskspec"
18
- MAIN_OBJECT = self
19
18
 
20
19
  Dir[File.expand_path("../support/**/*.rb", __FILE__)].each { |file| require file }
21
20
 
@@ -4,7 +4,7 @@ describe "magic_lamp:fixture_names" do
4
4
  it { is_expected.to depend_on(:environment) }
5
5
 
6
6
  it "outputs a sorted list of all the fixture names" do
7
- expect(MAIN_OBJECT).to receive(:puts) do |output|
7
+ expect(MagicLamp::Genie.instance).to receive(:puts) do |output|
8
8
  fixture_names = MagicLamp.registered_fixtures.keys.sort
9
9
  expect(output).to_not be_empty
10
10
  expect(output).to eq(fixture_names)
@@ -34,7 +34,7 @@ describe "magic_lamp:lint:config" do
34
34
  end
35
35
 
36
36
  it "does not abort" do
37
- expect(MAIN_OBJECT).to_not receive(:abort)
37
+ expect(MagicLamp::Genie.instance).to_not receive(:abort)
38
38
  end
39
39
  end
40
40
 
@@ -42,7 +42,7 @@ describe "magic_lamp:lint:config" do
42
42
  let!(:error_proc) { proc { raise "Nope" } }
43
43
 
44
44
  before do
45
- allow(MAIN_OBJECT).to receive(:abort)
45
+ allow(MagicLamp::Genie.instance).to receive(:abort)
46
46
  end
47
47
 
48
48
  it "tells us if the file could be loaded" do
@@ -70,7 +70,7 @@ describe "magic_lamp:lint:config" do
70
70
  allow(MagicLamp).to receive(:load_config) do
71
71
  load Rails.root.join("error_specs", "config_file_load_error.rb")
72
72
  end
73
- expect(MAIN_OBJECT).to receive(:abort)
73
+ expect(MagicLamp::Genie.instance).to receive(:abort)
74
74
  capture_stdout { subject.execute }
75
75
  end
76
76
  end
@@ -81,7 +81,7 @@ describe "magic_lamp:lint:files" do
81
81
  let(:output) { capture_stdout { subject.execute } }
82
82
 
83
83
  before do
84
- allow(MAIN_OBJECT).to receive(:abort).and_return(:abort)
84
+ allow(MagicLamp::Genie.instance).to receive(:abort).and_return(:abort)
85
85
  end
86
86
 
87
87
  it { is_expected.to depend_on(:environment) }
@@ -93,7 +93,7 @@ describe "magic_lamp:lint:files" do
93
93
  end
94
94
 
95
95
  it "does not abort" do
96
- expect(MAIN_OBJECT).to_not receive(:abort)
96
+ expect(MagicLamp::Genie.instance).to_not receive(:abort)
97
97
  capture_stdout { subject.execute }
98
98
  end
99
99
  end
@@ -120,7 +120,7 @@ describe "magic_lamp:lint:files" do
120
120
 
121
121
  it "aborts the task" do
122
122
  allow(MagicLamp).to receive(:lamp_files).and_return(lamp_file_paths)
123
- expect(MAIN_OBJECT).to receive(:abort)
123
+ expect(MagicLamp::Genie.instance).to receive(:abort)
124
124
  capture_stdout { subject.execute }
125
125
  end
126
126
  end
@@ -139,14 +139,14 @@ describe "magic_lamp:lint:fixtures" do
139
139
  end
140
140
 
141
141
  it "does not abort" do
142
- expect(MAIN_OBJECT).to_not receive(:abort)
142
+ expect(MagicLamp::Genie.instance).to_not receive(:abort)
143
143
  capture_stdout { subject.execute }
144
144
  end
145
145
  end
146
146
 
147
147
  context "errors" do
148
148
  before do
149
- allow(MAIN_OBJECT).to receive(:abort).and_return(:abort)
149
+ allow(MagicLamp::Genie.instance).to receive(:abort).and_return(:abort)
150
150
  allow(MagicLamp).to receive(:lamp_files).and_return([Rails.root.join("error_specs", "broken_fixtures.rb").to_s])
151
151
  end
152
152
 
@@ -181,7 +181,7 @@ describe "magic_lamp:lint:fixtures" do
181
181
  end
182
182
 
183
183
  it "aborts the task" do
184
- expect(MAIN_OBJECT).to receive(:abort)
184
+ expect(MagicLamp::Genie.instance).to receive(:abort)
185
185
  capture_stdout { subject.execute }
186
186
  end
187
187
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magic_lamp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Crismali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-28 00:00:00.000000000 Z
11
+ date: 2015-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -245,6 +245,7 @@ files:
245
245
  - LICENSE
246
246
  - README.md
247
247
  - app/assets/javascripts/magic_lamp.js
248
+ - app/assets/javascripts/magic_lamp/all_fixtures.js.erb
248
249
  - app/assets/javascripts/magic_lamp/application.js
249
250
  - app/assets/javascripts/magic_lamp/boot.js
250
251
  - app/assets/javascripts/magic_lamp/genie.js
@@ -270,8 +271,8 @@ files:
270
271
  - lib/magic_lamp/fixture_creator.rb
271
272
  - lib/magic_lamp/render_catcher.rb
272
273
  - lib/magic_lamp/version.rb
273
- - lib/tasks/fixture_names_task.rb
274
- - lib/tasks/lint_task.rb
274
+ - lib/tasks/fixture_names.rb
275
+ - lib/tasks/lint.rb
275
276
  - spec/controllers/magic_lamp/fixtures_controller_spec.rb
276
277
  - spec/controllers/magic_lamp/lint_controller_spec.rb
277
278
  - spec/dummy/README.rdoc
@@ -337,6 +338,7 @@ files:
337
338
  - spec/javascripts/support/chai-fuzzy.js
338
339
  - spec/javascripts/support/sinon-chai.js
339
340
  - spec/javascripts/support/underscore-1.6.js
341
+ - spec/lib/all_fixtures_spec.rb
340
342
  - spec/lib/configuration_spec.rb
341
343
  - spec/lib/defaults_manager_spec.rb
342
344
  - spec/lib/fixture_creator_spec.rb
@@ -438,6 +440,7 @@ test_files:
438
440
  - spec/javascripts/support/chai-fuzzy.js
439
441
  - spec/javascripts/support/sinon-chai.js
440
442
  - spec/javascripts/support/underscore-1.6.js
443
+ - spec/lib/all_fixtures_spec.rb
441
444
  - spec/lib/configuration_spec.rb
442
445
  - spec/lib/defaults_manager_spec.rb
443
446
  - spec/lib/fixture_creator_spec.rb
@@ -1,10 +0,0 @@
1
- namespace :magic_lamp do
2
- desc "Displays all Magic Lamp fixture names"
3
- task fixture_names: :environment do
4
- MagicLamp.load_lamp_files
5
- puts MagicLamp.registered_fixtures.keys.sort
6
- end
7
- end
8
-
9
- desc "Displays all Magic Lamp fixture names (alias for `magic_lamp:fixture_names`)"
10
- task mlfn: "magic_lamp:fixture_names"
@@ -1,88 +0,0 @@
1
- require "method_source"
2
-
3
- namespace :magic_lamp do
4
- desc "Generates all Magic Lamp fixtures and displays errors for debugging"
5
- task lint: ["magic_lamp:lint:config", "magic_lamp:lint:files", "magic_lamp:lint:fixtures"]
6
-
7
- namespace :lint do
8
- desc "Lints your Magic Lamp configuration and reports any errors"
9
- task config: :environment do
10
- puts "Linting Magic Lamp configuration..."
11
- errors = MagicLamp.lint_config
12
- if errors.present?
13
- if errors[:config_file_load].present?
14
- puts "Loading configuration failed with:"
15
- puts "\n#{errors[:config_file_load]}"
16
- end
17
-
18
- [:before_each, :after_each].each do |callback|
19
- if errors[callback].present?
20
- puts "Executing #{callback} failed with:"
21
- puts "\n#{errors[callback]}"
22
- end
23
- end
24
- abort
25
- else
26
- puts "Configuration looks good!"
27
- end
28
- end
29
-
30
- desc "Lints your Magic Lamp lamp files and reports any errors"
31
- task files: :environment do
32
- puts "Linting lamp files..."
33
- errors = MagicLamp.lint_fixtures[:files]
34
-
35
- if errors.present?
36
- puts "The following files are broken:"
37
- puts ""
38
-
39
- errors.each do |path, error|
40
- puts "File: #{path}"
41
- puts "Error: #{error}"
42
- puts ""
43
- end
44
- abort
45
- else
46
- puts "Lamp files look good!"
47
- end
48
- end
49
-
50
- desc "Lints your Magic Lamp fixtures and reports any errors"
51
- task fixtures: :environment do
52
- puts "Linting Magic Lamp fixtures..."
53
- errors = MagicLamp.lint_fixtures[:fixtures]
54
-
55
- if errors.present?
56
- puts "The following fixtures are broken:"
57
- puts ""
58
-
59
- errors.each do |name, fixture_info|
60
- puts "Name: \"#{name}\""
61
- render_block = fixture_info[:render_block]
62
- puts "File: #{render_block.source_location.join(':')}"
63
- puts "Controller: #{fixture_info[:controller]}"
64
-
65
- if fixture_info[:extend].present?
66
- extensions = fixture_info[:extend].join(", ")
67
- else
68
- extensions = "None"
69
- end
70
-
71
- puts "Extensions: #{extensions}"
72
- puts ""
73
- puts "Source code:"
74
- puts render_block.source
75
- puts ""
76
- puts "Error: #{fixture_info[:error]}"
77
- puts ""
78
- end
79
- abort
80
- else
81
- puts "Fixtures look good!"
82
- end
83
- end
84
- end
85
- end
86
-
87
- desc "Generates all Magic Lamp fixtures and displays errors for debugging (alias for `magic_lamp:lint`)"
88
- task mll: "magic_lamp:lint"