rexport 1.2.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +13 -0
- data/Rakefile +3 -8
- data/app/helpers/exports_helper.rb +38 -16
- data/app/views/exports/_rexport_model.html.erb +2 -2
- data/config/routes.rb +4 -2
- data/lib/rexport/data_field.rb +27 -6
- data/lib/rexport/data_fields.rb +8 -11
- data/lib/rexport/export_filter_methods.rb +11 -8
- data/lib/rexport/export_filters_controller_methods.rb +2 -0
- data/lib/rexport/export_item_methods.rb +6 -4
- data/lib/rexport/export_item_sortings_controller_methods.rb +3 -1
- data/lib/rexport/export_items_controller_methods.rb +3 -1
- data/lib/rexport/export_methods.rb +53 -41
- data/lib/rexport/exports_controller_methods.rb +10 -10
- data/lib/rexport/formatter.rb +18 -0
- data/lib/rexport/rexport_model.rb +33 -37
- data/lib/rexport/tree_node.rb +5 -2
- data/lib/rexport/version.rb +3 -1
- data/lib/rexport.rb +15 -12
- metadata +12 -68
- data/README.rdoc +0 -17
- data/test/factories.rb +0 -111
- data/test/test_helper.rb +0 -167
- data/test/unit/data_field_test.rb +0 -25
- data/test/unit/data_fields_test.rb +0 -75
- data/test/unit/export_filter_methods_test.rb +0 -37
- data/test/unit/export_item_methods_test.rb +0 -21
- data/test/unit/export_methods_test.rb +0 -226
- data/test/unit/rexport_model_test.rb +0 -137
- data/test/unit/tree_node_test.rb +0 -43
@@ -1,15 +1,19 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rexport # :nodoc:
|
2
4
|
class RexportModel
|
3
5
|
attr_accessor :klass, :path
|
4
6
|
|
7
|
+
delegate :name, to: :klass
|
8
|
+
|
5
9
|
def initialize(klass, path: nil)
|
6
10
|
self.klass = klass
|
7
|
-
self.path = path
|
11
|
+
self.path = path&.to_s
|
8
12
|
initialize_rexport_fields
|
9
13
|
end
|
10
14
|
|
11
15
|
def rexport_fields
|
12
|
-
@rexport_fields ||= HashWithIndifferentAccess.new
|
16
|
+
@rexport_fields ||= ActiveSupport::HashWithIndifferentAccess.new
|
13
17
|
end
|
14
18
|
|
15
19
|
def rexport_fields_array
|
@@ -17,7 +21,7 @@ module Rexport #:nodoc:
|
|
17
21
|
end
|
18
22
|
|
19
23
|
def field_path(field_name)
|
20
|
-
[path, field_name].compact *
|
24
|
+
[path, field_name].compact * "."
|
21
25
|
end
|
22
26
|
|
23
27
|
def collection_from_association(association)
|
@@ -29,13 +33,7 @@ module Rexport #:nodoc:
|
|
29
33
|
end
|
30
34
|
|
31
35
|
def filter_column(field)
|
32
|
-
|
33
|
-
association = field.method.split('.').first
|
34
|
-
klass.reflect_on_association(association.to_sym).foreign_key
|
35
|
-
end
|
36
|
-
|
37
|
-
def name
|
38
|
-
klass.name
|
36
|
+
foreign_key_for(field.association_name) || field.method
|
39
37
|
end
|
40
38
|
|
41
39
|
# Adds a data item to rexport_fields
|
@@ -55,33 +53,23 @@ module Rexport #:nodoc:
|
|
55
53
|
# :filter - if true will send type: :association to add_report_field
|
56
54
|
def add_association_methods(options = {})
|
57
55
|
options.stringify_keys!
|
58
|
-
options.assert_valid_keys(%w
|
59
|
-
|
60
|
-
methods = options.reverse_merge('methods' => 'name')['methods']
|
61
|
-
methods = [methods] if methods.kind_of?(String)
|
62
|
-
|
63
|
-
associations = options['associations']
|
64
|
-
associations = [associations] if associations.kind_of?(String)
|
56
|
+
options.assert_valid_keys(%w[associations methods filter])
|
65
57
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
58
|
+
add_rexport_fields_for(
|
59
|
+
associations: [options["associations"]].flatten,
|
60
|
+
methods: [options["methods"] || "name"].flatten,
|
61
|
+
type: (options["filter"] ? :association : nil)
|
62
|
+
)
|
73
63
|
end
|
74
64
|
|
75
65
|
# Returns an array of export methods corresponding with field_names
|
76
66
|
def get_rexport_methods(*field_names)
|
77
67
|
field_names.flatten.map do |f|
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
'undefined_rexport_field'
|
84
|
-
end
|
68
|
+
components = f.to_s.split(".")
|
69
|
+
field_name = components.pop
|
70
|
+
components.push(get_rexport_model(components).get_rexport_method(field_name)) * "."
|
71
|
+
rescue NoMethodError
|
72
|
+
"undefined_rexport_field"
|
85
73
|
end
|
86
74
|
end
|
87
75
|
|
@@ -101,15 +89,23 @@ module Rexport #:nodoc:
|
|
101
89
|
|
102
90
|
# Returns the export method for a given field_name
|
103
91
|
def get_rexport_method(field_name)
|
104
|
-
|
105
|
-
rexport_fields[field_name].method
|
106
|
-
else
|
107
|
-
raise NoMethodError
|
108
|
-
end
|
92
|
+
rexport_fields[field_name]&.method || raise(NoMethodError)
|
109
93
|
end
|
110
94
|
|
111
95
|
private
|
112
96
|
|
97
|
+
def add_rexport_fields_for(associations:, methods:, type:)
|
98
|
+
associations.each do |association|
|
99
|
+
methods.each do |method|
|
100
|
+
add_rexport_field("#{association}_#{method}", method: "#{association}.#{method}", type: type)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def foreign_key_for(association_name)
|
106
|
+
klass.reflect_on_association(association_name).foreign_key if association_name.present?
|
107
|
+
end
|
108
|
+
|
113
109
|
def initialize_rexport_fields
|
114
110
|
klass.content_columns.each { |field| add_rexport_field(field.name, type: field.type) }
|
115
111
|
klass.initialize_local_rexport_fields(self) if klass.respond_to?(:initialize_local_rexport_fields)
|
data/lib/rexport/tree_node.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rexport # :nodoc:
|
2
4
|
# A basic tree for building up ActiveRecord find :include parameters
|
3
5
|
class TreeNode
|
4
6
|
attr_accessor :name, :children
|
@@ -13,7 +15,8 @@ module Rexport #:nodoc:
|
|
13
15
|
# Add one or more children to the tree
|
14
16
|
def add_child(*names)
|
15
17
|
names.flatten!
|
16
|
-
return unless name = names.shift
|
18
|
+
return unless (name = names.shift)
|
19
|
+
|
17
20
|
node = children.find { |c| c.name == name }
|
18
21
|
node ? node.add_child(names) : (children << TreeNode.new(name, names))
|
19
22
|
end
|
data/lib/rexport/version.rb
CHANGED
data/lib/rexport.rb
CHANGED
@@ -1,19 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rexport/data_field"
|
4
|
+
require "rexport/data_fields"
|
5
|
+
require "rexport/export_filter_methods"
|
6
|
+
require "rexport/export_filters_controller_methods"
|
7
|
+
require "rexport/export_item_methods"
|
8
|
+
require "rexport/export_item_sortings_controller_methods"
|
9
|
+
require "rexport/export_items_controller_methods"
|
10
|
+
require "rexport/export_methods"
|
11
|
+
require "rexport/exports_controller_methods"
|
12
|
+
require "rexport/formatter"
|
13
|
+
require "rexport/rexport_model"
|
14
|
+
require "rexport/tree_node"
|
12
15
|
|
13
16
|
module Rexport
|
14
17
|
SAMPLE_SIZE = 5
|
15
18
|
|
16
19
|
class Engine < ::Rails::Engine
|
17
|
-
config.paths[
|
20
|
+
config.paths["app/views"] << File.join(File.dirname(__FILE__), "../app/views")
|
18
21
|
end
|
19
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Baldwin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-03-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -25,58 +25,16 @@ dependencies:
|
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 6.0.3
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: factory_bot
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '6.2'
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '6.2'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: sqlite3
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '1.4'
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '1.4'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: mocha
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - "~>"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '1.13'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '1.13'
|
70
28
|
description: Rexport integrates into a Rails application making model data available
|
71
29
|
for export into CSV files.
|
72
30
|
email:
|
73
|
-
-
|
31
|
+
- baldwina@brightwayslearning.org
|
74
32
|
executables: []
|
75
33
|
extensions: []
|
76
34
|
extra_rdoc_files: []
|
77
35
|
files:
|
78
36
|
- MIT-LICENSE
|
79
|
-
- README.
|
37
|
+
- README.md
|
80
38
|
- Rakefile
|
81
39
|
- app/helpers/exports_helper.rb
|
82
40
|
- app/views/export_filters/_export_filter.html.erb
|
@@ -104,22 +62,17 @@ files:
|
|
104
62
|
- lib/rexport/export_items_controller_methods.rb
|
105
63
|
- lib/rexport/export_methods.rb
|
106
64
|
- lib/rexport/exports_controller_methods.rb
|
65
|
+
- lib/rexport/formatter.rb
|
107
66
|
- lib/rexport/rexport_model.rb
|
108
67
|
- lib/rexport/tree_node.rb
|
109
68
|
- lib/rexport/version.rb
|
110
|
-
- test/factories.rb
|
111
|
-
- test/test_helper.rb
|
112
|
-
- test/unit/data_field_test.rb
|
113
|
-
- test/unit/data_fields_test.rb
|
114
|
-
- test/unit/export_filter_methods_test.rb
|
115
|
-
- test/unit/export_item_methods_test.rb
|
116
|
-
- test/unit/export_methods_test.rb
|
117
|
-
- test/unit/rexport_model_test.rb
|
118
|
-
- test/unit/tree_node_test.rb
|
119
69
|
homepage: https://github.com/wwidea/rexport
|
120
70
|
licenses:
|
121
71
|
- MIT
|
122
|
-
metadata:
|
72
|
+
metadata:
|
73
|
+
homepage_uri: https://github.com/wwidea/rexport
|
74
|
+
source_code_uri: https://github.com/wwidea/rexport
|
75
|
+
rubygems_mfa_required: 'true'
|
123
76
|
post_install_message:
|
124
77
|
rdoc_options: []
|
125
78
|
require_paths:
|
@@ -128,24 +81,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
128
81
|
requirements:
|
129
82
|
- - ">="
|
130
83
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
84
|
+
version: 2.7.0
|
132
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
86
|
requirements:
|
134
87
|
- - ">="
|
135
88
|
- !ruby/object:Gem::Version
|
136
89
|
version: '0'
|
137
90
|
requirements: []
|
138
|
-
rubygems_version: 3.
|
91
|
+
rubygems_version: 3.4.5
|
139
92
|
signing_key:
|
140
93
|
specification_version: 4
|
141
94
|
summary: Ruby on Rails gem to manage exports.
|
142
|
-
test_files:
|
143
|
-
- test/factories.rb
|
144
|
-
- test/test_helper.rb
|
145
|
-
- test/unit/data_field_test.rb
|
146
|
-
- test/unit/data_fields_test.rb
|
147
|
-
- test/unit/export_filter_methods_test.rb
|
148
|
-
- test/unit/export_item_methods_test.rb
|
149
|
-
- test/unit/export_methods_test.rb
|
150
|
-
- test/unit/rexport_model_test.rb
|
151
|
-
- test/unit/tree_node_test.rb
|
95
|
+
test_files: []
|
data/README.rdoc
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
=Rexport
|
2
|
-
|
3
|
-
Ruby on Rails gem to manage exports
|
4
|
-
|
5
|
-
|
6
|
-
==Installation
|
7
|
-
1. install gem
|
8
|
-
2. copy migration into application db/migrate folder and run
|
9
|
-
3. create models and mix in corresponding module
|
10
|
-
* export => export_methods
|
11
|
-
* export_item => export_item_methods
|
12
|
-
* export_filter => export_filter_methods
|
13
|
-
|
14
|
-
|
15
|
-
==License
|
16
|
-
|
17
|
-
Copyright (c) 2008-2018 Brightways Learning, released under the MIT license
|
data/test/factories.rb
DELETED
@@ -1,111 +0,0 @@
|
|
1
|
-
module Rexport
|
2
|
-
module Factories
|
3
|
-
|
4
|
-
FactoryBot.define do
|
5
|
-
|
6
|
-
factory :status do
|
7
|
-
name { 'active' }
|
8
|
-
end
|
9
|
-
|
10
|
-
factory :family do
|
11
|
-
name { 'The Sample Family' }
|
12
|
-
end
|
13
|
-
|
14
|
-
factory :student do
|
15
|
-
family { |family| family.association(:family) }
|
16
|
-
name { 'Sammy Sample' }
|
17
|
-
date_of_birth { Date.parse('2008-12-08') }
|
18
|
-
end
|
19
|
-
|
20
|
-
factory :enrollment do
|
21
|
-
status { |status| status.association(:status) }
|
22
|
-
student { |student| student.association(:student) }
|
23
|
-
grade { 1 }
|
24
|
-
updated_at { Time.now }
|
25
|
-
end
|
26
|
-
|
27
|
-
factory :second_grade_enrollment, class: 'Enrollment' do
|
28
|
-
status { |status| status.association(:status) }
|
29
|
-
grade { 2 }
|
30
|
-
end
|
31
|
-
|
32
|
-
factory :export do
|
33
|
-
name { 'Enrollment Export' }
|
34
|
-
model_class_name { 'Enrollment' }
|
35
|
-
export_items do |items|
|
36
|
-
%w(family_name_export_item grade_export_item status_name_export_item bogus_export_item).map do |item|
|
37
|
-
items.association(item)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
factory :filtered_export, class: 'Export' do
|
43
|
-
name { 'Filtered Enrollment Export' }
|
44
|
-
model_class_name { 'Enrollment' }
|
45
|
-
export_items do |items|
|
46
|
-
%w(grade_export_item status_name_export_item).map do |item|
|
47
|
-
items.association(item)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
export_filters do |filters|
|
51
|
-
%w(grade_filter status_filter).map do |filter|
|
52
|
-
filters.association(filter)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
factory :invalid_filtered_export, class: 'Export' do
|
58
|
-
name { 'Invalid Filtered Enrollment Export' }
|
59
|
-
model_class_name { 'Enrollment' }
|
60
|
-
export_items do |items|
|
61
|
-
%w(grade_export_item status_name_export_item).map do |item|
|
62
|
-
items.association(item)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
export_filters do |filters|
|
66
|
-
%w(invalid_filter).map do |filter|
|
67
|
-
filters.association(filter)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
factory :family_name_export_item, class: 'ExportItem' do
|
73
|
-
position { 1 }
|
74
|
-
name { 'Family Name' }
|
75
|
-
rexport_field { 'student.family.name' }
|
76
|
-
end
|
77
|
-
|
78
|
-
factory :grade_export_item, class: 'ExportItem' do
|
79
|
-
position { 2 }
|
80
|
-
rexport_field { 'grade' }
|
81
|
-
end
|
82
|
-
|
83
|
-
factory :status_name_export_item, class: 'ExportItem' do
|
84
|
-
position { 3 }
|
85
|
-
name { 'Status' }
|
86
|
-
rexport_field { 'status_name' }
|
87
|
-
end
|
88
|
-
|
89
|
-
factory :bogus_export_item, class: 'ExportItem' do
|
90
|
-
position { 4 }
|
91
|
-
name { 'Bogus Item' }
|
92
|
-
rexport_field { 'bogus_field' }
|
93
|
-
end
|
94
|
-
|
95
|
-
factory :grade_filter, class: 'ExportFilter' do
|
96
|
-
filter_field { 'grade' }
|
97
|
-
value { '1' }
|
98
|
-
end
|
99
|
-
|
100
|
-
factory :status_filter, class: 'ExportFilter' do
|
101
|
-
filter_field { 'status.name' }
|
102
|
-
value { 'active' }
|
103
|
-
end
|
104
|
-
|
105
|
-
factory :invalid_filter, class: 'ExportFilter' do
|
106
|
-
filter_field { 'invalid' }
|
107
|
-
value { '1' }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,167 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
SimpleCov.start do
|
3
|
-
add_filter '/test/'
|
4
|
-
end
|
5
|
-
|
6
|
-
$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
7
|
-
require "rails"
|
8
|
-
require 'active_record'
|
9
|
-
require "rexport"
|
10
|
-
|
11
|
-
require 'minitest/autorun'
|
12
|
-
require 'factory_bot'
|
13
|
-
require 'mocha/minitest'
|
14
|
-
require File.dirname(__FILE__) + '/factories'
|
15
|
-
|
16
|
-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
|
17
|
-
|
18
|
-
class ActiveSupport::TestCase
|
19
|
-
include FactoryBot::Syntax::Methods
|
20
|
-
include Rexport::Factories
|
21
|
-
|
22
|
-
def setup
|
23
|
-
suppress_output { setup_db }
|
24
|
-
Enrollment.instance_variable_set('@rexport_fields', nil)
|
25
|
-
Student.instance_variable_set('@rexport_fields', nil)
|
26
|
-
end
|
27
|
-
|
28
|
-
def teardown
|
29
|
-
teardown_db
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def setup_db
|
35
|
-
ActiveRecord::Schema.define(version: 1) do
|
36
|
-
create_table :enrollments do |t|
|
37
|
-
t.integer :student_id, :status_id, :grade
|
38
|
-
t.boolean :active
|
39
|
-
t.timestamps
|
40
|
-
end
|
41
|
-
|
42
|
-
create_table :students do |t|
|
43
|
-
t.integer :family_id
|
44
|
-
t.string :name
|
45
|
-
t.date :date_of_birth
|
46
|
-
t.timestamps
|
47
|
-
end
|
48
|
-
|
49
|
-
create_table :families do |t|
|
50
|
-
t.string :name
|
51
|
-
t.timestamps
|
52
|
-
end
|
53
|
-
|
54
|
-
create_table :statuses do |t|
|
55
|
-
t.string :name
|
56
|
-
end
|
57
|
-
|
58
|
-
create_table :exports do |t|
|
59
|
-
t.string :name
|
60
|
-
t.string :model_class_name
|
61
|
-
t.text :description
|
62
|
-
end
|
63
|
-
|
64
|
-
create_table :export_items do |t|
|
65
|
-
t.integer :export_id
|
66
|
-
t.string :name, :rexport_field
|
67
|
-
t.integer :position
|
68
|
-
end
|
69
|
-
|
70
|
-
create_table :export_filters do |t|
|
71
|
-
t.integer :export_id
|
72
|
-
t.string :filter_field, :value
|
73
|
-
end
|
74
|
-
|
75
|
-
create_table :self_referential_checks do |t|
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def teardown_db
|
81
|
-
ActiveRecord::Base.connection.data_sources.each do |table|
|
82
|
-
ActiveRecord::Base.connection.drop_table(table)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def suppress_output
|
87
|
-
original_stdout = $stdout.clone
|
88
|
-
$stdout.reopen File.new('/dev/null', 'w')
|
89
|
-
yield
|
90
|
-
ensure
|
91
|
-
$stdout.reopen original_stdout
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
class ActiveRecord::Base
|
96
|
-
class << self
|
97
|
-
def acts_as_list(options = {})
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
class Enrollment < ActiveRecord::Base
|
103
|
-
include Rexport::DataFields
|
104
|
-
belongs_to :student
|
105
|
-
belongs_to :status
|
106
|
-
belongs_to :ilp_status, class_name: 'Status', foreign_key: 'ilp_status_id'
|
107
|
-
belongs_to :self_referential_check
|
108
|
-
|
109
|
-
def foo
|
110
|
-
'bar'
|
111
|
-
end
|
112
|
-
|
113
|
-
private
|
114
|
-
|
115
|
-
def self.initialize_local_rexport_fields(rexport_model)
|
116
|
-
rexport_model.add_rexport_field(:foo_method, method: :foo)
|
117
|
-
rexport_model.add_rexport_field(:bad_method, method: 'bad_method')
|
118
|
-
rexport_model.add_association_methods(associations: %w(status ilp_status))
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
class Student < ActiveRecord::Base
|
123
|
-
include Rexport::DataFields
|
124
|
-
belongs_to :family
|
125
|
-
has_many :enrollments
|
126
|
-
|
127
|
-
def self.find_family_for_rexport
|
128
|
-
Family.order(:name)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
class Family < ActiveRecord::Base
|
133
|
-
include Rexport::DataFields
|
134
|
-
has_many :students
|
135
|
-
|
136
|
-
def foo
|
137
|
-
'bar'
|
138
|
-
end
|
139
|
-
|
140
|
-
private
|
141
|
-
|
142
|
-
def self.initialize_local_rexport_fields(rexport_model)
|
143
|
-
rexport_model.add_rexport_field(:foo_method, method: :foo)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
class Status < ActiveRecord::Base
|
148
|
-
# does not include Rexport
|
149
|
-
has_many :enrollments
|
150
|
-
end
|
151
|
-
|
152
|
-
class Export < ActiveRecord::Base
|
153
|
-
include Rexport::ExportMethods
|
154
|
-
end
|
155
|
-
|
156
|
-
class ExportItem < ActiveRecord::Base
|
157
|
-
include Rexport::ExportItemMethods
|
158
|
-
end
|
159
|
-
|
160
|
-
class ExportFilter < ActiveRecord::Base
|
161
|
-
include Rexport::ExportFilterMethods
|
162
|
-
end
|
163
|
-
|
164
|
-
class SelfReferentialCheck < ActiveRecord::Base
|
165
|
-
include Rexport::DataFields
|
166
|
-
belongs_to :enrollment
|
167
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class DataFieldTest < ActiveSupport::TestCase
|
4
|
-
test 'should stringify name' do
|
5
|
-
assert_equal 'foo', Rexport::DataField.new(:foo).name
|
6
|
-
end
|
7
|
-
|
8
|
-
test 'should use name for method' do
|
9
|
-
assert_equal 'foo', Rexport::DataField.new(:foo).method
|
10
|
-
end
|
11
|
-
|
12
|
-
test 'should save method' do
|
13
|
-
assert_equal 'bar', Rexport::DataField.new(:foo, method: :bar).method
|
14
|
-
end
|
15
|
-
|
16
|
-
test 'should save type' do
|
17
|
-
assert_equal :type_test, Rexport::DataField.new(:test, type: :type_test).type
|
18
|
-
end
|
19
|
-
|
20
|
-
test 'should_sort_data_fields' do
|
21
|
-
a = Rexport::DataField.new(:a)
|
22
|
-
b = Rexport::DataField.new(:b)
|
23
|
-
assert_equal [a,b], [b,a].sort
|
24
|
-
end
|
25
|
-
end
|