morph 0.2.9 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.3.0. modifications for ruby 1.9.2 compatibility
2
+
1
3
  v0.2.9. added from_csv(); require fastercsv; added morph_attributes() class method
2
4
 
3
5
  v0.2.8. added from_xml() and from_tsv(); updated for active_support; fixed from_hash() when hash root is an array
data/Rakefile CHANGED
@@ -18,7 +18,6 @@ begin
18
18
  m.rubyforge_name = "morph"
19
19
  m.rdoc_options << '--inline-source'
20
20
  m.dependencies = ["activesupport >=2.0.2"]
21
- m.dependencies = ["fastercsv >=1.5.0"]
22
21
  m.rdoc_pattern = ["README", "CHANGELOG", "LICENSE"]
23
22
  end
24
23
 
data/lib/morph.rb CHANGED
@@ -1,20 +1,31 @@
1
- require 'fastercsv'
1
+ if RUBY_VERSION >= "1.9"
2
+ require 'csv'
3
+ else
4
+ begin
5
+ require 'fastercsv'
6
+ rescue LoadError
7
+ puts "\nYou need to install the fastercsv gem to use Morph.from_csv with Ruby 1.8"
8
+ puts " sudo gem install fastercsv\n"
9
+ end
10
+ end
2
11
  begin
12
+ # require 'active_support'
3
13
  require 'active_support/core_ext/object/blank'
4
14
  require 'active_support/inflector'
5
15
  require 'active_support/core_ext/string/inflections'
6
- require 'active_support/core_ext/xml_mini'
7
16
  require 'active_support/core_ext/hash/conversions'
8
17
  rescue Exception => e
9
18
  begin
19
+ puts e.to_s
10
20
  require 'active_support'
11
21
  rescue Exception => e
22
+ puts e.to_s
12
23
  require 'activesupport'
13
24
  end
14
25
  end
15
26
 
16
27
  module Morph
17
- VERSION = "0.2.9"
28
+ VERSION = "0.3.0"
18
29
 
19
30
  class << self
20
31
  def generate_migrations object, options={}
@@ -27,13 +38,14 @@ module Morph
27
38
 
28
39
  def from_csv csv, class_name, namespace=Morph
29
40
  objects = []
30
- FasterCSV.parse(csv, { :headers => true }) do |row|
31
- object = object_from_name class_name, namespace
32
- row.each do |key, value|
33
- object.morph(key, value)
41
+ csv_utility = (RUBY_VERSION >= "1.9") ? CSV : FasterCSV
42
+ csv_utility.parse(csv, { :headers => true }) do |row|
43
+ object = object_from_name class_name, namespace
44
+ row.each do |key, value|
45
+ object.morph(key, value)
46
+ end
47
+ objects << object
34
48
  end
35
- objects << object
36
- end
37
49
  objects
38
50
  end
39
51
 
@@ -90,6 +102,7 @@ module Morph
90
102
  migration = "./script/generate model #{name}#{options[:belongs_to_id]}"
91
103
  options[:belongs_to_id] = ''
92
104
  migrations << migration
105
+ attributes = [attributes] if attributes.is_a?(String)
93
106
  attributes.to_a.sort{|a,b| a[0].to_s <=> b[0].to_s}.each do |attribute, value|
94
107
  case value
95
108
  when String
@@ -174,7 +187,11 @@ module Morph
174
187
  end
175
188
 
176
189
  def morph_methods
177
- @@morph_methods[self].keys.sort
190
+ if RUBY_VERSION >= "1.9"
191
+ @@morph_methods[self].keys.sort.map(&:to_sym)
192
+ else
193
+ @@morph_methods[self].keys.sort
194
+ end
178
195
  end
179
196
 
180
197
  def adding_morph_method= true_or_false
@@ -217,7 +234,7 @@ module Morph
217
234
  if @@morph_methods[self].has_key? symbol.to_s
218
235
  @@morph_methods[self].delete symbol.to_s
219
236
  is_writer = symbol.to_s =~ /=$/
220
- @@morph_attributes[self].delete(symbol) unless is_writer
237
+ @@morph_attributes[self].delete(symbol) unless is_writer
221
238
  end
222
239
  end
223
240
 
@@ -282,6 +299,9 @@ module Morph
282
299
 
283
300
  def morph_method_missing symbol, *args
284
301
  attribute = symbol.to_s.chomp '='
302
+ if RUBY_VERSION >= "1.9"
303
+ attribute = attribute.to_sym
304
+ end
285
305
 
286
306
  if Object.instance_methods.include?(attribute)
287
307
  raise "'#{attribute}' is an instance_method on Object, cannot create accessor methods for '#{attribute}'"
data/morph.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{morph}
5
- s.version = "0.2.9"
5
+ s.version = "0.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Rob McKinnon"]
9
- s.date = %q{2010-04-04}
9
+ s.date = %q{2010-10-18}
10
10
  s.description = %q{Morph allows you to emerge class definitions via calling assignment methods; mix with Hpricot for screen scrapping fun.
11
11
  }
12
12
  s.email = ["rob ~@nospam@~ rubyforge.org"]
@@ -16,19 +16,19 @@ Gem::Specification.new do |s|
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Morph", "--main", "README", "--inline-source"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = %q{morph}
19
- s.rubygems_version = %q{1.3.6}
19
+ s.rubygems_version = %q{1.3.7}
20
20
  s.summary = %q{Morph allows you to emerge class definitions via calling assignment methods; mix with Hpricot for screen scrapping fun.}
21
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
24
  s.specification_version = 3
25
25
 
26
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
- s.add_runtime_dependency(%q<fastercsv>, [">= 1.5.0"])
26
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.0.2"])
28
28
  else
29
- s.add_dependency(%q<fastercsv>, [">= 1.5.0"])
29
+ s.add_dependency(%q<activesupport>, [">= 2.0.2"])
30
30
  end
31
31
  else
32
- s.add_dependency(%q<fastercsv>, [">= 1.5.0"])
32
+ s.add_dependency(%q<activesupport>, [">= 2.0.2"])
33
33
  end
34
34
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require File.dirname(__FILE__) + '/../../lib/morph'
2
3
  require File.dirname(__FILE__) + '/../morph_spec_helper'
3
4
 
@@ -59,8 +60,13 @@ describe Morph do
59
60
  @morphed_class.morph_methods.size.should == 2
60
61
  @another_morphed_class.morph_methods.size.should == 2
61
62
 
62
- @morphed_class.morph_methods.should == ['every','every=']
63
- @another_morphed_class.morph_methods.should == ['no','no=']
63
+ if RUBY_VERSION >= "1.9"
64
+ @morphed_class.morph_methods.should == [:every,:every=]
65
+ @another_morphed_class.morph_methods.should == [:no,:no=]
66
+ else
67
+ @morphed_class.morph_methods.should == ['every','every=']
68
+ @another_morphed_class.morph_methods.should == ['no','no=']
69
+ end
64
70
  end
65
71
 
66
72
  it 'should call morph_attributes on both objects, when one object has a reference to another' do
@@ -94,7 +100,7 @@ describe Morph do
94
100
  attributes.delete(:every)
95
101
  attributes = @morph.morph_attributes
96
102
  attributes[:every].should == 'which'
97
-
103
+
98
104
  attributes = @morph.class.morph_attributes
99
105
  attributes.should == [:every, :loose]
100
106
  attributes.delete(:every)
@@ -176,7 +182,7 @@ describe Morph do
176
182
 
177
183
  describe "when morph method used to set unicode attribute name with a value" do
178
184
  before :each do
179
- $KCODE = "u"
185
+ $KCODE = "u" unless RUBY_VERSION >= "1.9"
180
186
  remove_morph_methods
181
187
  @age = 19
182
188
  @attribute = "年龄"
@@ -185,7 +191,7 @@ describe Morph do
185
191
  end
186
192
 
187
193
  after :all do
188
- $KCODE = "NONE"
194
+ $KCODE = "NONE" unless RUBY_VERSION >= "1.9"
189
195
  end
190
196
 
191
197
  it_should_behave_like "class with generated accessor methods added"
@@ -197,7 +203,7 @@ describe Morph do
197
203
 
198
204
  describe "when morph method used to set japanese and latin unicode attribute name with a value" do
199
205
  before :each do
200
- $KCODE = "u"
206
+ $KCODE = "u" unless RUBY_VERSION >= "1.9"
201
207
  remove_morph_methods
202
208
  @age = 19
203
209
  @attribute = "ページビュー_graph"
@@ -206,7 +212,7 @@ describe Morph do
206
212
  end
207
213
 
208
214
  after :all do
209
- $KCODE = "NONE"
215
+ $KCODE = "NONE" unless RUBY_VERSION >= "1.9"
210
216
  end
211
217
 
212
218
  it_should_behave_like "class with generated accessor methods added"
@@ -434,14 +440,22 @@ describe Morph do
434
440
  company_details = Morph.from_hash(h, Company::House)
435
441
  company_details.class.name.should == 'Company::House::CompanyDetails'
436
442
  morph_methods = company_details.class.morph_methods
437
- morph_methods.include?('last_full_mem_date').should be_true
438
- morph_methods.include?('accounts').should be_true
443
+ if RUBY_VERSION >= "1.9"
444
+ morph_methods.include?(:last_full_mem_date).should be_true
445
+ morph_methods.include?(:accounts).should be_true
446
+ morph_methods.delete(:accounts)
447
+ morph_methods.include?(:accounts).should be_false
448
+ morph_methods = company_details.class.morph_methods
449
+ morph_methods.include?(:accounts).should be_true
450
+ else
451
+ morph_methods.include?('last_full_mem_date').should be_true
452
+ morph_methods.include?('accounts').should be_true
453
+ morph_methods.delete('accounts')
454
+ morph_methods.include?('accounts').should be_false
455
+ morph_methods = company_details.class.morph_methods
456
+ morph_methods.include?('accounts').should be_true
457
+ end
439
458
 
440
- morph_methods.delete('accounts')
441
- morph_methods.include?('accounts').should be_false
442
- morph_methods = company_details.class.morph_methods
443
- morph_methods.include?('accounts').should be_true
444
-
445
459
  company_details.accounts.class.name.should == 'Company::House::Accounts'
446
460
  company_details.accounts.overdue.should == 'NO'
447
461
  company_details.last_full_mem_date.should == "2002-03-25"
@@ -500,9 +514,9 @@ xmlns_xsi: http://www.w3.org/2001/XMLSchema-instance
500
514
  xsi_schema_location: xmlgwdev.companieshouse.gov.uk/v1-0/schema/CompanyDetails.xsd|
501
515
  end
502
516
  end
503
-
517
+
504
518
  describe 'creating from xml' do
505
-
519
+
506
520
  def check_councils councils, class_name
507
521
  councils.class.should == Array
508
522
  councils.size.should == 2
@@ -515,7 +529,7 @@ xsi_schema_location: xmlgwdev.companieshouse.gov.uk/v1-0/schema/CompanyDetails.x
515
529
  councils = Morph.from_xml(xml)
516
530
  check_councils councils, 'Morph::Council'
517
531
  end
518
-
532
+
519
533
  describe 'when module name is supplied' do
520
534
  it 'should create classes and object instances' do
521
535
  Object.const_set 'Ppc', Module.new
@@ -537,8 +551,8 @@ xsi_schema_location: xmlgwdev.companieshouse.gov.uk/v1-0/schema/CompanyDetails.x
537
551
  end
538
552
  end
539
553
 
540
- describe 'creating from' do
541
-
554
+ describe 'creating from' do
555
+
542
556
  def check_councillors councillors, class_name, nil_value=''
543
557
  councillors.class.should == Array
544
558
  councillors.size.should == 2
@@ -565,7 +579,7 @@ xsi_schema_location: xmlgwdev.companieshouse.gov.uk/v1-0/schema/CompanyDetails.x
565
579
  check_councillors councillors, 'Morph::Councillor'
566
580
  end
567
581
  end
568
-
582
+
569
583
  describe 'when class name and module name is supplied' do
570
584
  it 'should create classes and object instances' do
571
585
  Object.const_set 'Ppc', Module.new
@@ -576,20 +590,20 @@ xsi_schema_location: xmlgwdev.companieshouse.gov.uk/v1-0/schema/CompanyDetails.x
576
590
 
577
591
  def tsv
578
592
  %Q[name party councillors councils council_experience
579
- Ted Roe labour Councillor for Stretford Ward Trafford Council
580
- Ali Davidson labour Basildon District Council
593
+ Ted Roe labour Councillor for Stretford Ward Trafford Council
594
+ Ali Davidson labour Basildon District Council
581
595
  ]
582
596
  end
583
597
  end
584
598
 
585
- describe 'csv (comma separated value)' do
599
+ describe 'csv (comma separated value)' do
586
600
  describe 'when class name is supplied' do
587
601
  it 'should create classes and object instances' do
588
602
  councillors = Morph.from_csv(csv, 'Councillor')
589
603
  check_councillors councillors, 'Morph::Councillor', nil
590
604
  end
591
605
  end
592
-
606
+
593
607
  describe 'when class name and module name is supplied' do
594
608
  it 'should create classes and object instances' do
595
609
  Object.const_set 'Ppc', Module.new
@@ -597,7 +611,7 @@ Ali Davidson labour Basildon District Council
597
611
  check_councillors councillors, 'Ppc::Councillor', nil
598
612
  end
599
613
  end
600
-
614
+
601
615
  def csv
602
616
  %Q[name,party,councillors,councils,council_experience
603
617
  Ted Roe,labour,Councillor for Stretford Ward,Trafford Council,
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  require File.dirname(__FILE__) + '/../lib/morph'
2
3
 
3
4
  module MorphSpecHelperMethods
@@ -68,19 +69,35 @@ describe "class with generated accessor methods added", :shared => true do
68
69
  after :all do remove_morph_methods; end
69
70
 
70
71
  it 'should add reader method to class instance_methods list' do
71
- each_attribute { |a| instance_methods.should include(a.to_s) }
72
+ if RUBY_VERSION >= "1.9"
73
+ each_attribute { |a| instance_methods.should include(a.to_s.to_sym) }
74
+ else
75
+ each_attribute { |a| instance_methods.should include(a.to_s) }
76
+ end
72
77
  end
73
78
 
74
79
  it 'should add writer method to class instance_methods list' do
75
- each_attribute { |a| instance_methods.should include("#{a}=") }
80
+ if RUBY_VERSION >= "1.9"
81
+ each_attribute { |a| instance_methods.should include("#{a}=".to_sym) }
82
+ else
83
+ each_attribute { |a| instance_methods.should include("#{a}=") }
84
+ end
76
85
  end
77
86
 
78
87
  it 'should add reader method to class morph_methods list' do
79
- each_attribute { |a| morph_methods.should include(a.to_s) }
88
+ if RUBY_VERSION >= "1.9"
89
+ each_attribute { |a| morph_methods.should include(a.to_s.to_sym) }
90
+ else
91
+ each_attribute { |a| morph_methods.should include(a.to_s) }
92
+ end
80
93
  end
81
94
 
82
95
  it 'should add writer method to class morph_methods list' do
83
- each_attribute { |a| morph_methods.should include("#{a}=") }
96
+ if RUBY_VERSION >= "1.9"
97
+ each_attribute { |a| morph_methods.should include("#{a}=".to_sym) }
98
+ else
99
+ each_attribute { |a| morph_methods.should include("#{a}=") }
100
+ end
84
101
  end
85
102
 
86
103
  it 'should only have generated accessor methods in morph_methods list' do
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morph
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 2
8
- - 9
9
- version: 0.2.9
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Rob McKinnon
@@ -14,21 +15,23 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-04 00:00:00 +01:00
18
+ date: 2010-10-18 00:00:00 +01:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
- name: fastercsv
22
+ name: activesupport
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 11
27
30
  segments:
28
- - 1
29
- - 5
31
+ - 2
30
32
  - 0
31
- version: 1.5.0
33
+ - 2
34
+ version: 2.0.2
32
35
  type: :runtime
33
36
  version_requirements: *id001
34
37
  description: |
@@ -73,16 +76,20 @@ rdoc_options:
73
76
  require_paths:
74
77
  - lib
75
78
  required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
76
80
  requirements:
77
81
  - - ">="
78
82
  - !ruby/object:Gem::Version
83
+ hash: 3
79
84
  segments:
80
85
  - 0
81
86
  version: "0"
82
87
  required_rubygems_version: !ruby/object:Gem::Requirement
88
+ none: false
83
89
  requirements:
84
90
  - - ">="
85
91
  - !ruby/object:Gem::Version
92
+ hash: 11
86
93
  segments:
87
94
  - 1
88
95
  - 2
@@ -90,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
97
  requirements: []
91
98
 
92
99
  rubyforge_project: morph
93
- rubygems_version: 1.3.6
100
+ rubygems_version: 1.3.7
94
101
  signing_key:
95
102
  specification_version: 3
96
103
  summary: Morph allows you to emerge class definitions via calling assignment methods; mix with Hpricot for screen scrapping fun.