diff --git a/lib/locale.rb b/lib/locale.rb index 222fc9f..9a61991 100644 --- a/lib/locale.rb +++ b/lib/locale.rb @@ -21,168 +21,172 @@ # OR MODIFICATIONS. ########################################################################################## -class Locale - - attr_accessor :locale - - class << self - attr_accessor :available_locs - end - - Locale.available_locs = [] +class Jcsv - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def self.available_locales - - if (@available_locs.size == 0) - java.util.Locale.available_locales.each do |loc| - @available_locs << Locale.new(loc) + class Locale + + attr_accessor :locale + + class << self + attr_accessor :available_locs + end + + Locale.available_locs = [] + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def self.available_locales + + if (@available_locs.size == 0) + java.util.Locale.available_locales.each do |loc| + @available_locs << Locale.new(loc) + end end + + @available_locs + + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def self.default + Locale.new(locale: java.util.Locale.default) + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def self.default=(locale) + java.util.Locale.set_default(locale.locale) + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def self.method_missing(symbol, *args) + java.util.Locale.send(symbol, *args) + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def initialize(locale: nil, language: nil, country: nil, variant: nil) + + args = [language, country, variant] + + if (locale) + @locale = locale + else + @locale = java.util.Locale.new(*(args.compact)) + end + + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def method_missing(symbol, *args) + @locale.send(symbol, *args) end - @available_locs - end - #--------------------------------------------------------------------------------------- + #========================================================================================= # - #--------------------------------------------------------------------------------------- - - def self.default - Locale.new(locale: java.util.Locale.default) - end - - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def self.default=(locale) - java.util.Locale.set_default(locale.locale) - end + #========================================================================================= - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def self.method_missing(symbol, *args) - java.util.Locale.send(symbol, *args) - end + class Locale - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def initialize(locale: nil, language: nil, country: nil, variant: nil) - - args = [language, country, variant] - - if (locale) - @locale = locale - else - @locale = java.util.Locale.new(*(args.compact)) - end + CANADA = Locale.new(locale: java.util.Locale::CANADA) + CANADA_FRENCH = Locale.new(locale: java.util.Locale::CANADA_FRENCH) + CHINA = Locale.new(locale: java.util.Locale::CHINA) + CHINESE = Locale.new(locale: java.util.Locale::CHINESE) + ENGLISH = Locale.new(locale: java.util.Locale::ENGLISH) + FRANCE = Locale.new(locale: java.util.Locale::FRANCE) + FRENCH = Locale.new(locale: java.util.Locale::FRENCH) + GERMAN = Locale.new(locale: java.util.Locale::GERMAN) + GERMANY = Locale.new(locale: java.util.Locale::GERMANY) + ITALIAN = Locale.new(locale: java.util.Locale::ITALIAN) + ITALY = Locale.new(locale: java.util.Locale::ITALY) + JAPAN = Locale.new(locale: java.util.Locale::JAPAN) + JAPANESE = Locale.new(locale: java.util.Locale::JAPANESE) + KOREA = Locale.new(locale: java.util.Locale::KOREA) + KOREAN = Locale.new(locale: java.util.Locale::KOREAN) + PRC = Locale.new(locale: java.util.Locale::PRC) + ROOT = Locale.new(locale: java.util.Locale::ROOT) + SIMPLIFIED_CHINESE = Locale.new(locale: java.util.Locale::SIMPLIFIED_CHINESE) + TAIWAN = Locale.new(locale: java.util.Locale::TAIWAN) + TRADITIONAL_CHINESE = Locale.new(locale: java.util.Locale::TRADITIONAL_CHINESE) + UK = Locale.new(locale: java.util.Locale::UK) + US = Locale.new(locale: java.util.Locale::US) + BRAZIL = Locale.new(language: "pt", country: "BR") end - #--------------------------------------------------------------------------------------- + ########################################################################################## # - #--------------------------------------------------------------------------------------- - - def method_missing(symbol, *args) - @locale.send(symbol, *args) - end - -end - -#========================================================================================= -# -#========================================================================================= - -class Locale - - CANADA = Locale.new(locale: java.util.Locale::CANADA) - CANADA_FRENCH = Locale.new(locale: java.util.Locale::CANADA_FRENCH) - CHINA = Locale.new(locale: java.util.Locale::CHINA) - CHINESE = Locale.new(locale: java.util.Locale::CHINESE) - ENGLISH = Locale.new(locale: java.util.Locale::ENGLISH) - FRANCE = Locale.new(locale: java.util.Locale::FRANCE) - FRENCH = Locale.new(locale: java.util.Locale::FRENCH) - GERMAN = Locale.new(locale: java.util.Locale::GERMAN) - GERMANY = Locale.new(locale: java.util.Locale::GERMANY) - ITALIAN = Locale.new(locale: java.util.Locale::ITALIAN) - ITALY = Locale.new(locale: java.util.Locale::ITALY) - JAPAN = Locale.new(locale: java.util.Locale::JAPAN) - JAPANESE = Locale.new(locale: java.util.Locale::JAPANESE) - KOREA = Locale.new(locale: java.util.Locale::KOREA) - KOREAN = Locale.new(locale: java.util.Locale::KOREAN) - PRC = Locale.new(locale: java.util.Locale::PRC) - ROOT = Locale.new(locale: java.util.Locale::ROOT) - SIMPLIFIED_CHINESE = Locale.new(locale: java.util.Locale::SIMPLIFIED_CHINESE) - TAIWAN = Locale.new(locale: java.util.Locale::TAIWAN) - TRADITIONAL_CHINESE = Locale.new(locale: java.util.Locale::TRADITIONAL_CHINESE) - UK = Locale.new(locale: java.util.Locale::UK) - US = Locale.new(locale: java.util.Locale::US) - BRAZIL = Locale.new(language: "pt", country: "BR") - -end - - -########################################################################################## -# -########################################################################################## - -class DFSymbols - - attr_accessor :decimal_format_symbols + ########################################################################################## - class << self - attr_accessor :available_locs - end - - DFSymbols.available_locs = [] - - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def self.available_locales - - if (@available_locs.size == 0) - java.text.DecimalFormatSymbols.available_locales.each do |loc| - @available_locs << Locale.new(loc) + class DFSymbols + + attr_accessor :decimal_format_symbols + + class << self + attr_accessor :available_locs + end + + DFSymbols.available_locs = [] + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def self.available_locales + + if (@available_locs.size == 0) + java.text.DecimalFormatSymbols.available_locales.each do |loc| + @available_locs << Locale.new(loc) + end end + + @available_locs + + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def self.method_missing(symbol, *args) + java.text.DecimalFormatSymbols.send(symbol, *args) + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def initialize(locale = nil) + @decimal_format_symbols = (locale.nil?)? java.text.DecimalFormatSymbols.new() : + java.text.DecimalFormatSymbols.new(locale.locale) + end + + #--------------------------------------------------------------------------------------- + # + #--------------------------------------------------------------------------------------- + + def method_missing(symbol, *args) + @decimal_format_symbols.send(symbol, *args) end - @available_locs - end - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def self.method_missing(symbol, *args) - java.text.DecimalFormatSymbols.send(symbol, *args) - end - - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def initialize(locale = nil) - @decimal_format_symbols = (locale.nil?)? java.text.DecimalFormatSymbols.new() : - java.text.DecimalFormatSymbols.new(locale.locale) - end - - #--------------------------------------------------------------------------------------- - # - #--------------------------------------------------------------------------------------- - - def method_missing(symbol, *args) - @decimal_format_symbols.send(symbol, *args) - end - end + diff --git a/jcsv.gemspec b/mdarray-jcsv.gemspec similarity index 58% rename from jcsv.gemspec rename to mdarray-jcsv.gemspec index 14b9855..f944eab 100644 --- a/jcsv.gemspec +++ b/mdarray-jcsv.gemspec @@ -9,8 +9,14 @@ Gem::Specification.new do |gem| gem.version = $version gem.date = Date.today.to_s - gem.summary = "jCSV is a fast and flexible CSV parser for JRuby. Based on uniVocity parser, -considered by www.xxx.xxx. the fastest CSV reader for Java." + gem.summary = "MDArray-jCSV (jCSV for short) is the first and only (as far as I know) +multidimensional CSV reader. Multidimensional? Yes... jCSV can read multidimensional data, +also known sometimes as 'panel data'. jCSV is based on Super CSV +(http://super-csv.github.io/super-csv/index.html), a java CSV library. According to +Super CSV web page its motivation is 'for Super CSV is to be +the foremost, fastest, and most programmer-friendly, free CSV package for Java'. jCSV +motivation is to bring this view to the Ruby world, and since we are in Ruby, make +it even easier and more programmer-friendly." gem.description = <<-EOF @@ -19,7 +25,7 @@ EOF gem.authors = ['Rodrigo Botafogo'] gem.email = 'rodrigo.a.botafogo@gmail.com' gem.homepage = 'http://github.com/rbotafogo/jCSV/wiki' - gem.license = 'Apache' + gem.license = 'Apache-2.0' gem.add_runtime_dependency('mdarray', '~> 0.5') gem.add_runtime_dependency('critbit', '~> 0.5') @@ -32,8 +38,7 @@ EOF # ensure the gem is built out of versioned files gem.files = Dir['Rakefile', 'version.rb', 'config.rb', '{lib,test}/**/*.rb', 'test/**/*.csv', - 'test/**/*.xlsx', - '{bin,doc,spec,vendor,target}/**/*', + 'test/**/*.xlsx', '{bin,doc,spec,vendor,target,data}/**/*', 'README*', 'LICENSE*'] # & `git ls-files -z`.split("\0") gem.test_files = Dir['test/*.rb'] diff --git a/test/test_filters.rb b/test/test_filters.rb index 870ef2b..4165129 100644 --- a/test/test_filters.rb +++ b/test/test_filters.rb @@ -73,21 +73,21 @@ class CSVTest < Test::Unit::TestCase should "work with Locales" do - locale = Locale.default + locale = Jcsv::Locale.default puts "Your locale country is: #{locale.display_country}" # Switch default locale to France, so display_country will be in French. - locale = Locale.default = Locale::FRANCE + locale = Jcsv::Locale.default = Jcsv::Locale::FRANCE assert_equal("français", locale.display_language) assert_equal("France", locale.display_country) # Create a new locale, but default is still France, so output is in French. - loc2 = Locale.new(language: "en", country: "US") + loc2 = Jcsv::Locale.new(language: "en", country: "US") assert_equal("en-US", loc2.to_language_tag) assert_equal("US", loc2.country) assert_equal("Etats-Unis", loc2.display_country) - locale = Locale::US + locale = Jcsv::Locale::US p locale end =end @@ -108,14 +108,14 @@ class CSVTest < Test::Unit::TestCase reader.filters = { :int => Jcsv.int >> Jcsv.in_range(200, 300), :double => Jcsv.float, - :double2 => Jcsv.float(Locale::US), + :double2 => Jcsv.float(Jcsv::Locale::US), :long => Jcsv.long, :complex => Jcsv.complex, :rational => Jcsv.rational, :big_num => Jcsv.bignum, - :big_decimal => Jcsv.big_decimal(Locale::US), - :big_decimal2 => Jcsv.big_decimal(Locale::BRAZIL), - :big_decimal3 => Jcsv.big_decimal(Locale::BRAZIL), + :big_decimal => Jcsv.big_decimal(Jcsv::Locale::US), + :big_decimal2 => Jcsv.big_decimal(Jcsv::Locale::BRAZIL), + :big_decimal3 => Jcsv.big_decimal(Jcsv::Locale::BRAZIL), :truth1 => Jcsv.bool, :truth2 => bool, :truth3 => bool, @@ -228,9 +228,9 @@ class CSVTest < Test::Unit::TestCase reader = Jcsv.reader("../data/BJsales.csv", format: :map) rate = 3.75 # dollar to reais convertion rate - + reader.filters = { - :b_jsales => Jcsv.optional >> Jcsv.float(Locale::US) >> + :b_jsales => Jcsv.optional >> Jcsv.float(Jcsv::Locale::US) >> Jcsv.in_range(0, 300) >> Jcsv.dynamic { |value| value * rate } } @@ -271,7 +271,7 @@ def execute(value, context) rate = 3.75 # dollar to reais convertion rate reader.filters = { - :b_jsales => Jcsv.optional >> Jcsv.float(Locale::US) >> + :b_jsales => Jcsv.optional >> Jcsv.float(Jcsv::Locale::US) >> RangeFilter.new(0, 200) >> Jcsv.dynamic { |value| value * rate } } diff --git a/version.rb b/version.rb index 693f24a..ddafafe 100644 --- a/version.rb +++ b/version.rb @@ -1,2 +1,2 @@ -$gem_name = "jCSV" -$version="0.5.0" +$gem_name = "mdarray-jCSV" +$version="0.6.1"