devise-activegraph 3.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
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