remote_partial 0.6.0 → 0.7.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.
- 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)}
|