nd_transcriber 0.0.1 → 0.0.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.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +65 -0
- data/lib/nd_transcriber/copier.rb +38 -0
- data/nd_transcriber.gemspec +15 -0
- data/spec/lib/nd_transcriber_spec.rb +71 -0
- data/spec/spec_helper.rb +7 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e32b9fb1b31388648d8e4a0fe0dcd8778cc3182e
|
4
|
+
data.tar.gz: 36df75be15a632094efe1fd2d4b02cfe11ffe15c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a00aa9c9594a3ee44e44fd56e18cba47eb5e983fcaa1f2d3a75e1c45496b75f544eb1d11af97e16edf28bc8feb1024ad34f8912845017a18de8e9c93de80e917
|
7
|
+
data.tar.gz: 102e8f7119ea4be32d1be08ba234e673b05d32b5952d35e8d183567771cce9da10e681aaeea42dc0349abc6cd46cf1db54e42e82263c5e1d2a66a25ed2a64e11
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# Transcriber
|
2
|
+
|
3
|
+
This gem provides an easy way to copy attributes around.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```bash
|
8
|
+
gem install nd_transcriber
|
9
|
+
```
|
10
|
+
|
11
|
+
Using bundler:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'nd_transcriber'
|
15
|
+
```
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
Basically, you just need to include `NdTranscriber` and define a block wich will
|
20
|
+
be called every time an object is copied.
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
# We are going to copy from Origin objects.
|
24
|
+
Origin = Struct.new(:name, :last_name, :gender)
|
25
|
+
|
26
|
+
# Dest objects will receive the copied values
|
27
|
+
Dest = Struct.new(:name, :last_name, :complete_name, :male_female, :transcribed,
|
28
|
+
:nickname) do
|
29
|
+
include NdTranscriber
|
30
|
+
|
31
|
+
transcriber do
|
32
|
+
copy_fields :last_name, # Copies field last_name as is
|
33
|
+
:gender => :male_female, # Copies field gender to field male_female
|
34
|
+
:name => [:name, :nickname] # Copies field name to both name and nickname
|
35
|
+
|
36
|
+
copy :name, to: :complete_name do |name| # Uses the value returned from the block
|
37
|
+
# origin is a method that returns the object we are currently copying data from
|
38
|
+
"#{name} #{origin.last_name}"
|
39
|
+
end
|
40
|
+
|
41
|
+
# You can also just assign attributes to self.
|
42
|
+
self.transcribed = true
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
origin = Origin.new('John', 'Doe', 'M')
|
47
|
+
|
48
|
+
# The kind of object being copied doesn't matter. It just needs to have the
|
49
|
+
# attributes or methods NdTranscriber was told to copy from.
|
50
|
+
dest = Dest.transcribe(origin)
|
51
|
+
|
52
|
+
dest.name # => 'John'
|
53
|
+
dest.nickname # => 'John'
|
54
|
+
dest.last_name # => 'Doe'
|
55
|
+
dest.complete_name # => 'John Doe'
|
56
|
+
dest.male_female # => 'M'
|
57
|
+
dest.transcribed # => true
|
58
|
+
```
|
59
|
+
|
60
|
+
## Why?
|
61
|
+
|
62
|
+
I need (more than I'd like) to sync data between databases. Initially, I created
|
63
|
+
just a class to do so. I just needed to copy attributes from one object to another,
|
64
|
+
customizing some values eventually. Now, I'm making it available as a Gem, so
|
65
|
+
others can benefit from it and I can share it across projects easily.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module NdTranscriber
|
2
|
+
class Copier
|
3
|
+
attr_accessor :origin, :dest
|
4
|
+
|
5
|
+
def initialize origin, dest
|
6
|
+
self.origin, self.dest = origin, dest
|
7
|
+
end
|
8
|
+
|
9
|
+
def copy_fields *fields
|
10
|
+
fields.each do |field|
|
11
|
+
if field.is_a?(Hash)
|
12
|
+
field.each_pair do |from, to|
|
13
|
+
copy from, to: to
|
14
|
+
end
|
15
|
+
else
|
16
|
+
copy field
|
17
|
+
end
|
18
|
+
end
|
19
|
+
dest
|
20
|
+
end
|
21
|
+
|
22
|
+
def copy field, to: field
|
23
|
+
value = (field && origin.respond_to?(field) ? origin.send(field) : nil )
|
24
|
+
value = yield(value) if block_given?
|
25
|
+
if to.is_a?(Array)
|
26
|
+
to.each do |f|
|
27
|
+
dest.send("#{f}=", value)
|
28
|
+
end
|
29
|
+
else
|
30
|
+
dest.send("#{to}=", value)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def method_missing method, *args, &block
|
35
|
+
dest.send(method, *args, &block)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'nd_transcriber'
|
3
|
+
s.version = '0.0.2'
|
4
|
+
s.date = '2014-09-12'
|
5
|
+
s.summary = "Copy object's attributes with ease."
|
6
|
+
s.description = "This gem provides an easy way to copy attributes around."
|
7
|
+
s.authors = ["Diego Aguir Selzlein"]
|
8
|
+
s.email = 'diegoselzlein@gmail.com'
|
9
|
+
|
10
|
+
s.files = `git ls-files`.split("\n")
|
11
|
+
s.require_paths = ["lib"]
|
12
|
+
|
13
|
+
s.homepage = 'https://github.com/nerde/nd_transcriber'
|
14
|
+
s.license = 'MIT'
|
15
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
Origin = Struct.new(:name, :last_name, :gender)
|
4
|
+
|
5
|
+
Dest = Struct.new(:name, :last_name, :complete_name, :male_female, :transcribed,
|
6
|
+
:nickname) do
|
7
|
+
include NdTranscriber
|
8
|
+
|
9
|
+
transcriber do
|
10
|
+
copy_fields :last_name,
|
11
|
+
:gender => :male_female,
|
12
|
+
:name => [:name, :nickname]
|
13
|
+
copy :name, to: :complete_name do |name|
|
14
|
+
"#{name} #{origin.last_name}"
|
15
|
+
end
|
16
|
+
self.transcribed = true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
Dest2 = Struct.new(:id) do
|
21
|
+
include NdTranscriber
|
22
|
+
transcribes_to do |origin|
|
23
|
+
new(5) if origin
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe NdTranscriber do
|
28
|
+
let(:origin) { Origin.new('John', 'Doe', 'M') }
|
29
|
+
|
30
|
+
subject { Dest.transcribe(origin) }
|
31
|
+
|
32
|
+
it "copies attributes" do
|
33
|
+
expect(subject.name) .to eq 'John'
|
34
|
+
expect(subject.nickname) .to eq 'John'
|
35
|
+
expect(subject.last_name) .to eq 'Doe'
|
36
|
+
expect(subject.complete_name).to eq 'John Doe'
|
37
|
+
expect(subject.male_female) .to eq 'M'
|
38
|
+
expect(subject.transcribed) .to eq true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "yields the copied object" do
|
42
|
+
expect{ |probe| Dest.transcribe(origin, &probe) }.to yield_with_args(
|
43
|
+
kind_of(Dest))
|
44
|
+
end
|
45
|
+
|
46
|
+
context "transcribes_to is provided" do
|
47
|
+
subject(:dest2) { Dest2.transcribe(origin) }
|
48
|
+
|
49
|
+
it "uses transcribes_to to define where to transcribe" do
|
50
|
+
expect(dest2.id).to eq(5)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "copy_all" do
|
55
|
+
let(:list) { [Origin.new('John', 'Doe', 'M'),
|
56
|
+
Origin.new('Mary', 'Doe', 'F')] }
|
57
|
+
|
58
|
+
subject(:dests) { Dest.transcribe_all(list) }
|
59
|
+
|
60
|
+
it 'copies all of the objects' do
|
61
|
+
expect(dests.size ).to eq 2
|
62
|
+
expect(dests[1].name ).to eq 'Mary'
|
63
|
+
expect(dests[1].class).to eq Dest
|
64
|
+
end
|
65
|
+
|
66
|
+
it "yields each copied object" do
|
67
|
+
expect{ |probe| Dest.transcribe_all(list, &probe) }.to yield_successive_args(
|
68
|
+
kind_of(Dest), kind_of(Dest))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nd_transcriber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diego Aguir Selzlein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This gem provides an easy way to copy attributes around.
|
14
14
|
email: diegoselzlein@gmail.com
|
@@ -16,7 +16,13 @@ executables: []
|
|
16
16
|
extensions: []
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
|
+
- ".rspec"
|
20
|
+
- README.md
|
19
21
|
- lib/nd_transcriber.rb
|
22
|
+
- lib/nd_transcriber/copier.rb
|
23
|
+
- nd_transcriber.gemspec
|
24
|
+
- spec/lib/nd_transcriber_spec.rb
|
25
|
+
- spec/spec_helper.rb
|
20
26
|
homepage: https://github.com/nerde/nd_transcriber
|
21
27
|
licenses:
|
22
28
|
- MIT
|
@@ -42,3 +48,4 @@ signing_key:
|
|
42
48
|
specification_version: 4
|
43
49
|
summary: Copy object's attributes with ease.
|
44
50
|
test_files: []
|
51
|
+
has_rdoc:
|