Skip to content

Commit

Permalink
Rename user_token config into project_token (#81)
Browse files Browse the repository at this point in the history
* Rename user_token config into project_token
  User can still use user_token, but it will be placed into
  project_token setting.
  • Loading branch information
a-bougouin authored May 24, 2017
1 parent dbd7005 commit 638430e
Show file tree
Hide file tree
Showing 10 changed files with 79 additions and 42 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Insert the following into either config/application.rb or config/environments/.
...

config.wovnrb = {
:user_token => '2Wle3'
:project_token => '2Wle3'
}

...
Expand All @@ -54,7 +54,7 @@ Insert the following into either the Application File or config.ru.
require 'wovnrb'

use Wovnrb::Interceptor, {
:user_token => '2Wle3'
:project_token => '2Wle3'
}

...
Expand All @@ -68,14 +68,14 @@ WOVN.io Ruby Library's valid parameters are as follows.

Parameter Name | Required | Default Setting
-------------- | -------- | ----------------
user_token | yes | ''
project_token | yes | ''
url_pattern | yes | 'path'
query | | []
default_lang | yes | 'en'

### 2.1. user_token
### 2.1. project_token

Set your WOVN.io Account's user token. This parameter is required.
Set your WOVN.io Account's Project token. This parameter is required.

### 2.2. url_pattern

Expand Down
4 changes: 2 additions & 2 deletions lib/wovnrb/api_data.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def to_key(url)
end

def build_api_uri
t = CGI::escape(@store.settings['user_token'])
t = CGI::escape(@store.settings['project_token'])
u = CGI::escape(@access_url)
URI.parse("#{@store.settings['api_url']}?token=#{t}&url=#{u}")
end
Expand All @@ -56,4 +56,4 @@ def get_from_api_server(uri)
end
end
end
end
end
2 changes: 1 addition & 1 deletion lib/wovnrb/html_replacers/script_replacer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def add_wovn_script(dom, lang)
insert_node['src'] = "//j.#{@store.wovn_host}/1"
insert_node['async'] = true
version = defined?(VERSION) ? VERSION : ''
insert_node['data-wovnio'] = "key=#{@store.settings['user_token']}&backend=true&currentLang=#{lang.lang_code}&defaultLang=#{@store.settings['default_lang']}&urlPattern=#{@store.settings['url_pattern']}&langCodeAliases=#{JSON.dump(@store.settings['custom_lang_aliases'])}&version=#{version}"
insert_node['data-wovnio'] = "key=#{@store.settings['project_token']}&backend=true&currentLang=#{lang.lang_code}&defaultLang=#{@store.settings['default_lang']}&urlPattern=#{@store.settings['url_pattern']}&langCodeAliases=#{JSON.dump(@store.settings['custom_lang_aliases'])}&version=#{version}"
# do this so that there will be a closing tag (better compatibility with browsers)
insert_node.content = ' '
if parent_node.children.size > 0
Expand Down
2 changes: 1 addition & 1 deletion lib/wovnrb/railtie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Railtie < Rails::Railtie

#if Rails.env.development? && config.respond_to?(:wovnrb)
# config.after_initialize do
# config.wovnrb[:user_token] = User.first.short_token
# config.wovnrb[:project_token] = User.first.short_token
# end
#end
end
Expand Down
11 changes: 8 additions & 3 deletions lib/wovnrb/store.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class Store

def self.default_settings
{
'user_token' => '',
'project_token' => '',
'log_path' => 'log/wovn_error.log',
'ignore_paths' => [],
'ignore_globs' => [],
Expand Down Expand Up @@ -55,9 +55,9 @@ def reset
def valid_settings?
valid = true
errors = [];
if !settings.has_key?('user_token') || settings['user_token'].length < 5 || settings['user_token'].length > 6
if !settings.has_key?('project_token') || settings['project_token'].length < 5 || settings['project_token'].length > 6
valid = false
errors.push("User token #{settings['user_token']} is not valid.")
errors.push("Project token #{settings['project_token']} is not valid.")
end
if settings.has_key?('ignore_paths') && !settings['ignore_paths'].kind_of?(Array)
valid = false
Expand Down Expand Up @@ -128,6 +128,11 @@ def settings(*opts)
@settings['supported_langs'] = [@settings['default_lang']]
end

if @settings.has_key?('user_token') && @settings['project_token'].empty?
@settings['project_token'] = @settings['user_token']
end
@settings.delete('user_token')

if @settings['url_pattern'] == 'path'
@settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
elsif @settings['url_pattern'] == 'query'
Expand Down
6 changes: 3 additions & 3 deletions test/lib/api_data_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def test_get_data
stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
to_return(:body => '{"test_body": "a"}')
store = Wovnrb::Store.instance
store.settings['user_token'] = token
store.settings('user_token' => token)
api_data = Wovnrb::ApiData.new(url, store)

assert_equal({'test_body' => 'a'}, api_data.get_data)
Expand All @@ -37,7 +37,7 @@ def test_get_data_when_cache_exists
stub = stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
to_return(:body => '{"test_body": "a"}')
store = Wovnrb::Store.instance
store.settings['user_token'] = token
store.settings('user_token' => token)
api_data = Wovnrb::ApiData.new(url, store)

assert_equal({'test_body' => 'a'}, api_data.get_data)
Expand All @@ -51,7 +51,7 @@ def test_get_data_fail
stub_request(:get, "https://api.wovn.io/v0/values?token=#{token}&url=#{url}").
to_return(:status => [500, "Internal Server Error"])
store = Wovnrb::Store.instance
store.settings['user_token'] = token
store.settings('user_token' => token)
api_data = Wovnrb::ApiData.new(url, store)
log_mock = Wovnrb::LogMock.mock_log

Expand Down
56 changes: 34 additions & 22 deletions test/lib/html_replacers/script_replacer_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ module Wovnrb
class ScriptReplacerTest < WovnMiniTest
def test_replace
store = Store.instance
store.settings['user_token'] = 'test_token'
store.settings['default_lang'] = 'en'
store.settings['url_pattern'] = 'domain'
store.settings({
'user_token' => 'test_token',
'default_lang' => 'en',
'url_pattern' => 'domain'
})

replacer = ScriptReplacer.new(store)
dom = to_head_dom('<script src="test/test.js"></script>')
Expand All @@ -25,10 +27,12 @@ def test_replace

def test_replace_with_wovn_dev_mode_on
store = Store.instance
store.settings['user_token'] = 'test_token'
store.settings['default_lang'] = 'en'
store.settings['url_pattern'] = 'domain'
store.settings['wovn_dev_mode'] = true
store.settings({
'user_token' => 'test_token',
'default_lang' => 'en',
'url_pattern' => 'domain',
'wovn_dev_mode' => true
})

replacer = ScriptReplacer.new(store)
dom = to_head_dom('<script src="test/test.js"></script>')
Expand All @@ -46,9 +50,11 @@ def test_replace_with_wovn_dev_mode_on

def test_with_embed_wovn
store = Store.instance
store.settings['user_token'] = 'test_token'
store.settings['default_lang'] = 'en'
store.settings['url_pattern'] = 'domain'
store.settings({
'user_token' => 'test_token',
'default_lang' => 'en',
'url_pattern' => 'domain'
})

replacer = ScriptReplacer.new(store)
dom = to_head_dom('<script src="//j.wovn.io/aaaa" data-wovnio="key=test_token" async></script>')
Expand All @@ -62,9 +68,11 @@ def test_with_embed_wovn

def test_with_multiple_embed_wovn
store = Store.instance
store.settings['user_token'] = 'test_token'
store.settings['default_lang'] = 'en'
store.settings['url_pattern'] = 'domain'
store.settings({
'user_token' => 'test_token',
'default_lang' => 'en',
'url_pattern' => 'domain'
})

replacer = ScriptReplacer.new(store)
dom = to_head_dom('<script src="//j.wovn.io/aaaa" data-wovnio="key=test_token" async></script><script src="//j.wovn.io/bbb" data-wovnio="key=test_token" async></script>')
Expand All @@ -78,9 +86,11 @@ def test_with_multiple_embed_wovn

def test_with_embed_wovn_at_body
store = Store.instance
store.settings['user_token'] = 'test_token'
store.settings['default_lang'] = 'en'
store.settings['url_pattern'] = 'domain'
store.settings({
'user_token' => 'test_token',
'default_lang' => 'en',
'url_pattern' => 'domain'
})

replacer = ScriptReplacer.new(store)
dom = Wovnrb.get_dom('<script src="//j.wovn.io/aaaa" data-wovnio="key=test_token" async></script>')
Expand All @@ -94,10 +104,12 @@ def test_with_embed_wovn_at_body

def test_contains_lang_code_aliases
store = Store.instance
store.settings['user_token'] = 'test_token'
store.settings['default_lang'] = 'en'
store.settings['url_pattern'] = 'domain'
store.settings['custom_lang_aliases'] = {'ja' => 'staging-ja'}
store.settings({
'user_token' => 'test_token',
'default_lang' => 'en',
'url_pattern' => 'domain',
'custom_lang_aliases' => {'ja' => 'staging-ja'}
})

replacer = ScriptReplacer.new(store)
dom = to_head_dom('')
Expand All @@ -108,11 +120,11 @@ def test_contains_lang_code_aliases
check_wovn_script(scripts[0], 'test_token', 'ja', 'en', 'domain', '{"ja":"staging-ja"}')
end

def check_wovn_script(node, user_token, current_lang, default_lang, url_pattern, custom_lang_aliases = {})
def check_wovn_script(node, project_token, current_lang, default_lang, url_pattern, custom_lang_aliases = {})
wovn_data = [
['src', '//j.wovn.io/1'],
['async', 'true'],
['data-wovnio', "key=#{user_token}&backend=true&currentLang=#{current_lang}&defaultLang=#{default_lang}&urlPattern=#{url_pattern}&langCodeAliases=#{custom_lang_aliases}&version=#{Wovnrb::VERSION}"]
['data-wovnio', "key=#{project_token}&backend=true&currentLang=#{current_lang}&defaultLang=#{default_lang}&urlPattern=#{url_pattern}&langCodeAliases=#{custom_lang_aliases}&version=#{Wovnrb::VERSION}"]
]
wovn_data.each do |data|
assert_equal(data[1], node.get_attribute(data[0]))
Expand Down
24 changes: 22 additions & 2 deletions test/lib/store_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,26 @@ def test_settings_no_parameters
assert_equal('/(?<lang>[^/.?]+)', s.settings['url_pattern_reg'])
end

def test_settings_user_token_retro_compatibility
s = Wovnrb::Store.instance
s.settings('user_token' => 'aaaaa')
assert_equal('aaaaa', s.settings['project_token'])
assert(!s.settings.has_key?('user_token'))
end

def test_settings_project_token_set
s = Wovnrb::Store.instance
s.settings('project_token' => 'bbbbbb')
assert_equal('bbbbbb', s.settings['project_token'])
end

def test_settings_project_token_set_without_retro_compatibility
s = Wovnrb::Store.instance
s.settings('project_token' => 'bbbbbb', 'user_token' => 'aaaaa')
assert_equal('bbbbbb', s.settings['project_token'])
assert(!s.settings.has_key?('user_token'))
end

def test_settings_url_pattern_path
s = Wovnrb::Store.instance
s.settings({'url_pattern' => 'path'})
Expand Down Expand Up @@ -41,7 +61,7 @@ def test_invalid_settings
valid = store.valid_settings?

assert_equal(false, valid)
assert_equal(['User token is not valid.'], mock.errors)
assert_equal(['Project token is not valid.'], mock.errors)
end

def test_settings_ignore_paths
Expand Down Expand Up @@ -73,7 +93,7 @@ def test_settings_invalid_ignore_paths
store.settings({'ignore_paths' => 'aaaa'})

assert_equal(false, store.valid_settings?)
assert_equal(['User token is not valid.', 'Ignore Paths aaaa should be Array.'], mock.errors)
assert_equal(['Project token is not valid.', 'Ignore Paths aaaa should be Array.'], mock.errors)
end

def test_settings_ignore_glob_injection
Expand Down
4 changes: 2 additions & 2 deletions test/lib/wovnrb_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def test_initialize

def test_api_call
settings = Wovnrb.get_settings
token = settings['user_token']
token = settings['project_token']
url = 'wovn.io/dashboard'
stub = stub_request(:get, "#{settings['api_url']}?token=#{token}&url=#{url}").
to_return(:body => '{"test_body": "a"}')
Expand All @@ -38,7 +38,7 @@ def test_api_call

def test_api_call_with_cache
settings = Wovnrb.get_settings
token = settings['user_token']
token = settings['project_token']
url = 'wovn.io/dashboard'
stub = stub_request(:get, "#{settings['api_url']}?token=#{token}&url=#{url}").
to_return(:body => '{"test_body": "a"}')
Expand Down
2 changes: 1 addition & 1 deletion test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def error(message)

def get_settings(options={})
settings = {}
settings['user_token'] = 'OHYx9'
settings['project_token'] = 'OHYx9'
settings['url_pattern'] = 'path'
settings['url_pattern_reg'] = "/(?<lang>[^/.?]+)"
settings['query'] = []
Expand Down

0 comments on commit 638430e

Please sign in to comment.