edtf-rails 0.2.1 → 0.2.2

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/edtf-rails.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "edtf-rails"
8
- s.version = "0.2.1"
8
+ s.version = "0.2.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["masciugo"]
12
- s.date = "2013-11-12"
12
+ s.date = "2013-11-15"
13
13
  s.description = "An ActiveRecord extension to deal with Extended DateTime Format attributes"
14
14
  s.email = "masciugo@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "lib/edtf-rails.rb",
31
31
  "lib/edtf-rails/edtf-rails.rb",
32
32
  "lib/edtf-rails/getters_and_setters.rb",
33
+ "lib/edtf-rails/utils.rb",
33
34
  "local_history",
34
35
  "spec/edtf-rails_spec.rb",
35
36
  "spec/spec_helper.rb",
@@ -2,23 +2,6 @@ module EdtfRails
2
2
 
3
3
  EDTF_STRING_FORMAT = /^(\d{4})$|^(\d{4}-(0[1-9]|1[012]))$|^(\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]))$/
4
4
 
5
- def check_options(options, admitted_keys)
6
-
7
- raise WrongArgumentException, "first argument must be in a hash." unless options.is_a? Hash
8
- raise WrongArgumentException, "seconf argument must be in an array." unless admitted_keys.is_a? Array
9
-
10
- options.each do |key, value|
11
- unless admitted_keys.include? key
12
- raise WrongOptionException.new("Unknown option: #{key.inspect} => #{value.inspect}.")
13
- end
14
- if block_given?
15
- yield key, value
16
- end
17
- end
18
-
19
- end
20
-
21
-
22
5
  def edtf options = {}
23
6
 
24
7
  admitted_keys = [:attributes]
@@ -48,89 +31,58 @@ module EdtfRails
48
31
  # setters
49
32
  define_method("#{d}=") do |edtf_date|
50
33
  edtf_date = edtf_date.edtf if edtf_date.is_a? Date
51
- write_attribute(d,edtf_date)
52
- end
34
+ transaction do
53
35
 
54
-
55
- end
56
-
57
- # virtual attributes settings after any initialization
58
- after_initialize do
59
- edtf_attributes.each do |d|
60
- if read_attribute(d)
36
+ write_attribute(d,edtf_date)
37
+
38
+ # virtual attributes settings after any assignment (including initialization)
39
+ date_array = read_attribute(d).to_s.split('-')
61
40
  [:y, :m, :d].each_with_index do |x,i|
62
- send("#{d}_#{x}=",read_attribute(d).split('-')[i])
41
+ send("#{d}_#{x}=",date_array[i])
63
42
  end
43
+
64
44
  end
65
45
  end
46
+
66
47
  end
67
48
 
68
49
  # virtual attributes utilization to set date before validation (they are used only if at least one of them is defined)
69
50
  before_validation do
70
51
  edtf_attributes.each do |d|
71
52
  date_array = [:y, :m, :d].map{|x| send("#{d}_#{x}")}
72
- if (res = date_array.shift).present? #they are used only if at least one of them is defined
53
+ self[d]= if (res = date_array.shift).present? #they are used only if at least one of them is defined
73
54
  date_array.each{|x| x.blank? ? break : (res += "-#{x}") }
74
- self[d]= res
55
+ res
56
+ else
57
+ nil
75
58
  end
76
59
  end
77
60
  end
78
61
 
79
62
 
80
63
  # Include instance methods and class methods
81
- include EdtfRails::GettersAndSetters
64
+ # include EdtfRails::GettersAndSetters
65
+ # include EdtfRails::Utils
82
66
 
83
67
  end
84
68
 
85
- # def has_parents options = {}
86
-
87
- # admitted_keys = [:sex_column, :sex_values, :father_column, :mother_column, :current_spouse_column, :current_spouse]
88
- # check_options(options, admitted_keys) do |key, value|
89
- # if key == :sex_values
90
- # raise WrongOptionException, ":sex_values option must be an array with two char: first for male sex symbol an last for female" unless value.is_a?(Array) and value.size == 2 and value.first.to_s.size == 1 and value.last.to_s.size == 1
91
- # end
92
- # end
93
-
94
- # class_attribute :genealogy_enabled, :current_spouse_enabled, :genealogy_class
95
- # self.genealogy_enabled = true
96
- # self.current_spouse_enabled = options[:current_spouse].try(:==,true) || false
97
- # self.genealogy_class = self #keep track of the original extend class to prevent wrong scopes in query method in case of STI
98
-
99
- # tracked_relatives = [:father, :mother]
100
- # tracked_relatives << :current_spouse if current_spouse_enabled
101
-
102
- # ## sex
103
- # # class attributes
104
- # class_attribute :sex_column, :sex_values, :sex_male_value, :sex_female_value
105
- # self.sex_column = options[:sex_column] || :sex
106
- # self.sex_values = (options[:sex_values] and options[:sex_values].to_a.map(&:to_s)) || ['M','F']
107
- # self.sex_male_value = self.sex_values.first
108
- # self.sex_female_value = self.sex_values.last
109
- # # instance attribute
110
- # alias_attribute :sex, sex_column if self.sex_column != :sex
111
- # # validation
112
- # validates_presence_of sex_column
113
- # validates_format_of sex_column, :with => /[#{sex_values.join}]/
114
-
115
- # ## relatives associations
116
- # tracked_relatives.each do |key|
117
- # # class attribute where is stored the correspondig foreign_key column name
118
- # class_attribute_name = "#{key}_column"
119
- # foreign_key = "#{key}_id"
120
- # class_attribute class_attribute_name
121
- # self.send("#{class_attribute_name}=", options[class_attribute_name.to_sym] || foreign_key)
122
-
123
- # # self join association
124
- # attr_accessible foreign_key
125
- # belongs_to key, class_name: self, foreign_key: foreign_key
126
-
127
- # end
128
-
129
- # # Include instance methods and class methods
130
- # include Genealogy::QueryMethods
131
- # include Genealogy::AlterMethods
132
- # include Genealogy::SpouseMethods if current_spouse_enabled
133
-
134
- # end
135
-
69
+ private
70
+
71
+ def check_options(options, admitted_keys)
72
+
73
+ raise WrongArgumentException, "first argument must be in a hash." unless options.is_a? Hash
74
+ raise WrongArgumentException, "seconf argument must be in an array." unless admitted_keys.is_a? Array
75
+
76
+ options.each do |key, value|
77
+ unless admitted_keys.include? key
78
+ raise WrongOptionException.new("Unknown option: #{key.inspect} => #{value.inspect}.")
79
+ end
80
+ if block_given?
81
+ yield key, value
82
+ end
83
+ end
84
+
85
+ end
86
+
87
+
136
88
  end
@@ -0,0 +1,10 @@
1
+ module EdtfRails
2
+ module Utils
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+
7
+
8
+ end
9
+ end
10
+ end
data/lib/edtf-rails.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require "edtf"
2
2
  # require File.join(File.expand_path(File.dirname(__FILE__)), 'edtf-rails/constants')
3
3
  # require File.join(File.expand_path(File.dirname(__FILE__)), 'edtf-rails/exceptions')
4
- require File.join(File.expand_path(File.dirname(__FILE__)), 'edtf-rails/getters_and_setters')
4
+ # require File.join(File.expand_path(File.dirname(__FILE__)), 'edtf-rails/getters_and_setters')
5
+ # require File.join(File.expand_path(File.dirname(__FILE__)), 'edtf-rails/utils')
5
6
  require File.join(File.expand_path(File.dirname(__FILE__)), 'edtf-rails/edtf-rails')
6
7
 
7
8
  ActiveRecord::Base.send :extend, EdtfRails
@@ -83,16 +83,6 @@ describe EdtfRailsTest::Model do
83
83
 
84
84
  subject { @obj }
85
85
 
86
- shared_examples "dob getter return a Date object but a string is stored in the db" do
87
- describe "#dob" do
88
- subject { @obj.dob }
89
- specify { should be_a Date }
90
- end
91
- it "has a string as value in the db" do
92
- expect(@obj.read_attribute(:dob)).to be_a String
93
- end
94
- end
95
-
96
86
  describe "#new" do
97
87
  context "when initialized with no params" do
98
88
  let(:params) { nil }
@@ -100,24 +90,35 @@ describe EdtfRailsTest::Model do
100
90
  its(:dob) {should be_nil }
101
91
  its(:dod) {should be_nil }
102
92
  describe "#dob=new_date" do
93
+
103
94
  before(:each) do
104
95
  @obj.dob = new_date
105
96
  @obj.save!
106
97
  end
107
-
108
- context "when new_date is Date.new(2001,9,10) " do
98
+
99
+ shared_examples "return a Date object but store a String in the db" do
100
+ describe "#dob" do
101
+ subject { @obj.dob }
102
+ specify { should be_a Date }
103
+ end
104
+ it "has a string as value in the db" do
105
+ expect(@obj.read_attribute(:dob)).to be_a String
106
+ end
107
+ end
108
+
109
+ context "when new_date is Date.new(2001,9,10)" do
109
110
  let(:new_date) { Date.new(2001,9,10) }
110
- it_should_behave_like "dob getter return a Date object but a string is stored in the db"
111
+ it_should_behave_like "return a Date object but store a String in the db"
111
112
  its(:dob) {should eql Date.new(2001,9,10) }
112
113
  end
113
114
  context "when new_date is the string '2001-09-10'" do
114
115
  let(:new_date) { '2001-09-10' }
115
- it_should_behave_like "dob getter return a Date object but a string is stored in the db"
116
+ it_should_behave_like "return a Date object but store a String in the db"
116
117
  its(:dob) {should eql Date.new(2001,9,10) }
117
118
  end
118
119
  context "when new_date is the string '2001-09'" do
119
120
  let(:new_date) { '2001-09' }
120
- it_should_behave_like "dob getter return a Date object but a string is stored in the db"
121
+ it_should_behave_like "return a Date object but store a String in the db"
121
122
  describe "dob precision" do
122
123
  specify { expect(@obj.dob.precision).to be :month }
123
124
  end
@@ -161,34 +162,42 @@ describe EdtfRailsTest::Model do
161
162
  end
162
163
 
163
164
  describe "#dob_? atomic getters" do
164
- context "when initialized with dob 1995-12-24" do
165
- let(:params) { {:dob => "1995-12-24" } }
166
- its(:dob_y) { should == '1995'}
167
- its(:dob_m) { should == '12'}
168
- its(:dob_d) { should == '24'}
169
- context "and dod 1935-02-14" do
170
- let(:params) { {:dob => "1995-12-24", :dod => "1935-02-14" } }
171
- its(:dod_y) { should == '1935'}
172
- its(:dod_m) { should == '02'}
173
- its(:dod_d) { should == '14'}
174
- end
165
+
166
+ shared_examples "a composed date" do |attribute|
167
+ let(:date_array) { subject.read_attribute(attribute).to_s.split('-') }
168
+ its(:dob_y) { should == date_array[0]}
169
+ its(:dob_m) { should == date_array[1]}
170
+ its(:dob_d) { should == date_array[2]}
175
171
  end
172
+
176
173
  context "when initialized with dob 1995-12" do
177
174
  let(:params) { {:dob => "1995-12" } }
178
- its(:dob_y) { should == '1995'}
179
- its(:dob_m) { should == '12'}
180
- its(:dob_d) { should be_nil}
175
+ it_should_behave_like "a composed date", :dob
181
176
  end
182
177
  context "when initialized with dob 1995" do
183
178
  let(:params) { {:dob => "1995" } }
184
- its(:dob_y) { should == '1995'}
185
- its(:dob_m) { should be_nil}
186
- its(:dob_d) { should be_nil}
179
+ it_should_behave_like "a composed date", :dob
180
+ end
181
+ context "when initialized with dob 1995-12-24" do
182
+ let(:params) { {:dob => "1995-12-24" } }
183
+ it_should_behave_like "a composed date", :dob
184
+ context "and when assign a new date 2001-09-11" do
185
+ before(:each) do
186
+ @obj.dob = "2001-09-11"
187
+ end
188
+ it_should_behave_like "a composed date", :dob
189
+ end
190
+ context "and when assign a new nil date" do
191
+ before(:each) do
192
+ @obj.dob = nil
193
+ end
194
+ it_should_behave_like "a composed date", :dob
195
+ end
187
196
  end
188
197
  end
189
198
 
190
199
 
191
- describe "#dob_?= atomic setters effect", :wip => true do
200
+ describe "#dob_?= atomic setters effect" do
192
201
  context "when initialized with no params" do
193
202
  let(:params) { nil }
194
203
  describe "#dob_y = 1976" do
@@ -201,32 +210,27 @@ describe EdtfRailsTest::Model do
201
210
  before(:each) do
202
211
  @obj.save
203
212
  end
204
- it_should_behave_like "dob getter return a Date object but a string is stored in the db"
213
+ it_should_behave_like "return a Date object but store a String in the db"
205
214
  describe "dob precision" do
206
215
  specify { expect(@obj.dob.precision).to be :year }
207
216
  end
208
- its(:dob_y) { should == '1976'}
209
- its(:dob_m) { should be_nil}
210
- its(:dob_d) { should be_nil}
217
+ it_should_behave_like "a composed date", :dob
211
218
  end
212
219
  describe "#dob_m = '05'" do
213
220
  before(:each) do
214
221
  @obj.dob_m = '05'
215
222
  end
216
223
  its(:dob) { should be_nil}
217
- its(:dob_y) { should == '1976'}
218
- its(:dob_m) { should == '05'}
224
+ # it_should_behave_like "a composed date", :dob # NO because until it is saved
219
225
  context "after saving" do
220
226
  before(:each) do
221
227
  @obj.save
222
228
  end
223
- it_should_behave_like "dob getter return a Date object but a string is stored in the db"
229
+ it_should_behave_like "return a Date object but store a String in the db"
224
230
  describe "dob precision" do
225
231
  specify { expect(@obj.dob.precision).to be :month }
226
232
  end
227
- its(:dob_y) { should == '1976'}
228
- its(:dob_m) { should == '05'}
229
- its(:dob_d) { should be_nil}
233
+ it_should_behave_like "a composed date", :dob
230
234
  end
231
235
  end
232
236
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edtf-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-12 00:00:00.000000000 Z
12
+ date: 2013-11-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -176,6 +176,7 @@ files:
176
176
  - lib/edtf-rails.rb
177
177
  - lib/edtf-rails/edtf-rails.rb
178
178
  - lib/edtf-rails/getters_and_setters.rb
179
+ - lib/edtf-rails/utils.rb
179
180
  - local_history
180
181
  - spec/edtf-rails_spec.rb
181
182
  - spec/spec_helper.rb
@@ -196,7 +197,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
197
  version: '0'
197
198
  segments:
198
199
  - 0
199
- hash: 3685247014501985280
200
+ hash: -2884630438112940405
200
201
  required_rubygems_version: !ruby/object:Gem::Requirement
201
202
  none: false
202
203
  requirements: