rails_version 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0fdd0f231ea942e352b396618ab67d34fdc86d76
4
+ data.tar.gz: 9d2b2c820ba19fdadc1d7e9d211bad7ac81bd634
5
+ SHA512:
6
+ metadata.gz: d640a82922b0dab6796679c1cea309a04f94b93d0cba651f4f05f773ec0a69a55c5864d74032770590f6db334945fe17097265502bcf89d6e012f6da1b6caa1e
7
+ data.tar.gz: 88900041e381adc15c6ec60a737f9311ef8a0d3d6dd610ea92f2efa685b289e8f43e59f8da7dcb53a0cb95f50382178d466434c8471556178cd3336340809267
data/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  group :development do
4
- gem "rake"
4
+ gem "rake"
5
+ gem "webmock"
5
6
  end
data/README.md CHANGED
@@ -14,22 +14,25 @@ Sign up and get your API key from http://railsversion.herokuapp.com, then go to
14
14
 
15
15
  RailsVersion::Config.api_key = "API_KEY_HERE"
16
16
 
17
+ If you have an app that has dynamic subdomains (such as multiple sites running on the same app), you can set a "canonical" App Name, so all the domains will be updated when the gem reports on one of them.
18
+
19
+ RailsVersion::Config.app_name = "CANONICAL_APP_NAME"
20
+
17
21
  ## Manual Ping
18
22
 
19
23
  If you want to manually trigger a ping, go to:
20
24
 
21
- http://example.com/?rails_version_ping=API_KEY_HERE
25
+ http://yourdomain.com/?rails_version_ping=API_KEY_HERE
22
26
 
23
- Just replace example.com with your domain name and API_KEY_HERE with your API key.
27
+ Just replace yourdomain.com with your domain name and API_KEY_HERE with your API key.
24
28
 
25
29
  ## Configuration Options
26
30
 
27
31
  We have good defaults, but we do expose some config options:
28
32
 
29
- * `RailsVersion::Config.server_url = "http://yourserver/ping"` - allows you to ping your own server instead of ours.
30
33
  * `RailsVersion::Config.ping_type = :server | :image | :script` - :server is default and the safest, but you can also inject an image or javascript tag into your HTML if the :server option isn't working for you.
31
34
  * `RailsVersion::Config.frequency = 100` - 100 is a 1% chance on page load of pinging our server (default). Turn this down if you have a lot of traffic or up if you have very little traffic. Your server should ping ours about once every couple days on average.
32
- * `RailsVersion::Config.api_key = "API_KEY_HERE"` - *required* API key from http://railsversion.herokuapp.com if you're using our server.
35
+ * `RailsVersion::Config.api_key = "API_KEY_HERE"` - *required* Free API key from http://railsversion.herokuapp.com.
33
36
 
34
37
  ## Code Climate
35
38
 
@@ -9,10 +9,7 @@ module RailsVersion
9
9
  # :singleton-method:
10
10
  # Specify what URL this gem will ping with its information.
11
11
  def self.server_url
12
- @@server_url ||= "https://railsversion.herokuapp.com/ping"
13
- end
14
- def self.server_url=(v)
15
- @@server_url = v
12
+ @@server_url = "https://railsversion.herokuapp.com/ping"
16
13
  end
17
14
 
18
15
  ##
@@ -49,5 +46,22 @@ module RailsVersion
49
46
  def self.api_key=(v)
50
47
  @@api_key = v
51
48
  end
49
+
50
+ ##
51
+ # :singleton-method:
52
+ # Canonical App Name
53
+ # This allows Apps that work with dynamic subdomains to update all
54
+ # domains on railsversion.herokuap.com with that canonical name
55
+ # e.g
56
+ # Domain 1: example.com
57
+ # Domain 2: sub.example.com
58
+ # When app_name is set, it will send it along to the API when it pings
59
+ # And both domains will be updated
60
+ def self.app_name
61
+ @@app_name ||= nil
62
+ end
63
+ def self.app_name=(v)
64
+ @@app_name = v
65
+ end
52
66
  end
53
67
  end
@@ -1,10 +1,12 @@
1
1
  module RailsVersion
2
2
  class Pinger
3
- attr_accessor :body, :version, :host
3
+ attr_accessor :body, :version, :host, :app_name
4
4
 
5
5
  def initialize(request, response)
6
+ @modified_body = false
6
7
  @body = response.body.to_s
7
8
  @host = request.host.to_s
9
+ @app_name = RailsVersion::Config.app_name.to_s
8
10
  @version = "Non-Rails"
9
11
  @version = Rails.version.to_s if Object.const_defined?('Rails')
10
12
  end
@@ -14,7 +16,6 @@ module RailsVersion
14
16
  when :server
15
17
  require 'open-uri'
16
18
  open(ping_url) # Ping the server.
17
- return false
18
19
  when :script
19
20
  inject_script_before_end_body_tag(ping_script)
20
21
  else
@@ -24,7 +25,12 @@ module RailsVersion
24
25
  false
25
26
  end
26
27
 
28
+ def modified_body?
29
+ @modified_body
30
+ end
31
+
27
32
  def inject_script_before_end_body_tag(ping_html)
33
+ @modified_body = true
28
34
  @body.sub! /<\/[bB][oO][dD][yY]>/, "#{ping_html}</body>" if @body && @body.respond_to?(:sub!)
29
35
  end
30
36
 
@@ -37,7 +43,7 @@ module RailsVersion
37
43
  end
38
44
 
39
45
  def ping_url
40
- "#{RailsVersion::Config.server_url}/#{RailsVersion::Config.api_key}/?site=#{@host}&rails_version=#{@version}"
46
+ "#{RailsVersion::Config.server_url}/#{RailsVersion::Config.api_key}/?site=#{@host}&rails_version=#{@version}&app_name=#{@app_name}"
41
47
  end
42
48
  end
43
- end
49
+ end
@@ -6,10 +6,11 @@ module RailsVersion
6
6
  manual_ping = params[:rails_version_ping] == RailsVersion::Config.api_key
7
7
  if manual_ping || rand(10000) < RailsVersion::Config.frequency
8
8
  pinger = RailsVersion::Pinger.new(request, response)
9
- response.body = pinger.body if pinger.ping!
9
+ pinger.ping!
10
+ response.body = pinger.body if pinger.modified_body?
10
11
  end
11
12
  rescue OpenURI::HTTPError
12
13
  nil # No HTTPError here! Nuh uh. Nope. Nothing to see here.
13
14
  end
14
15
  end
15
- end
16
+ end
@@ -5,4 +5,4 @@ module RailsVersion
5
5
  ActionController::Base.send :after_filter, :ping_rails_version_server
6
6
  end
7
7
  end
8
- end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsVersion
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require 'test/unit'
2
+ require 'webmock/minitest'
2
3
  require 'rails_version'
3
4
  require 'rails_version/pinger'
4
5
 
@@ -14,33 +15,50 @@ class FakeResponse
14
15
  end
15
16
  end
16
17
 
17
-
18
18
  class RailsVersionTest < Test::Unit::TestCase
19
+
19
20
  def test_pinger_injects_script
20
21
  RailsVersion::Config.ping_type = :script
21
22
  RailsVersion::Config.api_key = "TESTSCRIPT"
23
+ RailsVersion::Config.app_name = "TESTAPP"
22
24
  pinger = RailsVersion::Pinger.new(FakeRequest.new, FakeResponse.new)
23
25
  pinger.ping!
24
26
  body = pinger.body
25
27
  assert body.include?("</script></body>")
26
28
  assert body.include?("/TESTSCRIPT/")
29
+ assert body.include?("&app_name=TESTAPP")
27
30
  end
31
+
28
32
  def test_pinger_injects_image
29
33
  RailsVersion::Config.ping_type = :image
30
34
  RailsVersion::Config.api_key = "TESTIMAGE"
35
+ RailsVersion::Config.app_name = "TESTAPP"
31
36
  pinger = RailsVersion::Pinger.new(FakeRequest.new, FakeResponse.new)
32
37
  pinger.ping!
33
38
  body = pinger.body
34
39
  assert body.include?("<img src='")
35
40
  assert body.include?("/TESTIMAGE/")
41
+ assert body.include?("&app_name=TESTAPP")
36
42
  end
43
+
37
44
  def test_pinger_server
38
45
  RailsVersion::Config.ping_type = :server
39
46
  RailsVersion::Config.api_key = "TESTSERVER"
47
+ RailsVersion::Config.app_name = "TESTAPP"
48
+ stub_get = stub_request(:get, "https://railsversion.herokuapp.com/ping/TESTSERVER/").with(
49
+ query: {
50
+ "app_name" => "TESTAPP",
51
+ "rails_version" => "Non-Rails",
52
+ "site" => "www.example.com"
53
+ }
54
+ )
55
+
40
56
  pinger = RailsVersion::Pinger.new(FakeRequest.new, FakeResponse.new)
57
+ url = pinger.ping_url
41
58
  pinger.ping!
42
- # Pretty weak, I know, but at least we know the library was loaded
43
- # and there aren't major syntax errors.
44
- assert Object.const_defined?('Net')
59
+
60
+ assert url.include?("/TESTSERVER/")
61
+ assert url.include?("&app_name=TESTAPP")
62
+ assert_requested(stub_get)
45
63
  end
46
64
  end
metadata CHANGED
@@ -1,47 +1,37 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rails_version
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 3
10
- version: 0.2.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Jamon Holmgren
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-02-05 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: actionpack
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :development
33
- version_requirements: *id001
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
34
27
  description: " Pings a server and reports the current app's Rails version. "
35
- email:
28
+ email:
36
29
  - jamon@clearsightstudio.com
37
30
  executables: []
38
-
39
31
  extensions: []
40
-
41
32
  extra_rdoc_files: []
42
-
43
- files:
44
- - .gitignore
33
+ files:
34
+ - ".gitignore"
45
35
  - Gemfile
46
36
  - LICENSE
47
37
  - README.md
@@ -55,37 +45,27 @@ files:
55
45
  - test/rails_version_test.rb
56
46
  homepage: https://github.com/clearsightstudio/rails_version
57
47
  licenses: []
58
-
48
+ metadata: {}
59
49
  post_install_message:
60
50
  rdoc_options: []
61
-
62
- require_paths:
51
+ require_paths:
63
52
  - lib
64
53
  - rails
65
- required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
68
56
  - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
74
- required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
77
61
  - - ">="
78
- - !ruby/object:Gem::Version
79
- hash: 3
80
- segments:
81
- - 0
82
- version: "0"
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
83
64
  requirements: []
84
-
85
65
  rubyforge_project:
86
- rubygems_version: 1.8.24
66
+ rubygems_version: 2.2.2
87
67
  signing_key:
88
- specification_version: 3
68
+ specification_version: 4
89
69
  summary: Pings a server and reports the current app's Rails version.
90
- test_files:
70
+ test_files:
91
71
  - test/rails_version_test.rb