blob: 9d8923e5cfdfea39808c32e10a17197d824c27f2 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
package Lucy::Build::Binding::Plan;
use strict;
use warnings;
our $VERSION = '0.004001';
$VERSION = eval $VERSION;
sub bind_all {
my $class = shift;
$class->bind_architecture;
$class->bind_blobtype;
$class->bind_fieldtype;
$class->bind_float32type;
$class->bind_float64type;
$class->bind_fulltexttype;
$class->bind_int32type;
$class->bind_int64type;
$class->bind_schema;
$class->bind_stringtype;
}
sub bind_architecture {
my @exposed = qw( Register_Doc_Writer Register_Doc_Reader );
my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
package MyArchitecture;
use base qw( Lucy::Plan::Architecture );
use LucyX::Index::ZlibDocWriter;
use LucyX::Index::ZlibDocReader;
sub register_doc_writer {
my ( $self, $seg_writer ) = @_;
my $doc_writer = LucyX::Index::ZlibDocWriter->new(
snapshot => $seg_writer->get_snapshot,
segment => $seg_writer->get_segment,
polyreader => $seg_writer->get_polyreader,
);
$seg_writer->register(
api => "Lucy::Index::DocReader",
component => $doc_writer,
);
$seg_writer->add_writer($doc_writer);
}
sub register_doc_reader {
my ( $self, $seg_reader ) = @_;
my $doc_reader = LucyX::Index::ZlibDocReader->new(
schema => $seg_reader->get_schema,
folder => $seg_reader->get_folder,
segments => $seg_reader->get_segments,
seg_tick => $seg_reader->get_seg_tick,
snapshot => $seg_reader->get_snapshot,
);
$seg_reader->register(
api => 'Lucy::Index::DocReader',
component => $doc_reader,
);
}
package MySchema;
use base qw( Lucy::Plan::Schema );
sub architecture {
shift;
return MyArchitecture->new(@_);
}
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $arch = Lucy::Plan::Architecture->new;
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor, );
$pod_spec->add_method( method => $_, alias => lc($_) ) for @exposed;
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::Architecture",
);
$binding->set_pod_spec($pod_spec);
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_blobtype {
my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
my $string_type = Lucy::Plan::StringType->new;
my $blob_type = Lucy::Plan::BlobType->new( stored => 1 );
my $schema = Lucy::Plan::Schema->new;
$schema->spec_field( name => 'id', type => $string_type );
$schema->spec_field( name => 'jpeg', type => $blob_type );
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $blob_type = Lucy::Plan::BlobType->new(
stored => 1, # default: false
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor, );
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::BlobType",
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Plan::BlobType');
$binding->add_class_alias('KinoSearch::FieldType::BlobType');
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_fieldtype {
my @exposed = qw(
Get_Boost
Indexed
Stored
Sortable
Binary
);
my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
my @sortable;
for my $field ( @{ $schema->all_fields } ) {
my $type = $schema->fetch_type($field);
next unless $type->sortable;
push @sortable, $field;
}
END_SYNOPSIS
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_method( method => $_, alias => lc($_) ) for @exposed;
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::FieldType",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
$binding->bind_method(
alias => '_load',
method => 'Load',
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias("KinoSearch::Plan::FieldType");
$binding->add_class_alias("KinoSearch::FieldType");
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_float32type {
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::Float32Type",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_float64type {
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::Float64Type",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_fulltexttype {
my @exposed = qw(
Set_Highlightable
Highlightable
);
my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
my $easyanalyzer = Lucy::Analysis::EasyAnalyzer->new(
language => 'en',
);
my $type = Lucy::Plan::FullTextType->new(
analyzer => $easyanalyzer,
);
my $schema = Lucy::Plan::Schema->new;
$schema->spec_field( name => 'title', type => $type );
$schema->spec_field( name => 'content', type => $type );
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $type = Lucy::Plan::FullTextType->new(
analyzer => $analyzer, # required
boost => 2.0, # default: 1.0
indexed => 1, # default: true
stored => 1, # default: true
sortable => 1, # default: false
highlightable => 1, # default: false
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor, );
$pod_spec->add_method( method => $_, alias => lc($_) ) for @exposed;
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::FullTextType",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Plan::FullTextType');
$binding->add_class_alias('KinoSearch::FieldType::FullTextType');
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_int32type {
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::Int32Type",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_int64type {
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::Int64Type",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_schema {
my @exposed = qw(
Spec_Field
Num_Fields
All_Fields
Fetch_Type
Fetch_Sim
Architecture
Get_Architecture
Get_Similarity
);
my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
use Lucy::Plan::Schema;
use Lucy::Plan::FullTextType;
use Lucy::Analysis::EasyAnalyzer;
my $schema = Lucy::Plan::Schema->new;
my $easyanalyzer = Lucy::Analysis::EasyAnalyzer->new(
language => 'en',
);
my $type = Lucy::Plan::FullTextType->new(
analyzer => $easyanalyzer,
);
$schema->spec_field( name => 'title', type => $type );
$schema->spec_field( name => 'content', type => $type );
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $schema = Lucy::Plan::Schema->new;
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor, );
$pod_spec->add_method( method => $_, alias => lc($_) ) for @exposed;
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::Schema",
);
$binding->bind_method(
alias => '_load',
method => 'Load',
);
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias("KinoSearch::Plan::Schema");
$binding->add_class_alias("KinoSearch::Schema");
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
sub bind_stringtype {
my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
my $synopsis = <<'END_SYNOPSIS';
my $type = Lucy::Plan::StringType->new;
my $schema = Lucy::Plan::Schema->new;
$schema->spec_field( name => 'category', type => $type );
END_SYNOPSIS
my $constructor = <<'END_CONSTRUCTOR';
my $type = Lucy::Plan::StringType->new(
boost => 0.1, # default: 1.0
indexed => 1, # default: true
stored => 1, # default: true
sortable => 1, # default: false
);
END_CONSTRUCTOR
$pod_spec->set_synopsis($synopsis);
$pod_spec->add_constructor( alias => 'new', sample => $constructor, );
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
class_name => "Lucy::Plan::StringType",
);
$binding->bind_constructor( alias => 'new', initializer => 'init2' );
$binding->set_pod_spec($pod_spec);
$binding->add_class_alias('KinoSearch::Plan::StringType');
$binding->add_class_alias('KinoSearch::FieldType::StringType');
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
1;