From 1a32d2abd01ff93f2fe3f62e9e895466b8db318e Mon Sep 17 00:00:00 2001 From: Roberto Soares Date: Tue, 20 Aug 2013 14:28:57 -0300 Subject: [PATCH] replaced mongomapper with mongoid --- Gemfile | 9 ++++-- Gemfile.lock | 52 +++++++++++++++++++---------------- README.md | 2 +- environment.rb | 12 ++------ lib/foy_api.rb | 15 +++++----- lib/models/package.rb | 9 +++--- lib/models/package_system.rb | 9 ++++-- lib/models/project.rb | 14 ++++------ lib/models/project_package.rb | 7 +++-- mongoid.yml | 19 +++++++++++++ spec/factories.rb | 8 ++++-- spec/lib/foy_api_spec.rb | 18 ++++++------ spec/spec_helper.rb | 7 +++-- 13 files changed, 106 insertions(+), 75 deletions(-) create mode 100644 mongoid.yml diff --git a/Gemfile b/Gemfile index 2ca194b..71f28d0 100644 --- a/Gemfile +++ b/Gemfile @@ -2,12 +2,15 @@ source "https://rubygems.org" gem 'bson_ext' gem 'grape' -gem 'builder', '2.1.2' -gem 'mongo_mapper', git: 'https://github.com/mongomapper/mongomapper.git' - +gem 'mongoid', '~> 3.0.1' group :test, :development do gem 'rspec' + gem 'byebug' +end + +group :development do + gem 'foreman' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index 8608723..3aa6493 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,31 +1,31 @@ -GIT - remote: https://github.com/mongomapper/mongomapper.git - revision: 97ebe75eae4ba89ce536241460e0c49a782229e8 - specs: - mongo_mapper (0.13.0.beta2) - activemodel (>= 3.0.0) - activesupport (>= 3.0) - mongo (~> 1.8) - plucky (~> 0.6.5) - GEM remote: https://rubygems.org/ specs: - activemodel (3.0.20) - activesupport (= 3.0.20) - builder (~> 2.1.2) - i18n (~> 0.5.0) - activesupport (3.0.20) + activemodel (3.2.14) + activesupport (= 3.2.14) + builder (~> 3.0.0) + activesupport (3.2.14) + i18n (~> 0.6, >= 0.6.4) + multi_json (~> 1.0) backports (3.3.3) bson (1.9.1) bson_ext (1.9.1) bson (~> 1.9.1) - builder (2.1.2) + builder (3.0.4) + byebug (1.8.2) + columnize (~> 0.3.6) + debugger-linecache (~> 1.2.0) + columnize (0.3.6) database_cleaner (1.1.1) + debugger-linecache (1.2.0) descendants_tracker (0.0.1) diff-lcs (1.2.4) + dotenv (0.8.0) factory_girl (4.2.0) activesupport (>= 3.0.0) + foreman (0.63.0) + dotenv (>= 0.7) + thor (>= 0.13.6) grape (0.5.0) activesupport builder @@ -37,13 +37,16 @@ GEM rack-mount virtus hashie (2.0.5) - i18n (0.5.0) - mongo (1.9.1) - bson (~> 1.9.1) + i18n (0.6.5) + mongoid (3.0.23) + activemodel (~> 3.1) + moped (~> 1.2) + origin (~> 1.0) + tzinfo (~> 0.3.22) + moped (1.5.1) multi_json (1.7.9) multi_xml (0.5.5) - plucky (0.6.6) - mongo (~> 1.5) + origin (1.1.0) rack (1.5.2) rack-accept (0.4.5) rack (>= 0.4) @@ -59,6 +62,8 @@ GEM rspec-expectations (2.14.2) diff-lcs (>= 1.1.3, < 2.0) rspec-mocks (2.14.3) + thor (0.18.1) + tzinfo (0.3.37) virtus (0.5.5) backports (~> 3.3) descendants_tracker (~> 0.0.1) @@ -68,10 +73,11 @@ PLATFORMS DEPENDENCIES bson_ext - builder (= 2.1.2) + byebug database_cleaner factory_girl + foreman grape - mongo_mapper! + mongoid (~> 3.0.1) rack-test rspec diff --git a/README.md b/README.md index e712304..e7901f3 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -wip +wip2 diff --git a/environment.rb b/environment.rb index dda54c7..ad53acd 100644 --- a/environment.rb +++ b/environment.rb @@ -1,14 +1,6 @@ Bundler.setup :default, (ENV['RACK_ENV'] || 'development') -require 'mongo_mapper' - -mongo_uri = if ENV['MONGO_URI'] - #mongodb://[username:password@]host1[:port1] - "mongodb://#{ENV['MONGO_USER']}:#{ENV['MONGO_PASSWORD']}@#{ENV['MONGO_URI']}/#{ENV['MONGO_DATABASE_NAME']}" -else - 'mongodb://localhost/foy' -end - -MongoMapper.setup({ENV['RACK_ENV'] => {'uri' => mongo_uri}}, ENV['RACK_ENV']) +require 'mongoid' +Mongoid.load!("mongoid.yml") require_relative 'lib/foy_api' diff --git a/lib/foy_api.rb b/lib/foy_api.rb index c8bd5b7..be939df 100644 --- a/lib/foy_api.rb +++ b/lib/foy_api.rb @@ -18,8 +18,8 @@ class API < Grape::API end get ':id' do begin - Project.find!(params[:id]) - rescue MongoMapper::DocumentNotFound + Project.find_by(id: params[:id]) + rescue Mongoid::Errors::DocumentNotFound error! 'Not Found', 404 end end @@ -42,14 +42,13 @@ class API < Grape::API requires :packages, type: Array, desc: "List of packages" end put do - project = Project.find!(params[:project_id]) - package_system = PackageSystem.find_by_name!(params[:system]) + project = Project.find(params[:project_id]) + package_system = PackageSystem.find_by(name: params[:system]) params[:packages].each do |param_package| - package = package_system.packages.find_or_create_by_name(param_package[:name]) - project_package = project.project_packages.find_or_create_by_package_id(package.id) - project_package.version = param_package[:version] - project_package.save! + package = package_system.packages.find_or_create_by(name: param_package[:name]) + project_package = project.project_packages.find_or_create_by(package: package) + project_package.update_attributes!(version: param_package[:version]) end end end diff --git a/lib/models/package.rb b/lib/models/package.rb index 59ab140..26fa1ac 100644 --- a/lib/models/package.rb +++ b/lib/models/package.rb @@ -1,8 +1,9 @@ class Package - include MongoMapper::Document - key :name, String - key :version, String + include Mongoid::Document + store_in collection: :packages + field :name, type: String + field :version, type: String - many :project_packages belongs_to :package_system + has_many :project_packages end diff --git a/lib/models/package_system.rb b/lib/models/package_system.rb index e732b42..abd0556 100644 --- a/lib/models/package_system.rb +++ b/lib/models/package_system.rb @@ -1,6 +1,9 @@ class PackageSystem - include MongoMapper::Document - key :name, String + include Mongoid::Document + field :name, type: String + store_in collection: :package_systems - many :packages + #validates_uniqueness_of :name + + has_many :packages end diff --git a/lib/models/project.rb b/lib/models/project.rb index 680bed2..416159b 100644 --- a/lib/models/project.rb +++ b/lib/models/project.rb @@ -1,11 +1,10 @@ class Project - include MongoMapper::Document - key :title, String - key :repository, String - - many :project_packages - belongs_to :handler - + include Mongoid::Document + store_in collection: :projects + field :title, type: String + field :repository, type: String + + has_many :project_packages def packages self.project_packages.collect(&:package) @@ -22,5 +21,4 @@ def outdated_packages not package.updated? end end - end diff --git a/lib/models/project_package.rb b/lib/models/project_package.rb index d40d2db..adf406b 100644 --- a/lib/models/project_package.rb +++ b/lib/models/project_package.rb @@ -1,6 +1,9 @@ class ProjectPackage - include MongoMapper::Document - key :version, String + include Mongoid::Document + store_in collection: :project_packages + + field :version, type: String + field :system, type: String belongs_to :project belongs_to :package diff --git a/mongoid.yml b/mongoid.yml new file mode 100644 index 0000000..3476b48 --- /dev/null +++ b/mongoid.yml @@ -0,0 +1,19 @@ +test: + sessions: + default: + database: foy_test + hosts: + - localhost:27017 + options: + safe: true + consistency: :strong + max_retries: 1 + retry_interval: 0 +development: + sessions: + default: + database: foy_dev + hosts: + - localhost:27017 + options: + safe: true diff --git a/spec/factories.rb b/spec/factories.rb index 1aa6a8f..cf5135f 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -7,12 +7,16 @@ end factory :package_system do - name 'gem' + name { "gem v#{generate(:id)}" } + packages { build_list(:package, 2) } end factory :package do name { "pkg #{generate(:id)}" } version '3.0.0' - package_system + end + + factory :project_package do + version '1.0.0' end end diff --git a/spec/lib/foy_api_spec.rb b/spec/lib/foy_api_spec.rb index 0d11173..ef22fbf 100644 --- a/spec/lib/foy_api_spec.rb +++ b/spec/lib/foy_api_spec.rb @@ -77,28 +77,28 @@ def app end describe "packages" do - let!(:project) { create(:project) } let!(:package_system) { create(:package_system) } - let!(:current_packages) { create_list(:package, 2, package_system: package_system) } + let!(:project) { create(:project) } + let!(:current_packages) { package_system.packages } let(:put_data) { put "/v1/projects/#{project.id}/packages", packages } - + describe "PUT /v1/projects/:id/packages" do context "new packages" do let(:packages) do - {system: package_system.name, packages: [{name: 'rest-client', version: '1.0.1'}, {name: 'rspec', version: '2.0.0'}]} + {system: package_system.name, packages: [{name: "rest-client", version: "1.0.1"}, {name: "rspec", version: "2.0.0"}]} end it "creates nonexistent packages" do put_data - expect(Package.first(name: 'rest-client')).to_not be_nil - expect(Package.first(name: 'rspec')).to_not be_nil - expect(Package.count).to be_eql(4) + expect(package_system.packages.where(name: 'rest-client').first).to_not be_nil + expect(package_system.packages.where(name: 'rspec').first).to exist + expect(package_system.packages.count).to be_eql(4) end it "associates project with its packages" do put_data - expect(project.packages).to include(Package.first(name: 'rest-client')) - expect(project.packages).to include(Package.first(name: 'rspec')) + expect(project.packages).to include(package_system.packages.where(name: 'rest-client').first) + expect(project.packages).to include(package_system.packages.where(name: 'rspec').first) end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 65baf18..eb85487 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,5 +1,6 @@ ENV['RACK_ENV'] ||= 'test' +require 'byebug' require 'rack/test' require 'database_cleaner' require 'factory_girl' @@ -7,13 +8,15 @@ require File.expand_path("../../environment", __FILE__) - RSpec.configure do |config| config.mock_with :rspec config.expect_with :rspec config.include FactoryGirl::Syntax::Methods - config.after(:each) do + DatabaseCleaner.orm = "mongoid" + DatabaseCleaner.strategy = :truncation + + config.before(:each) do DatabaseCleaner.clean end end