devise-neo4j 1.0.3 → 2.0.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +33 -0
  5. data/README.md +108 -0
  6. data/Rakefile +20 -8
  7. data/Vagrantfile +22 -0
  8. data/devise-neo4j.gemspec +8 -11
  9. data/lib/devise-neo4j.rb +0 -1
  10. data/lib/devise-neo4j/version.rb +1 -1
  11. data/lib/devise/orm/neo4j.rb +4 -8
  12. data/lib/devise/orm/neo4j/date_time.rb +8 -0
  13. data/lib/devise/orm/neo4j/hook.rb +7 -12
  14. data/lib/devise/orm/neo4j/nil_class_converter.rb +24 -0
  15. data/lib/generators/neo4j/devise_generator.rb +69 -6
  16. data/provisioning/roles/common/tasks/main.yml +13 -0
  17. data/provisioning/roles/java/README.md +30 -0
  18. data/provisioning/roles/java/files/.gitkeep +0 -0
  19. data/provisioning/roles/java/files/webupd8.key.asc +13 -0
  20. data/provisioning/roles/java/handlers/.gitkeep +0 -0
  21. data/provisioning/roles/java/tasks/.gitkeep +0 -0
  22. data/provisioning/roles/java/tasks/main.yml +6 -0
  23. data/provisioning/roles/java/tasks/openjdk.yml +6 -0
  24. data/provisioning/roles/java/tasks/oracle.yml +12 -0
  25. data/provisioning/roles/java/tasks/webupd8.yml +13 -0
  26. data/provisioning/roles/java/templates/.gitkeep +0 -0
  27. data/provisioning/roles/java/vars/.gitkeep +0 -0
  28. data/provisioning/roles/java/vars/main.yml +2 -0
  29. data/provisioning/roles/neo4j/files/neo4j-server.properties +20 -0
  30. data/provisioning/roles/neo4j/files/neo4j.conf +6 -0
  31. data/provisioning/roles/neo4j/tasks/main.yml +45 -0
  32. data/provisioning/roles/neo4j/vars/main.yml +1 -0
  33. data/provisioning/vagrant.yml +17 -0
  34. data/test/generators/neo4j/devise_generator_test.rb +1 -2
  35. data/test/orm/neo4j.rb +52 -7
  36. data/test/overrides/authenticatable_test.rb +14 -0
  37. data/test/overrides/database_authenticatable_test.rb +17 -0
  38. data/test/overrides/mapping_test.rb +11 -0
  39. data/test/rails_app/app/neo4j/admin.rb +36 -4
  40. data/test/rails_app/app/neo4j/user.rb +41 -5
  41. data/test/rails_app/app/neo4j/user_on_engine.rb +43 -0
  42. data/test/rails_app/app/neo4j/user_on_main_app.rb +43 -0
  43. data/test/rails_app/config/application.rb +11 -11
  44. data/test/support/i18n.rb +1 -1
  45. data/test/test_helper.rb +16 -23
  46. data/test/test_models.rb +33 -0
  47. metadata +174 -164
  48. data/Gemfile.lock +0 -156
  49. data/README.rdoc +0 -48
  50. data/lib/devise/orm/neo4j/schema.rb +0 -40
  51. data/test/overrides/models/recoverable_test.rb +0 -21
  52. data/test/rails_app/app/neo4j/shim.rb +0 -2
  53. data/test/support/fix_last.rb +0 -12
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 93c410a790b9472c524bc9e292719010f617ea86
4
+ data.tar.gz: 1172ed3e86426dccd08f27152c596eb743d0edf4
5
+ SHA512:
6
+ metadata.gz: 202423db6a77e66e4b0d3d551e992feed871ffa2a5ab0cbd2ca26edbb470949e0599b5f6807293be199faa03c0fae6a19ded07f82d6a4de210f2e14484985306
7
+ data.tar.gz: df1ee93d673ecf0bc46b47edb1c6e522e728430eb94df9f48689cd686c315b4bd49e9b87cfa368ede5d6fcf3aeb77a88e0ab8106e388c3e2507c0018f480a263
data/.gitignore CHANGED
@@ -29,3 +29,5 @@ test/rails_app/log
29
29
 
30
30
  ## NETBEANS
31
31
  nbproject
32
+
33
+ .vagrant
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ script: "bundle exec rake neo4j:install['community-2.1.2'] neo4j:start default --trace"
2
+ language: ruby
3
+ rvm:
4
+ - 2.1.1
5
+ - jruby-19mode
data/Gemfile CHANGED
@@ -1,3 +1,36 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
+
5
+ gem "rails", "~> 4.1.1"
6
+ gem "omniauth"
7
+ gem "omniauth-oauth2"
8
+ gem "rdoc"
9
+ gem 'neo4j', "~> 3.0.0.alpha.7"
10
+ gem "devise", git: 'https://github.com/plataformatec/devise.git'
11
+
12
+ group :test do
13
+ gem "omniauth-facebook"
14
+ gem "omniauth-openid", "~> 1.0.1"
15
+ gem "webrat", "0.7.2", :require => false
16
+ gem "mocha", :require => false
17
+
18
+ platforms :mri_18 do
19
+ gem "ruby-debug", ">= 0.10.3"
20
+ end
21
+ end
22
+
23
+ platforms :jruby do
24
+ gem "jruby-openssl"
25
+ gem "neo4j-community"
26
+ end
27
+
28
+ platforms :ruby do
29
+ gem "sqlite3"
30
+
31
+ group :mongoid do
32
+ gem "mongo"
33
+ gem "mongoid"
34
+ gem "bson_ext", "~> 1.3.0"
35
+ end
36
+ end
data/README.md ADDED
@@ -0,0 +1,108 @@
1
+ # Devise-Neo4j [![Build Status](https://secure.travis-ci.org/andreasronge/devise-neo4j.png?branch=master)](http://travis-ci.org/andreasronge/devise-neo4j)
2
+
3
+ A gem for Neo4j integration with the Devise authentication framework.
4
+
5
+ Neo4j: https://github.com/andreasronge/neo4j Devise:
6
+ https://github.com/plataformatec/devise
7
+
8
+ ## Usage
9
+
10
+ ### Installation
11
+
12
+ Add the neo4j and devise-neo4j gems to your Gemfile:
13
+
14
+ gem "neo4j", "~> 3.0.0.alpha.7"
15
+ gem "devise-neo4j", "~> 2.0.0.alpha.1"
16
+
17
+ Run the bundle install command:
18
+
19
+ bundle install
20
+
21
+ Then run the devise install generator and optionally update or create a
22
+ devise-neo4j model:
23
+
24
+ rails g devise:install --orm=neo4j
25
+ rails g neo4j:devise MODEL
26
+
27
+ Now the model is setup like a default devise model, meaning you can do things
28
+ like adding a before_filter in a controller to restrict access to logged-in
29
+ users only:
30
+
31
+ before_filter :authenticate_<your model name>!
32
+
33
+ ## Example App
34
+
35
+ You can see a very simple app that demonstrates Neo4j and devise here:
36
+
37
+ gem install rails
38
+ rails new myapp -m http://andreasronge.github.com/neo4j/neo4j.rb -O
39
+ cd myapp
40
+ add to your Gem File :
41
+ gem 'devise'
42
+ gem 'devise-neo4j', :git => 'git@github.com:cheerfulstoic/devise-neo4j.git'
43
+ bundle
44
+ rails generate devise:install --orm=neo4j
45
+
46
+ # install the database unless you already have a neo4j database, or use JRuby Embedded Neo4j db
47
+ rake neo4j:install[community-2.1.2] # check which one is the latest
48
+ rake neo4j:start
49
+
50
+ rails g neo4j:devise User
51
+ # add to your config/routes.rb:
52
+ devise_for :users
53
+ root :to => "secrets#show"
54
+
55
+ # generate a controller for the protected content
56
+ rails g controller secrets show
57
+
58
+ # in app/controllers/sercrets_controller.rb delete line get 'secrets/show' and add:
59
+ before_filter :authenticate_user!
60
+
61
+ # in app/views/secrets/show.html.erb: add:
62
+ <p>Shhhh... this page is only visible to logged-in users!</p>
63
+
64
+ <%= link_to "Log out", destroy_user_session_path, method: :delete %>
65
+
66
+ rails s
67
+
68
+ # go to http://localhost:3000/users/sign_up
69
+
70
+ ## Developing
71
+
72
+ ### For JRuby
73
+
74
+ JRUby neo4j has an embedded server as part of the gem, so nothing else is
75
+ needed to get set up and running.
76
+
77
+ ### For Ruby
78
+
79
+ There is a Vagrant setup that installs neo4j so that you can easily get
80
+ started:
81
+
82
+ $ vagrant up
83
+
84
+ The neo4j web interface is forward to port 7474 on your local machine:
85
+ [http://localhost:7474](http://localhost:7474).
86
+
87
+ ## Note on testing
88
+
89
+ To run all test, simply type `rake` If you want to run a specific Devise test
90
+ (see the devise github repository) set the DEVISE_TEST_PATH.
91
+
92
+ Example: ``` rake DEVISE_TEST_PATH=integration/confirmable_test.rb ```
93
+
94
+ ## Note on Patches/Pull Requests
95
+
96
+ * Fork the project.
97
+ * Make your feature addition or bug fix.
98
+ * Add tests for it. This is important so I don't break it in a future
99
+ version unintentionally.
100
+ * Commit, do not mess with rakefile, version, or history. (if you want to
101
+ have your own version, that is fine but bump version in a commit by itself
102
+ I can ignore when I pull)
103
+ * Send me a pull request. Bonus points for topic branches.
104
+
105
+
106
+ ## Copyright
107
+
108
+ Copyright (c) 2011 Ben Jackson. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,22 +1,34 @@
1
- require "rake/testtask"
1
+ # encoding: UTF-8
2
2
  require "bundler/gem_tasks"
3
+ require 'rake/testtask'
4
+ require 'rdoc/task'
5
+ require 'neo4j/tasks/neo4j_server'
3
6
 
7
+
8
+ task :default => [:test, :"neo4j:db:remove"]
9
+
10
+ ENV['DEVISE_ORM'] = 'neo4j'
11
+ devise_checked_out = File.join(File.dirname(__FILE__), '../devise')
12
+ ENV['DEVISE_PATH'] = File.exist?(devise_checked_out) ? devise_checked_out : `bundle show devise`.chomp
4
13
  desc 'Run tests for devise-neo4j.'
5
14
  Rake::TestTask.new(:test) do |test|
6
- ENV['DEVISE_ORM'] = 'neo4j'
7
- ENV['DEVISE_PATH'] = `bundle show devise`.chomp
8
15
  unless File.exist?(ENV['DEVISE_PATH'])
9
- puts "Devise not found in gem bundle"
16
+ puts "Specify the path to devise (e.g. rake DEVISE_PATH=/path/to/devise) or include it in your gem bundle. Not found at #{ENV['DEVISE_PATH']}"
10
17
  exit
11
18
  end
12
- test.libs << ENV['GEM_HOME'] << "test"
19
+ test.libs << 'lib'
20
+ test.libs << 'test'
13
21
  test.libs << "#{ENV['DEVISE_PATH']}/lib"
14
22
  test.libs << "#{ENV['DEVISE_PATH']}/test"
15
- test.test_files = FileList["#{ENV['DEVISE_PATH']}/test/**/*_test.rb"] + FileList['test/**/*_test.rb']
23
+
24
+ if devise_test_path = ENV['DEVISE_TEST_PATH']
25
+ test.test_files = FileList["#{ENV['DEVISE_PATH']}/test/#{devise_test_path}"]
26
+ else
27
+ test.test_files = FileList["#{ENV['DEVISE_PATH']}/test/**/*_test.rb"] + FileList['test/**/*_test.rb']
28
+ end
16
29
  test.verbose = true
17
30
  end
18
31
 
19
- task :default => [:test, :"neo4j:db:remove"]
20
32
 
21
33
  namespace :neo4j do
22
34
  namespace :db do
@@ -25,4 +37,4 @@ namespace :neo4j do
25
37
  system "rm -fr #{File.join(File.dirname(__FILE__), "db", "*")}"
26
38
  end
27
39
  end
28
- end
40
+ end
data/Vagrantfile ADDED
@@ -0,0 +1,22 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
5
+ VAGRANTFILE_API_VERSION = "2"
6
+
7
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
8
+ # Every Vagrant virtual environment requires a box to build off of.
9
+ config.vm.box = "precise64"
10
+
11
+ # The url from where the 'config.vm.box' box will be fetched if it
12
+ # doesn't already exist on the user's system.
13
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
14
+
15
+ config.vm.network :forwarded_port, host: 7474, guest: 80 # neo4j
16
+ config.vm.hostname = "devise-neo4j.develop"
17
+
18
+ config.vm.provision "ansible" do |ansible|
19
+ ansible.playbook = "provisioning/vagrant.yml"
20
+ # ansible.verbose = "vvvv"
21
+ end
22
+ end
data/devise-neo4j.gemspec CHANGED
@@ -5,6 +5,7 @@ require "devise-neo4j/version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "devise-neo4j"
7
7
  s.version = Devise::Neo4j::VERSION
8
+
8
9
  s.authors = ["Ben Jackson", "Bobby Calderwood"]
9
10
  s.email = ["ben@lissomsolutions.com"]
10
11
  s.homepage = "http://github.com/benjackson/devise-neo4j"
@@ -14,18 +15,14 @@ Gem::Specification.new do |s|
14
15
  s.rubyforge_project = "devise-neo4j"
15
16
 
16
17
  s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.test_files = `git ls-files -- test/*`.split("\n")
18
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
20
  s.require_paths = ["lib"]
20
21
 
21
- s.add_runtime_dependency "oa-oauth", "~> 0.2.0"
22
- s.add_runtime_dependency "oa-openid", "~> 0.2.0"
23
- s.add_runtime_dependency "neo4j", "~> 1.1"
24
- s.add_runtime_dependency "devise", "~> 1.3"
25
-
26
- s.add_development_dependency "rails", "~> 3.0"
27
- s.add_development_dependency "rake"
28
- s.add_development_dependency "webrat", "0.7.2"
29
- s.add_development_dependency "mocha"
30
- s.add_development_dependency "ruby-debug", ">= 0.10.3" if RUBY_VERSION < '1.9'
22
+ s.add_dependency("warden", "~> 1.2.1")
23
+ s.add_dependency("orm_adapter", "~> 0.5.0")
24
+ s.add_dependency("bcrypt-ruby", "~> 3.0")
25
+ s.add_dependency("railties", ">= 3.1")
26
+ s.add_dependency("neo4j", ">= 3.0.0.alpha.6")
27
+ s.add_dependency("devise", "~> 3.0")
31
28
  end
data/lib/devise-neo4j.rb CHANGED
@@ -1,3 +1,2 @@
1
1
  require 'devise'
2
2
  require 'devise/orm/neo4j/hook'
3
- require 'devise/orm/neo4j/schema'
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module Neo4j
3
- VERSION = "1.0.3"
3
+ VERSION = "2.0.0.alpha.1"
4
4
  end
5
5
  end
@@ -1,10 +1,6 @@
1
1
  require 'devise-neo4j'
2
+ require 'devise/orm/neo4j/date_time'
3
+ require 'devise/orm/neo4j/nil_class_converter'
4
+
5
+ Neo4j::ActiveNode::ClassMethods.send :include, Devise::Models
2
6
 
3
- module Neo4j
4
- module Rails
5
- class Model
6
- extend ::Devise::Models
7
- extend ::Devise::Orm::Neo4j::Hook
8
- end
9
- end
10
- end
@@ -0,0 +1,8 @@
1
+ # Add DateTime#gmtime method if needed.
2
+ class DateTime
3
+ unless method_defined?(:gmtime)
4
+ def gmtime
5
+ self.new_offset(0)
6
+ end
7
+ end
8
+ end
@@ -1,23 +1,18 @@
1
+ require 'devise'
2
+ require 'devise/orm/neo4j/nil_class_converter'
3
+
1
4
  module Devise
2
5
  module Orm
3
6
  module Neo4j
4
7
  module Hook
8
+
5
9
  def devise_modules_hook!
6
- extend Schema
10
+ include Compatibility
7
11
  yield
8
- devise_modules.each { |m| send(m) if respond_to?(m, true) }
9
-
10
- # ensure we have the created_at property
11
- property :created_at, :type => Time
12
- end
13
-
14
- # Overwrite the devise method to control indexation dependent on the specified modules
15
- def devise(*modules)
16
- # hack to get around Neo4j's requirement to index before uniqueness validation
17
- index :email, :type => :exact if modules.include?(:validatable)
18
- super
19
12
  end
13
+
20
14
  end
21
15
  end
22
16
  end
23
17
  end
18
+
@@ -0,0 +1,24 @@
1
+ require 'neo4j'
2
+ class Neo4j::TypeConverters::NilClassConverter
3
+ class << self
4
+ def convert?(type)
5
+ type == NilClass || type == :nilclass
6
+ end
7
+
8
+ def to_java(val)
9
+ return nil if val.nil?
10
+ return nil if val.empty?
11
+ val
12
+ end
13
+
14
+ def to_ruby(val)
15
+ return nil if val.nil?
16
+ return nil if val.empty?
17
+ val
18
+ end
19
+
20
+ def index_as
21
+ String
22
+ end
23
+ end
24
+ end
@@ -4,17 +4,80 @@ module Neo4j
4
4
  module Generators
5
5
  class DeviseGenerator < ::Rails::Generators::NamedBase
6
6
  include ::Devise::Generators::OrmHelpers
7
-
7
+
8
8
  def generate_model
9
9
  invoke "neo4j:model", [name] unless model_exists? && behavior == :invoke
10
10
  end
11
+
12
+
13
+ def inject_field_types
14
+ inject_into_file model_path, model_contents , :after => /Neo4j::ActiveNode\n/ if model_exists?
15
+ end
11
16
 
12
17
  def inject_devise_content
13
- inject_into_file(model_path, model_contents + <<CONTENT, :after => /Neo4j(::Rails)?::Model\n/) if model_exists?
14
- # Setup accessible (or protected) attributes for your model
15
- attr_accessible :email, :password, :password_confirmation, :remember_me
16
- CONTENT
18
+ inject_into_file model_path, migration_data , :after => /Neo4j::ActiveNode\n/ if model_exists?
19
+ end
20
+
21
+
22
+ def migration_data
23
+ <<RUBY
24
+ #
25
+ # Neo4j.rb needs to have property definitions before any validations. So, the property block needs to come before
26
+ # loading your devise modules.
27
+ #
28
+ # If you add another devise module (such as :lockable, :confirmable, or :token_authenticatable), be sure to
29
+ # uncomment the property definitions for those modules. Otherwise, the unused property definitions can be deleted.
30
+ #
31
+
32
+ property :username, :type => String
33
+ property :facebook_token, :type => String
34
+ index :facebook_token
35
+
36
+ property :created_at, :type => DateTime
37
+ property :updated_at, :type => DateTime
38
+
39
+ ## Database authenticatable
40
+ property :email, :type => String, :null => false, :default => ""
41
+ index :email
42
+
43
+ property :encrypted_password
44
+
45
+ ## If you include devise modules, uncomment the properties below.
46
+
47
+ ## Rememberable
48
+ property :remember_created_at, :type => DateTime
49
+ index :remember_token
50
+
51
+
52
+ ## Recoverable
53
+ property :reset_password_token
54
+ index :reset_password_token
55
+ property :reset_password_sent_at, :type => DateTime
56
+
57
+ ## Trackable
58
+ property :sign_in_count, :type => Integer, :default => 0
59
+ property :current_sign_in_at, :type => DateTime
60
+ property :last_sign_in_at, :type => DateTime
61
+ property :current_sign_in_ip, :type => String
62
+ property :last_sign_in_ip, :type => String
63
+
64
+ ## Confirmable
65
+ # property :confirmation_token
66
+ # index :confirmation_token
67
+ # property :confirmed_at, :type => DateTime
68
+ # property :confirmation_sent_at, :type => DateTime
69
+
70
+ ## Lockable
71
+ # property :failed_attempts, :type => Integer, :default => 0
72
+ # property :locked_at, :type => DateTime
73
+ # property :unlock_token, :type => String,
74
+ # index :unlock_token
75
+
76
+ ## Token authenticatable
77
+ # property :authentication_token, :type => String, :null => true, :index => :exact
78
+
79
+ RUBY
17
80
  end
18
81
  end
19
82
  end
20
- end
83
+ end