trustlink 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +47 -0
  3. data/Rakefile +4 -9
  4. data/lib/app/helpers/trustlink_helper.rb +14 -0
  5. data/lib/app/models/trustlink_config.rb +15 -0
  6. data/lib/app/models/trustlink_link.rb +6 -0
  7. data/lib/app/views/trustlink/_link.html.erb +5 -0
  8. data/lib/app/views/trustlink/links.html.erb +7 -0
  9. data/lib/generators/trustlink/migration_generator.rb +19 -0
  10. data/lib/generators/trustlink/templates/migration.rb +15 -0
  11. data/lib/generators/trustlink/views_generator.rb +10 -0
  12. data/lib/tasks/trustlink.rake +66 -0
  13. data/lib/trustlink/railtie.rb +6 -0
  14. data/lib/trustlink/version.rb +1 -1
  15. data/lib/trustlink.rb +8 -291
  16. metadata +76 -77
  17. data/lib/tasks/trustlink_tasks.rake +0 -4
  18. data/test/dummy/README.rdoc +0 -28
  19. data/test/dummy/Rakefile +0 -6
  20. data/test/dummy/app/assets/javascripts/application.js +0 -13
  21. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  22. data/test/dummy/app/controllers/application_controller.rb +0 -5
  23. data/test/dummy/app/helpers/application_helper.rb +0 -2
  24. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  25. data/test/dummy/bin/bundle +0 -3
  26. data/test/dummy/bin/rails +0 -4
  27. data/test/dummy/bin/rake +0 -4
  28. data/test/dummy/config/application.rb +0 -23
  29. data/test/dummy/config/boot.rb +0 -5
  30. data/test/dummy/config/database.yml +0 -25
  31. data/test/dummy/config/environment.rb +0 -5
  32. data/test/dummy/config/environments/development.rb +0 -29
  33. data/test/dummy/config/environments/production.rb +0 -80
  34. data/test/dummy/config/environments/test.rb +0 -36
  35. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  36. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  37. data/test/dummy/config/initializers/inflections.rb +0 -16
  38. data/test/dummy/config/initializers/mime_types.rb +0 -5
  39. data/test/dummy/config/initializers/secret_token.rb +0 -12
  40. data/test/dummy/config/initializers/session_store.rb +0 -3
  41. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  42. data/test/dummy/config/locales/en.yml +0 -23
  43. data/test/dummy/config/routes.rb +0 -56
  44. data/test/dummy/config.ru +0 -4
  45. data/test/dummy/public/404.html +0 -58
  46. data/test/dummy/public/422.html +0 -58
  47. data/test/dummy/public/500.html +0 -57
  48. data/test/dummy/public/favicon.ico +0 -0
  49. data/test/test_helper.rb +0 -15
  50. data/test/trustlink_test.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59d10950b9e1a40d94a68ec59235e2aea1a98c0f
4
- data.tar.gz: 77eb4ad1b69de9d15a12959c784eb4ae5eca7a1d
3
+ metadata.gz: e157417462bdd92d4e49bb88cdb5bd08eeb239db
4
+ data.tar.gz: 7dcfbab178cd6877a26a0e7afa9b08c4ada22dab
5
5
  SHA512:
6
- metadata.gz: 6eb62809e0fbaed51cb091901b099f426c566a41a4cb003a1db7478cf90d1a4164b73b1f3e1b19fe33efca1b0d6ef4153c5d373829a0f6e7d5e674c76af95ecf
7
- data.tar.gz: 6f32b108ade8d831306072c760cffb8355da9024450d8ccd4bfb8152e79a52b47e37ba0ac3157061de300cd6d15c61640f637a4e6ad199756f1d8aceae1cb108
6
+ metadata.gz: 72f5c1e2d6a31015da79feff594588e66a322cf22605d5c89290e964511c7e87b82e9bae254383dd1790315e407dae303584a84e01442a1ec5d7b4fd432b299d
7
+ data.tar.gz: 43177aab53f6a65f59048880db6df9a2397fd0a9580bdf5f0228fc7b28bb7b1895990e37dc9c911656643050ded255ad8dd8be10fb420c43020f297cfdd18f1e
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ ##Trustlink module for Ruby On Rails
2
+
3
+ ###Rewritten from scratch
4
+
5
+ ### Changes
6
+ * parsing xml file instead of php serialized string
7
+ * storing in database instead of text file
8
+ * requesting by rake task instead of checking on every page load
9
+ * customizable rails friendly erb templates
10
+
11
+ ### Installation
12
+ Include the gem in your Gemfile:
13
+ ```ruby
14
+ gem "trustlink"
15
+ ```
16
+
17
+ #### preparing db
18
+ * `rails g trustlink:migration`
19
+ * `rake db:migrate`
20
+
21
+ #### generating config
22
+ * create config/trustlink.yml
23
+ ```yml
24
+ key: _YOUR_TRUSTLINK_HASH_
25
+ domain: example.com
26
+ encoding: UTF-8
27
+ ```
28
+
29
+ #### customizing templates (optional)
30
+ * `rails g trustlink:views`
31
+ Templates will be copied to views/trustlink folder.
32
+
33
+ #### fetching links
34
+ * `rake trustlink:fetch`
35
+ Run it by cron or use whenever gem or something other way you like.
36
+
37
+ ### Notes
38
+ * In _link.html.erb first and last string inserting trustlink code recognized by trustlink bots. It should not be removed. Also important to levae url untouched.
39
+ * By default no style included. You can use styles extracted from trustlink's template. Just replace class to 'ads' used by default or use your own.
40
+ * Multi-domain feature currently not supported. Ask if you need.
41
+
42
+ For more information please follow http://www.trustlink.ru/
43
+
44
+ License
45
+ -------
46
+ This project rocks and uses MIT-LICENSE.
47
+ Copyright © 2014 Artyom Nikolaev and Trustlink
data/Rakefile CHANGED
@@ -19,14 +19,9 @@ end
19
19
 
20
20
  Bundler::GemHelper.install_tasks
21
21
 
22
- require 'rake/testtask'
23
-
24
- Rake::TestTask.new(:test) do |t|
25
- t.libs << 'lib'
26
- t.libs << 'test'
27
- t.pattern = 'test/**/*_test.rb'
28
- t.verbose = false
29
- end
22
+ require 'rspec/core/rake_task'
30
23
 
24
+ RSpec::Core::RakeTask.new('spec')
31
25
 
32
- task default: :test
26
+ # If you want to make this the default task
27
+ task default: :spec
@@ -0,0 +1,14 @@
1
+ require 'domainatrix'
2
+
3
+ module TrustlinkHelper
4
+ def trustlink_links
5
+ options = { links: TrustlinkLink.where(page: request.path) }
6
+ if TrustlinkConfig.bot_ips.include?(request.remote_addr)
7
+ options.merge!(start: TrustlinkConfig.start_code)
8
+ options.merge!(stop: TrustlinkConfig.stop_code)
9
+ end
10
+ render template: 'trustlink/links', locals: options
11
+ rescue Exception => e
12
+ "<!-- ERROR: #{e.message} -->".html_safe
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ class TrustlinkConfig < ActiveRecord::Base
2
+ class << self
3
+ def bot_ips
4
+ where(name: 'ip').pluck(:value)
5
+ end
6
+
7
+ def start_code
8
+ where(name: 'start').first.value
9
+ end
10
+
11
+ def stop_code
12
+ where(name: 'stop').first.value
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ class TrustlinkLink < ActiveRecord::Base
2
+ def host
3
+ link = Domainatrix.parse(url)
4
+ link.host
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <div class="link"><%= link_to link.anchor, link.url -%></div>
3
+ <div class="text"><%= link.text -%></div>
4
+ <div class="host"><%= link.host -%></div>
5
+ </li>
@@ -0,0 +1,7 @@
1
+ <%= start.html_safe if defined?(start) -%>
2
+ <% if links.any? -%>
3
+ <ul class="ads">
4
+ <%= render partial: 'trustlink/link', collection: links -%>
5
+ </ul>
6
+ <% end -%>
7
+ <%= stop.html_safe if defined?(start) -%>
@@ -0,0 +1,19 @@
1
+ class Trustlink::MigrationGenerator < Rails::Generators::Base
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ include Rails::Generators::Migration
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ def self.next_migration_number(dirname)
9
+ if ActiveRecord::Base.timestamped_migrations
10
+ Time.now.utc.strftime('%Y%m%d%H%M%S')
11
+ else
12
+ sprintf('%.3d', (current_migration_number(dirname) + 1))
13
+ end
14
+ end
15
+
16
+ def create_migration_file
17
+ migration_template 'migration.rb', 'db/migrate/create_trustlink_storage.rb'
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ class CreateTrustlinkStorage < ActiveRecord::Migration
2
+ def change
3
+ create_table :trustlink_configs do |t|
4
+ t.string :name
5
+ t.string :value
6
+ end
7
+
8
+ create_table :trustlink_links do |t|
9
+ t.string :page
10
+ t.string :anchor
11
+ t.string :text
12
+ t.string :url
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ class Trustlink::ViewsGenerator < Rails::Generators::Base
2
+ require 'rails/generators/base'
3
+
4
+ public_task :copy_views
5
+ source_root File.expand_path('../../../app/views', __FILE__)
6
+
7
+ def copy_views
8
+ directory 'trustlink', 'app/views/trustlink'
9
+ end
10
+ end
@@ -0,0 +1,66 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+
4
+ namespace :trustlink do
5
+ def say text
6
+ if Rails.env.development?
7
+ puts text
8
+ end
9
+ end
10
+
11
+ desc "Fetch links from server"
12
+ task fetch: :environment do
13
+ begin
14
+ config = YAML.load_file('config/trustlink.yml')
15
+ rescue Errno::ENOENT
16
+ fail "Config file not found (config/trustlink.yml)"
17
+ end
18
+
19
+ key = config['key']
20
+ domain = config['domain'].downcase
21
+ encoding = config['encoding'].upcase || 'UTF-8'
22
+ server = config['server'] || 'db.trustlink.ru'
23
+
24
+ url = "http://#{server}/#{key}/#{domain}/#{encoding}.xml"
25
+ begin
26
+ data = open(url)
27
+ rescue OpenURI::HTTPError
28
+ fail "Could not receive data"
29
+ end
30
+
31
+ root = Nokogiri::XML(data.read).root
32
+
33
+ bot_ips = root.xpath('bot_ips/ip')
34
+ configs = root.xpath('config/item')
35
+ pages = root.xpath('pages/page')
36
+
37
+ if pages.any?
38
+ TrustlinkConfig.delete_all
39
+ TrustlinkLink.delete_all
40
+
41
+ say "Ips:"
42
+ bot_ips.each do |ip|
43
+ TrustlinkConfig.create name: 'ip', value: ip.text
44
+ say "Added #{ip.text}"
45
+ end
46
+
47
+ say "Config"
48
+ configs.each do |item|
49
+ TrustlinkConfig.create name: item['name'], value: item.text
50
+ say "Added #{item['name']} = #{item.text}"
51
+ end
52
+
53
+ say "Links"
54
+ pages.each do |page|
55
+ say "Page: #{page['url']}"
56
+ page.xpath('link').each do |item|
57
+ anchor = item.at_xpath('anchor').text
58
+ text = item.at_xpath('text').text
59
+ url = item.at_xpath('url').text
60
+ TrustlinkLink.create page: page['url'], anchor: anchor, text: text, url: url
61
+ say " Added #{anchor} #{text} #{url}"
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,6 @@
1
+ class Trustlink::Railtie < Rails::Railtie
2
+ rake_tasks do
3
+ load 'tasks/trustlink.rake'
4
+ end
5
+ end
6
+
@@ -1,3 +1,3 @@
1
1
  module Trustlink
2
- VERSION = "0.0.3"
2
+ VERSION = '0.0.4'
3
3
  end
data/lib/trustlink.rb CHANGED
@@ -1,295 +1,12 @@
1
- require 'fileutils'
2
- require 'net/http'
3
- require 'php_serialize'
4
-
5
1
  module Trustlink
6
- class TlClient
7
-
8
- VERSION = 'T0.0.1'
9
- DEBUG = false
10
- TEST_COUNT = 4
11
- TEMPLATE = 'template'
12
- USE_SSL = false
13
- SERVER = 'db.trustlink.ru'
14
- CACHE_LIFETIME = 3600
15
- CACHE_RELOADTIME = 300
16
-
17
- class << self; attr_accessor :app_folder, :data_folder, :data, :charset, :host, :force_show_code, :multi_site, :is_static, :tl_user, :verbose, :test end
18
-
19
- attr_accessor :links, :links_page, :request_uri, :request, :error, :file_change_date, :file_size, :links_delimiter, :links_count, :isrobot, :skip_load_links
20
-
21
- def initialize user, request, options = {}
22
- @app_folder = Rails.root
23
- @data_folder = 'public'
24
- @data = ''
25
- @charset = 'UTF-8'
26
- @host = ''
27
- @force_show_code = false
28
- @multi_site = false
29
- @is_static = false
30
- @tl_user = ''
31
- @verbose = false
32
- @test = false
33
- self.isrobot = false
34
- host = nil
35
- self.request=request
36
- @tl_user=user
37
-
38
- raise_error("User is not defined") && return if @tl_user.blank?
39
- raise_error("Request env is not provided") && return if @request.blank?
40
-
41
- unless options.is_a?(Hash)
42
- host = options
43
- options = {}
44
- end
45
-
46
- host ||= options[:host]
47
-
48
- @host = host.present? ? host : (self.request.host rescue nil)
49
- @host = @host.gsub(/^https?:\/\//i, '').gsub(/^www\./i, '').downcase if @host.present?
50
-
51
- @is_static = options[:is_static].present?
52
-
53
- self.request_uri = options[:request_uri].present? ? options[:request_uri] : (self.request.path rescue nil)
54
- self.request_uri = self.request_uri.gsub(/\?.*$/, '').gsub(/\/+/, '/') if @is_static && self.request_uri.present?
55
-
56
-
57
- @app_folder = options[:app_folder] if options[:app_folder].present?
58
- @data_folder = options[:data_folder] if options[:data_folder].present?
59
- @multi_site = options[:multi_site].present?
60
- @verbose = options[:verbose].present? || (self.links['__trustlink_debug__'].present? rescue false)
61
- @charset = options[:charset] if options[:charset].present?
62
- self.skip_load_links = options[:skip_load_links] if options[:skip_load_links].present?
63
- @force_show_code = options[:force_show_code].present? || (self.links['__trustlink_debug__'].present? rescue false)
64
-
65
- if self.request.env['HTTP_TRUSTLINK'] == @tl_user
66
- @test = true
67
- self.isrobot = true
68
- @verbose = true
69
- end
70
-
71
- if self.request.parameters['trustlink_test'] == @tl_user
72
- @force_show_code=true
73
- @verbose = true
74
- end
75
-
76
- self.load_links unless self.skip_load_links
77
- end
78
-
79
-
80
-
81
- def load_links
82
- links_db_file = File.join(@app_folder, @data_folder, @tl_user, '/trustlink.links.db')
83
- links_db_file = File.join(@app_folder, @data_folder, @tl_user, '/trustlink.'+@host+'.links.db') if @multi_site
84
-
85
- if !File.exist?(links_db_file)
86
- begin
87
- if FileUtils.touch(links_db_file)
88
- File.utime(Time.now, Time.now - CACHE_LIFETIME,links_db_file)
89
- File.chmod(0666, links_db_file);
90
- else
91
- return self.raise_error("There is no file "+links_db_file+". Fail to create. Set mode to 777 on the folder.")
92
- end
93
- rescue Errno::ENOENT
94
- return self.raise_error("Can't create #{links_db_file} file. Check if #{@user} folder exist in #{@data_folder}.")
95
- end
96
- end
97
-
98
- if !File.writable?(links_db_file)
99
- self.raise_error("There is no permissions to write: "+links_db_file+"! Set mode to 777 on the folder.")
100
- end
101
-
102
-
103
- if File.mtime(links_db_file) < (Time.now-CACHE_LIFETIME) || (File.mtime(links_db_file) < (Time.now-CACHE_RELOADTIME) && (File.size(links_db_file) == 0))
104
- FileUtils.touch(links_db_file)
105
-
106
- path = '/'+@tl_user+'/'+@host.downcase+'/'+@charset.upcase
107
-
108
- if links = self.fetch_remote_file(SERVER, path)
109
- if links[0,12] == 'FATAL ERROR:'
110
- self.raise_error(links)
111
- else
112
- if !(@data = PHP.unserialize(links))
113
- self.links = {}
114
- self.raise_error("Cann't unserialize data from file.")
115
- end
116
- self.write(links_db_file, @data)
117
- end
118
- end
119
- end
120
-
121
- @data = self.read(links_db_file) if @data.blank?
122
- self.links = @data
123
-
124
- if self.links.blank?
125
- self.links = {}
126
- self.raise_error("Empty file.")
127
- end
128
-
129
- self.file_change_date = File.mtime(links_db_file)
130
- self.file_size = self.links.size
131
- self.links_page = []
132
-
133
- if @test
134
- TEST_COUNT.times do
135
- self.links_page << self.links['__test_tl_link__']
136
- end
137
- else
138
- self.links_page = self.links[self.request_uri]
139
- self.links_page = [] if self.links_page.blank?
140
- end
141
-
142
- self.links_count = self.links_page.size
143
- end
144
-
145
- def build_links n = nil
146
-
147
- return self.error if has_errors?
148
-
149
- total_page_links = self.links_page.size
150
-
151
- n = total_page_links if n.to_i<=0 || n.to_i > total_page_links
152
-
153
- res_links = self.links_page[0,n.to_i]
154
-
155
- result = ''
156
-
157
- if self.links['__trustlink_start__'].present? && ((self.links['__trustlink_robots__'] || []).include?(self.request.remote_addr) || @force_show_code)
158
- result += self.links['__trustlink_start__']
159
- end
160
-
161
- begin
162
- tpl_filename = File.join(@app_folder, @data_folder, @tl_user, TEMPLATE+'.tpl.html')
163
- tpl = read_raw(tpl_filename)
164
- rescue Errno::ENOENT
165
- raise_error("Template file not found")
166
- return self.error
167
- end
168
-
169
- block = ''
170
- if !tpl=~/\<\{block\}\>.+\<\{\/block\}\>/
171
- raise_error("Wrong template format: no <{block}><{/block}> tags")
172
- else
173
- tpl.sub!(/\<\{block\}\>(.+)\<\{\/block\}\>/im){block = $1; '%s'}
174
- raise_error("Wrong template format: no <{head_block}> tag.") if !block.include?('<{head_block}>')
175
- raise_error("Wrong template format: no <{/head_block}> tag.") if !block.include?('<{/head_block}>')
176
- raise_error("Wrong template format: no <{link}> tag.") if !block.include?('<{link}>')
177
- raise_error("Wrong template format: no <{text}> tag.") if !block.include?('<{text}>')
178
- raise_error("Wrong template format: no <{host}> tag.") if !block.include?('<{host}>')
179
- end
180
-
181
- links_block = ''
182
-
183
- res_links.each do |link|
184
- raise_error("format of link must be an array('anchor'=>anchor,'url'=>url,'text'=>text") if link.blank? || link['text'].blank? || link['url'].blank?
185
- parsed_host=extract_host(link['url'])
186
- if parsed_host.blank?
187
- raise_error("wrong format of url: "+link['url'])
188
- else
189
- level=parsed_host.split('.').size
190
- raise_error("wrong host: #{parsed_host} in url #{link['url']}") if level<2
191
- end
192
- unless has_errors?
193
- host=parsed_host.sub('www.','').downcase
194
- tmp_block = block.sub("<{host}>", host)
195
- if link['anchor'].blank?
196
- tmp_block.sub!(/\<\{head_block\}\>(.+)\<\{\/head_block\}\>/is, "")
197
- else
198
- href = link['punicode_url'].blank? ? link['url'] : link['punicode_url']
199
- tmp_block.sub!("<{link}>", '<a href="'+href+'">'+link['anchor']+'</a>')
200
- tmp_block.sub!("<{head_block}>", '')
201
- tmp_block.sub!("<{/head_block}>", '')
202
- end
203
- tmp_block.sub!("<{text}>", link['text'])
204
- links_block << tmp_block
205
- else
206
- result += self.error
207
- end
208
- end
209
-
210
- if (self.links['__trustlink_robots__'] || []).include?(self.request.remote_addr) || @verbose
211
-
212
- result += self.error.to_s
213
-
214
- result += '<!--REQUEST_URI='+self.request.path+"-->\n"
215
- result += "\n<!--\n"
216
- result += 'L '+VERSION+"\n"
217
- result += 'REMOTE_ADDR='+self.request.remote_addr+"\n"
218
- result += 'request_uri='+self.request_uri+"\n"
219
- result += 'charset='+@charset+"\n"
220
- result += 'is_static='+@is_static.to_s+"\n"
221
- result += 'multi_site='+@multi_site.to_s+"\n"
222
- result += 'file change date='+self.file_change_date.to_s+"\n"
223
- result += 'lc_file_size='+self.file_size.to_s+"\n"
224
- result += 'lc_links_count='+self.links_count.to_s+"\n"
225
- result += 'left_links_count='+self.links_page.size.to_s+"\n"
226
- result += 'n='+n.to_s+"\n"
227
- result += '-->'
228
- end
229
-
230
- if res_links.present? && res_links.size>0
231
- tpl = sprintf(tpl, links_block)
232
- result += tpl
233
- end
234
-
235
- if self.links['__trustlink_end__'].present? && ((self.links['__trustlink_robots__'] || []).include?(self.request.remote_addr) || @force_show_code)
236
- result += self.links['__trustlink_end__']
237
- end
238
-
239
- result = '<noindex>'+result+'</noindex>' if (@test && !self.isrobot)
240
-
241
- result.force_encoding(@charset)
242
- end
243
-
244
-
245
- def fetch_remote_file host, path
246
- user_agent = 'Trustlink Client RoR ' + VERSION
247
- resp=Net::HTTP.start(host) { |http|
248
- http.get(path)
249
- }
250
- if resp.body
251
- resp.body.force_encoding(@charset)
252
- else
253
- self.raise_error("Can't connect to server: "+host+path)
254
- end
255
- end
256
-
257
-
258
- def read filename
259
- Marshal.load(read_raw filename)
260
- end
261
-
262
- def read_raw filename
263
- open(filename, "rb") { |file|
264
- file.read
265
- }
266
- end
267
-
268
- def write filename, data
269
- write_raw(filename, Marshal.dump(data))
270
- end
271
-
272
- def write_raw filename, data
273
- open(filename, "wb") { |file|
274
- file.write(data)
275
- }
276
- end
277
-
278
- def raise_error msg
279
- self.error ||= ''
280
- self.error << "<!--ERROR: #{msg}-->\n"
281
- end
2
+ require 'trustlink/railtie' if defined?(Rails)
3
+ require 'app/helpers/trustlink_helper'
282
4
 
283
- def has_errors?
284
- self.error.present?
285
- end
5
+ path = File.join(File.dirname(__FILE__), 'app', 'models')
6
+ $LOAD_PATH << path
286
7
 
287
- def extract_host(url)
288
- if url =~ %r{^(?:https?://)?(?:www.)?([^/]+)(?:/|$)}
289
- $1
290
- else
291
- ""
292
- end
293
- end
294
- end
8
+ ActiveSupport::Dependencies.autoload_paths << path
9
+ ActiveSupport::Dependencies.autoload_once_paths.delete(path)
10
+ ActionView::Base.send :include, TrustlinkHelper
11
+ ActionController::Base.prepend_view_path File.join(File.dirname(__FILE__), 'app/views')
295
12
  end