nitrolinks-rails 0.1.0 → 0.2.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: 24302bf169536da10cb236af115866831fa6386f
4
- data.tar.gz: e9ce52c3071979143845632d695b42fcadd0e3a5
3
+ metadata.gz: 02876071ee063c5549016d3b2067f0d2556b0e19
4
+ data.tar.gz: 854ba5bc3278599e9ba3875bec3bd1fb21cfe526
5
5
  SHA512:
6
- metadata.gz: 349d7988a2ec9060822049d635eb21b3f0b6349d0b4efffbce8314e443fa00886ce81f0de5408eb8b76e60dc87809367dcd30e588aff681a61f8693c91debebc
7
- data.tar.gz: c2117dc35daaaaba0e7755e37d37ad8ce5f818fd731d6184ef41a3d17c512060f833f30e65478467a103a68f6cf8879052cbae07cbda7c6e146ee1ecce6c137f
6
+ metadata.gz: 0163b8b372e197a13b997ca96fd0cb929c6cd187b63b32f789d5e64036d270b82c0ffd306bf8141f358dedd212a32e35364e333cd9c444fc6c57ae25ec381299
7
+ data.tar.gz: 08facc91ca92d4f09d0c3d047e820bdbf296ac583c07c3886ef4be89ed5c683661019aa6aabca9bfed030d07d87abee2c5f1d17e927e09a201cc244488d6b64d
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .DS_Store
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /Gemfile.lock
@@ -7,3 +8,7 @@
7
8
  /pkg/
8
9
  /spec/reports/
9
10
  /tmp/
11
+ features/dummy/db/*.sqlite3
12
+ features/dummy/db/*.sqlite3-journal
13
+ features/dummy/log/*.log
14
+ features/dummy/tmp/
data/Gemfile CHANGED
@@ -1,4 +1,18 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in nitrolinks-rails.gemspec
4
3
  gemspec
4
+
5
+ group :test do
6
+ gem "cucumber-rails", ">= 1.5.0", require: false
7
+ gem 'selenium-webdriver'
8
+ gem 'chromedriver-helper', '>= 1.1.0'
9
+ end
10
+
11
+ group :test, :development do
12
+ gem "slim-rails", "~> 3.1"
13
+ gem 'sass-rails', '~> 5.0'
14
+ gem 'coffee-rails', '~> 4.2'
15
+ end
16
+
17
+ # To use a debugger
18
+ # gem 'byebug', group: [:development, :test]
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Wayne Duran
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -19,11 +19,11 @@ gem 'nitrolinks-rails'
19
19
 
20
20
  And then execute:
21
21
 
22
- $ bundle
22
+ $ bundle
23
23
 
24
24
  Or install it yourself as:
25
25
 
26
- $ gem install nitrolinks-rails
26
+ $ gem install nitrolinks-rails
27
27
 
28
28
  ## Usage
29
29
 
data/Rakefile CHANGED
@@ -1,2 +1,24 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Nitrolinks::Rails'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("../features/dummy/Rakefile", __FILE__)
18
+ load 'rails/tasks/engine.rake'
19
+ load 'rails/tasks/statistics.rake'
20
+
21
+
22
+
23
+ require 'bundler/gem_tasks'
24
+
@@ -0,0 +1,195 @@
1
+ whenReady = (fn) ->
2
+ if (if document.attachEvent then document.readyState == 'complete' else document.readyState != 'loading')
3
+ fn()
4
+ else
5
+ document.addEventListener "DOMContentLoaded", ->
6
+ fn()
7
+
8
+ select = (selector) ->
9
+ selectAll(selector)[0]
10
+
11
+ selectAll = (selector) ->
12
+ document.querySelectorAll(selector)
13
+
14
+ eventListen = (event, handler) ->
15
+ document.addEventListener event, (e) ->
16
+ handler.call document, e
17
+
18
+ last = (collection) ->
19
+ if collection.length > 0
20
+ collection[collection.length - 1]
21
+
22
+ class NitrolinksTesting
23
+ constructor: (@window, @document) ->
24
+ @active = false
25
+ @store = new NitrolinksTestStore(@window.localStorage)
26
+ @domLoadKey = 'nitroDomLoad'
27
+ @fetchLoadKey = 'nitroFetchLoad'
28
+ @cacheLoadKey = 'nitroCacheLoad'
29
+ @loadCount = 0
30
+ @errors = []
31
+
32
+ init: ->
33
+ @listen()
34
+
35
+ body: ->
36
+ select('body')
37
+
38
+ markAsLoading: (from)->
39
+ @active = true
40
+ @body().classList.add('testing-visiting')
41
+
42
+ markAsDoneLoading: ->
43
+ @active = false
44
+ @body().classList.remove('testing-visiting')
45
+
46
+ listen: ->
47
+ eventListen 'nitrolinks:visit', =>
48
+ @markAsLoading('nitrolinks:visit')
49
+
50
+ loads = (e) =>
51
+ @loadCount += 1
52
+ @markAsDoneLoading()
53
+ @showDebugData()
54
+
55
+ eventListen 'nitrolinks:load', loads
56
+ eventListen 'nitrolinks:load-blank', loads
57
+
58
+ eventListen 'nitrolinks:load-from-fetch', (e) =>
59
+ @addToFetched(e.detail.url)
60
+
61
+ eventListen 'nitrolinks:load-from-cache', (e) =>
62
+ @addToCached(e.detail.url)
63
+
64
+ @window.addEventListener 'error', (e) =>
65
+ @addToErrors(e)
66
+
67
+ whenReady =>
68
+ return unless select('#nitro-debugging')
69
+ @addToLoaded(@window.location.href)
70
+ @showDebugData()
71
+ @markAsDoneLoading()
72
+
73
+ addToFetched: (url) ->
74
+ @addToArrayStored(@fetchLoadKey, url)
75
+
76
+ addToLoaded: (url) ->
77
+ @addToArrayStored(@domLoadKey, url)
78
+
79
+ addToCached: (url) ->
80
+ @addToArrayStored(@cacheLoadKey, url)
81
+
82
+ addToArrayStored: (key, input) ->
83
+ loads = @store.get(key, [])
84
+ loads.push input
85
+ @store.set(key, loads)
86
+
87
+ addToErrors: (e) ->
88
+ if e.error
89
+ @errors.push e.error.message
90
+ else
91
+ @errors.push e
92
+ console.log e
93
+ @loadShowerFromCollection(@errorsEl(), @errors)
94
+
95
+ showDebugData: ->
96
+ if select('#nitro-debugging')
97
+ @showNitroLoadCount()
98
+ @showDomLoads()
99
+ @showFetchLoads()
100
+ @showCacheLoads()
101
+
102
+ showNitroLoadCount: ->
103
+ select('#nitro-debugging .nitro-load-count').textContent = @loadCount
104
+
105
+ errorsEl: ->
106
+ select('#nitro-debugging .javascript-errors')
107
+
108
+ domEl: ->
109
+ select('#nitro-debugging .dom-loads')
110
+
111
+ showDomLoads: ->
112
+ @loadShowerFromCollection(@domEl(), @errors)
113
+
114
+ loadShower: ($el, storeKey) ->
115
+ @loadShowerFromCollection($el, @store.get(storeKey, []))
116
+
117
+ loadShowerFromCollection: ($el, loads) ->
118
+ htmlStr = ''
119
+ for load in loads
120
+ htmlStr += "<li>#{load}</li>"
121
+ $el.innerHTML = htmlStr
122
+
123
+ fetchEl: ->
124
+ select('#nitro-debugging .fetch-loads')
125
+
126
+ showFetchLoads: ->
127
+ @loadShower(@fetchEl(), @fetchLoadKey)
128
+
129
+ cacheEl: ->
130
+ select('#nitro-debugging .cache-loads')
131
+
132
+ showCacheLoads: ->
133
+ @loadShower(@cacheEl(), @cacheLoadKey)
134
+
135
+ clearDomLoads: ->
136
+ @store.remove(@domLoadKey)
137
+ @clearSessionLoads()
138
+
139
+ clearSessionLoads: ->
140
+ @store.remove(@fetchLoadKey)
141
+ @store.remove(@cacheLoadKey)
142
+
143
+ domLoadCount: ->
144
+ @store.get(@domLoadKey, []).length
145
+
146
+ isPageFetched: (path) ->
147
+ @compareItem(@fetchEl(), path)
148
+
149
+ isPageNormallyLoaded: (path) ->
150
+ @compareItem(@domEl(), path, (item) ->
151
+ @urlPath(item.textContent)
152
+ )
153
+
154
+ isPageCacheRestored: (path) ->
155
+ @compareItem(@cacheEl(), path)
156
+
157
+ compareItem: (el, path, comparator) ->
158
+ comparator ||= (item) ->
159
+ item.textContent
160
+ lastItem = last(el.querySelectorAll('li'))
161
+ if lastItem
162
+ comparator(lastItem) == path
163
+ else
164
+ false
165
+
166
+ urlPath: (urlStr) ->
167
+ url = new URL(urlStr)
168
+ if url.origin == url.toString()
169
+ url.pathname
170
+ else
171
+ url.toString().replace(url.origin, '')
172
+
173
+ hasJavascriptErrors: ->
174
+ @errorsEl().querySelectorAll('li').length > 0
175
+
176
+ class NitrolinksTestStore
177
+ constructor: (@localStore) ->
178
+
179
+ set: (key, value) ->
180
+ @localStore.setItem(key, JSON.stringify(value))
181
+
182
+ get: (key, def = null) ->
183
+ stored = @localStore.getItem(key)
184
+ if stored
185
+ JSON.parse stored
186
+ else
187
+ def
188
+
189
+ remove: (key) ->
190
+ @localStore.removeItem(key)
191
+
192
+ whenReady =>
193
+ @nitroTesting = new NitrolinksTesting(window, document)
194
+ @nitroTesting.init()
195
+
data/bin/rails ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails gems
3
+ # installed from the root of your application.
4
+
5
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
6
+ ENGINE_PATH = File.expand_path('../../lib/nitrolinks/rails/engine', __FILE__)
7
+ APP_PATH = File.expand_path('../../features/dummy/config/application', __FILE__)
8
+
9
+ # Set up gems listed in the Gemfile.
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
11
+ require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
12
+
13
+ # Pick the frameworks you want:
14
+ require "action_controller/railtie"
15
+ require "action_view/railtie"
16
+ require "sprockets/railtie"
17
+
18
+ require 'rails/engine/commands'
@@ -0,0 +1,8 @@
1
+ <%
2
+ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
3
+ rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
4
+ std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags 'not @wip'"
5
+ %>
6
+ default: <%= std_opts %> features
7
+ wip: --tags @wip:3 --wip features
8
+ rerun: "<%= rerun_opts %> --format rerun --out rerun.txt --strict --tags 'not @wip'"
@@ -1,5 +1,5 @@
1
1
  module Nitrolinks
2
2
  module Rails
3
- VERSION = "0.1.0"
3
+ VERSION = '0.2.0'
4
4
  end
5
5
  end
@@ -0,0 +1,76 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+
8
+ unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks
9
+
10
+ vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
11
+ $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?
12
+
13
+ begin
14
+ require 'cucumber/rake/task'
15
+
16
+ namespace :cucumber do
17
+ Cucumber::Rake::Task.new({:ok => 'test:prepare'}, 'Run features that should pass') do |t|
18
+ t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
19
+ t.fork = true # You may get faster startup if you set this to false
20
+ t.profile = 'default'
21
+ end
22
+
23
+ Cucumber::Rake::Task.new({:wip => 'test:prepare'}, 'Run features that are being worked on') do |t|
24
+ t.binary = vendored_cucumber_bin
25
+ t.fork = true # You may get faster startup if you set this to false
26
+ t.profile = 'wip'
27
+ end
28
+
29
+ Cucumber::Rake::Task.new({:rerun => 'test:prepare'}, 'Record failing features and run only them if any exist') do |t|
30
+ t.binary = vendored_cucumber_bin
31
+ t.fork = true # You may get faster startup if you set this to false
32
+ t.profile = 'rerun'
33
+ end
34
+
35
+ desc 'Run all features'
36
+ task :all => [:ok, :wip]
37
+
38
+ task :statsetup do
39
+ require 'rails/code_statistics'
40
+ ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features')
41
+ ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features')
42
+ end
43
+
44
+ task :annotations_setup do
45
+ Rails.application.configure do
46
+ if config.respond_to?(:annotations)
47
+ config.annotations.directories << 'features'
48
+ config.annotations.register_extensions('feature') { |tag| /#\s*(#{tag}):?\s*(.*)$/ }
49
+ end
50
+ end
51
+ end
52
+ end
53
+ desc 'Alias for cucumber:ok'
54
+ task :cucumber => 'cucumber:ok'
55
+
56
+ task :default => :cucumber
57
+
58
+ task :features => :cucumber do
59
+ STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
60
+ end
61
+
62
+ # In case we don't have the generic Rails test:prepare hook, append a no-op task that we can depend upon.
63
+ task 'test:prepare' do
64
+ end
65
+
66
+ task :stats => 'cucumber:statsetup'
67
+
68
+ task :notes => 'cucumber:annotations_setup'
69
+ rescue LoadError
70
+ desc 'cucumber rake task not available (cucumber not installed)'
71
+ task :cucumber do
72
+ abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
73
+ end
74
+ end
75
+
76
+ end
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
12
12
  spec.summary = "Single-page Apps feel with less overhead"
13
13
  spec.description = "Like Pjax and Turbolinks but with smarter DOM updating"
14
14
  spec.homepage = "https://github.com/asartalo/nitrolinks-rails"
15
+ spec.license = "MIT"
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
18
  f.match(%r{^(test|spec|features)/})
@@ -19,6 +20,7 @@ Gem::Specification.new do |spec|
19
20
  spec.require_paths = ["lib"]
20
21
 
21
22
  spec.add_dependency "rails", "~> 5.1"
23
+ spec.add_dependency 'coffee-rails', '~> 4.2'
22
24
 
23
25
  spec.add_development_dependency "bundler", "~> 1.13"
24
26
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nitrolinks-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wayne Duran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-19 00:00:00.000000000 Z
11
+ date: 2017-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: coffee-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -77,18 +91,24 @@ files:
77
91
  - ".rspec"
78
92
  - ".travis.yml"
79
93
  - Gemfile
94
+ - MIT-LICENSE
80
95
  - README.md
81
96
  - Rakefile
82
97
  - app/assets/javascripts/nitrolinks.coffee
98
+ - app/assets/javascripts/nitrolinks/testing.coffee
83
99
  - app/assets/javascripts/nitrolinks/utilities.coffee
100
+ - bin/rails
101
+ - config/cucumber.yml
84
102
  - lib/nitrolinks/rails.rb
85
103
  - lib/nitrolinks/rails/controller.rb
86
104
  - lib/nitrolinks/rails/engine.rb
87
105
  - lib/nitrolinks/rails/version.rb
106
+ - lib/tasks/cucumber.rake
88
107
  - nitrolinks-rails.gemspec
89
108
  - vendor/assets/javascripts/set-dom.js
90
109
  homepage: https://github.com/asartalo/nitrolinks-rails
91
- licenses: []
110
+ licenses:
111
+ - MIT
92
112
  metadata: {}
93
113
  post_install_message:
94
114
  rdoc_options: []