Class: Data_bcb

Inherits:
Object
  • Object
show all
Defined in:
lib/eba/data.rb

Overview

This class intends to organize the series data in a easy to use way, making it easier to group lots of data in a coese way, without lost of information.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(series_name, series_code, series_periodicity, series_unit, series_day, series_month, series_year, series_value, seasonally_adjusted) ⇒ Data_bcb

Initialization is expected to express the state of a single row of data inside the BCB’s Database.



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/eba/data.rb', line 15

def initialize(series_name, series_code, series_periodicity, series_unit, 
	       series_day, series_month, series_year, series_value, seasonally_adjusted)

	@name = series_name
	@pk = series_code
	@periodicity = series_periodicity.to_s
	@unit = series_unit
	@date = standardizes_date(series_day, series_month, series_year)
	@value = series_value.to_f
	@seasonally_adjusted = seasonally_adjusted
end

Class Method Details

.invalid_dataObject



33
34
35
# File 'lib/eba/data.rb', line 33

def self.invalid_data()
	Data_bcb.new(nil, nil, nil, nil, 1, 1, 1900, 0, false)
end

Instance Method Details

#compare_to(data_bcb) ⇒ Object

Simple comparission between two DataBCB objects.



157
158
159
160
161
162
# File 'lib/eba/data.rb', line 157

def compare_to(data_bcb)
	return (@name == data_bcb.name and @pk == data_bcb.pk \
	    and @periodicity == data_bcb.periodicity \
	    and @unit == data_bcb.unit and @date == data_bcb.date \
	    and @value = data_bcb.value and @seasonally_adjusted == data_bcb.seasonally_adjusted)
end

#dateObject



103
104
105
# File 'lib/eba/data.rb', line 103

def date
	return @date
end

#is_valid?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/eba/data.rb', line 37

def is_valid?

	if @name == nil or @name == '' then
		puts "Found invalid name! Value is '#{@name}'"
		return false
	end

	if @periodicity == nil or @periodicity == '' or @periodicity.length > 1 then
		puts "Found invalid periodicity! Value is '#{@periodicity}'"
		return false
	end
	
	if @unit == nil or @unit == '' then
		puts "Found invalid unit! Value is '#{@unit}'"
		return false
	end

	if @date == nil or @date == '' then
		puts "Found invalid date! Value is '#{@date}'"
		return false
	else
		if !(DateTime.parse(@date).to_date != nil rescue false) then
			puts "Found invalid date! Value is '#{@date}'"
			return false
		end
	end

	if @value == nil then
		puts "Found invalid value! Value is '#{@value}'"
		return false
	else
		if !(@value.to_f != nil rescue false) then
			puts "Found invalid value! Value is '#{@value}'"	
			return false
		end
	end

	if @pk == nil or  @pk <= 0 then
		puts "Found invalid pk! Value is '#{@pk}'"
		return false
	end

	return true
end

#keyObject

Return an “identification key” with data which should be unique to a series (grouped).



29
30
31
# File 'lib/eba/data.rb', line 29

def key()
	return @name + @periodicity.to_s + @unit
end

#nameObject



91
92
93
# File 'lib/eba/data.rb', line 91

def name
	return @name
end

#periodicityObject



95
96
97
# File 'lib/eba/data.rb', line 95

def periodicity
	return @periodicity
end

#pkObject

Note that there are no set methods in this class, I built it in such a way that you are only intended to access data in the rawest form as possible as it comes from the BCB Webservice.



87
88
89
# File 'lib/eba/data.rb', line 87

def pk
	return @pk
end


148
149
150
151
152
153
154
# File 'lib/eba/data.rb', line 148

def print()
	return "Name: #{@name}\n" + 
	       "BCB Code: #{@pk}\n" + 
	       "Periodicity: #{@periodicity}\n" + 
	       "Unit: #{@unit}   Seasonally Adjusted? #{@seasonally_adjusted ? 'YES' : 'NO'}\n" + 
	       "Date: #{@date}   Value: #{@value}\n"
end

#seasonally_adjustedObject



111
112
113
# File 'lib/eba/data.rb', line 111

def seasonally_adjusted
	return @seasonally_adjusted
end

#standardizes_date(day, month, year) ⇒ Object

The Webservice will always supply the date in three separate fields, this methods aim to convert it to a standard dd.mm.YYYY string.



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/eba/data.rb', line 117

def standardizes_date(day, month, year)
	if day == '' or day == nil then
		day = "01"
	end

	if month == '' or month == nil then
		month = "01"
	end

	if year == '' or year == nil then
		year = "1900"
	end

	if month.to_i > 1900 then
		year = month
		month = "01"
	end

	return "#{standardizes_number(day.to_i)}.#{standardizes_number(month.to_i)}.#{year}"
end

#standardizes_number(number) ⇒ Object

As we are building a dd.mm.yyyy string, we want to standardize the size of the fields.



140
141
142
143
144
145
146
# File 'lib/eba/data.rb', line 140

def standardizes_number(number)
	if (number < 10)
		return "0#{number}"
	else
		return "#{number}"
	end
end

#unitObject



99
100
101
# File 'lib/eba/data.rb', line 99

def unit
	return @unit
end

#valueObject



107
108
109
# File 'lib/eba/data.rb', line 107

def value
	return @value
end