rails_age 0.5.3 → 0.6.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -4
- data/README.md +3 -3
- data/config/initializers/types.rb +5 -5
- data/lib/apache_age/entities/node.rb +1 -1
- data/lib/apache_age/entities/vertex.rb +47 -47
- data/lib/apache_age/types/{age_type_factory.rb → factory.rb} +3 -3
- data/lib/apache_age/validators/{vertex_type_validator copy.rb → node_type_validator.rb} +1 -1
- data/lib/apache_age/validators/unique_vertex.rb +27 -27
- data/lib/apache_age/validators/vertex_type_validator.rb +15 -0
- data/lib/generators/apache_age/edge/USAGE +7 -7
- data/lib/generators/apache_age/edge/edge_generator.rb +1 -0
- data/lib/generators/apache_age/generator_entity_helpers.rb +1 -9
- data/lib/generators/apache_age/node/USAGE +4 -4
- data/lib/generators/apache_age/node/node_generator.rb +1 -1
- data/lib/generators/apache_age/node/templates/node.rb.tt +2 -2
- data/lib/generators/apache_age/scaffold_edge/scaffold_edge_generator.rb +1 -2
- data/lib/generators/apache_age/scaffold_node/scaffold_node_generator.rb +1 -2
- data/lib/rails_age/version.rb +1 -1
- data/lib/rails_age.rb +1 -4
- data/lib/tasks/config_types.rake +6 -6
- metadata +5 -6
- data/lib/apache_age/types/age_type_generator.rb +0 -46
- data/lib/generators/apache_age/scaffold_edge/scaffold_node_generator.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6777870b945c8684ea2ef5d10b8e7411259e002001b074754840a9422b594cee
|
4
|
+
data.tar.gz: '008ab62bbe28d408d390acd5e00cecc764507e21ae3d38ca94d219e9d299435f'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a9c122ce1a8b5b173fc9ffd6ba45a4bf97965eb0681ec0d44e9779dcc1ef647da8e7e5110a5564a9f28c329ebe9e83ba832d920f4504bb5026650f41cc102d2
|
7
|
+
data.tar.gz: f9217b16e0177746a438ab5fed8a4e5c7f4bb6ff02b3e31a2a4d1db7a8bd246550e33be6494e0533c70dcbcde3a54078ed041b2c3a08718cb9b020c73353eee5
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## VERSION 0.6.
|
3
|
+
## VERSION 0.6.4 - 2024-xx-xx
|
4
4
|
|
5
5
|
- **cypher queries** (like active record queries)
|
6
6
|
* schema override
|
@@ -8,11 +8,11 @@
|
|
8
8
|
* paths support
|
9
9
|
* select attributes support
|
10
10
|
|
11
|
-
## VERSION 0.6.
|
11
|
+
## VERSION 0.6.3 - 2024-xx-xx
|
12
12
|
|
13
13
|
- **Age Path**
|
14
14
|
|
15
|
-
## VERSION 0.6.
|
15
|
+
## VERSION 0.6.2 - 2024-xx-xx
|
16
16
|
|
17
17
|
breaking change?: namespaces (by default) will use their own schema? (add to database.yml & schema.rb ?)
|
18
18
|
|
@@ -20,7 +20,7 @@ breaking change?: namespaces (by default) will use their own schema? (add to dat
|
|
20
20
|
|
21
21
|
- **multiple AGE Schema**
|
22
22
|
|
23
|
-
## VERSION 0.
|
23
|
+
## VERSION 0.6.1 - 2024-xx-xx
|
24
24
|
|
25
25
|
- **Fix**
|
26
26
|
* show validation errors in scaffold views
|
@@ -33,6 +33,16 @@ breaking change?: namespaces (by default) will use their own schema? (add to dat
|
|
33
33
|
- **Edge Scaffold** (generates edge, type, view and controller)
|
34
34
|
* add `rails generate apache_age:edge_scaffold HasJob employee_role start_node:person end_node:company`
|
35
35
|
|
36
|
+
## VERSION 0.6.0 - 2024-06-xx
|
37
|
+
|
38
|
+
**breaking changes**: update naming
|
39
|
+
* renamed `Entities::Vertex` module to `Entities::Node`
|
40
|
+
* renamed `UniqueVertex` to `UniqueNode`
|
41
|
+
* rebamed `AgeTypeGenerator` to `Type::Factory`
|
42
|
+
* move `lib/generators/*` intp `lib/apache_age/generators`
|
43
|
+
|
44
|
+
here is the [commit](https://github.com/marpori/rails_age_demo_app/commit/a6f0708f2bbc165eddbafe63896068a72d803b17) to see the changes te demo app to make it work for release 0.6.0
|
45
|
+
|
36
46
|
## VERSION 0.5.3 - 2024-06-23
|
37
47
|
|
38
48
|
- **Edge Scaffold** (generates edge, type, view and controller) - without start-/end-nodes types!?
|
data/README.md
CHANGED
@@ -32,7 +32,7 @@ rails generate apache_age:scaffold_node Person first_name last_name
|
|
32
32
|
rails generate apache_age:scaffold_edge HasJob employee_role start_date:date
|
33
33
|
```
|
34
34
|
|
35
|
-
Ideally, edit the HasJob class so that `start_node` would use a type `:person` and the `end_node` uses at type `:company`
|
35
|
+
Ideally, edit the HasJob class so that `start_node` would use a type `:person` and the `end_node` uses at type `:company` - this is not yet supported by the generator, but easy to do manually as shown below. (The problem is that I havent been able to figure out how load all the rails types in the testing environment).
|
36
36
|
|
37
37
|
ie:
|
38
38
|
```ruby
|
@@ -41,8 +41,8 @@ class HasJob
|
|
41
41
|
include ApacheAge::Entities::Edge
|
42
42
|
|
43
43
|
attribute :employee_role, :string
|
44
|
-
attribute :start_node, :person
|
45
|
-
attribute :end_node, :company
|
44
|
+
attribute :start_node, :person
|
45
|
+
attribute :end_node, :company
|
46
46
|
|
47
47
|
validates :employee_role, presence: true
|
48
48
|
validate :validate_unique_edge
|
@@ -1,20 +1,20 @@
|
|
1
1
|
# config/initializers/types.rb
|
2
2
|
|
3
|
-
require 'apache_age/types/
|
3
|
+
require 'apache_age/types/factory'
|
4
4
|
# USAGE (with edges or nodes) - ie:
|
5
|
-
# require_dependency '
|
5
|
+
# require_dependency 'company'
|
6
6
|
# ActiveModel::Type.register(
|
7
|
-
# :company, ApacheAge::Types::
|
7
|
+
# :company, ApacheAge::Types::Factory.type_for(Company)
|
8
8
|
# )
|
9
9
|
|
10
10
|
Rails.application.config.to_prepare do
|
11
11
|
# Register AGE types
|
12
12
|
require_dependency 'apache_age/node'
|
13
13
|
ActiveModel::Type.register(
|
14
|
-
:node, ApacheAge::Types::
|
14
|
+
:node, ApacheAge::Types::Factory.type_for(ApacheAge::Node)
|
15
15
|
)
|
16
16
|
require_dependency 'apache_age/edge'
|
17
17
|
ActiveModel::Type.register(
|
18
|
-
:edge, ApacheAge::Types::
|
18
|
+
:edge, ApacheAge::Types::Factory.type_for(ApacheAge::Edge)
|
19
19
|
)
|
20
20
|
end
|
@@ -1,53 +1,53 @@
|
|
1
|
-
module ApacheAge
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# module ApacheAge
|
2
|
+
# module Entities
|
3
|
+
# module Vertex
|
4
|
+
# extend ActiveSupport::Concern
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# included do
|
7
|
+
# include ActiveModel::Model
|
8
|
+
# include ActiveModel::Dirty
|
9
|
+
# include ActiveModel::Attributes
|
10
10
|
|
11
|
-
|
11
|
+
# attribute :id, :integer
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
# extend ApacheAge::Entities::ClassMethods
|
14
|
+
# include ApacheAge::Entities::CommonMethods
|
15
|
+
# end
|
16
16
|
|
17
|
-
|
17
|
+
# def age_type = 'vertex'
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
19
|
+
# # AgeSchema::Nodes::Company.create(company_name: 'Bedrock Quarry')
|
20
|
+
# # SELECT *
|
21
|
+
# # FROM cypher('age_schema', $$
|
22
|
+
# # CREATE (company:Company {company_name: 'Bedrock Quarry'})
|
23
|
+
# # RETURN company
|
24
|
+
# # $$) as (Company agtype);
|
25
|
+
# def create_sql
|
26
|
+
# alias_name = age_alias || age_label.downcase
|
27
|
+
# <<-SQL
|
28
|
+
# SELECT *
|
29
|
+
# FROM cypher('#{age_graph}', $$
|
30
|
+
# CREATE (#{alias_name}#{self})
|
31
|
+
# RETURN #{alias_name}
|
32
|
+
# $$) as (#{age_label} agtype);
|
33
|
+
# SQL
|
34
|
+
# end
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
end
|
36
|
+
# # So far just properties of string type with '' around them
|
37
|
+
# def update_sql
|
38
|
+
# alias_name = age_alias || age_label.downcase
|
39
|
+
# set_caluse =
|
40
|
+
# age_properties.map { |k, v| v ? "#{alias_name}.#{k} = '#{v}'" : "#{alias_name}.#{k} = NULL" }.join(', ')
|
41
|
+
# <<-SQL
|
42
|
+
# SELECT *
|
43
|
+
# FROM cypher('#{age_graph}', $$
|
44
|
+
# MATCH (#{alias_name}:#{age_label})
|
45
|
+
# WHERE id(#{alias_name}) = #{id}
|
46
|
+
# SET #{set_caluse}
|
47
|
+
# RETURN #{alias_name}
|
48
|
+
# $$) as (#{age_label} agtype);
|
49
|
+
# SQL
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
# end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# lib/apache_age/types/
|
1
|
+
# lib/apache_age/types/factory.rb
|
2
2
|
# Automatically generates ActiveModel::Type classes
|
3
3
|
# Dynamically builds this (as a concrete example):
|
4
4
|
# module ApacheAge
|
@@ -22,8 +22,8 @@
|
|
22
22
|
# end
|
23
23
|
module ApacheAge
|
24
24
|
module Types
|
25
|
-
class
|
26
|
-
def self.
|
25
|
+
class Factory
|
26
|
+
def self.type_for(klass)
|
27
27
|
Class.new(ActiveModel::Type::Value) do
|
28
28
|
define_method(:cast) do |value|
|
29
29
|
case value
|
@@ -1,32 +1,32 @@
|
|
1
|
-
# lib/apache_age/validators/unique_vertex.rb
|
1
|
+
# # lib/apache_age/validators/unique_vertex.rb
|
2
2
|
|
3
|
-
# Usage (within an Age Model)
|
4
|
-
# validates_with(
|
5
|
-
# ApacheAge::Validators::UniqueVertex,
|
6
|
-
# attributes: [:first_name, :last_name, :gender]
|
7
|
-
# )
|
3
|
+
# # Usage (within an Age Model)
|
4
|
+
# # validates_with(
|
5
|
+
# # ApacheAge::Validators::UniqueVertex,
|
6
|
+
# # attributes: [:first_name, :last_name, :gender]
|
7
|
+
# # )
|
8
8
|
|
9
|
-
module ApacheAge
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
# module ApacheAge
|
10
|
+
# module Validators
|
11
|
+
# class UniqueVertex < ActiveModel::Validator
|
12
|
+
# def validate(record)
|
13
|
+
# allowed_keys = record.age_properties.keys
|
14
|
+
# attributes = options[:attributes]
|
15
|
+
# return if attributes.blank?
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
# record_attribs =
|
18
|
+
# attributes
|
19
|
+
# .map { |attr| [attr, record.send(attr)] }
|
20
|
+
# .to_h.symbolize_keys
|
21
|
+
# .slice(*allowed_keys)
|
22
|
+
# query = record.class.find_by(record_attribs)
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
# # if no match is found or if it finds itself, it's valid
|
25
|
+
# return if query.blank? || (query.id == record.id)
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
27
|
+
# record.errors.add(:base, 'record not unique')
|
28
|
+
# attributes.each { record.errors.add(_1, 'property combination not unique') }
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# module ApacheAge
|
2
|
+
# module VertexTypeValidator
|
3
|
+
# def
|
4
|
+
# # Register the AGE typesvertex_attribute(attribute_name, type_symbol, klass)
|
5
|
+
# attribute attribute_name, type_symbol
|
6
|
+
|
7
|
+
# validate do
|
8
|
+
# value = send(attribute_name)
|
9
|
+
# unless value.is_a?(klass)
|
10
|
+
# errors.add(attribute_name, "must be a #{klass.name}")
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
# end
|
15
|
+
# end
|
@@ -23,9 +23,9 @@ Example:
|
|
23
23
|
validates :employee_role, presence: true
|
24
24
|
validates :begin_date, presence: true
|
25
25
|
|
26
|
-
# unique
|
26
|
+
# unique edge validator (remove any attributes that are not important to uniqueness)
|
27
27
|
validates_with(
|
28
|
-
ApacheAge::Validators::
|
28
|
+
ApacheAge::Validators::UniqueEdge,
|
29
29
|
attributes: [:employee_role, :begin_date :start_node, :end_node]
|
30
30
|
)
|
31
31
|
end
|
@@ -35,12 +35,12 @@ Example:
|
|
35
35
|
`bin/rails g apache_age:edge Animals/Cat name age:integer`
|
36
36
|
|
37
37
|
This creates:
|
38
|
-
`app/
|
38
|
+
`app/edges/animals/has_cat.rb`
|
39
39
|
|
40
40
|
with the contents
|
41
41
|
```
|
42
|
-
class Animals::
|
43
|
-
include ApacheAge::Entities::
|
42
|
+
class Animals::HatCat
|
43
|
+
include ApacheAge::Entities::Edge
|
44
44
|
|
45
45
|
attribute :name, :string
|
46
46
|
attribute :age, :integer
|
@@ -48,9 +48,9 @@ Example:
|
|
48
48
|
validates :name, presence: true
|
49
49
|
validates :age, presence: true
|
50
50
|
|
51
|
-
# unique
|
51
|
+
# unique edge validator (remove any attributes that are not important to uniqueness)
|
52
52
|
validates_with(
|
53
|
-
ApacheAge::Validators::
|
53
|
+
ApacheAge::Validators::UniqueEdge,
|
54
54
|
attributes: [:name, :age, :start_node, :end_node]
|
55
55
|
)
|
56
56
|
end
|
@@ -14,6 +14,7 @@ module ApacheAge
|
|
14
14
|
|
15
15
|
source_root File.expand_path('templates', __dir__)
|
16
16
|
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
17
|
+
class_option :skip_namespace, type: :boolean, default: true, desc: "Skip namespace 'rails_age' in generated files"
|
17
18
|
|
18
19
|
def perform_task
|
19
20
|
age_type = 'edge'
|
@@ -40,14 +40,6 @@ module ApacheAge
|
|
40
40
|
end.join("\n") + "\n"
|
41
41
|
end
|
42
42
|
|
43
|
-
# def indented_end_namespace
|
44
|
-
# return '' if parent_module.empty?
|
45
|
-
|
46
|
-
# parent_module.split('::').map.with_index do |_, index|
|
47
|
-
# "#{' ' * (parent_module.split('::').length - 1 - index)}end"
|
48
|
-
# end.join("\n") + "\n"
|
49
|
-
# end
|
50
|
-
|
51
43
|
def add_type_config
|
52
44
|
return unless File.exist?(types_config_file)
|
53
45
|
|
@@ -79,7 +71,7 @@ module ApacheAge
|
|
79
71
|
<<-RUBY
|
80
72
|
require_dependency '#{file_path}'
|
81
73
|
ActiveModel::Type.register(
|
82
|
-
:#{type_name}, ApacheAge::Types::
|
74
|
+
:#{type_name}, ApacheAge::Types::Factory.type_for(#{entity_namespaced_class})
|
83
75
|
)
|
84
76
|
RUBY
|
85
77
|
end
|
@@ -12,7 +12,7 @@ Example:
|
|
12
12
|
with the contents:
|
13
13
|
```
|
14
14
|
class Cat
|
15
|
-
include ApacheAge::Entities::
|
15
|
+
include ApacheAge::Entities::Node
|
16
16
|
|
17
17
|
attribute :full_name, :string
|
18
18
|
attribute :birthdate, :date
|
@@ -22,7 +22,7 @@ Example:
|
|
22
22
|
|
23
23
|
# unique node validator (remove any attributes that are not important to uniqueness)
|
24
24
|
validates_with(
|
25
|
-
ApacheAge::Validators::
|
25
|
+
ApacheAge::Validators::UniqueNode,
|
26
26
|
attributes: [:full_name, :birthdate]
|
27
27
|
)
|
28
28
|
end
|
@@ -37,7 +37,7 @@ Example:
|
|
37
37
|
with the contents
|
38
38
|
```
|
39
39
|
class Animals::Cat
|
40
|
-
include ApacheAge::Entities::
|
40
|
+
include ApacheAge::Entities::Node
|
41
41
|
|
42
42
|
attribute :name, :string
|
43
43
|
attribute :age, :integer
|
@@ -47,7 +47,7 @@ Example:
|
|
47
47
|
|
48
48
|
# unique node validator (remove any attributes that are not important to uniqueness)
|
49
49
|
validates_with(
|
50
|
-
ApacheAge::Validators::
|
50
|
+
ApacheAge::Validators::UniqueNode,
|
51
51
|
attributes: [:name, :age]
|
52
52
|
)
|
53
53
|
end
|
@@ -9,9 +9,9 @@ module ApacheAge
|
|
9
9
|
include ApacheAge::GeneratorEntityHelpers
|
10
10
|
|
11
11
|
desc "Generates node (model) with attributes."
|
12
|
-
|
13
12
|
source_root File.expand_path('templates', __dir__)
|
14
13
|
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
14
|
+
class_option :skip_namespace, type: :boolean, default: true, desc: "Skip namespace 'rails_age' in generated files"
|
15
15
|
|
16
16
|
def perform_task
|
17
17
|
age_type = 'node'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class <%= class_name %>
|
2
|
-
include ApacheAge::Entities::
|
2
|
+
include ApacheAge::Entities::Node
|
3
3
|
|
4
4
|
<%- attributes_list.each do |attribute| -%>
|
5
5
|
attribute :<%= attribute[:name] %>, :<%= attribute[:type] %>
|
@@ -11,7 +11,7 @@ class <%= class_name %>
|
|
11
11
|
|
12
12
|
# custom unique node validator (remove any attributes that are NOT important to uniqueness)
|
13
13
|
validates_with(
|
14
|
-
ApacheAge::Validators::
|
14
|
+
ApacheAge::Validators::UniqueNode,
|
15
15
|
attributes: <%= unique_attributes.inspect %>
|
16
16
|
)
|
17
17
|
end
|
@@ -9,10 +9,9 @@ module ApacheAge
|
|
9
9
|
include Rails::Generators::ResourceHelpers
|
10
10
|
|
11
11
|
desc "Generates an edge, and its controller and views with the given attributes."
|
12
|
-
|
13
12
|
source_root File.expand_path("templates", __dir__)
|
14
|
-
|
15
13
|
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
14
|
+
class_option :skip_namespace, type: :boolean, default: true, desc: "Skip namespace 'rails_age' in generated files"
|
16
15
|
|
17
16
|
def create_model_file
|
18
17
|
invoke 'apache_age:edge', [name] + attributes.collect { |attr| "#{attr.name}:#{attr.type}" }
|
@@ -9,10 +9,9 @@ module ApacheAge
|
|
9
9
|
include Rails::Generators::ResourceHelpers
|
10
10
|
|
11
11
|
desc "Generates a node, and its controller and views with the given attributes."
|
12
|
-
|
13
12
|
source_root File.expand_path("templates", __dir__)
|
14
|
-
|
15
13
|
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
14
|
+
class_option :skip_namespace, type: :boolean, default: true, desc: "Skip namespace 'rails_age' in generated files"
|
16
15
|
|
17
16
|
def create_model_file
|
18
17
|
invoke 'apache_age:node', [name] + attributes.collect { |attr| "#{attr.name}:#{attr.type}" }
|
data/lib/rails_age/version.rb
CHANGED
data/lib/rails_age.rb
CHANGED
@@ -9,7 +9,6 @@ module ApacheAge
|
|
9
9
|
require 'apache_age/entities/class_methods'
|
10
10
|
require 'apache_age/entities/common_methods'
|
11
11
|
require 'apache_age/entities/entity'
|
12
|
-
require 'apache_age/entities/vertex'
|
13
12
|
require 'apache_age/entities/node'
|
14
13
|
require 'apache_age/entities/edge'
|
15
14
|
require 'apache_age/node'
|
@@ -17,7 +16,5 @@ module ApacheAge
|
|
17
16
|
require 'apache_age/validators/expected_node_type'
|
18
17
|
require 'apache_age/validators/unique_node'
|
19
18
|
require 'apache_age/validators/unique_edge'
|
20
|
-
require 'apache_age/
|
21
|
-
require 'apache_age/types/age_type_factory'
|
22
|
-
require 'apache_age/types/age_type_generator'
|
19
|
+
require 'apache_age/types/factory'
|
23
20
|
end
|
data/lib/tasks/config_types.rake
CHANGED
@@ -5,28 +5,28 @@ namespace :apache_age do
|
|
5
5
|
desc "Install AGE types from rails_age into the rails initializers"
|
6
6
|
task :config_types => :environment do
|
7
7
|
types_file_path = File.expand_path("#{Rails.root}/config/initializers/types.rb", __FILE__)
|
8
|
-
required_file_path = "require 'apache_age/types/
|
8
|
+
required_file_path = "require 'apache_age/types/factory'"
|
9
9
|
required_file_content =
|
10
10
|
<<~RUBY
|
11
|
-
require 'apache_age/types/
|
11
|
+
require 'apache_age/types/factory'
|
12
12
|
# AGE Type Definition Usage (edges/nodes):
|
13
|
-
# require_dependency '
|
13
|
+
# require_dependency 'company'
|
14
14
|
# ActiveModel::Type.register(
|
15
|
-
# :company, ApacheAge::Types::
|
15
|
+
# :company, ApacheAge::Types::Factory.type_for(Company)
|
16
16
|
# )
|
17
17
|
RUBY
|
18
18
|
node_type_content =
|
19
19
|
<<-RUBY
|
20
20
|
require_dependency 'apache_age/node'
|
21
21
|
ActiveModel::Type.register(
|
22
|
-
:node, ApacheAge::Types::
|
22
|
+
:node, ApacheAge::Types::Factory.type_for(ApacheAge::Node)
|
23
23
|
)
|
24
24
|
RUBY
|
25
25
|
edge_type_content =
|
26
26
|
<<-RUBY
|
27
27
|
require_dependency 'apache_age/edge'
|
28
28
|
ActiveModel::Type.register(
|
29
|
-
:edge, ApacheAge::Types::
|
29
|
+
:edge, ApacheAge::Types::Factory.type_for(ApacheAge::Edge)
|
30
30
|
)
|
31
31
|
RUBY
|
32
32
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_age
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bill Tihen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -104,13 +104,13 @@ files:
|
|
104
104
|
- lib/apache_age/entities/node.rb
|
105
105
|
- lib/apache_age/entities/vertex.rb
|
106
106
|
- lib/apache_age/node.rb
|
107
|
-
- lib/apache_age/types/
|
108
|
-
- lib/apache_age/types/age_type_generator.rb
|
107
|
+
- lib/apache_age/types/factory.rb
|
109
108
|
- lib/apache_age/validators/expected_node_type.rb
|
109
|
+
- lib/apache_age/validators/node_type_validator.rb
|
110
110
|
- lib/apache_age/validators/unique_edge.rb
|
111
111
|
- lib/apache_age/validators/unique_node.rb
|
112
112
|
- lib/apache_age/validators/unique_vertex.rb
|
113
|
-
- lib/apache_age/validators/vertex_type_validator
|
113
|
+
- lib/apache_age/validators/vertex_type_validator.rb
|
114
114
|
- lib/generators/apache_age/edge/USAGE
|
115
115
|
- lib/generators/apache_age/edge/edge_generator.rb
|
116
116
|
- lib/generators/apache_age/edge/templates/edge.rb.tt
|
@@ -121,7 +121,6 @@ files:
|
|
121
121
|
- lib/generators/apache_age/node/templates/node.rb.tt
|
122
122
|
- lib/generators/apache_age/scaffold_edge/USAGE
|
123
123
|
- lib/generators/apache_age/scaffold_edge/scaffold_edge_generator.rb
|
124
|
-
- lib/generators/apache_age/scaffold_edge/scaffold_node_generator.rb
|
125
124
|
- lib/generators/apache_age/scaffold_edge/templates/controller.rb.tt
|
126
125
|
- lib/generators/apache_age/scaffold_edge/templates/views/_form.html.erb.tt
|
127
126
|
- lib/generators/apache_age/scaffold_edge/templates/views/edit.html.erb.tt
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# lib/apache_age/types/age_type_generator.rb
|
2
|
-
# Automatically generates ActiveModel::Type classes
|
3
|
-
# Dynamically builds this (as a concrete example):
|
4
|
-
# module ApacheAge
|
5
|
-
# module Types
|
6
|
-
# class CompanyType < ActiveModel::Type::Value
|
7
|
-
# def cast(value)
|
8
|
-
# case value
|
9
|
-
# when Nodes::Company
|
10
|
-
# value
|
11
|
-
# when Hash
|
12
|
-
# Nodes::Company.new(value)
|
13
|
-
# else
|
14
|
-
# nil
|
15
|
-
# end
|
16
|
-
# end
|
17
|
-
# def serialize(value)
|
18
|
-
# value.is_a?(Nodes::Company) ? value.attributes : nil
|
19
|
-
# end
|
20
|
-
# end
|
21
|
-
# end
|
22
|
-
# end
|
23
|
-
module ApacheAge
|
24
|
-
module Types
|
25
|
-
class AgeTypeGenerator
|
26
|
-
def self.create_type_for(klass)
|
27
|
-
Class.new(ActiveModel::Type::Value) do
|
28
|
-
define_method(:cast) do |value|
|
29
|
-
case value
|
30
|
-
when klass
|
31
|
-
value
|
32
|
-
when Hash
|
33
|
-
klass.new(value)
|
34
|
-
else
|
35
|
-
nil
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
define_method(:serialize) do |value|
|
40
|
-
value.is_a?(klass) ? value.attributes : nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
# lib/generators/apache_age/scaffold_node/scaffold_node_generator.rb
|
2
|
-
|
3
|
-
require 'rails/generators'
|
4
|
-
require 'rails/generators/named_base'
|
5
|
-
require 'rails/generators/resource_helpers'
|
6
|
-
|
7
|
-
module ApacheAge
|
8
|
-
class ScaffoldNodeGenerator < Rails::Generators::NamedBase
|
9
|
-
include Rails::Generators::ResourceHelpers
|
10
|
-
|
11
|
-
desc "Generates a node, and its controller and views with the given attributes."
|
12
|
-
|
13
|
-
source_root File.expand_path("templates", __dir__)
|
14
|
-
|
15
|
-
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
16
|
-
|
17
|
-
def create_model_file
|
18
|
-
invoke 'apache_age:edge', [name] + attributes.collect { |attr| "#{attr.name}:#{attr.type}" }
|
19
|
-
end
|
20
|
-
|
21
|
-
def create_controller_files
|
22
|
-
template(
|
23
|
-
"controller.rb.tt",
|
24
|
-
File.join(Rails.root, "app/controllers", controller_class_path, "#{controller_file_name}_controller.rb")
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
|
-
def create_route
|
29
|
-
route_content = route_text(class_path, file_name)
|
30
|
-
inject_into_file(
|
31
|
-
File.join(Rails.root, 'config', 'routes.rb'), "\n#{route_content}",
|
32
|
-
after: "Rails.application.routes.draw do"
|
33
|
-
)
|
34
|
-
end
|
35
|
-
|
36
|
-
def copy_view_files
|
37
|
-
available_views.each do |view|
|
38
|
-
view_name = view == 'partial' ? "_#{singular_table_name}" : view
|
39
|
-
filename = filename_with_extensions(view_name)
|
40
|
-
template(
|
41
|
-
"views/#{view}.html.erb.tt",
|
42
|
-
File.join(Rails.root, "app/views", controller_file_path, filename)
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def available_views
|
50
|
-
%w[index edit show new partial _form]
|
51
|
-
end
|
52
|
-
|
53
|
-
def filename_with_extensions(view)
|
54
|
-
[view, :html, :erb].compact.join('.')
|
55
|
-
end
|
56
|
-
|
57
|
-
def route_text(class_path, file_name)
|
58
|
-
return " resources :#{file_name.pluralize}" if class_path.empty?
|
59
|
-
|
60
|
-
<<-RUBY
|
61
|
-
namespace :#{class_path.join(':')} do
|
62
|
-
resources :#{file_name.pluralize}
|
63
|
-
end
|
64
|
-
RUBY
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|