merge develop

This commit is contained in:
Connor Turland 2016-01-22 14:59:09 +13:00
commit 4557b8e305
97 changed files with 1764 additions and 867 deletions

View file

@ -1,14 +1,43 @@
RAILS_ENV=development
export DB_USERNAME='postgres'
export DB_PASSWORD='3112'
export DB_HOST='localhost'
export DB_PORT='5432'
export DB_NAME='metamap002'
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
BUNDLE_GEMFILE
SMTP_DOMAIN
SMTP_PASSWORD
SMTP_PORT
SMTP_SERVER
SMTP_USERNAME
SSO_KEY
export REALTIME_SERVER='http://localhost:5001'
export MAILER_DEFAULT_URL='localhost:3000'
export DEVISE_MAILER_SENDER='team@metamaps.cc'
export DEVISE_SECRET_KEY='f71c467e526f23d614b3b08866cad4788c502bed869c282f06e73ee6c94675b62fe1f6d52fa7ba8196b33031f0d2f3b67e27ea07693c52ecebccb01700cad614'
# # you can safely leave these blank, unless you're deploying an instance, in
# # which case you'll need to set them up
#
# export S3_BUCKET_NAME
# export AWS_ACCESS_KEY_ID
# export AWS_SECRET_ACCESS_KEY
# export SSO_KEY
#
# export SMTP_DOMAIN
# export SMTP_PASSWORD
# export SMTP_PORT
# export SMTP_SERVER
# export SMTP_USERNAME
#ruby garbage collection stuff
export RUBY_GC_TUNE=0 #set to 1 to enable GC test
export RUBY_GC_TOKEN=4f4380fc9a2857d1f008005a3eb86928
export RUBY_GC_HEAP_INIT_SLOTS=186426
export RUBY_GC_HEAP_FREE_SLOTS=559278
export RUBY_GC_HEAP_GROWTH_FACTOR=1.03
export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=74570
export RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.4
export RUBY_GC_MALLOC_LIMIT=32883406
export RUBY_GC_MALLOC_LIMIT_MAX=69055153
export RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=1.68
export RUBY_GC_OLDMALLOC_LIMIT=32509481
export RUBY_GC_OLDMALLOC_LIMIT_MAX=68269910
export RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR=1.4
## find the ENV currently in use in the app using :
## grep -rIso -P "(?<=ENV)(\.fetch\(|\[).[A-Z_]+.(\)|\])"
@ -16,16 +45,3 @@ SSO_KEY
# for a uniq ordered list of env vars:
## grep -rIsoh -P "(?<=ENV)(\.fetch\(|\[).[A-Z_]+.(\)|\])" | grep -oP "[A-Z_]+" | sort -u > temp
RUBY_GC_TUNE=0 #set to 1 to enable GC test
RUBY_GC_TOKEN=4f4380fc9a2857d1f008005a3eb86928
RUBY_GC_HEAP_INIT_SLOTS=186426
RUBY_GC_HEAP_FREE_SLOTS=559278
RUBY_GC_HEAP_GROWTH_FACTOR=1.03
RUBY_GC_HEAP_GROWTH_MAX_SLOTS=74570
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.4
RUBY_GC_MALLOC_LIMIT=32883406
RUBY_GC_MALLOC_LIMIT_MAX=69055153
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=1.68
RUBY_GC_OLDMALLOC_LIMIT=32509481
RUBY_GC_OLDMALLOC_LIMIT_MAX=68269910
RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR=1.4

7
.gitignore vendored
View file

@ -8,17 +8,12 @@
realtime/node_modules
public/assets
#secrets
config/database.yml
config/secrets.yml
#secrets and config
.env
# Ignore bundler config
.bundle
# Ignore the default SQLite database.
db/*.sqlite3
# Ignore all logfiles and tempfiles.
log/*.log
tmp

2
.rspec Normal file
View file

@ -0,0 +1,2 @@
--color
--require spec_helper

View file

@ -38,6 +38,12 @@ group :assets do
gem 'uglifier'
end
group :test do
gem 'rspec-rails'
gem 'factory_girl_rails'
gem 'shoulda-matchers'
end
group :production do #this is used on heroku
#gem 'rmagick'
gem 'rails_12factor'

View file

@ -53,7 +53,8 @@ GEM
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
builder (3.2.2)
byebug (8.2.1)
byebug (5.0.0)
columnize (= 0.9.0)
cancancan (1.13.1)
climate_control (0.0.3)
activesupport (>= 3.0)
@ -76,10 +77,16 @@ GEM
responders
thread_safe (~> 0.1)
warden (~> 1.2.3)
diff-lcs (1.2.5)
dotenv (2.0.2)
erubis (2.7.0)
execjs (2.6.0)
ezcrypto (0.7.2)
factory_girl (4.5.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.5.0)
factory_girl (~> 4.5.0)
railties (>= 3.0.0)
formtastic (3.1.3)
actionpack (>= 3.2.13)
formula (1.1.1)
@ -105,28 +112,28 @@ GEM
mail (2.6.3)
mime-types (>= 1.16, < 3)
method_source (0.8.2)
mime-types (2.99)
mime-types (2.6.2)
mimemagic (0.3.0)
mini_portile2 (2.0.0)
minitest (5.8.3)
mini_portile (0.6.2)
minitest (5.8.2)
multi_json (1.11.2)
nokogiri (1.6.7)
mini_portile2 (~> 2.0.0.rc2)
oauth (0.4.7)
orm_adapter (0.5.0)
paperclip (4.3.2)
paperclip (4.3.1)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
cocaine (~> 0.5.5)
mime-types
mimemagic (= 0.3.0)
pg (0.18.4)
pg (0.18.3)
pry (0.10.3)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
pry-byebug (3.3.0)
byebug (~> 8.0)
pry-byebug (3.2.0)
byebug (~> 5.0)
pry (~> 0.10)
pry-rails (0.3.4)
pry (>= 0.9.10)
@ -170,6 +177,23 @@ GEM
redis (3.2.2)
responders (2.1.0)
railties (>= 4.2.0, < 5)
rspec-core (3.3.2)
rspec-support (~> 3.3.0)
rspec-expectations (3.3.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.3.0)
rspec-mocks (3.3.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.3.0)
rspec-rails (3.3.3)
actionpack (>= 3.0, < 4.3)
activesupport (>= 3.0, < 4.3)
railties (>= 3.0, < 4.3)
rspec-core (~> 3.3.0)
rspec-expectations (~> 3.3.0)
rspec-mocks (~> 3.3.0)
rspec-support (~> 3.3.0)
rspec-support (3.3.0)
sass (3.4.19)
sass-rails (5.0.4)
railties (>= 4.0.0, < 5.0)
@ -177,9 +201,10 @@ GEM
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
shoulda-matchers (3.0.1)
activesupport (>= 4.0.0)
slop (3.6.0)
sprockets (3.5.0)
concurrent-ruby (~> 1.0)
sprockets (3.4.0)
rack (> 1, < 3)
sprockets-rails (2.3.3)
actionpack (>= 3.0)
@ -213,6 +238,7 @@ DEPENDENCIES
coffee-rails
devise
dotenv
factory_girl_rails
formtastic
formula
jbuilder
@ -229,7 +255,9 @@ DEPENDENCIES
rails3-jquery-autocomplete
rails_12factor
redis
rspec-rails
sass-rails
shoulda-matchers
tunemygc
uglifier
uservoice-ruby

View file

@ -626,14 +626,14 @@ Metamaps.GlobalUI.Search = {
self.hideLoader();
if (datum.rtype != "noresult") {
if (["topic", "map", "mapper"].indexOf(datum.rtype) !== -1) {
self.close(0, true);
var win;
if (dataset == "topics") {
if (datum.rtype == "topic") {
Metamaps.Router.topics(datum.id);
} else if (dataset == "maps") {
} else if (datum.rtype == "map") {
Metamaps.Router.maps(datum.id);
} else if (dataset == "mappers") {
} else if (datum.rtype == "mapper") {
Metamaps.Router.explore("mapper", datum.id);
}
}

View file

@ -1910,9 +1910,6 @@ Metamaps.Util = {
*
*/
Metamaps.Realtime = {
stringForLocalhost: '//' + location.host.split(':')[0] + ':5001',
stringForMetamaps: 'https://realtime.metamaps.cc',
stringForHeroku: 'https://gentle-savannah-1303.herokuapp.com',
videoId: 'video-wrapper',
socket: null,
webrtc: null,
@ -1939,9 +1936,7 @@ Metamaps.Realtime = {
self.addJuntoListeners();
var railsEnv = $('body').data('env');
var whichToConnect = railsEnv === 'development' ? self.stringForLocalhost : self.stringForHeroku;
self.socket = new SocketIoConnection({ url: whichToConnect });
self.socket = new SocketIoConnection({ url: '<%= ENV['REALTIME_SERVER'] %>' });
self.socket.on('connect', function () {
console.log('connected');
if (!self.disconnected) {

View file

@ -19,12 +19,6 @@
}
}
.explorePage .sidebarSearchField,
.explorePage .sidebarSearch .tt-hint {
width: 380px;
padding: 5px 10px 5px 10px;
}
.sidebarSearchIcon {
float: left;
width: 72px;

View file

@ -60,13 +60,13 @@ private
end
def admin?
current_user && current_user.admin
authenticated? && current_user.admin
end
def get_invite_link
unsafe_uri = request.env["REQUEST_URI"]
unsafe_uri = request.env["REQUEST_URI"] || 'https://metamaps.cc'
valid_url = /^https?:\/\/([\w\.-]+)(:\d{1,5})?\/?$/
safe_uri = (unsafe_uri.match(valid_url)) ? unsafe_uri : "//metamaps.cc/"
safe_uri = (unsafe_uri.match(valid_url)) ? unsafe_uri : '//metamaps.cc/'
@invite_link = "#{safe_uri}join" + (current_user ? "?code=#{current_user.code}" : "")
end
end

View file

@ -1,5 +1,4 @@
class MetacodesController < ApplicationController
before_filter :require_admin, except: [:index]
# GET /metacodes

View file

@ -101,5 +101,4 @@ class UsersController < ApplicationController
def user_params
params.require(:user).permit(:name, :email, :image, :password, :password_confirmation)
end
end

View file

@ -15,6 +15,11 @@ class Map < ActiveRecord::Base
},
:default_url => 'https://s3.amazonaws.com/metamaps-assets/site/missing-map.png'
validates :name, presence: true
validates :arranged, inclusion: { in: [true, false] }
validates :permission, presence: true
validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) }
# Validate the attached image is image/jpg, image/png, etc
validates_attachment_content_type :screenshot, :content_type => /\Aimage\/.*\Z/
@ -23,13 +28,7 @@ class Map < ActiveRecord::Base
end
def mk_permission
if self.permission == "commons"
"co"
elsif self.permission == "public"
"pu"
elsif self.permission == "private"
"pr"
end
Perm.short(permission)
end
#return an array of the contributors to the map
@ -111,14 +110,6 @@ class Map < ActiveRecord::Base
return self
end
# returns Boolean if user allowed to view Topic, Synapse, or Map
def authorize_to_view(user)
if (self.permission == "private" && self.user != user)
return false
end
return true
end
def decode_base64(imgBase64)
decoded_data = Base64.decode64(imgBase64)

View file

@ -10,6 +10,9 @@ class Synapse < ActiveRecord::Base
validates :desc, length: { minimum: 0, allow_nil: false }
validates :permission, presence: true
validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) }
def user_name
self.user.name
end
@ -48,13 +51,4 @@ class Synapse < ActiveRecord::Base
end
return false
end
# returns Boolean if user allowed to view Topic, Synapse, or Map
def authorize_to_view(user)
if (self.permission == "private" && self.user != user)
return false
end
return true
end
end

View file

@ -10,6 +10,9 @@ class Topic < ActiveRecord::Base
has_many :mappings, as: :mappable, dependent: :destroy
has_many :maps, :through => :mappings
validates :permission, presence: true
validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) }
# This method associates the attribute ":image" with a file attachment
has_attached_file :image
@ -39,27 +42,27 @@ class Topic < ActiveRecord::Base
belongs_to :metacode
def user_name
self.user.name
user.name
end
def user_image
self.user.image.url
user.image.url
end
def map_count
self.maps.count
maps.count
end
def synapse_count
self.synapses.count
synapses.count
end
def inmaps
self.maps.map(&:name)
maps.map(&:name)
end
def inmapsLinks
self.maps.map(&:id)
maps.map(&:id)
end
def as_json(options={})
@ -71,24 +74,18 @@ class Topic < ActiveRecord::Base
end
def mk_permission
if self.permission == "commons"
"co"
elsif self.permission == "public"
"pu"
elsif self.permission == "private"
"pr"
end
Perm.short(permission)
end
# has no viewable synapses helper function
def has_viewable_synapses(current)
result = false
self.synapses.each do |synapse|
if synapse.authorize_to_view(current)
synapses.each do |synapse|
if synapse.authorize_to_show(current)
result = true
end
end
return result
result
end
##### PERMISSIONS ######
@ -117,12 +114,4 @@ class Topic < ActiveRecord::Base
end
return false
end
# returns Boolean if user allowed to view Topic, Synapse, or Map
def authorize_to_view(user)
if (self.permission == "private" && self.user != user)
return false
end
return true
end
end

View file

@ -64,7 +64,7 @@ class User < ActiveRecord::Base
#generate a random 8 letter/digit code that they can use to invite people
def generate_code
self.code = rand(36**8).to_s(36)
self.code ||= rand(36**8).to_s(36)
$codes.push(self.code)
self.generation = get_generation!
end

37
app/services/perm.rb Normal file
View file

@ -0,0 +1,37 @@
class Perm
# e.g. Perm::ISSIONS
ISSIONS = [:commons, :public, :private]
class << self
def short(permission)
case permission
when :commons
"co"
when :public
"pu"
when :private
"pr"
else
fail "Invalid permission"
end
end
def long(perm)
case perm
when "co"
:commons
when "pu"
:public
when "pr"
:private
else
fail "Invalid short permission"
end
end
def valid?(permission)
ISSIONS.include? permission
end
end
end

View file

@ -21,7 +21,7 @@
<!-- app code -->
<script type="text/javascript">
require.config({baseUrl: '/famous/'});
require.config({baseUrl: '<%= "#{ asset_path '/famous/main.js' }".chomp('main.js') %>'});
require(['main']);
</script>
@ -66,7 +66,7 @@
<![endif]-->
</head>
<body data-env="<%= Rails.env %>" class="<%= authenticated? ? "authenticated" : "unauthenticated" %>">
<body class="<%= authenticated? ? "authenticated" : "unauthenticated" %>">
<% if devise_error_messages? %>
<p id="toast"><%= devise_error_messages! %></p>

View file

@ -47,7 +47,7 @@
Metamaps.Maps.Active = <%= @maps.to_json.html_safe %>;
Metamaps.currentSection = "";
Metamaps.currentPage = "";
Metamaps.GlobalUI.Search.isOpen = true;
Metamaps.GlobalUI.Search.open();
Metamaps.GlobalUI.Search.lock();
</script>
<% end %>

View file

@ -1,9 +1,13 @@
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require 'dotenv'
Bundler.require(*Rails.groups)
ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
Dotenv.load ".env.#{ENV["RAILS_ENV"]}", '.env'
module Metamaps
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
@ -11,7 +15,7 @@ module Metamaps
# -- all .rb files in that directory are automatically loaded.
# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras)
config.autoload_paths << Rails.root.join('app', 'services')
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
@ -45,6 +49,9 @@ module Metamaps
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '2.0'
config.generators do |g|
g.test_framework :rspec
end
config.active_record.raise_in_transactional_callbacks = true
end
end

21
config/database.yml Normal file
View file

@ -0,0 +1,21 @@
default: &default
min_messages: WARNING
encoding: unicode
pool: 5
adapter: postgresql
host: <%= ENV['DB_HOST'] %>
port: <%= ENV['DB_PORT'] %>
username: <%= ENV['DB_USERNAME'] %>
password: <%= ENV['DB_PASSWORD'] %>
development:
<<: *default
database: <%= ENV['DB_NAME'] %>_development
test:
<<: *default
database: <%= ENV['DB_NAME'] %>_test
production:
<<: *default
database: <%= ENV['DB_NAME'] %>_production

View file

@ -1,10 +0,0 @@
development:
min_messages: WARNING
adapter: postgresql
host: 127.0.0.1
port: 5432
encoding: unicode
database: metamap002_development
pool: 5
username: postgres
password: "3112"

View file

@ -42,7 +42,7 @@ Metamaps::Application.configure do
authentication: 'plain',
enable_starttls_auto: true,
openssl_verify_mode: 'none' }
config.action_mailer.default_url_options = { :host => 'metamaps.herokuapp.com' }
config.action_mailer.default_url_options = { :host => ENV['MAILER_DEFAULT_URL'] }
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = true

View file

@ -10,7 +10,7 @@ Metamaps::Application.configure do
config.cache_classes = true
# Configure static asset server for tests with Cache-Control for performance
config.serve_static_assets = true
config.serve_static_files = true
config.static_cache_control = "public, max-age=3600"
# Show full error reports and disable caching

View file

@ -11,18 +11,13 @@ Devise.setup do |config|
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class with default "from" parameter.
config.mailer_sender = "team@metamaps.cc"
config.mailer_sender = ENV['DEVISE_MAILER_SENDER']
# Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer"
if Rails.env.development? # this is for Connors localhost
config.secret_key = 'f71c467e526f23d614b3b08866cad4788c502bed869c282f06e73ee6c94675b62fe1f6d52fa7ba8196b33031f0d2f3b67e27ea07693c52ecebccb01700cad614'
end
if Rails.env.production? # this is for the heroku staging environment
config.secret_key = 'd91ba0da95749174ee2b8922034783cbde4945409ed28b13383e18e72844beb74467f8199e9e216f0687cd2290c6e46bf74da24486d14bba3671d76c5b10c753'
end
config.secret_key = ENV['DEVISE_SECRET_KEY']
# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and

View file

@ -11,7 +11,7 @@ vagrant ssh --command "cd /vagrant; gem install bundler";
vagrant ssh --command "cd /vagrant; bundle install";
# copy the db config
vagrant ssh --command "cd /vagrant; cp config/database.yml.default config/database.yml";
vagrant ssh --command "cd /vagrant; cp .example-env .env";
# Rake all the things
vagrant ssh --command "cd /vagrant; rake db:create; rake db:schema:load; rake db:fixtures:load"

View file

@ -15,12 +15,16 @@ class MappingPolymorphism < ActiveRecord::Migration
end
unless mapping.synapse_id.nil?
mapping.mappable = Synapse.find(mapping.synapse_id)
mapping.mappable = Synapse.find_by(id: mapping.synapse_id)
else
next if mapping.topic_id == 0
mapping.mappable = Topic.find(mapping.topic_id)
mapping.mappable = Topic.find_by(id: mapping.topic_id)
end
if mapping.mappable.nil?
mapping.delete
else
mapping.save
end
mapping.save
end
end

View file

@ -1,9 +0,0 @@
class MetacodeAssetPathUpdate < ActiveRecord::Migration
def change
Metacode.all.each do |metacode|
if metacode.icon.start_with?("/assets/icons/")
metacode.update(icon: metacode.icon.gsub(/^\/assets\/icons/, "https://s3.amazonaws.com/metamaps-assets/metacodes"))
end
end
end
end

View file

@ -0,0 +1,15 @@
class Metacode < ActiveRecord::Base
end
class MetacodeAssetPathUpdate < ActiveRecord::Migration
def change
Metacode.first(50).each do |metacode|
if metacode.icon.start_with?("/assets/icons/")
metacode.icon = metacode.icon.sub(/^\/assets\/icons/, "https://s3.amazonaws.com/metamaps-assets/metacodes")
metacode.icon = metacode.icon.sub('blueprint_96px', 'blueprint/96px')
metacode.icon = metacode.icon.sub('generics_96px', 'generics/96px')
metacode.save
end
end
end
end

View file

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20151205205831) do
ActiveRecord::Schema.define(version: 20151028061513) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"

View file

@ -1,7 +1,306 @@
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first)
## USERS
User.new({
name: 'user',
email: 'user@user.com',
password: 'toolsplusconsciousness',
code: 'qwertyui',
joinedwithcode: 'qwertyui',
admin: 'false'
}).save
User.new({
name: 'admin',
email: 'admin@admin.com',
password: 'toolsplusconsciousness',
code: 'iuytrewq',
joinedwithcode: 'iuytrewq',
admin: 'true'
}).save
## END USERS
## METACODES
Metacode.create({
name: 'Action',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_action.png',
color: '#BD6C85'
})
Metacode.create({
name: 'Activity',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_activity.png',
color: '#6EBF65'
})
Metacode.create({
name: 'Catalyst',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_catalyst.png',
color: '#EF8964',
})
Metacode.create({
name: 'Closed',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_closedissue.png',
color: '#ABB49F',
})
Metacode.create({
name: 'Process',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_process.png',
color: '#BDB25E',
})
Metacode.create({
name: 'Future',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_futuredev.png',
color: '#25A17F',
})
Metacode.create({
name: 'Group',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_group.png',
color: '#7076BC',
})
Metacode.create({
name: 'Implication',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_implication.png',
color: '#83DECA',
})
Metacode.create({
name: 'Insight',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_insight.png',
color: '#B074AD',
})
Metacode.create({
name: 'Intention',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_intention.png',
color: '#BAEAFF',
})
Metacode.create({
name: 'Knowledge',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_knowledge.png',
color: '#60ACF7',
})
Metacode.create({
name: 'Location',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_location.png',
color: '#ABD9A7',
})
Metacode.create({
name: 'Need',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_need.png',
color: '#D2A7D4',
})
Metacode.create({
name: 'Open',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_openissue.png',
color: '#9BBF71',
})
Metacode.create({
name: 'Opportunity',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_opportunity.png',
color: '#889F64',
})
Metacode.create({
name: 'Person',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_person.png',
color: '#DE925F',
})
Metacode.create({
name: 'Platform',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_platform.png',
color: '#21C8FE',
})
Metacode.create({
name: 'Problem',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_problem.png',
color: '#99CFC4',
})
Metacode.create({
name: 'Resource',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_resource.png',
color: '#C98C63',
})
Metacode.create({
name: 'Role',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_role.png',
color: '#A8595D',
})
Metacode.create({
name: 'Task',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_task.png',
color: '#3397C4',
})
Metacode.create({
name: 'Trajectory',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_trajectory.png',
color: '#D3AA4C',
})
Metacode.create({
name: 'Argument',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_argument.png',
color: '#7FAEFD',
})
Metacode.create({
name: 'Con',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_con.png',
color: '#CF7C74',
})
Metacode.create({
name: 'Subject',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_subject.png',
color: '#8293D8',
})
Metacode.create({
name: 'Decision',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_decision.png',
color: '#CCA866',
})
Metacode.create({
name: 'Event',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_event.png',
color: '#F5854B',
})
Metacode.create({
name: 'Example',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_example.png',
color: '#618C61',
})
Metacode.create({
name: 'Experience',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_experience.png',
color: '#BE995F',
})
Metacode.create({
name: 'Feedback',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_feedback.png',
color: '#54A19D',
})
Metacode.create({
name: 'Aim',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_aim.png',
color: '#B0B0B0',
})
Metacode.create({
name: 'Good',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_goodpractice.png',
color: '#BD9E86',
})
Metacode.create({
name: 'Idea',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_idea.png',
color: '#C4BC5E',
})
Metacode.create({
name: 'List',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_list.png',
color: '#B7A499',
})
Metacode.create({
name: 'Media',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_media.png',
color: '#6D94CC',
})
Metacode.create({
name: 'Metamap',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_metamap.png',
color: '#AEA9FD',
})
Metacode.create({
name: 'Model',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_model.png',
color: '#B385BA',
})
Metacode.create({
name: 'Note',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_note.png',
color: '#A389A1',
})
Metacode.create({
name: 'Perspective',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_perspective.png',
color: '#2EB6CC',
})
Metacode.create({
name: 'Pro',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_pro.png',
color: '#89B879',
})
Metacode.create({
name: 'Project',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_project.png',
color: '#85A050',
})
Metacode.create({
name: 'Question',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_question.png',
color: '#5CB3B3',
})
Metacode.create({
name: 'Reference',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_reference.png',
color: '#A7A7A7',
})
Metacode.create({
name: 'Research',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_research.png',
color: '#CD8E89',
})
Metacode.create({
name: 'Status',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_status.png',
color: '#EFA7C0',
})
Metacode.create({
name: 'Tool',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_tool.png',
color: '#828282',
})
Metacode.create({
name: 'Wildcard',
icon: 'https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_wildcard.png',
color: '#73C7DE',
})
## END METACODES

View file

@ -1,42 +1,43 @@
# OSX Install
If you are doing an upgrade and or recent pull for changes you will need to change your default ruby package from 2.1.1 to ruby 2.1.2
install homebrew
Some of these steps are pulled from http://www.moncefbelyamani.com/how-to-install-postgresql-on-a-mac-with-homebrew-and-lunchy/
Install homebrew
\curl -sSL https://get.rvm.io | bash -s stable --rails
rvm install 2.1.3 --with-gcc=clang
rvm use 2.1.3
gem install lunchy
(http://www.moncefbelyamani.com/how-to-install-postgresql-on-a-mac-with-homebrew-and-lunchy/)
Now install homebrew.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Then install nodejs
brew install nodejs
And postgresql:
brew install postgresql
ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
createuser metamaps -P -s -d
set a password
Set a password, then start the service:
lunchy start postgres
cd into the metamaps directory
Change directory to the metamaps git repository, and run:
bundle install
copy the database.yml.default file and rename it database.yml
make sure the username and password match the POSTGRES username and password you set
http://nodejs.org/ hit install, download, open, install
Copy the .example-env file and rename it to .env. Then modify the DB_USERNAME and DB_PASSWORD values to match the postgres username and password you set
rake db:create
rake db:schema:load
rake db:fixtures:load
rails s
( to start the server)
rails server
Now open a browser to http://localhost:3000!

53
doc/RspecTesting.md Normal file
View file

@ -0,0 +1,53 @@
## Testing with RSpec
RSpec is a ruby gem that allows you to test your code base. This is great -
every time you make a change, you can do some basic sanity checks to make sure
you didn't break anything.
To test Metamaps, run
rspec
in the top level directory. It will automatically search the `spec` directory
for files called `*_spec.rb`, and run them as tests. When it's done testing, it
will print a report telling you how many tests failed. With luck, the number
will be 0.
Note that if your test database doesn't exist yet, you'll need to create it
first:
RAILS_ENV=test rake db:create
At the time of writing, there are four directories in the spec folder. One,
`support`, is for helper functions. `rails_helper.rb` and `spec_helper.rb` are
also for helper functions.
`factories` is for a gem called [factory-girl][factory-girl]. This gem lets you
use the `create` and `build` functions to quickly create the simplest possible
valid version of a given model. For instance:
let(:map1) { create :map }
let(:ronald) { create :user, name: "Ronald" }
let(:map2) { create :map, user: ronald }
As you can see, you can also customize the factories. You can read the full
documentation at the link above or check the existing specs to see how it works.
It is worth reading through the factories to see how they are defined. If you
add a model to `app/models`, please also create a factory for it that defines
the minimum valid state for that model.
Finally, `models` and `controllers` have the actual spec files. Writing specs is
usually fairly simple but you do need to understand the syntax. You can read
more at [rspec.info][rspec-docs].
If you modify the metamaps codebase, please consider adding tests verifying that
the added code works. This will help in a few ways:
- Unrelated changes in the future that break your code will be spotted earlier
- Your changes will be more easily understood, since the *purpose* will be
described by the spec
Happy testing!
[factory-girl]: https://github.com/thoughtbot/factory_girl
[rspec-docs]: http://rspec.info

View file

@ -1,113 +1,97 @@
Firstly this walkthrough is done with a 14.04 32bit install of Ubuntu.
All commands that I could are terminal based.
Lets check if all updates for the system are installed first
in terminal type
Let's check if all updates for the system are installed first. In a
terminal type:
sudo apt-get update
now we need to install git
Now we need to install git:
sudo apt-get install git
lets get our RVM installed (Ruby Version Manager) now this is fun because the package you will get from apt-get is outdated.
so we are going to use CURL to get RVM
Now let's get our RVM installed (Ruby Version Manager). Now this is fun
because the package you will get from apt-get is outdated. So we are going
to use CURL to get RVM
sudo apt-get install curl
then lets install RVM with curl like this
curl -L get.rvm.io | bash -s stable
Then lets install RVM with curl like this
gpg --keyserver hkp://keys.gnupg.net \
--recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
\curl -sSL https://get.rvm.io | bash -s stable
PATH=$PATH:$HOME/.rvm/bin
[[ -s "$HOME/.profile" ]] && source "$HOME/.profile"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
source ~/.rvm/scripts/rvm
now we can actually install RVM
Now we can actually install RVM
rvm requirements
running this will check your system for requirements as well so you will need to put your system password in.
Running this will check your system for requirements as well so you will need to put your system password in.
alright now we can download metamaps from the master using git
All right now we can download metamaps from the master using git
git clone https://github.com/metamaps/metamaps_gen002.git
now there is a couple other things we are going to need which is nodejs, postgresql, libpq-dev and redis-server
sudo apt-get install nodejs
Now there is a couple other things we are going to need which is nodejs, postgresql, libpq-dev and redis-server
sudo apt-get install nodejs npm
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo apt-get install postgresql
sudo apt-get install libpq-dev
sudo apt-get install redis-server
Furthermore, if you want to be able to work on profile picture uploading, or use it
you'll need ImageMagick. On Ubuntu, you can just go find ImageMagick in the Ubuntu Software Centre
Furthermore, if you want to be able to work on profile picture uploading,
or use it you'll need ImageMagick. On Ubuntu, you can just go find
ImageMagick in the Ubuntu Software Centre
Install the specific version of ruby needed this will take some time
rvm install ruby-2.1.3
rvm install $(cat metamaps_gen002/.ruby-version)
Now we also need to rename your database file which is in ./config/database.default.yml to database.yml
Now we also need to copy .example-env to a new file named .env. Review the
configuration in here to see if you need any changes.
now run inside your metamaps_gen002 folder
cp .example-env .env
Now run inside your metamaps_gen002 folder:
gem install bundle
bundle install
in your top lvl directory for metamaps this is a lengthy process so you might want to go and make a coffee or something :)
in your top level directory for metamaps. This is a lengthy process so you might want to go and make a coffee or something :)
alright now we need to make sure your postgres password is the same as it is listed in the DB file so we are going to set it by
All right now we need to make sure your postgres password is the same as
it is listed in the .env file so we are going to set it by
sudo -u postgres psql
Select postgres like this
Use these commands to set the password to 3112 and then quit:
\password postgres
set the password to 3112
Then to quit
\q
now we can run the rake install and db creation
now we can use rake to create, load the schema into, and load db/seeds.rb
into the postgres database:
rake db:create
rake db:setup
rake db:schema:load
rake db:fixtures:load
Execute the server:
Open a new terminal, navigate to the metamaps directory, and execute the
server:
rails s
and dont forget to run the other server for realtime...
open a new terminal
navigate to ./realtime and run
sudo apt-get install npm
cd realtime
npm install
nodejs realtime-server.js
node realtime-server.js
Now you're all set enjoy your personal server of metamaps :)
Now you're all set enjoy your personal server of metamaps :) Navigate your browser to localhost:3000 once you have the server running. Sign in with the default account
Navigate your browser to localhost:3000 once you have the server running
Sign in with the default account
email: user@user.com
password: toolsplusconsciousness
email: user@user.com
password: toolsplusconsciousness
OR create a new account at /join, and use access code 'qwertyui'

View file

@ -4,14 +4,12 @@ Ruby, Git, and Rails: http://railsinstaller.org/en
PostgreSQL 9.2: http://www.enterprisedb.com/products-services-training/pgdownload
nodejs: http://nodejs.org/download
During the installation of the PostgreSQL database, you'll need to choose a database password. Anything is fine, just note down what you choose.
During the installation of the PostgreSQL database, you'll need to choose a
database password. Anything is fine, just note down what you choose.
Once you are ready, create a new folder to hold this and any other git repositories. As an example, let's pretend you've chose C:\git, and made that folder writable by your user account.
Open a command prompt ("cmd.exe"), and navigate to the folder you chose. Then use the gem command (which is part of Ruby) to install Ruby on Rails.
cd .\git
gem install rails -v 4.2
Once you are ready, create a new folder to hold this and any other git
repositories. As an example, let's pretend you've chose C:\git, and made that
folder writable by your user account.
Now you are ready to clone the Metamaps git repository:
@ -19,19 +17,28 @@ Now you are ready to clone the Metamaps git repository:
cd metamaps_gen002
bundle install
The third `bundle install` command downloads and installs the rubygem dependencies of Metamaps.
The third `bundle install` command downloads and installs the rubygem
dependencies of Metamaps.
At this point you should be in C:\git\metamaps_gen002, or whatever equivalent directory you've chosen. The next step is to set up your database configuration. From the metamaps_gen002 directory, run
At this point you should be in C:\git\metamaps_gen002, or whatever equivalent
directory you've chosen. The next step is to set up your database
configuration. From the metamaps_gen002 directory, run
start config
This command will open a Windows Explorer window of the "config" directory of Metamaps. Copy database.yml.default, and rename the copy to database.yml. Edit the file and set the password to be whatever you set up with postgres earlier. Once you're done, then move back into the command prompt. The next few commands will fail unless database.yml is correctly configured and Postgres is running.
This command will open a Windows Explorer window of the "config" directory of
Metamaps. Copy `.example-env`, and rename the copy to `.env`. Edit the file and
set the DB_PASSWORD to be whatever you set up with postgres earlier. Once
you're done, then move back into the command prompt. The next few commands will
fail unless `.env` is correctly configured and Postgres is running.
rake db:create
rake db:schema:load
rake db:fixtures:load
And you're set up! At this point, you should be able to run the server at any time with only one command; you don't need to repeat any of the previous steps again. The command to run the server is:
And you're set up! At this point, you should be able to run the server at any
time with only one command; you don't need to repeat any of the previous steps
again. The command to run the server is:
rails s

View file

@ -1,6 +1,8 @@
require 'dotenv/tasks'
namespace :heroku do
desc "Generate the Heroku gems manifest from gem dependencies"
task :gems do
task :gems => :dotenv do
RAILS_ENV='production'
Rake::Task[:environment].invoke
list = Rails.configuration.gems.collect do |g|
@ -12,4 +14,4 @@ namespace :heroku do
f.write(list)
end
end
end
end

View file

@ -1 +1,18 @@
'Real-Time'
## Node.js realtime server
To run the server, you need to install the dependencies and run the server.
Please ensure you have followed the OS-specific instructions in doc/ to
install NodeJS. Once you have node, then you can proceed to install the
node packages for the realtime server:
cd realtime
npm install #creates node_modules directory
node realtime-server.js
That's it!
To run the server as a daemon that will be re-run if it crashes, you can
use the forever node package.
sudo npm install -g forever
forever start realtime-server.js

View file

@ -2,6 +2,7 @@
"name": "RoR-real-time",
"description": "providing real-time sychronization for ruby on rails",
"version": "0.0.1",
"private": true,
"dependencies": {
"socket.io": "0.9.12",
"node-uuid": "1.2.0"

View file

@ -0,0 +1,160 @@
require 'rails_helper'
# This spec was generated by rspec-rails when you ran the scaffold generator.
# It demonstrates how one might use RSpec to specify the controller code that
# was generated by Rails when you ran the scaffold generator.
#
# It assumes that the implementation code is generated by the rails scaffold
# generator. If you are using any extension libraries to generate different
# controller code, this generated spec may or may not pass.
#
# It only uses APIs available in rails and/or rspec-rails. There are a number
# of tools you can use to make these specs even more expressive, but we're
# sticking to rails and rspec-rails APIs to keep things simple and stable.
#
# Compared to earlier versions of this generator, there is very limited use of
# stubs and message expectations in this spec. Stubs are only used when there
# is no simpler way to get a handle on the object needed for the example.
# Message expectations are only used when there is no simpler way to specify
# that an instance is receiving a specific message.
RSpec.describe MappingsController, type: :controller do
# This should return the minimal set of attributes required to create a valid
# Mapping. As you add validations to Mapping, be sure to
# adjust the attributes here as well.
let(:valid_attributes) do
skip('Add a hash of attributes valid for your model')
end
let(:invalid_attributes) do
skip('Add a hash of attributes invalid for your model')
end
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# MappingsController. Be sure to keep this updated too.
let(:valid_session) { {} }
describe 'GET #index' do
it 'assigns all mappings as @mappings' do
mapping = Mapping.create! valid_attributes
get :index, {}, valid_session
expect(assigns(:mappings)).to eq([mapping])
end
end
describe 'GET #show' do
it 'assigns the requested mapping as @mapping' do
mapping = Mapping.create! valid_attributes
get :show, { id: mapping.to_param }, valid_session
expect(assigns(:mapping)).to eq(mapping)
end
end
describe 'GET #edit' do
it 'assigns the requested mapping as @mapping' do
mapping = Mapping.create! valid_attributes
get :edit, { id: mapping.to_param }, valid_session
expect(assigns(:mapping)).to eq(mapping)
end
end
describe 'POST #create' do
context 'with valid params' do
it 'creates a new Mapping' do
expect do
post :create, { mapping: valid_attributes }, valid_session
end.to change(Mapping, :count).by(1)
end
it 'assigns a newly created mapping as @mapping' do
post :create, { mapping: valid_attributes }, valid_session
expect(assigns(:mapping)).to be_a(Mapping)
expect(assigns(:mapping)).to be_persisted
end
it 'redirects to the created mapping' do
post :create, { mapping: valid_attributes }, valid_session
expect(response).to redirect_to(Mapping.last)
end
end
context 'with invalid params' do
it 'assigns a newly created but unsaved mapping as @mapping' do
post :create, { mapping: invalid_attributes }, valid_session
expect(assigns(:mapping)).to be_a_new(Mapping)
end
it "re-renders the 'new' template" do
post :create, { mapping: invalid_attributes }, valid_session
expect(response).to render_template('new')
end
end
end
describe 'PUT #update' do
context 'with valid params' do
let(:new_attributes) do
skip('Add a hash of attributes valid for your model')
end
it 'updates the requested mapping' do
mapping = Mapping.create! valid_attributes
put :update,
{ id: mapping.to_param, mapping: new_attributes },
valid_session
mapping.reload
skip('Add assertions for updated state')
end
it 'assigns the requested mapping as @mapping' do
mapping = Mapping.create! valid_attributes
put :update,
{ id: mapping.to_param, mapping: valid_attributes },
valid_session
expect(assigns(:mapping)).to eq(mapping)
end
it 'redirects to the mapping' do
mapping = Mapping.create! valid_attributes
put :update,
{ id: mapping.to_param, mapping: valid_attributes },
valid_session
expect(response).to redirect_to(mapping)
end
end
context 'with invalid params' do
it 'assigns the mapping as @mapping' do
mapping = Mapping.create! valid_attributes
put :update,
{ id: mapping.to_param, mapping: invalid_attributes },
valid_session
expect(assigns(:mapping)).to eq(mapping)
end
it "re-renders the 'edit' template" do
mapping = Mapping.create! valid_attributes
put :update,
{ id: mapping.to_param, mapping: invalid_attributes },
valid_session
expect(response).to render_template('edit')
end
end
end
describe 'DELETE #destroy' do
it 'destroys the requested mapping' do
mapping = Mapping.create! valid_attributes
expect do
delete :destroy, { id: mapping.to_param }, valid_session
end.to change(Mapping, :count).by(-1)
end
it 'redirects to the mappings list' do
mapping = Mapping.create! valid_attributes
delete :destroy, { id: mapping.to_param }, valid_session
expect(response).to redirect_to(mappings_url)
end
end
end

View file

@ -0,0 +1,160 @@
require 'rails_helper'
# This spec was generated by rspec-rails when you ran the scaffold generator.
# It demonstrates how one might use RSpec to specify the controller code that
# was generated by Rails when you ran the scaffold generator.
#
# It assumes that the implementation code is generated by the rails scaffold
# generator. If you are using any extension libraries to generate different
# controller code, this generated spec may or may not pass.
#
# It only uses APIs available in rails and/or rspec-rails. There are a number
# of tools you can use to make these specs even more expressive, but we're
# sticking to rails and rspec-rails APIs to keep things simple and stable.
#
# Compared to earlier versions of this generator, there is very limited use of
# stubs and message expectations in this spec. Stubs are only used when there
# is no simpler way to get a handle on the object needed for the example.
# Message expectations are only used when there is no simpler way to specify
# that an instance is receiving a specific message.
RSpec.describe MapsController, type: :controller do
# This should return the minimal set of attributes required to create a valid
# Map. As you add validations to Map, be sure to
# adjust the attributes here as well.
let(:valid_attributes) do
skip('Add a hash of attributes valid for your model')
end
let(:invalid_attributes) do
skip('Add a hash of attributes invalid for your model')
end
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# MapsController. Be sure to keep this updated too.
let(:valid_session) { {} }
describe 'GET #index' do
it 'assigns all maps as @maps' do
map = Map.create! valid_attributes
get :index, {}, valid_session
expect(assigns(:maps)).to eq([map])
end
end
describe 'GET #show' do
it 'assigns the requested map as @map' do
map = Map.create! valid_attributes
get :show, { id: map.to_param }, valid_session
expect(assigns(:map)).to eq(map)
end
end
describe 'GET #edit' do
it 'assigns the requested map as @map' do
map = Map.create! valid_attributes
get :edit, { id: map.to_param }, valid_session
expect(assigns(:map)).to eq(map)
end
end
describe 'POST #create' do
context 'with valid params' do
it 'creates a new Map' do
expect do
post :create, { map: valid_attributes }, valid_session
end.to change(Map, :count).by(1)
end
it 'assigns a newly created map as @map' do
post :create, { map: valid_attributes }, valid_session
expect(assigns(:map)).to be_a(Map)
expect(assigns(:map)).to be_persisted
end
it 'redirects to the created map' do
post :create, { map: valid_attributes }, valid_session
expect(response).to redirect_to(Map.last)
end
end
context 'with invalid params' do
it 'assigns a newly created but unsaved map as @map' do
post :create, { map: invalid_attributes }, valid_session
expect(assigns(:map)).to be_a_new(Map)
end
it "re-renders the 'new' template" do
post :create, { map: invalid_attributes }, valid_session
expect(response).to render_template('new')
end
end
end
describe 'PUT #update' do
context 'with valid params' do
let(:new_attributes) do
skip('Add a hash of attributes valid for your model')
end
it 'updates the requested map' do
map = Map.create! valid_attributes
put :update,
{ id: map.to_param, map: new_attributes },
valid_session
map.reload
skip('Add assertions for updated state')
end
it 'assigns the requested map as @map' do
map = Map.create! valid_attributes
put :update,
{ id: map.to_param, map: valid_attributes },
valid_session
expect(assigns(:map)).to eq(map)
end
it 'redirects to the map' do
map = Map.create! valid_attributes
put :update,
{ id: map.to_param, map: valid_attributes },
valid_session
expect(response).to redirect_to(map)
end
end
context 'with invalid params' do
it 'assigns the map as @map' do
map = Map.create! valid_attributes
put :update,
{ id: map.to_param, map: invalid_attributes },
valid_session
expect(assigns(:map)).to eq(map)
end
it "re-renders the 'edit' template" do
map = Map.create! valid_attributes
put :update,
{ id: map.to_param, map: invalid_attributes },
valid_session
expect(response).to render_template('edit')
end
end
end
describe 'DELETE #destroy' do
it 'destroys the requested map' do
map = Map.create! valid_attributes
expect do
delete :destroy, { id: map.to_param }, valid_session
end.to change(Map, :count).by(-1)
end
it 'redirects to the maps list' do
map = Map.create! valid_attributes
delete :destroy, { id: map.to_param }, valid_session
expect(response).to redirect_to(maps_url)
end
end
end

View file

@ -0,0 +1,172 @@
require 'rails_helper'
# This spec was generated by rspec-rails when you ran the scaffold generator.
# It demonstrates how one might use RSpec to specify the controller code that
# was generated by Rails when you ran the scaffold generator.
#
# It assumes that the implementation code is generated by the rails scaffold
# generator. If you are using any extension libraries to generate different
# controller code, this generated spec may or may not pass.
#
# It only uses APIs available in rails and/or rspec-rails. There are a number
# of tools you can use to make these specs even more expressive, but we're
# sticking to rails and rspec-rails APIs to keep things simple and stable.
#
# Compared to earlier versions of this generator, there is very limited use of
# stubs and message expectations in this spec. Stubs are only used when there
# is no simpler way to get a handle on the object needed for the example.
# Message expectations are only used when there is no simpler way to specify
# that an instance is receiving a specific message.
RSpec.describe MetacodesController, type: :controller do
before :each do
@user = create(:user, admin: true)
sign_in @user
end
# This should return the minimal set of attributes required to create a valid
# Metacode. As you add validations to Metacode, be sure to
# adjust the attributes here as well.
let(:valid_attributes) do
skip('Add a hash of attributes valid for your model')
end
let(:invalid_attributes) do
skip('Add a hash of attributes invalid for your model')
end
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# MetacodesController. Be sure to keep this updated too.
let(:valid_session) { {} }
describe 'GET #index' do
it 'assigns all metacodes as @metacodes' do
metacode = Metacode.create! valid_attributes
get :index, {}, valid_session
expect(assigns(:metacodes)).to eq([metacode])
end
end
describe 'GET #show' do
it 'assigns the requested metacode as @metacode' do
metacode = Metacode.create! valid_attributes
get :show, { id: metacode.to_param }, valid_session
expect(assigns(:metacode)).to eq(metacode)
end
end
describe 'GET #new' do
it 'assigns a new metacode as @metacode' do
get :new, {}, valid_session
expect(assigns(:metacode)).to be_a_new(Metacode)
end
end
describe 'GET #edit' do
it 'assigns the requested metacode as @metacode' do
metacode = Metacode.create! valid_attributes
get :edit, { id: metacode.to_param }, valid_session
expect(assigns(:metacode)).to eq(metacode)
end
end
describe 'POST #create' do
context 'with valid params' do
it 'creates a new Metacode' do
expect do
post :create, { metacode: valid_attributes }, valid_session
end.to change(Metacode, :count).by(1)
end
it 'assigns a newly created metacode as @metacode' do
post :create, { metacode: valid_attributes }, valid_session
expect(assigns(:metacode)).to be_a(Metacode)
expect(assigns(:metacode)).to be_persisted
end
it 'redirects to the created metacode' do
post :create, { metacode: valid_attributes }, valid_session
expect(response).to redirect_to(Metacode.last)
end
end
context 'with invalid params' do
it 'assigns a newly created but unsaved metacode as @metacode' do
post :create, { metacode: invalid_attributes }, valid_session
expect(assigns(:metacode)).to be_a_new(Metacode)
end
it "re-renders the 'new' template" do
post :create, { metacode: invalid_attributes }, valid_session
expect(response).to render_template('new')
end
end
end
describe 'PUT #update' do
context 'with valid params' do
let(:new_attributes) do
skip('Add a hash of attributes valid for your model')
end
it 'updates the requested metacode' do
metacode = Metacode.create! valid_attributes
put :update,
{ id: metacode.to_param, metacode: new_attributes },
valid_session
metacode.reload
skip('Add assertions for updated state')
end
it 'assigns the requested metacode as @metacode' do
metacode = Metacode.create! valid_attributes
put :update,
{ id: metacode.to_param, metacode: valid_attributes },
valid_session
expect(assigns(:metacode)).to eq(metacode)
end
it 'redirects to the metacode' do
metacode = Metacode.create! valid_attributes
put :update,
{ id: metacode.to_param, metacode: valid_attributes },
valid_session
expect(response).to redirect_to(metacode)
end
end
context 'with invalid params' do
it 'assigns the metacode as @metacode' do
metacode = Metacode.create! valid_attributes
put :update,
{ id: metacode.to_param, metacode: invalid_attributes },
valid_session
expect(assigns(:metacode)).to eq(metacode)
end
it "re-renders the 'edit' template" do
metacode = Metacode.create! valid_attributes
put :update,
{ id: metacode.to_param, metacode: invalid_attributes },
valid_session
expect(response).to render_template('edit')
end
end
end
describe 'DELETE #destroy' do
it 'destroys the requested metacode' do
metacode = Metacode.create! valid_attributes
expect do
delete :destroy, { id: metacode.to_param }, valid_session
end.to change(Metacode, :count).by(-1)
end
it 'redirects to the metacodes list' do
metacode = Metacode.create! valid_attributes
delete :destroy, { id: metacode.to_param }, valid_session
expect(response).to redirect_to(metacodes_url)
end
end
end

View file

@ -0,0 +1,160 @@
require 'rails_helper'
# This spec was generated by rspec-rails when you ran the scaffold generator.
# It demonstrates how one might use RSpec to specify the controller code that
# was generated by Rails when you ran the scaffold generator.
#
# It assumes that the implementation code is generated by the rails scaffold
# generator. If you are using any extension libraries to generate different
# controller code, this generated spec may or may not pass.
#
# It only uses APIs available in rails and/or rspec-rails. There are a number
# of tools you can use to make these specs even more expressive, but we're
# sticking to rails and rspec-rails APIs to keep things simple and stable.
#
# Compared to earlier versions of this generator, there is very limited use of
# stubs and message expectations in this spec. Stubs are only used when there
# is no simpler way to get a handle on the object needed for the example.
# Message expectations are only used when there is no simpler way to specify
# that an instance is receiving a specific message.
RSpec.describe SynapsesController, type: :controller do
# This should return the minimal set of attributes required to create a valid
# Synapse. As you add validations to Synapse, be sure to
# adjust the attributes here as well.
let(:valid_attributes) do
skip('Add a hash of attributes valid for your model')
end
let(:invalid_attributes) do
skip('Add a hash of attributes invalid for your model')
end
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# SynapsesController. Be sure to keep this updated too.
let(:valid_session) { {} }
describe 'GET #index' do
it 'assigns all synapses as @synapses' do
synapse = Synapse.create! valid_attributes
get :index, {}, valid_session
expect(assigns(:synapses)).to eq([synapse])
end
end
describe 'GET #show' do
it 'assigns the requested synapse as @synapse' do
synapse = Synapse.create! valid_attributes
get :show, { id: synapse.to_param }, valid_session
expect(assigns(:synapse)).to eq(synapse)
end
end
describe 'GET #edit' do
it 'assigns the requested synapse as @synapse' do
synapse = Synapse.create! valid_attributes
get :edit, { id: synapse.to_param }, valid_session
expect(assigns(:synapse)).to eq(synapse)
end
end
describe 'POST #create' do
context 'with valid params' do
it 'creates a new Synapse' do
expect do
post :create, { synapse: valid_attributes }, valid_session
end.to change(Synapse, :count).by(1)
end
it 'assigns a newly created synapse as @synapse' do
post :create, { synapse: valid_attributes }, valid_session
expect(assigns(:synapse)).to be_a(Synapse)
expect(assigns(:synapse)).to be_persisted
end
it 'redirects to the created synapse' do
post :create, { synapse: valid_attributes }, valid_session
expect(response).to redirect_to(Synapse.last)
end
end
context 'with invalid params' do
it 'assigns a newly created but unsaved synapse as @synapse' do
post :create, { synapse: invalid_attributes }, valid_session
expect(assigns(:synapse)).to be_a_new(Synapse)
end
it "re-renders the 'new' template" do
post :create, { synapse: invalid_attributes }, valid_session
expect(response).to render_template('new')
end
end
end
describe 'PUT #update' do
context 'with valid params' do
let(:new_attributes) do
skip('Add a hash of attributes valid for your model')
end
it 'updates the requested synapse' do
synapse = Synapse.create! valid_attributes
put :update,
{ id: synapse.to_param, synapse: new_attributes },
valid_session
synapse.reload
skip('Add assertions for updated state')
end
it 'assigns the requested synapse as @synapse' do
synapse = Synapse.create! valid_attributes
put :update,
{ id: synapse.to_param, synapse: valid_attributes },
valid_session
expect(assigns(:synapse)).to eq(synapse)
end
it 'redirects to the synapse' do
synapse = Synapse.create! valid_attributes
put :update,
{ id: synapse.to_param, synapse: valid_attributes },
valid_session
expect(response).to redirect_to(synapse)
end
end
context 'with invalid params' do
it 'assigns the synapse as @synapse' do
synapse = Synapse.create! valid_attributes
put :update,
{ id: synapse.to_param, synapse: invalid_attributes },
valid_session
expect(assigns(:synapse)).to eq(synapse)
end
it "re-renders the 'edit' template" do
synapse = Synapse.create! valid_attributes
put :update,
{ id: synapse.to_param, synapse: invalid_attributes },
valid_session
expect(response).to render_template('edit')
end
end
end
describe 'DELETE #destroy' do
it 'destroys the requested synapse' do
synapse = Synapse.create! valid_attributes
expect do
delete :destroy, { id: synapse.to_param }, valid_session
end.to change(Synapse, :count).by(-1)
end
it 'redirects to the synapses list' do
synapse = Synapse.create! valid_attributes
delete :destroy, { id: synapse.to_param }, valid_session
expect(response).to redirect_to(synapses_url)
end
end
end

View file

@ -0,0 +1,136 @@
require 'rails_helper'
RSpec.describe TopicsController, type: :controller do
let(:valid_attributes) do
skip('Add a hash of attributes valid for your model')
end
let(:invalid_attributes) do
skip('Add a hash of attributes invalid for your model')
end
let(:valid_session) { {} }
describe 'GET #index' do
it 'assigns all topics as @topics' do
topic = Topic.create! valid_attributes
get :index, {}, valid_session
expect(assigns(:topics)).to eq([topic])
end
end
describe 'GET #show' do
it 'assigns the requested topic as @topic' do
topic = Topic.create! valid_attributes
get :show, { id: topic.to_param }, valid_session
expect(assigns(:topic)).to eq(topic)
end
end
describe 'GET #edit' do
it 'assigns the requested topic as @topic' do
topic = Topic.create! valid_attributes
get :edit, { id: topic.to_param }, valid_session
expect(assigns(:topic)).to eq(topic)
end
end
describe 'POST #create' do
context 'with valid params' do
it 'creates a new Topic' do
expect do
post :create, { topic: valid_attributes }, valid_session
end.to change(Topic, :count).by(1)
end
it 'assigns a newly created topic as @topic' do
post :create, { topic: valid_attributes }, valid_session
expect(assigns(:topic)).to be_a(Topic)
expect(assigns(:topic)).to be_persisted
end
it 'redirects to the created topic' do
post :create, { topic: valid_attributes }, valid_session
expect(response).to redirect_to(Topic.last)
end
end
context 'with invalid params' do
it 'assigns a newly created but unsaved topic as @topic' do
post :create, { topic: invalid_attributes }, valid_session
expect(assigns(:topic)).to be_a_new(Topic)
end
it "re-renders the 'new' template" do
post :create, { topic: invalid_attributes }, valid_session
expect(response).to render_template('new')
end
end
end
describe 'PUT #update' do
context 'with valid params' do
let(:new_attributes) do
skip('Add a hash of attributes valid for your model')
end
it 'updates the requested topic' do
topic = Topic.create! valid_attributes
put :update,
{ id: topic.to_param, topic: new_attributes },
valid_session
topic.reload
skip('Add assertions for updated state')
end
it 'assigns the requested topic as @topic' do
topic = Topic.create! valid_attributes
put :update,
{ id: topic.to_param, topic: valid_attributes },
valid_session
expect(assigns(:topic)).to eq(topic)
end
it 'redirects to the topic' do
topic = Topic.create! valid_attributes
put :update,
{ id: topic.to_param, topic: valid_attributes },
valid_session
expect(response).to redirect_to(topic)
end
end
context 'with invalid params' do
it 'assigns the topic as @topic' do
topic = Topic.create! valid_attributes
put :update,
{ id: topic.to_param, topic: invalid_attributes },
valid_session
expect(assigns(:topic)).to eq(topic)
end
it "re-renders the 'edit' template" do
topic = Topic.create! valid_attributes
put :update,
{ id: topic.to_param, topic: invalid_attributes },
valid_session
expect(response).to render_template('edit')
end
end
end
describe 'DELETE #destroy' do
it 'destroys the requested topic' do
topic = Topic.create! valid_attributes
expect do
delete :destroy, { id: topic.to_param }, valid_session
end.to change(Topic, :count).by(-1)
end
it 'redirects to the topics list' do
topic = Topic.create! valid_attributes
delete :destroy, { id: topic.to_param }, valid_session
expect(response).to redirect_to(topics_url)
end
end
end

8
spec/factories/maps.rb Normal file
View file

@ -0,0 +1,8 @@
FactoryGirl.define do
factory :map do
sequence(:name) { |n| "Cool Map ##{n}" }
permission :commons
arranged { false }
user
end
end

View file

@ -0,0 +1,4 @@
FactoryGirl.define do
factory :metacode do
end
end

View file

@ -0,0 +1,9 @@
FactoryGirl.define do
factory :synapse do
sequence(:desc) { |n| "Cool synapse ##{n}" }
category :to
permission :commons
association :topic1, factory: :topic
association :topic2, factory: :topic
end
end

8
spec/factories/topics.rb Normal file
View file

@ -0,0 +1,8 @@
FactoryGirl.define do
factory :topic do
sequence(:name) { |n| "Cool Topic ##{n}" }
permission :commons
user
metacode
end
end

29
spec/factories/users.rb Normal file
View file

@ -0,0 +1,29 @@
#
# This file supports three factories, because code and joinedwithcode
# make things complicated!
#
# Generally, use :simple_user to generate users. It's simplest.
#
# If you want to test code generation, or need a setup with users that
# have actual codes, you'll need to specify one simple_user and then you
# can specify other :code_user users based on the pre-existing user's code.
FactoryGirl.define do
factory :code_user, class: User do
sequence(:name) { |n| "Cool User ##{n}" }
sequence(:email) { |n| "cooluser#{n}@cooldomain.com" }
password 'omgwtfbbq'
factory :simple_user, aliases: [:user] do
joinedwithcode { "qwertyui" }
code { "qwertyui" }
transient do
validate false
end
# bypass validation of the joinedwithcode
to_create { |instance| instance.save(validate: instance.validate) }
end
end
end

38
spec/models/map_spec.rb Normal file
View file

@ -0,0 +1,38 @@
require 'rails_helper'
RSpec.describe Map, type: :model do
it { is_expected.to belong_to :user }
it { is_expected.to validate_presence_of :name }
it { is_expected.to validate_presence_of :permission }
it { is_expected.to validate_inclusion_of(:permission).in_array Perm::ISSIONS.map(&:to_s) }
context 'permissions' do
let(:owner) { create :user }
let(:other_user) { create :user }
let(:map) { create :map, user: owner, permission: :commons }
let(:private_map) { create :map, user: owner, permission: :private }
let(:public_map) { create :map, user: owner, permission: :public }
it 'prevents deletion by non-owner' do
expect(map.authorize_to_delete(other_user)).to eq false
expect(map.authorize_to_delete(owner)).to eq map
end
it 'prevents visibility if private' do
expect(map.authorize_to_show(other_user)).to eq map
expect(map.authorize_to_show(owner)).to eq map
expect(private_map.authorize_to_show(owner)).to eq private_map
expect(private_map.authorize_to_show(other_user)).to eq false
end
it 'only allows editing if commons or owned' do
expect(map.authorize_to_edit(other_user)).to eq map
expect(map.authorize_to_edit(owner)).to eq map
expect(private_map.authorize_to_edit(other_user)).to eq false
expect(private_map.authorize_to_edit(owner)).to eq private_map
expect(public_map.authorize_to_edit(other_user)).to eq false
expect(public_map.authorize_to_edit(owner)).to eq public_map
end
end
end

View file

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe Mapping, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end

View file

@ -0,0 +1,6 @@
require 'rails_helper'
RSpec.describe Metacode, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
it { is_expected.to have_many(:topics) }
end

View file

@ -0,0 +1,41 @@
require 'rails_helper'
RSpec.describe Synapse, type: :model do
it { is_expected.to belong_to :user }
it { is_expected.to belong_to :topic1 }
it { is_expected.to belong_to :topic2 }
it { is_expected.to have_many :maps }
it { is_expected.to have_many :mappings }
it { is_expected.to validate_presence_of :permission }
it { is_expected.to validate_inclusion_of(:permission).in_array Perm::ISSIONS.map(&:to_s) }
it { is_expected.to validate_length_of(:desc).is_at_least(0) } # TODO don't allow nil
context 'permissions' do
let(:owner) { create :user }
let(:other_user) { create :user }
let(:synapse) { create :synapse, user: owner, permission: :commons }
let(:private_synapse) { create :synapse, user: owner, permission: :private }
let(:public_synapse) { create :synapse, user: owner, permission: :public }
it 'prevents deletion by non-owner' do
expect(synapse.authorize_to_delete(other_user)).to eq false
expect(synapse.authorize_to_delete(owner)).to eq synapse
end
it 'prevents visibility if private' do
expect(synapse.authorize_to_show(other_user)).to eq synapse
expect(synapse.authorize_to_show(owner)).to eq synapse
expect(private_synapse.authorize_to_show(owner)).to eq private_synapse
expect(private_synapse.authorize_to_show(other_user)).to eq false
end
it 'only allows editing if commons or owned' do
expect(synapse.authorize_to_edit(other_user)).to eq synapse
expect(synapse.authorize_to_edit(owner)).to eq synapse
expect(private_synapse.authorize_to_edit(other_user)).to eq false
expect(private_synapse.authorize_to_edit(owner)).to eq private_synapse
expect(public_synapse.authorize_to_edit(other_user)).to eq false
expect(public_synapse.authorize_to_edit(owner)).to eq public_synapse
end
end
end

81
spec/models/topic_spec.rb Normal file
View file

@ -0,0 +1,81 @@
require 'rails_helper'
RSpec.describe Topic, type: :model do
it { is_expected.to belong_to :user }
it { is_expected.to belong_to :metacode }
it { is_expected.to have_many :maps }
it { is_expected.to have_many :mappings }
it { is_expected.to validate_presence_of :permission }
it { is_expected.to validate_inclusion_of(:permission).in_array Perm::ISSIONS.map(&:to_s) }
context 'has_viewable_synapses function' do
let (:user) { create(:user) }
let (:other_user) { create(:user) }
context 'topic with no synapses' do
let (:topic) { create(:topic) }
it 'returns false' do
expect(topic.has_viewable_synapses(user)).to eq false
end
end
context 'topic with one unpermitted synapse' do
let (:synapse) { create(:synapse, permission: :private, user: other_user) }
let (:topic) { create(:topic, synapses1: [synapse]) }
it 'returns false' do
expect(topic.has_viewable_synapses(user)).to eq false
end
end
context 'topic with one permitted synapse' do
let (:synapse) { create(:synapse, permission: :private, user: user) }
let(:topic) { create(:topic, synapses1: [synapse]) }
it 'returns true' do
expect(topic.has_viewable_synapses(user)).to eq true
end
end
context 'topic with one unpermitted, one permitted synapse' do
let (:synapse1) { create(:synapse, permission: :private, user: other_user) }
let (:synapse2) { create(:synapse, permission: :private, user: user) }
let (:topic) { create(:topic, synapses1: [synapse1, synapse2]) }
it 'returns true' do
expect(topic.synapses.count).to eq 2
expect(topic.has_viewable_synapses(user)).to eq true
end
end
end
context 'permssions' do
let(:owner) { create :user }
let(:other_user) { create :user }
let(:topic) { create :topic, user: owner, permission: :commons }
let(:private_topic) { create :topic, user: owner, permission: :private }
let(:public_topic) { create :topic, user: owner, permission: :public }
it 'prevents deletion by non-owner' do
expect(topic.authorize_to_delete(other_user)).to eq false
expect(topic.authorize_to_delete(owner)).to eq topic
end
it 'prevents visibility if private' do
expect(topic.authorize_to_show(other_user)).to eq topic
expect(topic.authorize_to_show(owner)).to eq topic
expect(private_topic.authorize_to_show(owner)).to eq private_topic
expect(private_topic.authorize_to_show(other_user)).to eq false
end
it 'only allows editing if commons or owned' do
expect(topic.authorize_to_edit(other_user)).to eq topic
expect(topic.authorize_to_edit(owner)).to eq topic
expect(private_topic.authorize_to_edit(other_user)).to eq false
expect(private_topic.authorize_to_edit(owner)).to eq private_topic
expect(public_topic.authorize_to_edit(other_user)).to eq false
expect(public_topic.authorize_to_edit(owner)).to eq public_topic
end
end
end

45
spec/rails_helper.rb Normal file
View file

@ -0,0 +1,45 @@
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
# Prevent database truncation if the environment is production
if Rails.env.production?
abort('The Rails environment is running in production mode!')
end
require 'spec_helper'
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# require all support files
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
config.include Devise::TestHelpers, type: :controller
config.include ControllerHelpers, type: :controller
config.include Shoulda::Matchers::ActiveModel, type: :model
config.include Shoulda::Matchers::ActiveRecord, type: :model
end

9
spec/spec_helper.rb Normal file
View file

@ -0,0 +1,9 @@
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end

View file

@ -0,0 +1,17 @@
# https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs
module ControllerHelpers
# rubocop:disable Metrics/AbcSize
def sign_in(user = create(:user))
if user.nil? # simulate unauthenticated
allow(request.env['warden']).to(
receive(:authenticate!).and_throw(:warden, scope: :user)
)
else # simulate authenticated
allow(request.env['warden']).to(
receive(:authenticate!).and_return(user)
)
end
allow(controller).to receive(:current_user).and_return(user)
end
# rubocop:enable Metrics/AbcSize
end

View file

@ -0,0 +1,4 @@
# lets you type create(:user) instead of FactoryGirl.create(:user)
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
end

View file

View file

@ -1,9 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
#one:
# metacode:
# metacode_set:
#two:
# metacode:
# metacode_set:

View file

@ -1,11 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
#one: {}
# column: value
#
#two: {}
# column: value

View file

@ -1,13 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
#one:
# name: MyString
# desc: MyText
# user:
# mapperContributed: false
#two:
# name: MyString
# desc: MyText
# user:
# mapperContributed: false

View file

@ -1,240 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
one:
name: Action
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_action.png
color: #BD6C85
two:
name: Activity
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_activity.png
color: #6EBF65
three:
name: Catalyst
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_catalyst.png
color: #EF8964
four:
name: Closed
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_closedissue.png
color: #ABB49F
five:
name: Process
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_process.png
color: #BDB25E
six:
name: Future Dev
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_futuredev.png
color: #25A17F
seven:
name: Group
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_group.png
color: #7076BC
eight:
name: Implication
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_implication.png
color: #83DECA
nine:
name: Insight
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_insight.png
color: #B074AD
ten:
name: Intention
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_intention.png
color: #BAEAFF
eleven:
name: Knowledge
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_knowledge.png
color: #60ACF7
twelve:
name: Location
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_location.png
color: #ABD9A7
thirteen:
name: Need
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_need.png
color: #D2A7D4
fourteen:
name: Open Issue
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_openissue.png
color: #9BBF71
fifteen:
name: Opportunity
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_opportunity.png
color: #889F64
sixteen:
name: Person
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_person.png
color: #DE925F
seventeen:
name: Platform
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_platform.png
color: #21C8FE
eighteen:
name: Problem
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_problem.png
color: #99CFC4
nineteen:
name: Resource
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_resource.png
color: #C98C63
twenty:
name: Role
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_role.png
color: #A8595D
twenty-one:
name: Task
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_task.png
color: #3397C4
twenty-two:
name: Trajectory
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/blueprint/96px/bp_trajectory.png
color: #D3AA4C
twenty-three:
name: Argument
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_argument.png
color: #7FAEFD
twenty-four:
name: Con
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_con.png
color: #CF7C74
twenty-five:
name: Subject
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_subject.png
color: #8293D8
twenty-six:
name: Decision
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_decision.png
color: #CCA866
twenty-seven:
name: Event
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_event.png
color: #F5854B
twenty-eight:
name: Example
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_example.png
color: #618C61
twenty-nine:
name: Experience
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_experience.png
color: #BE995F
thirty:
name: Feedback
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_feedback.png
color: #54A19D
thirty-one:
name: Aim
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_aim.png
color: #B0B0B0
thirty-two:
name: Good Practice
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_goodpractice.png
color: #BD9E86
thirty-three:
name: Idea
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_idea.png
color: #C4BC5E
thirty-four:
name: List
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_list.png
color: #B7A499
thirty-five:
name: Media
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_media.png
color: #6D94CC
thirty-six:
name: Metamap
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_metamap.png
color: #AEA9FD
thirty-seven:
name: Model
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_model.png
color: #B385BA
thirty-eight:
name: Note
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_note.png
color: #A389A1
thirty-nine:
name: Perspective
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_perspective.png
color: #2EB6CC
forty:
name: Pro
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_pro.png
color: #89B879
forty-one:
name: Project
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_project.png
color: #85A050
forty-two:
name: Question
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_question.png
color: #5CB3B3
forty-three:
name: Reference
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_reference.png
color: #A7A7A7
forty-four:
name: Research
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_research.png
color: #CD8E89
forty-five:
name: Status update
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_status.png
color: #EFA7C0
forty-six:
name: Tool
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_tool.png
color: #828282
forty-seven:
name: Wildcard
icon: https://s3.amazonaws.com/metamaps-assets/metacodes/generics/96px/gen_wildcard.png
color: #73C7DE

View file

@ -1,11 +0,0 @@
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
# This model initially had no columns defined. If you add columns to the
# model remove the '{}' from the fixture names and add the columns immediately
# below each fixture, per the syntax in the comments below
#
#one: {}
# column: value
#
#two: {}
# column: value

View file

@ -1,17 +0,0 @@
#password: toolsplusconsciousness
user:
name: user
email: user@user.com
encrypted_password: $2a$10$psR68SWYNy5ZKQPs9FrFM.HuRMrTXO/YFzv.HaUmdCsQZsQrG1XAW
code: qwertyui
joinedwithcode: qwertyui
admin: false
admin:
name: admin
email: admin@admin.com
encrypted_password: $2a$10$psR68SWYNy5ZKQPs9FrFM.HuRMrTXO/YFzv.HaUmdCsQZsQrG1XAW
code: iuytrewq
joinedwithcode: iuytrewq
admin: true

View file

@ -1,49 +0,0 @@
require 'test_helper'
class InMetacodeSetsControllerTest < ActionController::TestCase
setup do
@in_metacode_set = in_metacode_sets(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:in_metacode_sets)
end
test "should get new" do
get :new
assert_response :success
end
test "should create in_metacode_set" do
assert_difference('InMetacodeSet.count') do
post :create, in_metacode_set: { }
end
assert_redirected_to in_metacode_set_path(assigns(:in_metacode_set))
end
test "should show in_metacode_set" do
get :show, id: @in_metacode_set
assert_response :success
end
test "should get edit" do
get :edit, id: @in_metacode_set
assert_response :success
end
test "should update in_metacode_set" do
put :update, id: @in_metacode_set, in_metacode_set: { }
assert_redirected_to in_metacode_set_path(assigns(:in_metacode_set))
end
test "should destroy in_metacode_set" do
assert_difference('InMetacodeSet.count', -1) do
delete :destroy, id: @in_metacode_set
end
assert_redirected_to in_metacode_sets_path
end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class MainControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,9 +0,0 @@
require 'test_helper'
class MappingControllerTest < ActionController::TestCase
test "should get new" do
get :new
assert_response :success
end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class MapsControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,49 +0,0 @@
require 'test_helper'
class MetacodeSetsControllerTest < ActionController::TestCase
setup do
@metacode_set = metacode_sets(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:metacode_sets)
end
test "should get new" do
get :new
assert_response :success
end
test "should create metacode_set" do
assert_difference('MetacodeSet.count') do
post :create, metacode_set: { desc: @metacode_set.desc, mapperContributed: @metacode_set.mapperContributed, name: @metacode_set.name }
end
assert_redirected_to metacode_set_path(assigns(:metacode_set))
end
test "should show metacode_set" do
get :show, id: @metacode_set
assert_response :success
end
test "should get edit" do
get :edit, id: @metacode_set
assert_response :success
end
test "should update metacode_set" do
put :update, id: @metacode_set, metacode_set: { desc: @metacode_set.desc, mapperContributed: @metacode_set.mapperContributed, name: @metacode_set.name }
assert_redirected_to metacode_set_path(assigns(:metacode_set))
end
test "should destroy metacode_set" do
assert_difference('MetacodeSet.count', -1) do
delete :destroy, id: @metacode_set
end
assert_redirected_to metacode_sets_path
end
end

View file

@ -1,49 +0,0 @@
require 'test_helper'
class MetacodesControllerTest < ActionController::TestCase
setup do
@metacode = metacodes(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:metacodes)
end
test "should get new" do
get :new
assert_response :success
end
test "should create metacode" do
assert_difference('Metacode.count') do
post :create, metacode: { icon: @metacode.icon, name: @metacode.name }
end
assert_redirected_to metacode_path(assigns(:metacode))
end
test "should show metacode" do
get :show, id: @metacode
assert_response :success
end
test "should get edit" do
get :edit, id: @metacode
assert_response :success
end
test "should update metacode" do
put :update, id: @metacode, metacode: { icon: @metacode.icon, name: @metacode.name }
assert_redirected_to metacode_path(assigns(:metacode))
end
test "should destroy metacode" do
assert_difference('Metacode.count', -1) do
delete :destroy, id: @metacode
end
assert_redirected_to metacodes_path
end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class SessionsControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class SynapsesControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class TopicsControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class UsersControllerTest < ActionController::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,12 +0,0 @@
require 'test_helper'
require 'rails/performance_test_help'
class BrowsingTest < ActionDispatch::PerformanceTest
# Refer to the documentation for all available options
# self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory]
# :output => 'tmp/performance', :formats => [:flat] }
def test_homepage
get '/'
end
end

View file

@ -1,13 +0,0 @@
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
fixtures :all
# Add more helper methods to be used by all tests here...
end

View file

View file

@ -1,4 +0,0 @@
require 'test_helper'
class InMetacodeSetsHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class MainHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class MappingHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class MapsHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class MetacodeSetsHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class MetacodesHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class SessionsHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class SynapsesHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class TopicsHelperTest < ActionView::TestCase
end

View file

@ -1,4 +0,0 @@
require 'test_helper'
class UsersHelperTest < ActionView::TestCase
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class InMetacodeSetTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class MapTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class MappingTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class MetacodeSetTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class MetacodeTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class SessionTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class SynapseTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class TopicTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View file

@ -1,7 +0,0 @@
require 'test_helper'
class UserTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end