gyomu_ruby 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +11 -0
  3. data/Gemfile +1 -1
  4. data/HISTORY.md +4 -0
  5. data/README.md +2 -0
  6. data/gyomu_ruby.gemspec +9 -10
  7. data/lib/gyomu_ruby/address_formatter.rb +39 -0
  8. data/lib/gyomu_ruby/all_your_site_are_belong_to_ssl.rb +21 -0
  9. data/lib/gyomu_ruby/core_ext/numeric/round.rb +4 -4
  10. data/lib/gyomu_ruby/core_ext/time/biz_year.rb +1 -1
  11. data/lib/gyomu_ruby/deprecation.rb +32 -0
  12. data/lib/gyomu_ruby/helper_utility.rb +30 -0
  13. data/lib/gyomu_ruby/master_data/form_builder_helper.rb +15 -0
  14. data/lib/gyomu_ruby/master_data/form_helper.rb +18 -0
  15. data/lib/gyomu_ruby/master_data.rb +63 -0
  16. data/lib/gyomu_ruby/{ordinary_system_development/translated_from.rb → translated_from.rb} +2 -1
  17. data/lib/gyomu_ruby/validators/hankaku_validator.rb +14 -0
  18. data/lib/gyomu_ruby/version.rb +1 -1
  19. data/lib/gyomu_ruby/word_normalizer.rb +63 -0
  20. data/lib/gyomu_ruby.rb +16 -2
  21. data/spec/core_ext/numeric_spec.rb +10 -10
  22. data/spec/core_ext/time_spec.rb +9 -9
  23. data/spec/fixtures/images/esm-gravater.png +0 -0
  24. data/spec/gyomu_ruby/address_formatter_spec.rb +105 -0
  25. data/spec/gyomu_ruby/master_data/form_builder_helper_spec.rb +23 -0
  26. data/spec/gyomu_ruby/master_data_spec.rb +31 -0
  27. data/spec/spec_helper.rb +2 -0
  28. metadata +50 -40
  29. data/lib/gyomu_ruby/amazon_web_service/file_bucket.rb +0 -74
  30. data/lib/gyomu_ruby/ordinary_system_development/address_formatter.rb +0 -36
  31. data/lib/gyomu_ruby/ordinary_system_development/all_your_site_are_belong_to_ssl.rb +0 -22
  32. data/lib/gyomu_ruby/ordinary_system_development.rb +0 -10
  33. data/masters/prefectures.csv +0 -47
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f6cf4eeaf98d3ccfd9f8f468e27d1159c01399bbc4f148ea7466892e5e12b7e7
4
+ data.tar.gz: 2ff6f528d51c25c6632f9a33494c5b8266df59fb9f298c420ed9c1175da38227
5
+ SHA512:
6
+ metadata.gz: 5331ccae7df722d2fada5278145346f44dfd016672fb652811b23ff2ff5c03b60119e506d28d7fb68992773de95bc76719437acf389b36e316682e0e68795c11
7
+ data.tar.gz: ee1d39fbec589cd7e88c6aec069e2be6761433b5e66f26b25edd6f459552cbe8f337714caa0400957427828968252189eaacd97993db6955151034c592196c1e
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+
3
+ sudo: false
4
+
5
+ rvm:
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - 2.1
9
+ - 2.2
10
+
11
+ script: bundle exec rspec
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
data/HISTORY.md CHANGED
@@ -1,3 +1,7 @@
1
+ # Version 0.0.6
2
+
3
+ Remove GyomuRuby::AWS::FileBucket use fog (or so) directly
4
+
1
5
  # Version 0.0.5
2
6
 
3
7
  * rename Integer#ceil(offset), Integer#floor(offset) to Numeric#roundup(offset), Numeric#rounddown(offset)
data/README.md CHANGED
@@ -1 +1,3 @@
1
1
  # GyomuRuby
2
+
3
+ [![Build Status](https://travis-ci.org/esminc/gyomu_ruby.png?branch=master)](https://travis-ci.org/esminc/gyomu_ruby)
data/gyomu_ruby.gemspec CHANGED
@@ -1,24 +1,23 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "gyomu_ruby/version"
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'gyomu_ruby/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "gyomu_ruby"
6
+ s.name = 'gyomu_ruby'
7
7
  s.version = GyomuRuby::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Eiwa System Management, Inc."]
10
- s.email = ["rubyagile@qwik.tky.esm.co.jp"]
11
- s.homepage = "http://www.esm.co.jp/"
9
+ s.authors = ['ESM, Inc.']
10
+ s.homepage = 'https://agile.esm.co.jp/'
12
11
  s.summary = %q{GyomuRuby}
13
12
  s.description = %q{GyomuRuby}
14
13
 
15
14
  s.files = `git ls-files`.split("\n")
16
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
- s.require_paths = ["lib"]
17
+ s.require_paths = ['lib']
19
18
 
20
- s.add_dependency("activesupport", [">= 3.0"])
21
- s.add_dependency("aws-s3", [">= 0"])
19
+ s.add_dependency 'activesupport', ['>= 3.0']
20
+ s.add_dependency 'moji'
22
21
 
23
- s.add_development_dependency "rspec", [">= 2.0"]
22
+ s.add_development_dependency 'rspec', ['>= 3.0.0']
24
23
  end
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+
3
+ require 'active_support'
4
+ require 'moji'
5
+
6
+ module GyomuRuby
7
+ module AddressFormatter
8
+ ext_tel_numbers = File.read(
9
+ File.expand_path('../../masters/ext_tel_numbers.csv', File.dirname(__FILE__))
10
+ ).lines.map{|n| "0#{n.strip}" }
11
+
12
+ EXT_TEL_NUMBERS = (ext_tel_numbers + %w[050 070 080 090 0120]).sort.reverse.freeze
13
+ EXT_TEL_NUMBERS_RE = /\A(#{EXT_TEL_NUMBERS.sort.reverse.join('|')})/uo
14
+
15
+ module_function
16
+
17
+ def format_zipcode(zipcode_string, blank = '')
18
+ return blank if zipcode_string.blank?
19
+ zipcode = Moji.zen_to_han(zipcode_string, Moji::NUMBER | Moji::SYMBOL)
20
+ digits_only = zipcode.scan(/\d/)
21
+ [digits_only[0..2], '-', digits_only[3..6]].flatten.join
22
+ end
23
+
24
+ def format_tel_no(telno_numeric_string, blank = '')
25
+ return blank if telno_numeric_string.blank?
26
+ telno_numeric_string.to_s.
27
+ sub(EXT_TEL_NUMBERS_RE){ "#{$1}-" }.
28
+ sub(/(\d{4})\Z/) { "-#{$1}" }
29
+ end
30
+
31
+ def prefecture_name(prefecture_code, blank = '')
32
+ GyomuRuby::Deprecation.deprecated_method_warning(:prefecture_name, "use GyomuRuby::MasterData.prefecture_name instead")
33
+
34
+ return blank if prefecture_code.blank?
35
+
36
+ MasterData.prefecture_name(prefecture_code)
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ # coding:us-ascii
2
+
3
+ require 'rack'
4
+
5
+ module GyomuRuby
6
+ class AllYourSiteAreBelongToSsl
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ if env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https'
13
+ @app.call(env)
14
+ else
15
+ url = Rack::Request.new(env).url.sub(/^http:/, 'https:')
16
+ body = "<html><body>You are being <a href=\"#{url}\">redirected</a>.</body></html>"
17
+ [301, {'Location' => url, 'Content-Type' => 'text/html'}, [body]]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -2,12 +2,12 @@ module GyomuRuby
2
2
  module CoreExt
3
3
  module Numeric
4
4
  module Round
5
- def roundup(offset)
6
- ((self + offset) * Rational(1, offset)).ceil * offset - offset
5
+ def round_up(unit) # nodoc
6
+ ((self + unit) * Rational(1, unit)).ceil * unit - unit
7
7
  end
8
8
 
9
- def rounddown(offset)
10
- (self * Rational(1, offset)).floor * offset
9
+ def round_down(unit) # nodoc
10
+ (self * Rational(1, unit)).floor * unit
11
11
  end
12
12
  end
13
13
  end
@@ -12,7 +12,7 @@ module GyomuRuby
12
12
  end
13
13
  end
14
14
 
15
- def quater?(n)
15
+ def quarter?(n)
16
16
  n == case self.month
17
17
  when 4..6 then 1
18
18
  when 7..9 then 2
@@ -0,0 +1,32 @@
1
+ module GyomuRuby
2
+ module Deprecation
3
+ module_function
4
+
5
+ def deprecated_method_warning(method_name, message)
6
+ warning = "DEPRECATIOPN WARNING:"
7
+ warning = "#{warning} #{method_name} is deprecated and will be removed in the near future"
8
+ warning = "#{warning} (#{message})"
9
+ STDERR.puts(warning)
10
+ end
11
+
12
+ module DeprecatedConstant
13
+ private
14
+
15
+ def self.extended(constant)
16
+ constant.instance_variable_set :@__new_constants, {}
17
+ end
18
+
19
+ def const_missing(name)
20
+ return super unless constant = @__new_constants[name]
21
+
22
+ STDERR.puts "DEPRECATIOPN WARNING: #{self.name}::#{name} is deprecated and will be removed in the near future(use #{constant.name} instead)"
23
+
24
+ constant
25
+ end
26
+
27
+ def deprecated(name, new_constant)
28
+ @__new_constants.update name => new_constant
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,30 @@
1
+ module GyomuRuby::HelperUtility
2
+
3
+ def human(klass, attribute = nil)
4
+ if attribute
5
+ klass.human_attribute_name(attribute)
6
+ else
7
+ klass.model_name.human
8
+ end
9
+ end
10
+
11
+ def routed_to?(*signatures)
12
+ [controller_name, action_name].join('#').in?(Array(signatures))
13
+ end
14
+
15
+ def nice_datetime_duration(from, to, join_word = ' - ')
16
+ from, to = [from, to].map(&:localtime)
17
+
18
+ if from.localtime.to_date == to.localtime.to_date
19
+ [l(from), to.strftime("%H:%M")]
20
+ else
21
+ [l(from), l(to)]
22
+ end.join(join_word)
23
+ end
24
+
25
+ def with_paging(objects, opts = {}, &block)
26
+ inner = capture { block.call(objects) }
27
+ render partial: 'shared/paging', locals: {objects: objects, inner: inner, opts: opts}
28
+ end
29
+
30
+ end
@@ -0,0 +1,15 @@
1
+ # coding: utf-8
2
+
3
+ module GyomuRuby
4
+ module MasterData
5
+ module FormBuilderHelper
6
+ [:prefecture, :currency].each do |master|
7
+ define_method %(#{master}_select) do |attribute, options = {}, html_options = {}, &block|
8
+ choices = FormHelper.__send__("options_for_#{master}_select")
9
+
10
+ select(attribute, choices, options, html_options, &block)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ # coding: utf-8
2
+
3
+ require 'active_support/core_ext/string'
4
+
5
+ module GyomuRuby
6
+ module MasterData
7
+ module FormHelper
8
+ %w(prefecture currency).each do |master|
9
+ method_name = %(options_for_#{master}_select)
10
+
11
+ define_method method_name do
12
+ MasterData.data[master.pluralize.intern].invert.to_a
13
+ end
14
+ module_function method_name
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,63 @@
1
+ # coding: utf-8
2
+
3
+ require 'active_support/deprecation'
4
+ require 'active_support/core_ext/module'
5
+
6
+ module GyomuRuby
7
+ module MasterData
8
+ autoload :FormHelper, 'gyomu_ruby/master_data/form_helper'
9
+ autoload :FormBuilderHelper, 'gyomu_ruby/master_data/form_builder_helper'
10
+
11
+ # ISO-4217 に従い、必要になるたびに足しています
12
+ currencies = {
13
+ 'JPY' => '円',
14
+ 'USD' => '米ドル',
15
+ 'EUR' => 'ユーロ'
16
+ }
17
+
18
+ # JIS X 0401に定められた都道府県コードを定義
19
+ # 東北、関東、、などの地域の括りは https://www.lasdec.or.jp/cms/1,0,14.html のものを参照している
20
+ prefectures, areas = {}, {}
21
+ {
22
+ '北海道' => %w(北海道),
23
+ '東北' => %w(青森県 岩手県 宮城県 秋田県 山形県 福島県),
24
+ '関東' => %w(茨城県 栃木県 群馬県 埼玉県 千葉県 東京都 神奈川県),
25
+ '中部' => %w(新潟県 富山県 石川県 福井県 山梨県 長野県 岐阜県 静岡県 愛知県),
26
+ '近畿' => %w(三重県 滋賀県 京都府 大阪府 兵庫県 奈良県 和歌山県),
27
+ '中国' => %w(鳥取県 島根県 岡山県 広島県 山口県),
28
+ '四国' => %w(徳島県 香川県 愛媛県 高知県),
29
+ '九州' => %w(福岡県 佐賀県 長崎県 熊本県 大分県 宮崎県 鹿児島県 沖縄県)
30
+ }.each do |area_name, prefecture_names|
31
+ areas[area_name] ||= []
32
+
33
+ prefecture_names.each.with_index(prefectures.length) do |prefecture_name, index|
34
+ code = '%02d' % index.next
35
+
36
+ prefectures[code] = prefecture_name
37
+ areas[area_name] << code
38
+ end
39
+ end
40
+
41
+ mattr_accessor :data
42
+
43
+ self.data = {currencies: currencies, prefectures: prefectures, areas: areas}
44
+
45
+ module_function
46
+
47
+ def currency_name(code)
48
+ lookup(:currencies, code.to_s.upcase)
49
+ end
50
+
51
+ def prefecture_name(code)
52
+ lookup(:prefectures, "%02d" % code.to_i)
53
+ end
54
+
55
+ def prefecture_codes_by_area(name)
56
+ lookup(:areas, name)
57
+ end
58
+
59
+ def lookup(type, val)
60
+ MasterData.data[type.intern][val]
61
+ end
62
+ end
63
+ end
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
- module GyomuRuby::OrdinarySystemDevelopment
2
+
3
+ module GyomuRuby
3
4
  class Translation
4
5
  def self.source(word, scope)
5
6
  new('ja').source(word, scope)
@@ -0,0 +1,14 @@
1
+ #coding: utf-8
2
+ require 'moji'
3
+
4
+ module GyomuRuby::Validators
5
+ class HankakuValidator < ActiveModel::EachValidator
6
+ def validate_each(record, attribute, str)
7
+ record.errors[attribute] << "は、半角文字で入力してください" unless hankaku?(str)
8
+ end
9
+
10
+ def hankaku?(str)
11
+ str.blank? || str =~ /\A#{Moji.han}+\Z/
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module GyomuRuby
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,63 @@
1
+ # coding: utf-8
2
+
3
+ require 'moji'
4
+
5
+ module GyomuRuby
6
+ module WordNormalizer
7
+ extend self
8
+ def to_doublewidth_hiragana(word)
9
+ normalize_symbol_unicode(Moji.kata_to_hira(Moji.han_to_zen(word || '', Moji::KANA)))
10
+ end
11
+ alias to_kana to_doublewidth_hiragana
12
+
13
+ def normalize_unconversion_symbol_unicode(word)
14
+ word.tap do |w|
15
+ w.gsub!(/\u2212|\u2012|\u2013|\u2014/){ "\u30fc" }
16
+ w.gsub!(/\u301c/){ "\uff5e" }
17
+ end
18
+ end
19
+
20
+ def normalize_symbol_unicode(word)
21
+ normalize_unconversion_symbol_unicode(word).tap do |w|
22
+ w.gsub!(/\u002d|\uff0d|\u2015|\u2500/){ "\u30fc" }
23
+ end
24
+ end
25
+
26
+ def to_time(word)
27
+ if word.acts_like?(:time) && word.acts_like_time?
28
+ word
29
+ else
30
+ Time.parse(word.to_s) rescue nil
31
+ end
32
+ end
33
+
34
+ def to_date(word)
35
+ if word.acts_like?(:date) && word.acts_like_date?
36
+ word
37
+ elsif word.respond_to?(:to_date)
38
+ word.to_date
39
+ else
40
+ Date.parse(word.to_s) rescue nil
41
+ end
42
+ end
43
+
44
+ def to_array(words)
45
+ if words.is_a?(Hash)
46
+ words.inject([]){|memo, (k,v)| v.blank? ? memo : memo << k.to_s }
47
+ else
48
+ Array(words)
49
+ end
50
+ end
51
+
52
+ # XXX 0x20が壊れる詳細を追いかける
53
+ def to_hankaku(word)
54
+ return '' if word.blank?
55
+ Moji.zen_to_han(Moji.han_to_zen(normalize_symbol_unicode(word), Moji::SYMBOL)).gsub(/\uff70/){ "\u002d" }
56
+ end
57
+
58
+ def to_numeric(word)
59
+ return word.to_s if word.is_a?(Numeric)
60
+ to_hankaku(word || '').scan(/\d/).join
61
+ end
62
+ end
63
+ end
data/lib/gyomu_ruby.rb CHANGED
@@ -1,5 +1,19 @@
1
1
  # coding: utf-8
2
2
  require 'gyomu_ruby/core_ext/time'
3
3
  require 'gyomu_ruby/core_ext/numeric'
4
- require 'gyomu_ruby/amazon_web_service/file_bucket'
5
- require 'gyomu_ruby/ordinary_system_development'
4
+ require 'gyomu_ruby/deprecation'
5
+
6
+ module GyomuRuby
7
+ autoload :AmazonWebService, 'gyomu_ruby/amazon_web_service'
8
+ autoload :MasterData, 'gyomu_ruby/master_data'
9
+ autoload :AddressFormatter, 'gyomu_ruby/address_formatter'
10
+ autoload :AllYourSiteAreBelongToSsl, 'gyomu_ruby/all_your_site_are_belong_to_ssl'
11
+ autoload :Translation, 'gyomu_ruby/translated_from'
12
+ autoload :WordNormalizer, 'gyomu_ruby/word_normalizer'
13
+ autoload :AddressFormatter, 'gyomu_ruby/address_formatter'
14
+
15
+ extend GyomuRuby::Deprecation::DeprecatedConstant
16
+
17
+ deprecated :OrdinarySystemDevelopment, GyomuRuby
18
+ deprecated :OSD, GyomuRuby
19
+ end
@@ -2,17 +2,17 @@ require 'spec_helper'
2
2
  require 'gyomu_ruby/core_ext/numeric'
3
3
 
4
4
  describe Numeric, 'gyomu_ruby extentions' do
5
- describe '#roundup' do
6
- it { 101.roundup(50).should == 150 }
7
- it { 151.roundup(50).should == 200 }
8
- it { 123.roundup(3).should == 123 }
9
- it { 10.1.roundup(2).should == 12 }
5
+ describe '#round_up' do
6
+ it { expect(101.round_up(50)).to eq(150) }
7
+ it { expect(151.round_up(50)).to eq(200) }
8
+ it { expect(123.round_up(3)).to eq(123) }
9
+ it { expect(10.1.round_up(2)).to eq(12) }
10
10
  end
11
11
 
12
- describe '#rounddown' do
13
- it { 101.rounddown(50).should == 100 }
14
- it { 151.rounddown(50).should == 150 }
15
- it { 123.rounddown(3).should == 123 }
16
- it { 10.1.rounddown(2).should == 10 }
12
+ describe '#round_down' do
13
+ it { expect(101.round_down(50)).to eq(100) }
14
+ it { expect(151.round_down(50)).to eq(150) }
15
+ it { expect(123.round_down(3)).to eq(123) }
16
+ it { expect(10.1.round_down(2)).to eq(10) }
17
17
  end
18
18
  end
@@ -4,21 +4,21 @@ require 'gyomu_ruby/core_ext/time'
4
4
  describe Time, 'gyomu_ruby extentions' do
5
5
  describe '#biz_year' do
6
6
  context 'default boundary' do
7
- specify { Time.local(2011, 4, 1).biz_year.should == 2011 }
8
- specify { Time.local(2011,12,31).biz_year.should == 2011 }
9
- specify { Time.local(2012, 1, 1).biz_year.should == 2011 }
10
- specify { Time.local(2012, 3,31).biz_year.should == 2011 }
7
+ specify { expect(Time.local(2011, 4, 1).biz_year).to eq(2011) }
8
+ specify { expect(Time.local(2011,12,31).biz_year).to eq(2011) }
9
+ specify { expect(Time.local(2012, 1, 1).biz_year).to eq(2011) }
10
+ specify { expect(Time.local(2012, 3,31).biz_year).to eq(2011) }
11
11
  end
12
12
 
13
13
  context 'custom boundary at 4/2' do
14
- specify { Time.local(2011, 4, 1).biz_year(4, 2).should == 2010 }
15
- specify { Time.local(2011, 4, 2).biz_year(4, 2).should == 2011 }
14
+ specify { expect(Time.local(2011, 4, 1).biz_year(4, 2)).to eq(2010) }
15
+ specify { expect(Time.local(2011, 4, 2).biz_year(4, 2)).to eq(2011) }
16
16
  end
17
17
 
18
18
  context 'custom boundary at 3/31' do
19
- specify { Time.local(2011, 3,30).biz_year(3, 31).should == 2010 }
20
- specify { Time.local(2011, 3,31).biz_year(3, 31).should == 2011 }
21
- specify { Time.local(2011, 4, 1).biz_year(3, 31).should == 2011 }
19
+ specify { expect(Time.local(2011, 3,30).biz_year(3, 31)).to eq(2010) }
20
+ specify { expect(Time.local(2011, 3,31).biz_year(3, 31)).to eq(2011) }
21
+ specify { expect(Time.local(2011, 4, 1).biz_year(3, 31)).to eq(2011) }
22
22
  end
23
23
  end
24
24
  end
@@ -0,0 +1,105 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ module GyomuRuby
5
+ describe AddressFormatter do
6
+ let(:described_module) { described_class }
7
+
8
+ describe '.format_zipcode' do
9
+ context 'when 7 digit number' do
10
+ subject { described_module.format_zipcode('1234567') }
11
+ it { is_expected.to eq('123-4567') }
12
+ end
13
+
14
+ context 'when 3 digit and 4 digit number separated by hyphen' do
15
+ subject { described_module.format_zipcode('234-5678') }
16
+ it { is_expected.to eq('234-5678') }
17
+ end
18
+
19
+ context 'when 7 digit number in Zenkaku' do
20
+ subject { described_module.format_zipcode('3456789') }
21
+ it { is_expected.to eq('345-6789') }
22
+ end
23
+
24
+ context 'when 3 digit and 4 digit number separated by hyphen in Zenkaku' do
25
+ subject { described_module.format_zipcode('456−7890') }
26
+ it { is_expected.to eq('456-7890') }
27
+ end
28
+
29
+ context 'when passed blank' do
30
+ context 'with empty string' do
31
+ subject { described_module.format_zipcode('') }
32
+ it { is_expected.to eq('') }
33
+ end
34
+
35
+ context 'with nil' do
36
+ subject { described_module.format_zipcode(nil) }
37
+ it { is_expected.to eq('') }
38
+ end
39
+
40
+ context 'with whitespace' do
41
+ subject { described_module.format_zipcode(' ') }
42
+ it { is_expected.to eq('') }
43
+ end
44
+
45
+ context 'with whitespaces' do
46
+ subject { described_module.format_zipcode(' ' * 4) }
47
+ it { is_expected.to eq('') }
48
+ end
49
+
50
+ context 'specified blank character' do
51
+ subject { described_module.format_zipcode('', '***') }
52
+ it { is_expected.to eq('***')}
53
+ end
54
+ end
55
+ end
56
+
57
+ describe '.format_tel_no' do
58
+ let(:telno_numeric_string) { '03123456' }
59
+
60
+ subject { described_module.format_tel_no(telno_numeric_string) }
61
+
62
+ context 'when passed blank' do
63
+ before do
64
+ allow(telno_numeric_string).to receive(:blank?).and_return(true)
65
+ end
66
+
67
+ it { is_expected.to eq '' }
68
+ end
69
+
70
+ context 'when valid area code' do
71
+ context 'when more than 4 digit number after area code' do
72
+ let(:telno_numeric_string) { '03123456' }
73
+ it { is_expected.to eq '03-12-3456' }
74
+ end
75
+
76
+ context 'when 4 digit number after area code' do
77
+ let(:telno_numeric_string) { '031234' }
78
+ it { is_expected.to eq '03--1234' }
79
+ end
80
+
81
+ context 'when less than or equal to 4 digit number after area code' do
82
+ let(:telno_numeric_string) { '03123' }
83
+ it { is_expected.to eq '03-123' }
84
+ end
85
+ end
86
+
87
+ context 'when invalid area code' do
88
+ context 'when more than 4 digit number' do
89
+ let(:telno_numeric_string) { '00000' }
90
+ it { is_expected.to eq '0-0000' }
91
+ end
92
+
93
+ context 'when 4 digit number' do
94
+ let(:telno_numeric_string) { '0000' }
95
+ it { is_expected.to eq '-0000' }
96
+ end
97
+
98
+ context 'when less than 4 digit number' do
99
+ let(:telno_numeric_string) { '000' }
100
+ it { is_expected.to eq '000' }
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe GyomuRuby::MasterData::FormBuilderHelper do
4
+ include GyomuRuby::MasterData::FormHelper
5
+
6
+ let(:fake_builder) { Object.new.extend(GyomuRuby::MasterData::FormBuilderHelper) }
7
+
8
+ describe '#prefecture_select' do
9
+ it 'calls :select with choices for prefectures' do
10
+ expect(fake_builder).to receive(:select).with(:attr_name, options_for_prefecture_select, {}, {}).and_return(true)
11
+
12
+ fake_builder.prefecture_select(:attr_name)
13
+ end
14
+ end
15
+
16
+ describe '#currency_select' do
17
+ it 'calls :select with choices for currencies' do
18
+ expect(fake_builder).to receive(:select).with(:attr_name, options_for_currency_select, {}, {}).and_return(true)
19
+
20
+ fake_builder.currency_select(:attr_name)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe GyomuRuby::MasterData do
6
+ describe '.prefecture_name' do
7
+ context 'code in String' do
8
+ subject { GyomuRuby::MasterData.prefecture_name('01') }
9
+
10
+ it { is_expected.to eq('北海道') }
11
+ end
12
+
13
+ context 'code in Fixnum' do
14
+ subject { GyomuRuby::MasterData.prefecture_name(1) }
15
+
16
+ it { is_expected.to eq('北海道') }
17
+ end
18
+ end
19
+
20
+ describe '.prefecture_codes_by_area' do
21
+ subject { GyomuRuby::MasterData.prefecture_codes_by_area('関東') }
22
+
23
+ it { is_expected.to eq(%w(08 09 10 11 12 13 14)) }
24
+ end
25
+
26
+ describe '.currency_name' do
27
+ subject { GyomuRuby::MasterData.currency_name('USD') }
28
+
29
+ it { is_expected.to eq('米ドル') }
30
+ end
31
+ end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,3 @@
1
1
  $: << File.expand_path('../lib', File.dirname(__FILE__))
2
+
3
+ require 'gyomu_ruby'
metadata CHANGED
@@ -1,108 +1,118 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gyomu_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 0.0.6
6
5
  platform: ruby
7
6
  authors:
8
- - Eiwa System Management, Inc.
7
+ - ESM, Inc.
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-02-09 00:00:00.000000000 Z
11
+ date: 2024-01-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
- requirement: &70316203047040 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70316203047040
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
25
27
  - !ruby/object:Gem::Dependency
26
- name: aws-s3
27
- requirement: &70316203044320 !ruby/object:Gem::Requirement
28
- none: false
28
+ name: moji
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70316203044320
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: rspec
38
- requirement: &70316203032080 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - ">="
42
46
  - !ruby/object:Gem::Version
43
- version: '2.0'
47
+ version: 3.0.0
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *70316203032080
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
47
55
  description: GyomuRuby
48
- email:
49
- - rubyagile@qwik.tky.esm.co.jp
56
+ email:
50
57
  executables: []
51
58
  extensions: []
52
59
  extra_rdoc_files: []
53
60
  files:
54
- - .gitignore
61
+ - ".gitignore"
62
+ - ".travis.yml"
55
63
  - Gemfile
56
64
  - HISTORY.md
57
65
  - README.md
58
66
  - Rakefile
59
67
  - gyomu_ruby.gemspec
60
68
  - lib/gyomu_ruby.rb
61
- - lib/gyomu_ruby/amazon_web_service/file_bucket.rb
69
+ - lib/gyomu_ruby/address_formatter.rb
70
+ - lib/gyomu_ruby/all_your_site_are_belong_to_ssl.rb
62
71
  - lib/gyomu_ruby/core_ext/numeric.rb
63
72
  - lib/gyomu_ruby/core_ext/numeric/round.rb
64
73
  - lib/gyomu_ruby/core_ext/time.rb
65
74
  - lib/gyomu_ruby/core_ext/time/biz_year.rb
75
+ - lib/gyomu_ruby/deprecation.rb
66
76
  - lib/gyomu_ruby/forgery/dictionaries/ja_female_first_names
67
77
  - lib/gyomu_ruby/forgery/dictionaries/ja_last_names
68
78
  - lib/gyomu_ruby/forgery/dictionaries/ja_male_first_names
69
79
  - lib/gyomu_ruby/forgery/forgeries/ja_name.rb
70
- - lib/gyomu_ruby/ordinary_system_development.rb
71
- - lib/gyomu_ruby/ordinary_system_development/address_formatter.rb
72
- - lib/gyomu_ruby/ordinary_system_development/all_your_site_are_belong_to_ssl.rb
73
- - lib/gyomu_ruby/ordinary_system_development/translated_from.rb
80
+ - lib/gyomu_ruby/helper_utility.rb
81
+ - lib/gyomu_ruby/master_data.rb
82
+ - lib/gyomu_ruby/master_data/form_builder_helper.rb
83
+ - lib/gyomu_ruby/master_data/form_helper.rb
84
+ - lib/gyomu_ruby/translated_from.rb
85
+ - lib/gyomu_ruby/validators/hankaku_validator.rb
74
86
  - lib/gyomu_ruby/version.rb
87
+ - lib/gyomu_ruby/word_normalizer.rb
75
88
  - masters/ext_tel_numbers.csv
76
- - masters/prefectures.csv
77
89
  - spec/core_ext/numeric_spec.rb
78
90
  - spec/core_ext/time_spec.rb
91
+ - spec/fixtures/images/esm-gravater.png
92
+ - spec/gyomu_ruby/address_formatter_spec.rb
93
+ - spec/gyomu_ruby/master_data/form_builder_helper_spec.rb
94
+ - spec/gyomu_ruby/master_data_spec.rb
79
95
  - spec/spec_helper.rb
80
- homepage: http://www.esm.co.jp/
96
+ homepage: https://agile.esm.co.jp/
81
97
  licenses: []
98
+ metadata: {}
82
99
  post_install_message:
83
100
  rdoc_options: []
84
101
  require_paths:
85
102
  - lib
86
103
  required_ruby_version: !ruby/object:Gem::Requirement
87
- none: false
88
104
  requirements:
89
- - - ! '>='
105
+ - - ">="
90
106
  - !ruby/object:Gem::Version
91
107
  version: '0'
92
108
  required_rubygems_version: !ruby/object:Gem::Requirement
93
- none: false
94
109
  requirements:
95
- - - ! '>='
110
+ - - ">="
96
111
  - !ruby/object:Gem::Version
97
112
  version: '0'
98
113
  requirements: []
99
- rubyforge_project:
100
- rubygems_version: 1.8.15
114
+ rubygems_version: 3.4.10
101
115
  signing_key:
102
- specification_version: 3
116
+ specification_version: 4
103
117
  summary: GyomuRuby
104
- test_files:
105
- - spec/core_ext/numeric_spec.rb
106
- - spec/core_ext/time_spec.rb
107
- - spec/spec_helper.rb
108
- has_rdoc:
118
+ test_files: []
@@ -1,74 +0,0 @@
1
- # coding: utf-8
2
- require 'securerandom'
3
-
4
- module GyomuRuby
5
- module AmazonWebService
6
- class FileBucket
7
- attr_accessor :backend
8
-
9
- extend Forwardable
10
- def_delegators :backend, *%w[bucket get delete]
11
-
12
- def initialize(bucket = 'bucket')
13
- @backend = Rails.env.production? || Rails.env.staging? ? RichMan.new(bucket) : PoorMan.new(bucket)
14
- end
15
-
16
- def put(io)
17
- "#{Time.now.strftime('%Y%m%d%H%M')}_#{SecureRandom.hex(5)}".tap do |key|
18
- @backend.put(key, io)
19
- end
20
- end
21
-
22
- class PoorMan
23
- require 'fileutils'
24
-
25
- attr_reader :bucket
26
-
27
- def initialize(bucket)
28
- @bucket = bucket
29
- path = Rails.root.join('tmp', @bucket)
30
- FileUtils.mkdir_p path unless FileTest.exist? path
31
- end
32
-
33
- def put(key, io)
34
- File.open(Rails.root.join('tmp', @bucket, key), 'w:BINARY') {|f| f.write(io.read)}
35
- end
36
-
37
- def get(key)
38
- File.open(Rails.root.join('tmp', @bucket, key), 'r:BINARY') {|f| f.read }
39
- end
40
-
41
- def delete(key)
42
- !!FileUtils.rm_r(Rails.root.join('tmp', @bucket, key))
43
- end
44
- end
45
-
46
- class RichMan
47
- require 'aws/s3'
48
-
49
- attr_reader :bucket
50
-
51
- def initialize(bucket)
52
- @bucket = bucket
53
- ::AWS::S3::Bucket.find(@bucket)
54
- rescue ::AWS::S3::NoSuchBucket
55
- ::AWS::S3::Bucket.create(@bucket)
56
- end
57
-
58
- def put(key, io)
59
- ::AWS::S3::S3Object.store(key, io, @bucket)
60
- end
61
-
62
- def get(key)
63
- ::AWS::S3::S3Object.value(key, @bucket) rescue nil
64
- end
65
-
66
- def delete(key)
67
- ::AWS::S3::S3Object.delete(key, @bucket) rescue false
68
- end
69
- end
70
- end
71
- end
72
-
73
- AWS = AmazonWebService
74
- end
@@ -1,36 +0,0 @@
1
- # coding: utf-8
2
- module GyomuRuby
3
- module OrdinarySystemDevelopment
4
- module AddressFormatter
5
- PREFS = File.read(
6
- File.expand_path('../../../masters/prefectures.csv', File.dirname(__FILE__))
7
- ).lines.map(&:strip).freeze
8
-
9
- ext_tel_numbers = File.read(
10
- File.expand_path('../../../masters/ext_tel_numbers.csv', File.dirname(__FILE__))
11
- ).lines.map{|n| "0#{n.strip}" }
12
-
13
- EXT_TEL_NUMBERS = (ext_tel_numbers + %w[050 070 080 090 0120]).sort.reverse.freeze
14
- EXT_TEL_NUMBERS_RE = /\A(#{EXT_TEL_NUMBERS.sort.reverse.join('|')})/uo
15
-
16
- module_function
17
-
18
- def format_zipcode(zipcode_string, blank = '')
19
- return blank if zipcode_string.blank?
20
- zipcode_string.sub(/\A(\d{3})(\d{4})\Z/){ "#{$1}-#{$2}" }
21
- end
22
-
23
- def format_tel_no(telno_numeric_string, blank = '')
24
- return blank if telno_numeric_string.blank?
25
- telno_numeric_string.to_s.
26
- sub(EXT_TEL_NUMBERS_RE){ "#{$1}-" }.
27
- sub(/(\d{4})\Z/) { "-#{$1}" }
28
- end
29
-
30
- def prefecture_name(prefecture_code, blank = '')
31
- return blank if prefecture_code.blank?
32
- PREFS[prefecture_code.to_i - 1]
33
- end
34
- end
35
- end
36
- end
@@ -1,22 +0,0 @@
1
- # coding:us-ascii
2
- require 'rack'
3
-
4
- module GyomuRuby
5
- module OrdinarySystemDevelopment
6
- class AllYourSiteAreBelongToSsl
7
- def initialize(app)
8
- @app = app
9
- end
10
-
11
- def call(env)
12
- if env['HTTPS'] == 'on' || env['HTTP_X_FORWARDED_PROTO'] == 'https'
13
- @app.call(env)
14
- else
15
- url = Rack::Request.new(env).url.sub(/^http:/, 'https:')
16
- body = "<html><body>You are being <a href=\"#{url}\">redirected</a>.</body></html>"
17
- [301, {'Location' => url, 'Content-Type' => 'text/html'}, [body]]
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,10 +0,0 @@
1
- # coding: utf-8
2
-
3
- module GyomuRuby
4
- module OrdinarySystemDevelopment
5
- osd_dir = 'gyomu_ruby/ordinary_system_development/'
6
- autoload 'AllYourSiteAreBelongToSsl', osd_dir + 'all_your_site_are_belong_to_ssl'
7
- autoload 'Translation', osd_dir + 'translated_from'
8
- end
9
- OSD = OrdinarySystemDevelopment
10
- end
@@ -1,47 +0,0 @@
1
- 北海道
2
- 青森県
3
- 岩手県
4
- 宮城県
5
- 秋田県
6
- 山形県
7
- 福島県
8
- 茨城県
9
- 栃木県
10
- 群馬県
11
- 埼玉県
12
- 千葉県
13
- 東京都
14
- 神奈川県
15
- 新潟県
16
- 富山県
17
- 石川県
18
- 福井県
19
- 山梨県
20
- 長野県
21
- 岐阜県
22
- 静岡県
23
- 愛知県
24
- 三重県
25
- 滋賀県
26
- 京都府
27
- 大阪府
28
- 兵庫県
29
- 奈良県
30
- 和歌山県
31
- 鳥取県
32
- 島根県
33
- 岡山県
34
- 広島県
35
- 山口県
36
- 徳島県
37
- 香川県
38
- 愛媛県
39
- 高知県
40
- 福岡県
41
- 佐賀県
42
- 長崎県
43
- 熊本県
44
- 大分県
45
- 宮崎県
46
- 鹿児島県
47
- 沖縄県