devise-activegraph 3.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 (57) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +33 -0
  4. data/.rdebugrc +1 -0
  5. data/.travis.yml +40 -0
  6. data/CHANGELOG.md +42 -0
  7. data/Gemfile +41 -0
  8. data/LICENSE +20 -0
  9. data/README.md +113 -0
  10. data/Rakefile +35 -0
  11. data/Vagrantfile +22 -0
  12. data/devise-activegraph.gemspec +27 -0
  13. data/lib/devise-activegraph.rb +23 -0
  14. data/lib/devise/active_graph/version.rb +5 -0
  15. data/lib/devise/orm/active_graph.rb +6 -0
  16. data/lib/devise/orm/active_graph/counter_increment.rb +15 -0
  17. data/lib/devise/orm/active_graph/hook.rb +15 -0
  18. data/lib/generators/active_graph.rb +4 -0
  19. data/lib/generators/active_graph/devise_generator.rb +92 -0
  20. data/lib/generators/active_graph/templates/migration.rb.erb +10 -0
  21. data/provisioning/roles/common/tasks/main.yml +13 -0
  22. data/provisioning/roles/java/README.md +30 -0
  23. data/provisioning/roles/java/files/.gitkeep +0 -0
  24. data/provisioning/roles/java/files/webupd8.key.asc +13 -0
  25. data/provisioning/roles/java/handlers/.gitkeep +0 -0
  26. data/provisioning/roles/java/tasks/.gitkeep +0 -0
  27. data/provisioning/roles/java/tasks/main.yml +6 -0
  28. data/provisioning/roles/java/tasks/openjdk.yml +6 -0
  29. data/provisioning/roles/java/tasks/oracle.yml +12 -0
  30. data/provisioning/roles/java/tasks/webupd8.yml +13 -0
  31. data/provisioning/roles/java/templates/.gitkeep +0 -0
  32. data/provisioning/roles/java/vars/.gitkeep +0 -0
  33. data/provisioning/roles/java/vars/main.yml +2 -0
  34. data/provisioning/roles/neo4j/files/neo4j-server.properties +20 -0
  35. data/provisioning/roles/neo4j/files/neo4j.conf +6 -0
  36. data/provisioning/roles/neo4j/tasks/main.yml +45 -0
  37. data/provisioning/roles/neo4j/vars/main.yml +1 -0
  38. data/provisioning/vagrant.yml +17 -0
  39. data/test/generators/active_graph/devise_generator_test.rb +25 -0
  40. data/test/orm/active_graph.rb +52 -0
  41. data/test/overrides/authenticatable_test.rb +15 -0
  42. data/test/overrides/confirmable_test.rb +37 -0
  43. data/test/overrides/database_authenticatable_test.rb +20 -0
  44. data/test/overrides/devise_helper_test.rb +12 -0
  45. data/test/overrides/email_changed_test.rb +9 -0
  46. data/test/overrides/integration_test.rb +22 -0
  47. data/test/overrides/mapping_test.rb +11 -0
  48. data/test/overrides/trackable_test.rb +6 -0
  49. data/test/rails_app/app/active_graph/admin.rb +43 -0
  50. data/test/rails_app/app/active_graph/user.rb +57 -0
  51. data/test/rails_app/app/active_graph/user_on_engine.rb +45 -0
  52. data/test/rails_app/app/active_graph/user_on_main_app.rb +46 -0
  53. data/test/rails_app/app/active_graph/user_without_email.rb +32 -0
  54. data/test/rails_app/config/application.rb +32 -0
  55. data/test/rails_app/config/environment.rb +5 -0
  56. data/test/test_helper.rb +42 -0
  57. metadata +215 -0
@@ -0,0 +1,15 @@
1
+ module Devise
2
+ module Orm
3
+ module ActiveGraph
4
+ module CounterIncrement
5
+ def increment_counter(property, id)
6
+ query_proxy = where(id: id)
7
+ node_var = query_proxy.identity
8
+ query_proxy.query
9
+ .set_props("#{node_var}.failed_attempts = #{node_var}.failed_attempts + 1")
10
+ .exec
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module Devise
2
+ module Orm
3
+ module ActiveGraph
4
+ module Hook
5
+
6
+ def devise_modules_hook!
7
+ include Compatibility
8
+ yield
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,4 @@
1
+ module Generators
2
+ module ActiveGraph
3
+ end
4
+ end
@@ -0,0 +1,92 @@
1
+ require 'generators/devise/orm_helpers'
2
+
3
+ module ActiveGraph
4
+ module Generators
5
+ class DeviseGenerator < ::Rails::Generators::NamedBase
6
+ include ::Devise::Generators::OrmHelpers
7
+
8
+ def copy_devise_migration
9
+ file_path = "db/neo4j/migrate/#{Time.now.utc.strftime('%Y%m%d%H%M%S')}_devise_create_user_constraints_and_indexes.rb"
10
+ text = File.read(File.expand_path('./templates/migration.rb.erb', File.dirname(__FILE__)))
11
+ label_string = name
12
+ create_file file_path, ERB.new(text).result(binding)
13
+ end
14
+
15
+ def generate_model
16
+ invoke 'active_graph:model', [name] unless model_exists? && behavior == :invoke
17
+ end
18
+
19
+ def inject_field_types
20
+ inject_into_file model_path, model_contents , after: /Neo4j::ActiveNode\n/ if model_exists?
21
+ end
22
+
23
+ def inject_devise_content
24
+ inject_into_file model_path, migration_data , after: /Neo4j::ActiveNode\n/ if model_exists?
25
+ end
26
+
27
+ def migration_data
28
+ <<RUBY
29
+ #
30
+ # Neo4j.rb needs to have property definitions before any validations. So, the property block needs to come before
31
+ # loading your devise modules.
32
+ #
33
+ # If you add another devise module (such as :lockable, :confirmable, or :token_authenticatable), be sure to
34
+ # uncomment the property definitions for those modules. Otherwise, the unused property definitions can be deleted.
35
+ #
36
+
37
+ property :created_at, type: DateTime
38
+ property :updated_at, type: DateTime
39
+
40
+ ## Database authenticatable
41
+ property :email, type: String, default: ''
42
+ validates :email, presence: true
43
+
44
+ property :encrypted_password
45
+
46
+ ## If you include devise modules, uncomment the properties below.
47
+
48
+ ## Recoverable
49
+ property :reset_password_token
50
+ property :reset_password_sent_at, type: DateTime
51
+
52
+ ## Rememberable
53
+ property :remember_created_at, type: DateTime
54
+
55
+ ## Trackable
56
+ property :sign_in_count, type: Integer, default: 0
57
+ validates :sign_in_count, presence: true
58
+ property :current_sign_in_at, type: DateTime
59
+ property :last_sign_in_at, type: DateTime
60
+ property :current_sign_in_ip, type: String
61
+ property :last_sign_in_ip, type: String
62
+
63
+ ## Confirmable
64
+ # property :confirmation_token
65
+ # property :confirmed_at, type: DateTime
66
+ # property :confirmation_sent_at, type: DateTime
67
+ # property :unconfirmed_email # Only if using reconfirmable
68
+
69
+ ## Lockable
70
+ # property :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
71
+ # validates :failed_attempts, presence: true
72
+ # property :unlock_token, type: String # Only if unlock strategy is :email or :both
73
+ # property :locked_at, type: DateTime
74
+
75
+ ## Token authenticatable
76
+ # property :authentication_token, type: String
77
+
78
+ RUBY
79
+ end
80
+
81
+ def rails5?
82
+ Rails.version.start_with? '5'
83
+ end
84
+
85
+ def migration_version
86
+ if rails5?
87
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,10 @@
1
+ class DeviseCreateUserConstraintsAndIndexes < ActiveGraph::Migrations::Base
2
+ def change
3
+ add_index :<%= label_string %>, :email, force: true
4
+ add_index :<%= label_string %>, :remember_token, force: true
5
+ add_index :<%= label_string %>, :reset_password_token, force: true
6
+ # add_index :<%= label_string %>, :confirmation_token, force: true
7
+ # add_index :<%= label_string %>, :unlock_token, force: true
8
+ # add_index :<%= label_string %>, :authentication_token, force: true
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ ---
2
+ - name: update apt
3
+ apt: update_cache=yes cache_valid_time=86400
4
+
5
+ - name: install base packages
6
+ apt: pkg={{ item }} state=installed
7
+ with_items:
8
+ - build-essential
9
+ - git
10
+ - wget
11
+ - ntp
12
+ - sudo
13
+ - curl
@@ -0,0 +1,30 @@
1
+ Ansible role to install Java
2
+ ============================
3
+
4
+ Description
5
+ -----------
6
+
7
+ By default Debian and Ubuntu only provide OpenJDK, but sometimes you may want to use the official Oracle JRE/JDK.
8
+
9
+ This uses the Ubuntu PPA maintained by [Webupd8](http://www.webupd8.org/). It works without problems on Debian too.
10
+
11
+ How to use
12
+ ----------
13
+
14
+ Installing a Oracle JDK
15
+ -----------------------
16
+
17
+ Override the list *java_versions* with a list of JDK you want to install.
18
+
19
+ The valid values are:
20
+
21
+ * oracle-jdk7-installer (Oracle JDK 7)
22
+ * oracle-java6-installer (Oracle JRE 6)
23
+ * oracle-java7-installer (Oracle JRE 7)
24
+ * oracle-java8-installer (Oracle JRE 8 Preview)
25
+ * openjdk-6-jdk (OpenJDK JDK 6)
26
+ * openjdk-7-jdk (OpenJDK JDK 7)
27
+ * openjdk-6-jre (OpenJDK JRE 6)
28
+ * openjdk-6-jre-headless (OpenJDK JRE 6 Headless)
29
+ * openjdk-7-jre (OpenJDK JRE 7)
30
+ * openjdk-7-jre-headless (OpenJDK JRE 7 Headless)
File without changes
@@ -0,0 +1,13 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: SKS 1.1.4
3
+ Comment: Hostname: keyserver.ubuntu.com
4
+
5
+ mI0ES9/P3AEEAPbI+9BwCbJucuC78iUeOPKl/HjAXGV49FGat0PcwfDd69MVp6zUtIMbLgkU
6
+ OxIlhiEkDmlYkwWVS8qy276hNg9YKZP37ut5+GPObuS6ZWLpwwNus5PhLvqeGawVJ/obu7d7
7
+ gM8mBWTgvk0ErnZDaqaU2OZtHataxbdeW8qH/9FJABEBAAG0DUxhdW5jaHBhZCBWTEOItgQT
8
+ AQIAIAUCS9/P3AIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEMJRgkjuoUiG5wYEANCd
9
+ jhXXEpPUbP7cRGXL6cFvrUFKpHHopSC9NIQ9qxJVlUK2NjkzCCFhTxPSHU8LHapKKvie3e+l
10
+ kvWW5bbFN3IuQUKttsgBkQe2aNdGBC7dVRxKSAcx2fjqP/s32q1lRxdDRM6xlQlEA1j94ewG
11
+ 9SDVwGbdGcJ43gLxBmuKvUJ4
12
+ =0Cp+
13
+ -----END PGP PUBLIC KEY BLOCK-----
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ ---
2
+ - include: oracle.yml
3
+ when: java_versions is defined and java_versions is sequence and java_versions|join|search("oracle")
4
+
5
+ - include: openjdk.yml
6
+ when: java_versions is defined and java_versions is sequence and java_versions|join|search("openjdk")
@@ -0,0 +1,6 @@
1
+ ---
2
+ - name: Install OpenJDK
3
+ tags: java
4
+ apt: pkg={{ item }} update-cache=yes state=latest
5
+ when: item|search("^openjdk")
6
+ with_items: java_versions
@@ -0,0 +1,12 @@
1
+ ---
2
+ - include: webupd8.yml
3
+
4
+ - name: Automatically select the Oracle License
5
+ tags: java
6
+ shell: echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
7
+
8
+ - name: Install Oracle Java
9
+ tags: java
10
+ apt: pkg={{ item }} update-cache=yes state=latest
11
+ when: item|search("^oracle")
12
+ with_items: java_versions
@@ -0,0 +1,13 @@
1
+ ---
2
+ - name: Add the webupd8 APT repository key
3
+ tags:
4
+ - java
5
+ - java-webupd8
6
+ apt_key: data="{{ lookup('file', 'webupd8.key.asc') }}" state=present
7
+ # Use a static file because right now using just an ID fails
8
+
9
+ - name: Add the webupd8 APT repository
10
+ tags:
11
+ - java
12
+ - java-webupd8
13
+ apt_repository: repo="deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main" state=present
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ java_versions:
2
+ - oracle-jdk7-installer
@@ -0,0 +1,20 @@
1
+ ################################################################
2
+ # Neo4j configuration
3
+ ################################################################
4
+ org.neo4j.server.database.location=data/graph.db
5
+ org.neo4j.server.webserver.address=0.0.0.0
6
+ org.neo4j.server.webserver.port=80
7
+ org.neo4j.server.webserver.https.enabled=false
8
+ org.neo4j.server.webserver.https.port=7473
9
+ org.neo4j.server.webserver.https.cert.location=conf/ssl/snakeoil.cert
10
+ org.neo4j.server.webserver.https.key.location=conf/ssl/snakeoil.key
11
+ org.neo4j.server.webserver.https.keystore.location=data/keystore
12
+ org.neo4j.server.webadmin.rrdb.location=data/rrd
13
+ org.neo4j.server.webadmin.data.uri=/db/data/
14
+ org.neo4j.server.webadmin.management.uri=/db/manage/
15
+ org.neo4j.server.db.tuning.properties=conf/neo4j.properties
16
+ org.neo4j.server.manage.console_engines=shell
17
+ org.neo4j.server.http.log.enabled=true
18
+ org.neo4j.server.http.log.config=conf/neo4j-http-logging.xml
19
+ org.neo4j.server.credentials=username:password
20
+ #org.neo4j.server.thirdparty_jaxrs_classes=org.neo4j.server.extension.auth=/auth
@@ -0,0 +1,6 @@
1
+ description "neo4j upstart"
2
+
3
+ start on startup
4
+ stop on shutdown
5
+
6
+ exec sudo /opt/neo4j/neo4j-community-{{ neo4j_version }}/bin/neo4j start
@@ -0,0 +1,45 @@
1
+ ---
2
+ - name: Change Soft Open File Limit
3
+ lineinfile: dest=/etc/security/limits.conf
4
+ insertbefore="^# End of file$"
5
+ line="root soft nofile 40000"
6
+ state=present
7
+
8
+ - name: Change Hard Open File Limit
9
+ lineinfile: dest=/etc/security/limits.conf
10
+ insertbefore="^# End of file$"
11
+ line="root hard nofile 40000"
12
+ state=present
13
+
14
+ - name: Change Hard Open File Limit
15
+ lineinfile: dest=/etc/pam.d/su
16
+ insertafter="^# session required pam_limits.so$"
17
+ line="session required pam_limits.so"
18
+ state=present
19
+
20
+ - name: Create directory structure
21
+ file: state=directory
22
+ path=/opt/neo4j
23
+
24
+ - name: Download neo4j
25
+ get_url: url=http://dist.neo4j.org/neo4j-community-{{ neo4j_version }}-unix.tar.gz
26
+ dest=/opt/neo4j/neo4j-community-{{ neo4j_version }}-unix.tar.gz
27
+
28
+ - name: Unzip
29
+ command: tar xvzf neo4j-community-{{ neo4j_version }}-unix.tar.gz chdir=/opt/neo4j
30
+
31
+ - name: Remove tar file
32
+ command: rm -rf /opt/neo4j/neo4j-community-{{ neo4j_version }}-unix.tar.gz
33
+
34
+ - name: Copy Config
35
+ copy: src=../files/neo4j-server.properties
36
+ dest=/opt/neo4j/neo4j-community-{{ neo4j_version }}/conf/neo4j-server.properties
37
+ owner=root
38
+ group=root
39
+ mode=0644
40
+
41
+ - name: Copy Upstart Job
42
+ template: src=../files/neo4j.conf dest=/etc/init/neo4j.conf owner=root group=root mode=0644
43
+
44
+ - name: Start
45
+ command: sudo start neo4j
@@ -0,0 +1 @@
1
+ neo4j_version: 2.1.2
@@ -0,0 +1,17 @@
1
+ ---
2
+ - hosts: all
3
+ remote_user: vagrant
4
+ sudo: yes
5
+ vars:
6
+ user: vagrant
7
+ group: vagrant
8
+ user_home: /home/vagrant
9
+ venv_path: /vagrant/env
10
+ project_root: /vagrant
11
+ neo4j_version: 2.1.2
12
+
13
+ roles:
14
+ - common
15
+ - java
16
+ - neo4j
17
+
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+ require 'tmpdir'
3
+ require 'rails/generators/test_case'
4
+ require 'generators/active_graph/devise_generator.rb'
5
+
6
+ class ActiveGraph::Generators::ModelGeneratorTest < Rails::Generators::TestCase
7
+ tests ActiveGraph::Generators::DeviseGenerator
8
+ destination File.join(Dir.tmpdir, File.dirname(__FILE__))
9
+ setup :prepare_destination
10
+
11
+ def assert_class(klass, content)
12
+ assert content =~ /class #{klass}(\(.+\))?(.*?)\nend/m, "Expected to have class #{klass}"
13
+ yield $2.strip if block_given?
14
+ end
15
+
16
+ # test "invoke with model name" do
17
+ # content = run_generator %w(Player)
18
+
19
+ # assert_file "app/models/player.rb" do |player|
20
+ # assert_class "Player", player do |klass|
21
+ # assert_match /ActiveGraph::Node/, klass
22
+ # end
23
+ # end
24
+ # end
25
+ end
@@ -0,0 +1,52 @@
1
+ require 'fileutils'
2
+ require 'active_graph/core/driver'
3
+ require 'active_graph/core'
4
+ # mostly copied from neo4j/spec/spec_helper
5
+ class TestDriver < ActiveGraph::Core::Driver
6
+ cattr_reader :cache, default: {}
7
+
8
+ at_exit do
9
+ close_all
10
+ end
11
+
12
+ class << self
13
+ def new_instance(url, auth_token, options = {})
14
+ cache[url] ||= super(url, auth_token, options.merge(encryption: false))
15
+ end
16
+
17
+ def close_all
18
+ cache.values.each(&:close)
19
+ end
20
+ end
21
+
22
+ def close; end
23
+ end
24
+
25
+
26
+ def create_driver
27
+ server_url = ENV['NEO4J_URL'] || 'bolt://localhost:7687'
28
+ ActiveGraph::Base.driver = TestDriver.new(server_url)
29
+ end
30
+
31
+
32
+ I18n.enforce_available_locales = false
33
+
34
+ Dir["#{File.dirname(__FILE__)}/shared_examples/**/*.rb"].each { |f| require f }
35
+
36
+ def delete_db
37
+ Neo4j::ActiveBase.current_session.query('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')
38
+ end
39
+
40
+ class ActiveSupport::TestCase
41
+ setup do
42
+ create_driver
43
+ ActiveGraph::Core::Label.drop_constraints
44
+ ActiveGraph::Core::Label.drop_indexes
45
+ ActiveGraph::Base.label_object(User.mapped_label_names.first).create_constraint(User.id_property_name, type: :unique)
46
+ ActiveGraph::Base.label_object(Admin.mapped_label_names.first).create_constraint(Admin.id_property_name, type: :unique)
47
+ ActiveGraph::Base.label_object(UserOnMainApp.mapped_label_names.first).create_constraint(UserOnMainApp.id_property_name, type: :unique)
48
+ ActiveGraph::Base.label_object(UserOnEngine.mapped_label_names.first).create_constraint(UserOnEngine.id_property_name, type: :unique)
49
+ ActiveGraph::Base.label_object(UserWithoutEmail.mapped_label_names.first).create_constraint(UserWithoutEmail.id_property_name, type: :unique)
50
+ ActiveGraph::Base.query('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')
51
+ end
52
+ end