quandl_data 1.3.9 → 1.4.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/Rakefile +15 -0
- data/UPGRADE.md +6 -0
- data/VERSION +1 -0
- data/lib/quandl/data.rb +1 -8
- data/lib/quandl/data/attributes.rb +24 -24
- data/lib/quandl/data/cleaning.rb +1 -20
- data/lib/quandl/data/operations.rb +14 -14
- data/lib/quandl/data/validations.rb +17 -25
- data/lib/quandl/data/version.rb +1 -1
- data/lib/quandl/support.rb +1 -0
- data/lib/quandl/support/attributes.rb +82 -0
- data/quandl_data.gemspec +2 -0
- data/spec/lib/quandl/data/enumerator_spec.rb +1 -1
- data/spec/lib/quandl/data/operations_spec.rb +3 -3
- data/spec/lib/quandl/data_spec.rb +1 -1
- metadata +33 -3
- data/lib/quandl/data/enumerator.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ba35c6c066aacfe1f15e4007e95e2573594d454
|
4
|
+
data.tar.gz: 7d7418cf6699c656c2495b5621db5e700adfc794
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3801aa3d4c9b908fe7ebd532341e1e797f0882242472e18cfdf45a1b05df30fa16927dd36621ceb01d9e1375c643d7f46eaf51647ef98aea8093781c1769807c
|
7
|
+
data.tar.gz: fa211ba94b2a348724a15bb9a0ab89fc04fcbb69e98b28c633a075eaabd48e6a7d53a94c099e04554ecc3575e5c1da7c80e860947174e56946d710a8baa29e86
|
data/Rakefile
CHANGED
@@ -2,6 +2,10 @@ require "bundler"
|
|
2
2
|
require "rake"
|
3
3
|
require "bundler/gem_tasks"
|
4
4
|
require "rspec/core/rake_task"
|
5
|
+
require 'quandl/data'
|
6
|
+
require 'pry'
|
7
|
+
|
8
|
+
require 'quandl/utility/rake_tasks'
|
5
9
|
|
6
10
|
task :default => :spec
|
7
11
|
|
@@ -9,3 +13,14 @@ desc "Run all specs"
|
|
9
13
|
RSpec::Core::RakeTask.new(:spec) do |task|
|
10
14
|
task.pattern = "spec/**/*_spec.rb"
|
11
15
|
end
|
16
|
+
|
17
|
+
task :console do |t,args|
|
18
|
+
binding.pry
|
19
|
+
end
|
20
|
+
|
21
|
+
Quandl::Utility::Tasks.configure do |c|
|
22
|
+
c.name = 'quandl_data'
|
23
|
+
c.version_path = 'VERSION'
|
24
|
+
c.changelog_path = 'UPGRADE.md'
|
25
|
+
c.changelog_matching = ['^QUGC','^WIKI']
|
26
|
+
end
|
data/UPGRADE.md
CHANGED
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.4.0
|
data/lib/quandl/data.rb
CHANGED
@@ -1,19 +1,13 @@
|
|
1
1
|
require "quandl/data/version"
|
2
2
|
|
3
|
-
require
|
4
|
-
require "active_support/inflector"
|
5
|
-
require "active_support/core_ext/hash"
|
6
|
-
require "active_support/core_ext/object"
|
3
|
+
require 'quandl/support'
|
7
4
|
|
8
5
|
require "quandl/operation"
|
9
|
-
|
10
6
|
require 'quandl/babelfish'
|
11
|
-
|
12
7
|
require 'quandl/error/date_parse_error'
|
13
8
|
|
14
9
|
require 'quandl/data/attributes'
|
15
10
|
require 'quandl/data/cleaning'
|
16
|
-
require 'quandl/data/enumerator'
|
17
11
|
require 'quandl/data/operations'
|
18
12
|
require 'quandl/data/format'
|
19
13
|
require 'quandl/data/validations'
|
@@ -23,7 +17,6 @@ module Quandl
|
|
23
17
|
class Data
|
24
18
|
include Attributes
|
25
19
|
include Cleaning
|
26
|
-
include Enumerator
|
27
20
|
include Operations
|
28
21
|
include Validations
|
29
22
|
include Logging if defined?(QUANDL_LOGGER) && QUANDL_LOGGER == true
|
@@ -4,33 +4,33 @@ module Attributes
|
|
4
4
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
7
|
+
included do
|
8
|
+
|
9
|
+
include Quandl::Support::Attributes
|
10
|
+
|
11
|
+
define_attributes :headers, :pristine_data, :cleaned, :data_array
|
12
|
+
|
13
|
+
delegate *Array.forwardable_methods, to: :data_array
|
14
|
+
delegate :to_json, :as_json, to: :data_array
|
15
|
+
|
16
|
+
def headers=(value)
|
17
|
+
write_attribute(:headers, Array(value).flatten )
|
18
|
+
end
|
19
|
+
|
20
|
+
def cleaned?
|
21
|
+
read_attribute(:cleaned) == true
|
22
|
+
end
|
23
|
+
|
21
24
|
end
|
22
25
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
def assign_attributes(attrs)
|
31
|
-
attrs.each do |name, value|
|
32
|
-
self.send("#{name}=", value) if self.respond_to?("#{name}=")
|
26
|
+
def initialize(*args)
|
27
|
+
# passed an instance of quandl data?
|
28
|
+
if args.first.kind_of?(Quandl::Data)
|
29
|
+
@attributes = args.first.attributes
|
30
|
+
elsif args.first.present?
|
31
|
+
self.pristine_data = args.first
|
33
32
|
end
|
33
|
+
valid? unless cleaned?
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
data/lib/quandl/data/cleaning.rb
CHANGED
@@ -4,23 +4,10 @@ module Cleaning
|
|
4
4
|
|
5
5
|
extend ActiveSupport::Concern
|
6
6
|
|
7
|
-
def cleaned
|
8
|
-
@cleaned
|
9
|
-
end
|
10
|
-
def cleaned=(value)
|
11
|
-
@cleaned = (value == true)
|
12
|
-
end
|
13
|
-
def cleaned?
|
14
|
-
cleaned == true
|
15
|
-
end
|
16
|
-
|
17
|
-
def ensure_data_is_cleaned
|
18
|
-
data_array unless cleaned?
|
19
|
-
end
|
20
|
-
|
21
7
|
protected
|
22
8
|
|
23
9
|
def clean(data)
|
10
|
+
data = data.dup if data.is_a?(Array) &&data.respond_to?(:dup)
|
24
11
|
# check if data is dirty
|
25
12
|
requires_cleaning = ensure_data_requires_cleaning(data)
|
26
13
|
# short ciruit unless data is dirty
|
@@ -34,12 +21,6 @@ module Cleaning
|
|
34
21
|
def ensure_data_requires_cleaning(data)
|
35
22
|
# skip cleaning if already clean
|
36
23
|
return data if data.kind_of?(Array) && cleaned?
|
37
|
-
# Quandl::Data is already clean, but to avoid errors extract internal array
|
38
|
-
if data.kind_of?(Quandl::Data)
|
39
|
-
# extract headers if present
|
40
|
-
self.headers = data.headers
|
41
|
-
return data.to_date.to_a
|
42
|
-
end
|
43
24
|
# Return empty array if given empty string, nil, etc.
|
44
25
|
return [] if data.blank?
|
45
26
|
# data requires cleaning
|
@@ -43,22 +43,22 @@ module Operations
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def to_jd!
|
46
|
-
|
46
|
+
self.data_array = Quandl::Data::Format.to_jd( data_array ); self
|
47
47
|
end
|
48
48
|
|
49
49
|
def to_date!
|
50
|
-
|
50
|
+
self.data_array = Quandl::Data::Format.to_date( data_array ); self
|
51
51
|
end
|
52
52
|
|
53
53
|
def to_date_str!
|
54
|
-
|
54
|
+
self.data_array = to_date!.collect{|r| r = r.dup; r[0] = r[0].to_s; r }; self
|
55
55
|
end
|
56
56
|
|
57
57
|
def trim_start!(date)
|
58
58
|
# date format
|
59
59
|
date = Quandl::Operation::QDate.parse(date)
|
60
60
|
# reject rows with dates less than
|
61
|
-
|
61
|
+
self.data_array = to_date!.sort_descending!.delete_if do |row|
|
62
62
|
row_date = row[0]
|
63
63
|
row_date < date
|
64
64
|
end
|
@@ -69,7 +69,7 @@ module Operations
|
|
69
69
|
# date format
|
70
70
|
date = Quandl::Operation::QDate.parse(date)
|
71
71
|
# reject rows with dates less than
|
72
|
-
|
72
|
+
self.data_array = to_date!.sort_descending!.delete_if do |row|
|
73
73
|
row_date = row[0]
|
74
74
|
row_date > date
|
75
75
|
end
|
@@ -77,7 +77,7 @@ module Operations
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def limit!(amount)
|
80
|
-
|
80
|
+
self.data_array = data_array[0..( amount.to_i - 1 )]; self
|
81
81
|
end
|
82
82
|
|
83
83
|
def sort_order(dir)
|
@@ -85,21 +85,21 @@ module Operations
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def sort_ascending!
|
88
|
-
|
88
|
+
self.data_array = Quandl::Operation::Sort.asc( data_array ); self
|
89
89
|
end
|
90
90
|
|
91
91
|
def sort_descending!
|
92
|
-
|
92
|
+
self.data_array = Quandl::Operation::Sort.desc( data_array ); self
|
93
93
|
end
|
94
94
|
|
95
95
|
def to_precision!(value)
|
96
|
-
|
96
|
+
self.data_array = Quandl::Operation::Value.precision(data_array, value); self
|
97
97
|
end
|
98
98
|
|
99
99
|
def row(*args)
|
100
100
|
return @row if args[0].nil?
|
101
101
|
@row = args[0]
|
102
|
-
|
102
|
+
self.data_array = [data_array[ args[0] ]]
|
103
103
|
self
|
104
104
|
end
|
105
105
|
|
@@ -111,8 +111,8 @@ module Operations
|
|
111
111
|
def transform=(value)
|
112
112
|
return false unless Quandl::Operation::Transform.valid?(value)
|
113
113
|
@transform = value
|
114
|
-
|
115
|
-
|
114
|
+
self.data_array = Quandl::Operation::Transform.perform( data_array, value )
|
115
|
+
self.data_array
|
116
116
|
end
|
117
117
|
|
118
118
|
def collapse(*args)
|
@@ -124,7 +124,7 @@ module Operations
|
|
124
124
|
return false unless Quandl::Operation::Collapse.valid?(collapse)
|
125
125
|
@collapse = collapse
|
126
126
|
@frequency = collapse
|
127
|
-
|
127
|
+
self.data_array = Quandl::Operation::Collapse.perform( data_array, collapse )
|
128
128
|
end
|
129
129
|
|
130
130
|
def frequency
|
@@ -135,7 +135,7 @@ module Operations
|
|
135
135
|
end
|
136
136
|
|
137
137
|
def clone
|
138
|
-
self.class.new(
|
138
|
+
self.class.new( _attributes: attributes.clone )
|
139
139
|
end
|
140
140
|
|
141
141
|
def to_precision(value)
|
@@ -2,40 +2,32 @@ module Quandl
|
|
2
2
|
class Data
|
3
3
|
module Validations
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
ERROR_TYPES = [
|
6
|
+
Error::GuessDateFormat, Error::InvalidDate,
|
7
|
+
Error::UnknownDateFormat, Error::DateParseError,
|
8
|
+
CSV::MalformedCSVError ]
|
8
9
|
|
9
|
-
|
10
|
+
extend ActiveSupport::Concern
|
10
11
|
|
11
12
|
included do
|
12
|
-
ERROR_TYPES = [
|
13
|
-
Error::GuessDateFormat, Error::InvalidDate,
|
14
|
-
Error::UnknownDateFormat, Error::DateParseError,
|
15
|
-
CSV::MalformedCSVError ]
|
16
|
-
end
|
17
13
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
self.errors << error
|
22
|
-
self.data_array = []
|
23
|
-
false
|
14
|
+
include ActiveModel::Validations
|
15
|
+
|
16
|
+
validate :data_should_be_clean!
|
24
17
|
end
|
25
18
|
|
26
|
-
def
|
27
|
-
self.
|
28
|
-
self.data_array = pristine_data
|
19
|
+
def data_should_be_clean!
|
20
|
+
self.cleaned = false
|
21
|
+
self.data_array = clean(pristine_data)
|
29
22
|
true
|
23
|
+
|
24
|
+
rescue *ERROR_TYPES => err
|
25
|
+
self.errors.add( :data, err.to_s )
|
26
|
+
self.data_array = []
|
27
|
+
false
|
28
|
+
|
30
29
|
end
|
31
30
|
|
32
|
-
def errors
|
33
|
-
@errors ||= []
|
34
|
-
end
|
35
|
-
def errors=(value)
|
36
|
-
@errors = value
|
37
|
-
end
|
38
|
-
|
39
31
|
end
|
40
32
|
end
|
41
33
|
end
|
data/lib/quandl/data/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require 'quandl/support/attributes'
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
require "active_support/all"
|
3
|
+
|
4
|
+
module Quandl
|
5
|
+
module Support
|
6
|
+
module Attributes
|
7
|
+
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
extend ActiveModel::Callbacks
|
12
|
+
define_model_callbacks :initialize, only: [:after]
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
|
17
|
+
def inherited(subclass)
|
18
|
+
subclass.define_attributes(*attributes)
|
19
|
+
subclass.formatters = formatters.dup
|
20
|
+
end
|
21
|
+
|
22
|
+
def define_attributes(*attribute_names)
|
23
|
+
attribute_names.each do |key|
|
24
|
+
define_attribute(key)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def attributes
|
29
|
+
@attributes ||= []
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def define_attribute(key)
|
35
|
+
key = key.to_s
|
36
|
+
attributes << key unless attributes.include?(key)
|
37
|
+
define_method( key ){ read_attribute(key) }
|
38
|
+
define_method( "#{key}=" ){ |value| write_attribute(key, value) }
|
39
|
+
define_method( "#{key}?" ){ !read_attribute(key).nil? }
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize(*args)
|
45
|
+
run_callbacks(:initialize) do
|
46
|
+
attrs = args.extract_options!
|
47
|
+
# apply _attributes directly to @attributes
|
48
|
+
@attributes = attrs[:_attributes].is_a?(Hash) ? attrs.delete(:_attributes) : {}
|
49
|
+
# apply attrs through write_attribute
|
50
|
+
self.attributes = attrs if attrs.is_a?(Hash)
|
51
|
+
# onwards
|
52
|
+
super(*args) if defined?(super)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def attributes=(new_attrs)
|
57
|
+
new_attrs.stringify_keys.each do |attr_key, attr_value|
|
58
|
+
# skip those attributes that are not defined
|
59
|
+
next unless self.class.attributes.include?(attr_key) && self.respond_to?("#{attr_key}=")
|
60
|
+
# pass to the attribute writer
|
61
|
+
self.send( "#{attr_key}=", attr_value )
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def attributes
|
66
|
+
@attributes ||= {}
|
67
|
+
end
|
68
|
+
|
69
|
+
protected
|
70
|
+
|
71
|
+
def read_attribute(key)
|
72
|
+
@attributes[key.to_s]
|
73
|
+
end
|
74
|
+
|
75
|
+
def write_attribute(key, value)
|
76
|
+
@attributes ||= {}
|
77
|
+
@attributes[key.to_s] = value
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/quandl_data.gemspec
CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.add_runtime_dependency "quandl_operation", "~> 0.3"
|
21
21
|
s.add_runtime_dependency "quandl_babelfish", "~> 0.0"
|
22
|
+
s.add_runtime_dependency "activemodel", ">= 3.0.0"
|
22
23
|
|
23
24
|
s.add_development_dependency "rake", "~> 10.0"
|
24
25
|
s.add_development_dependency "rspec", "~> 2.13"
|
@@ -27,4 +28,5 @@ Gem::Specification.new do |s|
|
|
27
28
|
s.add_development_dependency "simplecov"
|
28
29
|
s.add_development_dependency "guard"
|
29
30
|
s.add_development_dependency "guard-rspec"
|
31
|
+
s.add_development_dependency "quandl_utility"
|
30
32
|
end
|
@@ -86,13 +86,13 @@ describe Quandl::Data::Operations do
|
|
86
86
|
|
87
87
|
describe "#to_json" do
|
88
88
|
it "should convert the data_array to json and back" do
|
89
|
-
JSON.parse(subject.to_json).should eq JSON.parse(subject.data_array.to_json)
|
89
|
+
JSON.parse(subject.to_json).should eq JSON.parse(subject.send(:data_array).to_json)
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
93
|
describe "#as_json" do
|
94
94
|
it "should be a representation of data_array" do
|
95
|
-
subject.as_json.should eq subject.data_array.as_json
|
95
|
+
subject.as_json.should eq subject.send(:data_array).as_json
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
@@ -102,7 +102,7 @@ describe Quandl::Data::Operations do
|
|
102
102
|
data = Quandl::Fabricate::Data.rand( nils: false, rows: 10, columns: 1 ).sort_descending
|
103
103
|
date = data[1][0]
|
104
104
|
data.trim_end!(date)
|
105
|
-
data.data_array.should be_a Array
|
105
|
+
data.send(:data_array).should be_a Array
|
106
106
|
data.count.should eq 9
|
107
107
|
end
|
108
108
|
|
@@ -50,7 +50,7 @@ describe Quandl::Data do
|
|
50
50
|
subject{ Quandl::Data.new(malformed_csv) }
|
51
51
|
before(:each){ subject.valid? }
|
52
52
|
its(:valid?){ should be_false }
|
53
|
-
its('errors.
|
53
|
+
its('errors.messages'){ should eq({:data=>["Illegal quoting in line 1."]}) }
|
54
54
|
end
|
55
55
|
|
56
56
|
[:to_jd, :sort_ascending, :sort_descending, :to_date_str].each do |o1|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hilscher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: quandl_operation
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activemodel
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 3.0.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 3.0.0
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +150,20 @@ dependencies:
|
|
136
150
|
- - '>='
|
137
151
|
- !ruby/object:Gem::Version
|
138
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: quandl_utility
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
139
167
|
description: Data will be interfaced
|
140
168
|
email:
|
141
169
|
- blake@hilscher.ca
|
@@ -153,10 +181,10 @@ files:
|
|
153
181
|
- README.md
|
154
182
|
- Rakefile
|
155
183
|
- UPGRADE.md
|
184
|
+
- VERSION
|
156
185
|
- lib/quandl/data.rb
|
157
186
|
- lib/quandl/data/attributes.rb
|
158
187
|
- lib/quandl/data/cleaning.rb
|
159
|
-
- lib/quandl/data/enumerator.rb
|
160
188
|
- lib/quandl/data/format.rb
|
161
189
|
- lib/quandl/data/logging.rb
|
162
190
|
- lib/quandl/data/operations.rb
|
@@ -165,6 +193,8 @@ files:
|
|
165
193
|
- lib/quandl/error/date_parse_error.rb
|
166
194
|
- lib/quandl/fabricate.rb
|
167
195
|
- lib/quandl/fabricate/data.rb
|
196
|
+
- lib/quandl/support.rb
|
197
|
+
- lib/quandl/support/attributes.rb
|
168
198
|
- quandl_data.gemspec
|
169
199
|
- spec/lib/fabricate/data_spec.rb
|
170
200
|
- spec/lib/quandl/data/enumerator_spec.rb
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Quandl::Data::Enumerator
|
2
|
-
extend ActiveSupport::Concern
|
3
|
-
|
4
|
-
included do
|
5
|
-
delegate *Array.forwardable_methods, to: :data_array
|
6
|
-
|
7
|
-
delegate :to_json, :as_json, to: :data_array
|
8
|
-
|
9
|
-
attr_accessor :pristine_data
|
10
|
-
end
|
11
|
-
|
12
|
-
def data_array
|
13
|
-
@data_array ||= clean( pristine_data )
|
14
|
-
end
|
15
|
-
|
16
|
-
def data_array=(data)
|
17
|
-
@data_array = clean(data)
|
18
|
-
end
|
19
|
-
|
20
|
-
def data_array?
|
21
|
-
@data_array.present?
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|