remote_partial 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +58 -15
- data/Rakefile +5 -22
- data/{app/models → lib}/remote_partial/builder.rb +1 -1
- data/{app/models → lib}/remote_partial/exceptions.rb +0 -0
- data/{app/models → lib}/remote_partial/partial.rb +25 -4
- data/lib/remote_partial/railtie.rb +9 -0
- data/{app/models → lib}/remote_partial/resource_manager.rb +0 -0
- data/lib/remote_partial/time_calc.rb +45 -0
- data/lib/remote_partial/version.rb +8 -1
- data/{app/models → lib}/remote_partial/yaml_store.rb +13 -3
- data/lib/remote_partial.rb +46 -3
- data/lib/tasks/remote_partial_tasks.rake +3 -4
- data/test/log/test.log +71 -0
- data/test/test_helper.rb +36 -15
- data/test/unit/remote_partial/builder_test.rb +12 -9
- data/test/unit/remote_partial/exception_test.rb +1 -1
- data/test/unit/remote_partial/partial_test.rb +8 -8
- data/test/unit/remote_partial/resource_manager_test.rb +3 -3
- data/test/unit/remote_partial/yaml_store_test.rb +9 -9
- data/test/unit/remote_partial_test.rb +23 -9
- metadata +11 -173
- data/app/helpers/remote_partial/application_helper.rb +0 -4
- data/app/helpers/remote_partial/host_app_helper.rb +0 -11
- data/config/routes.rb +0 -2
- data/lib/remote_partial/engine.rb +0 -11
- data/test/dummy/README.rdoc +0 -261
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/javascripts/application.js +0 -15
- data/test/dummy/app/assets/javascripts/demos.js +0 -2
- data/test/dummy/app/assets/javascripts/samples.js +0 -2
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/assets/stylesheets/demos.css +0 -4
- data/test/dummy/app/assets/stylesheets/samples.css +0 -4
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/controllers/demos_controller.rb +0 -18
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/helpers/demos_helper.rb +0 -2
- data/test/dummy/app/helpers/samples_helper.rb +0 -2
- data/test/dummy/app/views/demos/_clock.html.erb +0 -6
- data/test/dummy/app/views/demos/_fixed.html.erb +0 -3
- data/test/dummy/app/views/demos/_ruby.html.erb +0 -4
- data/test/dummy/app/views/demos/index.html.erb +0 -7
- data/test/dummy/app/views/demos/show.html.erb +0 -3
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/app/views/remote_partials/_clock.html.erb +0 -1
- data/test/dummy/app/views/remote_partials/_fixed.html.erb +0 -2
- data/test/dummy/app/views/remote_partials/_partial_with_mod.html.erb +0 -1
- data/test/dummy/app/views/remote_partials/_ruby.html.erb +0 -11
- data/test/dummy/app/views/remote_partials/_wcc.html.erb +0 -1
- data/test/dummy/config/application.rb +0 -63
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -39
- data/test/dummy/config/environments/production.rb +0 -69
- data/test/dummy/config/environments/test.rb +0 -39
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -15
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/remote_partial.rb +0 -16
- data/test/dummy/config/initializers/secret_token.rb +0 -8
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -8
- data/test/dummy/config.ru +0 -4
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130703141929_create_remote_partial_partials.remote_partial.rb +0 -13
- data/test/dummy/db/remote_partial/partials.yml +0 -13
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -5518
- data/test/dummy/log/test.log +0 -33709
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -25
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/functional/demos_controller_test.rb +0 -20
- data/test/dummy/test/unit/helpers/demos_helper_test.rb +0 -20
- data/test/dummy/test/unit/helpers/samples_helper_test.rb +0 -4
- data/test/dummy/tmp/cache/assets/BE9/0F0/sprockets%2Fb918d6cc641337193b96751002451244 +0 -0
- data/test/dummy/tmp/cache/assets/C2E/4E0/sprockets%2F5b29288e435665a224409e7d76530c95 +0 -0
- data/test/dummy/tmp/cache/assets/CB3/DC0/sprockets%2F157201713d2fd4954447e0bf4d8e853e +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CE3/080/sprockets%2F7d4d7689d6fa8236f0b4848c03ba1215 +0 -0
- data/test/dummy/tmp/cache/assets/CE5/D30/sprockets%2F8c9834a63b25a66203918a75ff56e2ac +0 -0
- data/test/dummy/tmp/cache/assets/D16/E10/sprockets%2Fd5d9c442561ec08a55d5d843a0d9792d +0 -0
- data/test/dummy/tmp/cache/assets/D20/020/sprockets%2F488c2c97fede45c86a62f1aa14554957 +0 -0
- data/test/dummy/tmp/cache/assets/D2E/690/sprockets%2F840591ad233bc7bda28b7f6a2b27c205 +0 -0
- data/test/dummy/tmp/cache/assets/D30/990/sprockets%2F995cc20d042afc03241f58f7d6ca1f02 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D52/430/sprockets%2F6ada07f0c9869f9f35b05fa0988dc717 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/DBB/BE0/sprockets%2Fc6eb578d23a69b5abb056e3abaa5c060 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/E02/FA0/sprockets%2Fca8d5771d03e669be1d96acb6beb6cb6 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/remote_partial_test.rb +0 -7
data/README.rdoc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{<img src="https://codeclimate.com/github/warwickshire/remote_partial.png" />}[https://codeclimate.com/github/warwickshire/remote_partial]
|
2
2
|
= RemotePartial
|
3
3
|
|
4
|
-
|
4
|
+
Remote Partial allows partials to be created from remote content.
|
5
5
|
|
6
6
|
== Installation
|
7
7
|
|
@@ -9,9 +9,47 @@ Add this to your Gemfile:
|
|
9
9
|
|
10
10
|
gem 'remote_partial'
|
11
11
|
|
12
|
+
== Configuration
|
13
|
+
|
14
|
+
Prior to version 0.7.0, RemotePartial depended upon Rails to determine some
|
15
|
+
of the configuration options. This dependency has now been removed, and therefore
|
16
|
+
some paths will have to be defined when RemotePartial is run outside of Rails
|
17
|
+
(Standalone mode).
|
18
|
+
|
19
|
+
=== Standalone
|
20
|
+
|
21
|
+
The root location needs to be defined. For example:
|
22
|
+
|
23
|
+
RemotePartial.root = 'some/path'
|
24
|
+
|
25
|
+
With this defined:
|
26
|
+
|
27
|
+
some/path/db/remote_partial --> location for yaml file storing state information
|
28
|
+
some/path/remote_partials --> output path, where partials will be created
|
29
|
+
|
30
|
+
=== Within a Rails environment
|
31
|
+
|
32
|
+
The root is defined as Rails.root, and partials will be placed in the app/views
|
33
|
+
folder. Paths relative to Rails.root will then be:
|
34
|
+
|
35
|
+
db/remote_partial --> location for yaml file storing state information
|
36
|
+
app/views/remote_partials --> output path, where partials will be created
|
37
|
+
|
38
|
+
=== Logging
|
39
|
+
|
40
|
+
In a Rails environment, the Rails logger will be used, otherwise the default
|
41
|
+
logging is STDOUT.
|
42
|
+
|
43
|
+
Logging output to a specific file can be configured like this:
|
44
|
+
|
45
|
+
RemotePartial.logger_file = 'log/remote_partial.log'
|
46
|
+
|
47
|
+
Note that the location will be relative to RemotePartial.root, and the 'log'
|
48
|
+
folder will need to exist.
|
49
|
+
|
12
50
|
== Defining a remote partial
|
13
51
|
|
14
|
-
|
52
|
+
Running this command:
|
15
53
|
|
16
54
|
RemotePartial.define(
|
17
55
|
url: 'http://www.ruby-lang.org/en/',
|
@@ -20,14 +58,20 @@ Define the remote partials in an initializer (config/initializers/remote_partial
|
|
20
58
|
minimum_life: 3.hours
|
21
59
|
)
|
22
60
|
|
23
|
-
|
61
|
+
will create a partial at:
|
24
62
|
|
25
|
-
app/
|
63
|
+
app/views/remote_partials/_ruby.html.erb
|
26
64
|
|
27
65
|
The content of this partial will be grabbed from the page at the url, and will
|
28
66
|
comprise the content defined by '#intro' (that is, the content of the tag with
|
29
67
|
an id='intro'). This content will not be updated for at least 3 hours.
|
30
68
|
|
69
|
+
=== In Rails
|
70
|
+
|
71
|
+
If you define the remote partials in an initializer (for example
|
72
|
+
config/initializers/remote_partial.rb), the remote partial will be updated
|
73
|
+
each time the Rails app is started.
|
74
|
+
|
31
75
|
== Criteria
|
32
76
|
|
33
77
|
Nokogiri is used to extract content from within the target page. Criteria are
|
@@ -58,12 +102,17 @@ For example, to change all instances of 'foo' to 'bar' in the partial:
|
|
58
102
|
|
59
103
|
To output the content of the remote partial 'ruby' to a rails view add this:
|
60
104
|
|
61
|
-
<%=
|
105
|
+
<%= render 'remote_partials/ruby' %>
|
106
|
+
|
107
|
+
Alternatively, the content of the remote partial can be accessed via:
|
108
|
+
|
109
|
+
partial = RemotePartial::Partial.find('ruby')
|
110
|
+
File.read(partial.output_file_name)
|
62
111
|
|
63
112
|
== Updating the content
|
64
113
|
|
65
|
-
|
66
|
-
|
114
|
+
An update of the existing remote partials, can be triggered by running the
|
115
|
+
following rake task:
|
67
116
|
|
68
117
|
rake remote_partial:update
|
69
118
|
|
@@ -73,7 +122,7 @@ If an update process is run before the stale_at time, that partial will not be
|
|
73
122
|
updated.
|
74
123
|
|
75
124
|
So once the 'ruby' remote partial has been updated, it will be at least three
|
76
|
-
hours before it will be updated again.
|
125
|
+
hours before it will be updated again (unless forced).
|
77
126
|
|
78
127
|
These is also a rake task that will force all partials to update irrespective
|
79
128
|
of the stale_at time:
|
@@ -85,16 +134,10 @@ of the stale_at time:
|
|
85
134
|
If remote partial is unable to retrieve remote content, the problem will be
|
86
135
|
logged, and a retrieval will be tried again at the next update.
|
87
136
|
|
88
|
-
== The partial view folder
|
89
|
-
|
90
|
-
Remote partials are held in:
|
91
|
-
|
92
|
-
Rails.root + '/app/views/remote_partials'
|
93
|
-
|
94
137
|
== Persistence
|
95
138
|
|
96
139
|
The current state of each defined remote partial is stored in a YAML file:
|
97
140
|
|
98
|
-
db/remote_partial/
|
141
|
+
db/remote_partial/partial.yml
|
99
142
|
|
100
143
|
This project wobbles and uses MIT-LICENSE.
|
data/Rakefile
CHANGED
@@ -1,16 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
7
|
-
begin
|
8
|
-
require 'rdoc/task'
|
9
|
-
rescue LoadError
|
10
|
-
require 'rdoc/rdoc'
|
11
|
-
require 'rake/rdoctask'
|
12
|
-
RDoc::Task = Rake::RDocTask
|
13
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rdoc/task'
|
5
|
+
require 'rake/testtask'
|
14
6
|
|
15
7
|
RDoc::Task.new(:rdoc) do |rdoc|
|
16
8
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -20,14 +12,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
20
12
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
13
|
end
|
22
14
|
|
23
|
-
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
24
|
-
load 'rails/tasks/engine.rake'
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
Bundler::GemHelper.install_tasks
|
29
|
-
|
30
|
-
require 'rake/testtask'
|
31
15
|
|
32
16
|
Rake::TestTask.new(:test) do |t|
|
33
17
|
t.libs << 'lib'
|
@@ -36,5 +20,4 @@ Rake::TestTask.new(:test) do |t|
|
|
36
20
|
t.verbose = false
|
37
21
|
end
|
38
22
|
|
39
|
-
|
40
23
|
task :default => :test
|
File without changes
|
@@ -4,6 +4,11 @@ module RemotePartial
|
|
4
4
|
|
5
5
|
attr_accessor :stale_at, :repeat_period
|
6
6
|
|
7
|
+
def self.create(hash)
|
8
|
+
super
|
9
|
+
|
10
|
+
end
|
11
|
+
|
7
12
|
def output_file_name
|
8
13
|
[partial_folder, file_name].join("/")
|
9
14
|
end
|
@@ -18,7 +23,7 @@ module RemotePartial
|
|
18
23
|
end
|
19
24
|
|
20
25
|
def criteria
|
21
|
-
super if
|
26
|
+
super if present?(super)
|
22
27
|
end
|
23
28
|
|
24
29
|
def resource_manager
|
@@ -26,11 +31,11 @@ module RemotePartial
|
|
26
31
|
end
|
27
32
|
|
28
33
|
def repeat_period
|
29
|
-
@repeat_period ||=
|
34
|
+
@repeat_period ||= determine_repeat_period.to_f
|
30
35
|
end
|
31
36
|
|
32
37
|
def default_repeat_period
|
33
|
-
1
|
38
|
+
TimeCalc.minutes(1)
|
34
39
|
end
|
35
40
|
|
36
41
|
def update_stale_at
|
@@ -47,7 +52,7 @@ module RemotePartial
|
|
47
52
|
end
|
48
53
|
|
49
54
|
def stale?
|
50
|
-
|
55
|
+
stale_at_blank? or stale_at < Time.now
|
51
56
|
end
|
52
57
|
|
53
58
|
def to_hash
|
@@ -67,5 +72,21 @@ module RemotePartial
|
|
67
72
|
output_modifier? ? instance_eval("lambda #{output_modifier}") : nil
|
68
73
|
end
|
69
74
|
|
75
|
+
def stale_at_blank?
|
76
|
+
return true unless stale_at
|
77
|
+
!stale_at.kind_of? Time
|
78
|
+
end
|
79
|
+
|
80
|
+
def present?(item)
|
81
|
+
item and item.to_s !~ empty_string_pattern
|
82
|
+
end
|
83
|
+
|
84
|
+
def empty_string_pattern
|
85
|
+
/\A\s*\Z/
|
86
|
+
end
|
87
|
+
|
88
|
+
def determine_repeat_period
|
89
|
+
self[:repeat_period] || self['repeat_period'] || default_repeat_period
|
90
|
+
end
|
70
91
|
end
|
71
92
|
end
|
File without changes
|
@@ -0,0 +1,45 @@
|
|
1
|
+
|
2
|
+
module TimeCalc
|
3
|
+
|
4
|
+
def self.days(number)
|
5
|
+
hours(number) * hours_in_a_day
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.hours(number)
|
9
|
+
minutes(number) * minutes_in_an_hour
|
10
|
+
end
|
11
|
+
|
12
|
+
# returns seconds in number of minutes
|
13
|
+
def self.minutes(number)
|
14
|
+
number * seconds_in_a_minute
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.ago(seconds)
|
18
|
+
Time.now - seconds
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.minutes_ago(number)
|
22
|
+
ago(minutes(number))
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.hours_ago(number)
|
26
|
+
ago(hours(number))
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.days_ago(number)
|
30
|
+
ago(days(number))
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.seconds_in_a_minute
|
34
|
+
60
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.minutes_in_an_hour
|
38
|
+
60
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.hours_in_a_day
|
42
|
+
24
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -1,10 +1,17 @@
|
|
1
1
|
module RemotePartial
|
2
|
-
VERSION = "0.
|
2
|
+
VERSION = "0.7.0"
|
3
3
|
end
|
4
4
|
|
5
5
|
# History
|
6
6
|
# =======
|
7
7
|
#
|
8
|
+
# 0.7.0 Removes dependency on Rails
|
9
|
+
# ---------------------------------
|
10
|
+
# The rails dependency was only required to determine a couple of paths,
|
11
|
+
# and to generate a helper that I don't think was actually that useful.
|
12
|
+
# RemotePartial will stills work with Rails to determine default output
|
13
|
+
# paths, but is no longer dependant on it.
|
14
|
+
#
|
8
15
|
# 0.6.0 Fixes failure to load content from https sites
|
9
16
|
# ----------------------------------------------------
|
10
17
|
# Whoops. This should have been there from the start.
|
@@ -33,12 +33,12 @@ module RemotePartial
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.file
|
36
|
-
@file ||= File.expand_path("#{name
|
36
|
+
@file ||= File.expand_path("#{underscore(name)}.yml", root)
|
37
37
|
end
|
38
38
|
|
39
39
|
def self.root
|
40
|
-
location =
|
41
|
-
File.expand_path(location,
|
40
|
+
location = 'db'
|
41
|
+
File.expand_path(location, RemotePartial.root)
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.dir
|
@@ -76,6 +76,16 @@ module RemotePartial
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
def self.underscore(camel_cased_word)
|
80
|
+
word = camel_cased_word.to_s.dup
|
81
|
+
word.gsub!('::', '/')
|
82
|
+
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
83
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
84
|
+
word.tr!("-", "_")
|
85
|
+
word.downcase!
|
86
|
+
word
|
87
|
+
end
|
88
|
+
|
79
89
|
def update_time_stamps
|
80
90
|
self.created_at = Time.now unless created_at?
|
81
91
|
self.updated_at = Time.now
|
data/lib/remote_partial.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
require_relative
|
1
|
+
required_items = [:exceptions, :time_calc, :yaml_store, :partial, :resource_manager, :builder]
|
2
|
+
required_items.each{|item| require_relative "remote_partial/#{item}"}
|
3
|
+
require_relative('remote_partial/railtie') if defined? Rails
|
3
4
|
|
4
5
|
module RemotePartial
|
5
6
|
|
@@ -8,7 +9,49 @@ module RemotePartial
|
|
8
9
|
end
|
9
10
|
|
10
11
|
def self.partial_location
|
11
|
-
|
12
|
+
if defined?(Rails)
|
13
|
+
File.expand_path('app/views/remote_partials', Rails.root)
|
14
|
+
else
|
15
|
+
File.expand_path('remote_partials', root)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.root
|
20
|
+
@root || default_root
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.root=(path)
|
24
|
+
@root = path
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.default_root
|
28
|
+
if defined? Rails
|
29
|
+
Rails.root
|
30
|
+
else
|
31
|
+
raise("You must define a root via: RemotePartial.root = 'some/path' ")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.logger
|
36
|
+
if defined? Rails
|
37
|
+
Rails.logger
|
38
|
+
else
|
39
|
+
require 'logger'
|
40
|
+
@logger ||= ruby_logger
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.ruby_logger
|
45
|
+
require 'logger'
|
46
|
+
Logger.new(logger_file)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.logger_file
|
50
|
+
@logger_file || STDOUT
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.logger_file=(path)
|
54
|
+
@logger_file = File.expand_path(path, root)
|
12
55
|
end
|
13
56
|
|
14
57
|
end
|
@@ -2,15 +2,14 @@ namespace :remote_partial do
|
|
2
2
|
|
3
3
|
desc "Updates remote partials"
|
4
4
|
task :update => :environment do
|
5
|
-
|
6
|
-
|
7
|
-
Rails.logger.info "Updated remote partials at #{Time.now.to_s(:db)}"
|
5
|
+
RemotePartial::Partial.all.each{|partial| puts partial.name if partial.update_stale_file }
|
6
|
+
RemotePartial.logger.info "Updated remote partials at #{Time.now.to_s(:db)}"
|
8
7
|
end
|
9
8
|
|
10
9
|
desc "Force update of all remote partials"
|
11
10
|
task :force_update => :environment do
|
12
11
|
RemotePartial::Partial.all.each{|partial| puts partial.name if partial.update_file }
|
13
|
-
|
12
|
+
RemotePartial.logger.info "Forced update of remote partials at #{Time.now.to_s(:db)}"
|
14
13
|
end
|
15
14
|
|
16
15
|
end
|
data/test/log/test.log
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Logfile created on 2013-08-27 12:15:14 +0100 by logger.rb/31641
|
2
|
+
W, [2013-08-27T12:15:14.265154 #4124] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
3
|
+
W, [2013-08-27T12:15:14.359792 #4124] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
4
|
+
I, [2013-08-27T12:22:34.914264 #4152] INFO -- : Preparing to test logging via assert_log_entry_added
|
5
|
+
W, [2013-08-27T12:22:34.931198 #4152] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
6
|
+
I, [2013-08-27T12:22:34.997206 #4152] INFO -- : Preparing to test logging via assert_log_entry_added
|
7
|
+
W, [2013-08-27T12:22:35.003639 #4152] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
8
|
+
I, [2013-08-27T12:23:35.450015 #4158] INFO -- : Preparing to test logging via assert_log_entry_added
|
9
|
+
W, [2013-08-27T12:23:35.466803 #4158] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
10
|
+
I, [2013-08-27T12:23:35.553864 #4158] INFO -- : Preparing to test logging via assert_log_entry_added
|
11
|
+
W, [2013-08-27T12:23:35.561805 #4158] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
12
|
+
I, [2013-08-27T12:24:16.551530 #4164] INFO -- : Preparing to test logging via assert_log_entry_added
|
13
|
+
W, [2013-08-27T12:24:16.572608 #4164] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
14
|
+
W, [2013-08-27T12:24:16.577606 #4164] WARN -- : Something
|
15
|
+
I, [2013-08-27T12:24:16.669041 #4164] INFO -- : Preparing to test logging via assert_log_entry_added
|
16
|
+
W, [2013-08-27T12:24:16.678542 #4164] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
17
|
+
W, [2013-08-27T12:24:16.678898 #4164] WARN -- : Something
|
18
|
+
I, [2013-08-27T12:25:04.174618 #4170] INFO -- : Preparing to test logging via assert_log_entry_added
|
19
|
+
W, [2013-08-27T12:25:04.183392 #4170] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
20
|
+
W, [2013-08-27T12:25:04.183934 #4170] WARN -- : Something
|
21
|
+
I, [2013-08-27T12:25:04.239296 #4170] INFO -- : Preparing to test logging via assert_log_entry_added
|
22
|
+
W, [2013-08-27T12:25:04.248463 #4170] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
23
|
+
W, [2013-08-27T12:25:04.248969 #4170] WARN -- : Something
|
24
|
+
I, [2013-08-27T12:25:41.486448 #4176] INFO -- : Preparing to test logging via assert_log_entry_added
|
25
|
+
W, [2013-08-27T12:25:41.495794 #4176] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
26
|
+
I, [2013-08-27T12:25:41.576469 #4176] INFO -- : Preparing to test logging via assert_log_entry_added
|
27
|
+
W, [2013-08-27T12:25:41.582383 #4176] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
28
|
+
I, [2013-08-27T12:30:16.660423 #4193] INFO -- : Preparing to test logging via assert_log_entry_added
|
29
|
+
W, [2013-08-27T12:30:16.670642 #4193] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
30
|
+
I, [2013-08-27T12:30:16.681108 #4193] INFO -- : Preparing to test logging via assert_log_entry_added
|
31
|
+
W, [2013-08-27T12:30:16.689568 #4193] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
32
|
+
I, [2013-08-27T12:33:49.541983 #4208] INFO -- : Preparing to test logging via assert_log_entry_added
|
33
|
+
W, [2013-08-27T12:33:49.559204 #4208] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
34
|
+
I, [2013-08-27T12:33:49.628574 #4208] INFO -- : Preparing to test logging via assert_log_entry_added
|
35
|
+
W, [2013-08-27T12:33:49.633089 #4208] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
36
|
+
I, [2013-08-27T12:36:55.514639 #4220] INFO -- : Preparing to test logging via assert_log_entry_added
|
37
|
+
W, [2013-08-27T12:36:55.522597 #4220] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
38
|
+
I, [2013-08-27T12:36:55.573305 #4220] INFO -- : Preparing to test logging via assert_log_entry_added
|
39
|
+
W, [2013-08-27T12:36:55.581054 #4220] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
40
|
+
I, [2013-08-27T12:39:49.212560 #4245] INFO -- : Preparing to test logging via assert_log_entry_added
|
41
|
+
W, [2013-08-27T12:39:49.221175 #4245] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
42
|
+
I, [2013-08-27T12:39:49.276287 #4245] INFO -- : Preparing to test logging via assert_log_entry_added
|
43
|
+
W, [2013-08-27T12:39:49.282917 #4245] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
44
|
+
I, [2013-08-27T12:41:32.989079 #4261] INFO -- : Preparing to test logging via assert_log_entry_added
|
45
|
+
W, [2013-08-27T12:41:32.998436 #4261] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
46
|
+
I, [2013-08-27T12:41:33.001913 #4261] INFO -- : Preparing to test logging via assert_log_entry_added
|
47
|
+
W, [2013-08-27T12:41:33.006315 #4261] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
48
|
+
I, [2013-08-27T12:42:17.797802 #4267] INFO -- : Preparing to test logging via assert_log_entry_added
|
49
|
+
W, [2013-08-27T12:42:17.811087 #4267] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
50
|
+
I, [2013-08-27T12:42:17.862230 #4267] INFO -- : Preparing to test logging via assert_log_entry_added
|
51
|
+
W, [2013-08-27T12:42:17.869433 #4267] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
52
|
+
I, [2013-08-27T13:23:37.373208 #4359] INFO -- : Preparing to test logging via assert_log_entry_added
|
53
|
+
W, [2013-08-27T13:23:37.379581 #4359] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
54
|
+
I, [2013-08-27T13:23:37.414101 #4359] INFO -- : Preparing to test logging via assert_log_entry_added
|
55
|
+
W, [2013-08-27T13:23:37.420912 #4359] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
56
|
+
I, [2013-08-27T13:38:35.893444 #4547] INFO -- : Preparing to test logging via assert_log_entry_added
|
57
|
+
W, [2013-08-27T13:38:35.911561 #4547] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
58
|
+
I, [2013-08-27T13:38:36.019684 #4547] INFO -- : Preparing to test logging via assert_log_entry_added
|
59
|
+
W, [2013-08-27T13:38:36.029552 #4547] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
60
|
+
I, [2013-08-27T13:38:40.715087 #4557] INFO -- : Preparing to test logging via assert_log_entry_added
|
61
|
+
W, [2013-08-27T13:38:40.720867 #4557] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
62
|
+
I, [2013-08-27T13:38:40.787452 #4557] INFO -- : Preparing to test logging via assert_log_entry_added
|
63
|
+
W, [2013-08-27T13:38:40.795165 #4557] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
64
|
+
I, [2013-08-27T13:38:44.050174 #4563] INFO -- : Preparing to test logging via assert_log_entry_added
|
65
|
+
W, [2013-08-27T13:38:44.059219 #4563] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
66
|
+
I, [2013-08-27T13:38:44.128763 #4563] INFO -- : Preparing to test logging via assert_log_entry_added
|
67
|
+
W, [2013-08-27T13:38:44.133836 #4563] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
68
|
+
I, [2013-08-27T14:59:07.213269 #5477] INFO -- : Preparing to test logging via assert_log_entry_added
|
69
|
+
W, [2013-08-27T14:59:07.222037 #5477] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
70
|
+
I, [2013-08-27T14:59:07.238897 #5477] INFO -- : Preparing to test logging via assert_log_entry_added
|
71
|
+
W, [2013-08-27T14:59:07.244542 #5477] WARN -- : Unable to retrieve remote partial at http://www.warwickshire.gov.uk: #<Net::HTTPBadRequest 400 readbody=true>
|
data/test/test_helper.rb
CHANGED
@@ -1,23 +1,13 @@
|
|
1
|
-
|
2
|
-
ENV["RAILS_ENV"] = "test"
|
3
|
-
|
4
|
-
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
-
require "rails/test_help"
|
1
|
+
require 'minitest/unit'
|
6
2
|
require 'webmock'
|
7
3
|
require 'webmock/minitest'
|
8
4
|
require 'webmock/test_unit'
|
5
|
+
require_relative '../lib/remote_partial'
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
# Load support files
|
13
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
7
|
+
RemotePartial.root = File.expand_path('..', __FILE__)
|
8
|
+
RemotePartial.logger_file = 'log/test.log'
|
14
9
|
|
15
|
-
|
16
|
-
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
17
|
-
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
18
|
-
end
|
19
|
-
|
20
|
-
class ActiveSupport::TestCase
|
10
|
+
class MiniTest::Unit::TestCase
|
21
11
|
|
22
12
|
def enable_mock(url, body = '<body><h1>Something</h1><p>Else</p></body>')
|
23
13
|
stub_request(:get, url).
|
@@ -67,6 +57,37 @@ class ActiveSupport::TestCase
|
|
67
57
|
assert_file_does_not_exist @partial.output_file_name
|
68
58
|
end
|
69
59
|
|
60
|
+
def assert_difference(expression, difference = 1, message = nil, &block)
|
61
|
+
expressions = Array(expression)
|
62
|
+
|
63
|
+
exps = expressions.map { |e|
|
64
|
+
e.respond_to?(:call) ? e : lambda { eval(e, block.binding) }
|
65
|
+
}
|
66
|
+
before = exps.map { |e| e.call }
|
67
|
+
|
68
|
+
yield
|
69
|
+
|
70
|
+
expressions.zip(exps).each_with_index do |(code, e), i|
|
71
|
+
error = "#{code.inspect} didn't change by #{difference}"
|
72
|
+
error = "#{message}.\n#{error}" if message
|
73
|
+
assert_equal(before[i] + difference, e.call, error)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def assert_no_difference(expression, message = nil, &block)
|
78
|
+
assert_difference expression, 0, message, &block
|
79
|
+
end
|
80
|
+
|
81
|
+
def assert_log_entry_added(text, &block)
|
82
|
+
RemotePartial.logger.info 'Preparing to test logging via assert_log_entry_added'
|
83
|
+
before = File.size(RemotePartial.logger_file)
|
84
|
+
block.call
|
85
|
+
assert(before < File.size(RemotePartial.logger_file), "#{RemotePartial.logger_file} should have increased in size")
|
86
|
+
last_entry = File.readlines(RemotePartial.logger_file).last
|
87
|
+
assert_match text, last_entry, "Logger output should contain #{text}"
|
88
|
+
|
89
|
+
end
|
90
|
+
|
70
91
|
def remove_output_file
|
71
92
|
remove_file @partial.output_file_name
|
72
93
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module RemotePartial
|
4
|
-
class BuilderTest <
|
4
|
+
class BuilderTest < MiniTest::Unit::TestCase
|
5
5
|
|
6
6
|
def setup
|
7
7
|
@partial = Partial.create(
|
8
8
|
name: 'simple',
|
9
9
|
url: 'http://www.warwickshire.gov.uk',
|
10
10
|
criteria: 'p:first-child',
|
11
|
-
repeat_period:
|
11
|
+
repeat_period: TimeCalc.minutes(10)
|
12
12
|
)
|
13
13
|
@name = 'foo'
|
14
14
|
@url = @partial.url
|
@@ -76,12 +76,14 @@ module RemotePartial
|
|
76
76
|
|
77
77
|
def test_build_with_http_error
|
78
78
|
enable_mock_connection_failure @url
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
79
|
+
assert_log_entry_added('HTTPBadRequest') do
|
80
|
+
assert_output_file_not_updated do
|
81
|
+
assert_no_difference 'RemotePartial::Partial.count' do
|
82
|
+
Builder.build(
|
83
|
+
url: @partial.url,
|
84
|
+
name: @partial.name
|
85
|
+
)
|
86
|
+
end
|
85
87
|
end
|
86
88
|
end
|
87
89
|
end
|
@@ -98,12 +100,13 @@ module RemotePartial
|
|
98
100
|
assert_difference 'RemotePartial::Partial.count' do
|
99
101
|
Builder.build(
|
100
102
|
url: @partial.url,
|
101
|
-
name:
|
103
|
+
name: name,
|
102
104
|
output_modifier: output_modifier
|
103
105
|
)
|
104
106
|
end
|
105
107
|
partial = Partial.find(name)
|
106
108
|
assert_equal(output_modifier, partial.output_modifier)
|
109
|
+
remove_file(partial.output_file_name)
|
107
110
|
end
|
108
111
|
|
109
112
|
def assert_expected_file_created(&test)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module RemotePartial
|
4
|
-
class ExceptionTest <
|
4
|
+
class ExceptionTest < MiniTest::Unit::TestCase
|
5
5
|
def test_remote_partial_retrival_error
|
6
6
|
inner_message = 'Whoops'
|
7
7
|
catch_exception { raise RemotePartialRetrivalError.new(inner_message, Array)}
|