veye 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +51 -0
- data/README.md +271 -0
- data/README.rdoc +6 -0
- data/Rakefile +44 -0
- data/bin/veye +390 -0
- data/lib/veye/api/base_resource.rb +29 -0
- data/lib/veye/api/json_response.rb +56 -0
- data/lib/veye/api/resource.rb +22 -0
- data/lib/veye/api.rb +3 -0
- data/lib/veye/package/follow.rb +50 -0
- data/lib/veye/package/info.rb +50 -0
- data/lib/veye/package/info_csv.rb +18 -0
- data/lib/veye/package/info_json.rb +14 -0
- data/lib/veye/package/info_pretty.rb +27 -0
- data/lib/veye/package/info_table.rb +29 -0
- data/lib/veye/package/search.rb +46 -0
- data/lib/veye/package/search_csv.rb +33 -0
- data/lib/veye/package/search_json.rb +19 -0
- data/lib/veye/package/search_pretty.rb +35 -0
- data/lib/veye/package/search_table.rb +40 -0
- data/lib/veye/package.rb +23 -0
- data/lib/veye/pagination/pagination_csv.rb +17 -0
- data/lib/veye/pagination/pagination_json.rb +12 -0
- data/lib/veye/pagination/pagination_pretty.rb +22 -0
- data/lib/veye/pagination/pagination_table.rb +22 -0
- data/lib/veye/pagination/show.rb +26 -0
- data/lib/veye/pagination.rb +7 -0
- data/lib/veye/project/check.rb +147 -0
- data/lib/veye/project/licence.rb +48 -0
- data/lib/veye/project/project_csv.rb +28 -0
- data/lib/veye/project/project_dependency_csv.rb +25 -0
- data/lib/veye/project/project_dependency_json.rb +12 -0
- data/lib/veye/project/project_dependency_pretty.rb +30 -0
- data/lib/veye/project/project_dependency_table.rb +27 -0
- data/lib/veye/project/project_json.rb +13 -0
- data/lib/veye/project/project_licence_csv.rb +19 -0
- data/lib/veye/project/project_licence_json.rb +12 -0
- data/lib/veye/project/project_licence_pretty.rb +23 -0
- data/lib/veye/project/project_licence_table.rb +29 -0
- data/lib/veye/project/project_pretty.rb +28 -0
- data/lib/veye/project/project_table.rb +30 -0
- data/lib/veye/project.rb +11 -0
- data/lib/veye/service.rb +14 -0
- data/lib/veye/user/favorite_csv.rb +28 -0
- data/lib/veye/user/favorite_json.rb +14 -0
- data/lib/veye/user/favorite_pretty.rb +25 -0
- data/lib/veye/user/favorite_table.rb +28 -0
- data/lib/veye/user/me.rb +75 -0
- data/lib/veye/user/profile_csv.rb +21 -0
- data/lib/veye/user/profile_json.rb +14 -0
- data/lib/veye/user/profile_pretty.rb +31 -0
- data/lib/veye/user/profile_table.rb +34 -0
- data/lib/veye/user.rb +7 -0
- data/lib/veye/version.rb +13 -0
- data/lib/veye.rb +82 -0
- data/test/default_test.rb +14 -0
- data/test/files/Gemfile +20 -0
- data/test/files/maven-1.0.1.pom +128 -0
- data/test/test_helper.rb +9 -0
- data/veye.rdoc +5 -0
- metadata +229 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectLicencePretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def format(results)
|
10
|
+
|
11
|
+
n = 1
|
12
|
+
results["licenses"].each_pair do |licence, products|
|
13
|
+
product_keys = products.map {|prod| prod["prod_key"]}
|
14
|
+
licence_name = "#{licence}".foreground(:green).bright
|
15
|
+
printf("%3d - %s\n", n, licence_name)
|
16
|
+
printf("\t%-15s : %s\n", "Products", product_keys.join(", "))
|
17
|
+
|
18
|
+
n += 1
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectLicenceTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "Licences",
|
8
|
+
:headings => %w(index licence product_keys)
|
9
|
+
|
10
|
+
@@table.align_column(0, :right)
|
11
|
+
end
|
12
|
+
|
13
|
+
def after
|
14
|
+
puts @@table.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def format(results)
|
18
|
+
n = 1
|
19
|
+
results["licenses"].each_pair do |licence, products|
|
20
|
+
products.each do |prod|
|
21
|
+
row = [n, licence, prod["prod_key"]]
|
22
|
+
@@table << row
|
23
|
+
end
|
24
|
+
n += 1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectPretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def format(results)
|
10
|
+
results = [results] if results.is_a? Hash
|
11
|
+
|
12
|
+
results.each_with_index do |result, index|
|
13
|
+
project_name = "#{result['name']}".foreground(:green).bright
|
14
|
+
printf("%3d - %s\n", index + 1, project_name)
|
15
|
+
printf("\t%-15s: %s\n", "Project key", "#{result['project_key']}".bright)
|
16
|
+
printf("\t%-15s: %s\n", "Project type", result['project_type'])
|
17
|
+
printf("\t%-15s: %s\n", "Private", result['private'])
|
18
|
+
printf("\t%-15s: %s\n", "Period", result['period'])
|
19
|
+
printf("\t%-15s: %s\n", "Source", result['source'])
|
20
|
+
printf("\t%-15s: %s\n", "Dependencies", result['dep_number'])
|
21
|
+
printf("\t%-15s: %s\n", "Outdated", result['out_number'])
|
22
|
+
printf("\t%-15s: %s\n", "Created", result['created_at'])
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "Projects",
|
8
|
+
:headings => %w(index name project_key private period source dependencies outdated created_at)
|
9
|
+
|
10
|
+
@@table.align_column(0, :right)
|
11
|
+
end
|
12
|
+
|
13
|
+
def after
|
14
|
+
puts @@table.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def format(results)
|
18
|
+
results = [results] if results.is_a? Hash
|
19
|
+
|
20
|
+
results.each_with_index do |result, index|
|
21
|
+
row = [index + 1, result['name'], result['project_key'], result['private'],
|
22
|
+
result['period'], result['source'], result['dep_number'],
|
23
|
+
result['out_number'], result['created_at']]
|
24
|
+
@@table << row
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
data/lib/veye/project.rb
ADDED
data/lib/veye/service.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Veye
|
2
|
+
class Service
|
3
|
+
RESOURCE_PATH = "/services"
|
4
|
+
def self.ping(n = 1)
|
5
|
+
public_api = API::Resource.new RESOURCE_PATH
|
6
|
+
api_respond = "no idea"
|
7
|
+
public_api.resource['/ping'].get do |response, request, result, &block|
|
8
|
+
api_respond = API::JSONResponse.new(request, result, response)
|
9
|
+
end
|
10
|
+
|
11
|
+
return api_respond
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Veye
|
2
|
+
module User
|
3
|
+
class FavoriteCSV
|
4
|
+
def before
|
5
|
+
printf("index,name,prod_key,prod_type,version,language\n")
|
6
|
+
end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def make_row(result, index = 1)
|
10
|
+
row = sprintf("%d,%s,%s,%s,%s,%s",
|
11
|
+
index + 1,
|
12
|
+
result['name'],
|
13
|
+
result['prod_key'],
|
14
|
+
result['prod_type'],
|
15
|
+
result['version'],
|
16
|
+
result['language']
|
17
|
+
)
|
18
|
+
row
|
19
|
+
end
|
20
|
+
|
21
|
+
def format(results)
|
22
|
+
results = [results] if results.is_a? Hash
|
23
|
+
results.each_with_index {|result, index| printf("%s\n", make_row(result, index))}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class FavoritePretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def show_favorite(fav, index)
|
10
|
+
printf("\t%15s - %s\n",
|
11
|
+
"#{fav['name']}".foreground(:green).bright,
|
12
|
+
"#{fav['prod_key'].bright}")
|
13
|
+
puts "\t-------------------------"
|
14
|
+
printf("\t%-15s: %s\n", "Product type", fav['prod_type'])
|
15
|
+
printf("\t%-15s: %s\n", "Version", "#{fav['prod_type']}".bright)
|
16
|
+
printf("\t%-15s: %s\n", "Language", fav['language'])
|
17
|
+
end
|
18
|
+
|
19
|
+
def format(results)
|
20
|
+
results = [results] if results.is_a? Hash
|
21
|
+
results.each_with_index {|fav, index| show_favorite(fav, index)}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class FavoriteTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "Favorite packages",
|
8
|
+
:headings => %w(nr name product_key version language)
|
9
|
+
@@table.align_column(0, :right)
|
10
|
+
end
|
11
|
+
|
12
|
+
def after
|
13
|
+
puts @@table.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def make_row(fav, index)
|
17
|
+
row = [index + 1, fav['name'], fav['prod_key'], fav['version'], fav['language']]
|
18
|
+
row
|
19
|
+
end
|
20
|
+
|
21
|
+
def format(results)
|
22
|
+
results = [results] if results.is_a? Hash
|
23
|
+
results.each_with_index {|fav, index| @@table << make_row(fav, index)}
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/veye/user/me.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative 'profile_csv.rb'
|
2
|
+
require_relative 'profile_json.rb'
|
3
|
+
require_relative 'profile_pretty.rb'
|
4
|
+
require_relative 'profile_table.rb'
|
5
|
+
|
6
|
+
require_relative 'favorite_csv.rb'
|
7
|
+
require_relative 'favorite_json.rb'
|
8
|
+
require_relative 'favorite_pretty.rb'
|
9
|
+
require_relative 'favorite_table.rb'
|
10
|
+
|
11
|
+
module Veye
|
12
|
+
module User
|
13
|
+
class Me
|
14
|
+
@@profile_formats = {
|
15
|
+
'csv' => ProfileCSV.new,
|
16
|
+
'json' => ProfileJSON.new,
|
17
|
+
'pretty' => ProfilePretty.new,
|
18
|
+
'table' => ProfileTable.new
|
19
|
+
}
|
20
|
+
|
21
|
+
@@favorite_formats = {
|
22
|
+
'csv' => FavoriteCSV.new,
|
23
|
+
'json' => FavoriteJSON.new,
|
24
|
+
'pretty' => FavoritePretty.new,
|
25
|
+
'table' => FavoriteTable.new
|
26
|
+
}
|
27
|
+
|
28
|
+
def self.get_profile(api_key)
|
29
|
+
user_api = API::Resource.new(RESOURCE_PATH)
|
30
|
+
response_data = nil
|
31
|
+
qparams = {:params => {:api_key => api_key}}
|
32
|
+
|
33
|
+
user_api.resource.get(qparams) do |response, request, result|
|
34
|
+
response_data = API::JSONResponse.new(request, result, response)
|
35
|
+
end
|
36
|
+
|
37
|
+
return response_data
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.get_favorites(api_key, page = 1)
|
41
|
+
user_api = API::Resource.new(RESOURCE_PATH)
|
42
|
+
response_data = nil
|
43
|
+
qparams = {
|
44
|
+
:params => {
|
45
|
+
:api_key => api_key,
|
46
|
+
:page => page || 1
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
user_api.resource['/favorites'].get(qparams) do |response, request, result|
|
51
|
+
response_data = API::JSONResponse.new(request, result, response)
|
52
|
+
end
|
53
|
+
|
54
|
+
return response_data
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.format_profile(results, format = 'pretty')
|
58
|
+
formatter = @@profile_formats[format]
|
59
|
+
formatter.before
|
60
|
+
formatter.format(results)
|
61
|
+
formatter.after
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.format_favorites(results, format = 'pretty')
|
65
|
+
formatter = @@favorite_formats[format]
|
66
|
+
|
67
|
+
formatter.before
|
68
|
+
formatter.format results
|
69
|
+
formatter.after
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Veye
|
2
|
+
module User
|
3
|
+
class ProfileCSV
|
4
|
+
def before
|
5
|
+
printf("index,username,fullname,email,plan_name_id,admin,new_notifications,total_notifications\n")
|
6
|
+
end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def format(results)
|
10
|
+
results = [results] if results.is_a? Hash
|
11
|
+
|
12
|
+
results.each_with_index do |result, index|
|
13
|
+
printf("%d,%s,%s,%s,%s,%s,%s,%s\n",
|
14
|
+
index + 1, result['username'], result['fullname'], result['email'],
|
15
|
+
result['plan_name_id'], result['admin'],
|
16
|
+
result['notifications']['new'],result['notifications']['total'])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class ProfilePretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def show_profile(profile, index)
|
10
|
+
printf("\t%15s - %s\n",
|
11
|
+
"#{profile['username']}".foreground(:green).bright,
|
12
|
+
"#{profile['fullname'].bright}")
|
13
|
+
puts "\t-------------------------"
|
14
|
+
printf("\t%-15s: %s\n", "Email", profile['email'])
|
15
|
+
printf("\t%-15s: %s\n", "Plan name", profile['plan_name_id'])
|
16
|
+
printf("\t%-15s: %s\n", "Admin", profile['admin'])
|
17
|
+
printf("\t%-15s: %s\n", "Deleted", profile['deleted'])
|
18
|
+
printf("\t%-15s: %s\n", "New notif.s",
|
19
|
+
"#{profile['notifications']['new']}".bright)
|
20
|
+
printf("\t%-15s: %s\n", "Total notif.s",
|
21
|
+
profile['notifications']['total'])
|
22
|
+
end
|
23
|
+
|
24
|
+
def format(results)
|
25
|
+
results = [results] if results.is_a? Hash
|
26
|
+
results.each_with_index {|profile, index| show_profile(profile, index)}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class ProfileTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "User's profile",
|
8
|
+
:headings => %w(nr username fullname email plan_name, admin, deleted, new_notifications, total_notifications)
|
9
|
+
|
10
|
+
@@table.align_column(0, :right)
|
11
|
+
end
|
12
|
+
|
13
|
+
def after
|
14
|
+
puts @@table.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def make_row(profile, index)
|
18
|
+
row = [index + 1, profile['username'], profile['fullname'], profile['email']]
|
19
|
+
row << profile['plan_name_id']
|
20
|
+
row << profile['admin']
|
21
|
+
row << profile['deleted']
|
22
|
+
row << profile['notifications']['new']
|
23
|
+
row << profile['notifications']['total']
|
24
|
+
return row
|
25
|
+
end
|
26
|
+
|
27
|
+
def format(results)
|
28
|
+
results = [results] if results.is_a? Hash
|
29
|
+
results.each_with_index {|profile, index| @@table << make_row(profile, index)}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
data/lib/veye/user.rb
ADDED
data/lib/veye/version.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Veye
|
2
|
+
VERSION = '0.0.2'
|
3
|
+
BIGEYE = %q{
|
4
|
+
|
5
|
+
_ __ _ ______
|
6
|
+
| | / /___ _____ _____ (_)____ ____ / ____/__ __ ___
|
7
|
+
| | / // _ \ / ___// ___// // __ \ / __ \ / __/ / / / // _ \
|
8
|
+
| |/ // __// / (__ )/ // /_/ // / / // /___ / /_/ // __/
|
9
|
+
|___/ \___//_/ /____//_/ \____//_/ /_//_____/ \__, / \___/
|
10
|
+
/____/
|
11
|
+
}
|
12
|
+
|
13
|
+
end
|
data/lib/veye.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# Add requires for other files you add to your project here, so
|
2
|
+
# you just need to require this one file in your bin file
|
3
|
+
require 'veye/version.rb'
|
4
|
+
require 'veye/service.rb'
|
5
|
+
require 'veye/api.rb'
|
6
|
+
require 'veye/package.rb'
|
7
|
+
require 'veye/project.rb'
|
8
|
+
require 'veye/user.rb'
|
9
|
+
require 'veye/pagination.rb'
|
10
|
+
|
11
|
+
$global_options ||= nil
|
12
|
+
DEFAULT_CONFIG_FILE = ".veye.rc"
|
13
|
+
DEFAULT_CONFIG_PATH = "~"
|
14
|
+
|
15
|
+
def get_config_fullpath
|
16
|
+
File.expand_path("#{DEFAULT_CONFIG_PATH}/#{DEFAULT_CONFIG_FILE}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def config_exists?
|
20
|
+
filepath = get_config_fullpath
|
21
|
+
File.exists?(filepath)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.check_configs(global_opts)
|
25
|
+
unless config_exists?
|
26
|
+
msg = sprintf("%s: %s\n",
|
27
|
+
"config file doesnt exist. ".foreground(:red),
|
28
|
+
"Use `veye initconfig` to initialize settings file.")
|
29
|
+
exit_now!(msg)
|
30
|
+
end
|
31
|
+
check_api_key(global_opts)
|
32
|
+
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def init_environment
|
37
|
+
#sets up required variables and modules to work on IRB or unittest
|
38
|
+
config_file = get_config_fullpath
|
39
|
+
$global_options = YAML.load_file(config_file)
|
40
|
+
$global_options[:config_file] = config_file
|
41
|
+
$global_options[:url] = Veye::API::Resource.build_url($global_options)
|
42
|
+
|
43
|
+
$global_options
|
44
|
+
end
|
45
|
+
|
46
|
+
def check_api_key(global_opts)
|
47
|
+
result = false
|
48
|
+
if global_opts[:api_key].nil? or global_opts[:api_key].match("add your api key")
|
49
|
+
msg = sprintf("%s: %s\n",
|
50
|
+
"Warning: API key is missing.".foreground(:yellow),
|
51
|
+
"You cant access private data.")
|
52
|
+
print msg
|
53
|
+
else
|
54
|
+
result = true
|
55
|
+
end
|
56
|
+
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
def update_api_key
|
61
|
+
user_key = gets.chomp.to_s.strip
|
62
|
+
if user_key =~ /No/i
|
63
|
+
msg = sprintf("%s: %s",
|
64
|
+
"Warning:".foreground(:yellow),
|
65
|
+
" missing, you cant access private data.")
|
66
|
+
print msg
|
67
|
+
else
|
68
|
+
$global_options[:api_key] = user_key
|
69
|
+
save_configs
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def save_configs
|
74
|
+
filepath = get_config_fullpath
|
75
|
+
File.open(filepath, 'w') do |f|
|
76
|
+
f.puts $global_options.to_yaml
|
77
|
+
end
|
78
|
+
msg = sprintf("%s: %s",
|
79
|
+
"Success".foreground(:green),
|
80
|
+
"new settings are saved into file: `#{filepath}`")
|
81
|
+
print msg
|
82
|
+
end
|
data/test/files/Gemfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
gem 'rails', '3.2.9'
|
3
|
+
group :assets do
|
4
|
+
gem 'sass-rails', '~> 3.2.3'
|
5
|
+
gem 'coffee-rails', '~> 3.2.1'
|
6
|
+
gem 'uglifier', '>= 1.0.3'
|
7
|
+
end
|
8
|
+
gem 'jquery-rails'
|
9
|
+
gem "mongoid", ">= 3.0.14"
|
10
|
+
gem "rspec-rails", ">= 2.11.4", :group => [:development, :test]
|
11
|
+
gem "database_cleaner", ">= 0.9.1", :group => :test
|
12
|
+
gem "mongoid-rspec", ">= 1.5.5", :group => :test
|
13
|
+
gem "email_spec", ">= 1.4.0", :group => :test
|
14
|
+
gem "cucumber-rails", ">= 1.3.0", :group => :test, :require => false
|
15
|
+
gem "launchy", ">= 2.1.2", :group => :test
|
16
|
+
gem "capybara", ">= 1.1.4", :group => :test
|
17
|
+
gem "factory_girl_rails", ">= 4.1.0", :group => [:development, :test]
|
18
|
+
gem "omniauth", ">= 1.1.1"
|
19
|
+
gem "omniauth-twitter"
|
20
|
+
gem "quiet_assets", ">= 1.0.1", :group => :development
|